人工智能交互系统界面设计(Tkinter界面设计)
文章目錄
- 前言
- 一、項目介紹
- 二、項目準備
- 三、項目實施
- 1.導入相關庫文件
- 2.人臉信息驗證功能
- 3.語音交互與TCP數據通信
- 4.數據信息可視化
- 四、相關附件
前言
在現代信息化時代,圖形化用戶界面(Graphical User Interface, GUI)已經成為各種軟件應用和設備交互的主流方式,與傳統的命令行界面(CLI)相比,GUI 具有直觀性、易用性、交互性、可視化和多任務處理等優勢。設計良好的用戶交互界面可以讓用戶以更加直觀、友好的方式與計算機系統進行交互,提高用戶的滿意度和使用體驗。本項目將設計一款實用人機交互界面,用戶通過界面的按鈕、文本框、圖表等能夠更加便捷地完成人臉采識別、語音交互下單等任務。
下面是界面演示視頻。
人工智能系統界面操作視頻
一、項目介紹
本項目利用Tkinter模塊搭建了一個人工智能系統界面,如圖1和圖2所示,用戶在界面按下按鈕或者輸入文本框內容,可以與系統進行數據交互,避免通過命令行等繁瑣的輸入方式來執行程序。本項目設計的界面主要包含以下兩大功能。
1.人臉信息驗證
界面的左邊欄目中用戶可進行人臉采集、模型訓練、人臉識別驗證。
(1)人臉采集。用戶首先需要完成人臉采集,輸入“用戶ID”“用戶姓名”后,點擊“采集”按鈕,可以調取攝像頭,完成100張人臉圖像的采集。
(2)模型訓練。用戶需要在“模型名稱”中輸入對應人臉模型的名字,例如“lyx”,點擊“訓練”按鈕后,系統會自動生成一個命為“lyx.yml”的模型,并自動保存到“FaceRecognition/Model”文件夾下。
(3)人臉識別。用戶完成人臉采集與模型訓練之后,才能點擊“識別”按鈕,當人臉識別成功后,系統會調取該用戶的人臉圖像顯示在系統界面上。
當用戶按下界面中的“清除”“注銷”按鈕可以消除已有的信息。
2.訂單信息可視化
用戶可在界面右邊欄目中,通過按下“語音啟動”按鈕,說出“系統啟動”來開啟后續操作。系統啟動后,會通過語音合成提醒用戶完成人臉識別,只有用戶的身份信息核實通過后,用戶才能夠向3位攤主進行下單任務,下單時同樣需要用戶通過與系統進行語音交互來完成。訂單完成后,界面顯示用戶向每位攤主下單的總數,并通過扇形圖展示出來。點擊下方的“訂單詳情”,界面會切換到對每位攤主詳細的需求。
二、項目準備
1.Tkinter模塊相關組件的知識,可以詳看我前面寫過的文章
2.準備一個TCP調試助手,用于TCP通信。如果沒有,可見文末附件。打開TCP調試助手,設置為服務端,其IP地址為“127.0.0.1”,端口為“2005”,打開開關。
3.安裝好相關的庫文件,詳細見下圖,版本是3.75。
4.本項目中的程序人臉識別和語音功能是直接調用已經寫好的人臉采集、訓練、識別和語音識別、語音合成的函數,可以見人臉識別和語音識別和語音合成這3篇文章,全部的程序都會放在本文末附錄。
三、項目實施
備注:界面設計的參考程序建議從后面的主程序往前看,找到對應的功能函數。
1.導入相關庫文件
from tkinter import * from tkinter import ttk from PIL import Image, ImageTk import time import cv2 from playsound import playsound #播放聲音 from FaceCollect import GetFace #導入采集程序中的函數 import socket #連接服務器 from FaceTrain import getImagesAndLabels,recognizer #導入訓練程序中的函數 import numpy as np from FaceRecognition import Face #導入識別程序中的函數 from baiduasr import record, asr_updata #語音合成文件中的函數 import baiduasr #語音合成文件 from TTS import tts #語音合成文件 import threading #開啟線程所用 import openpyxl #表格處理模塊 import matplotlib #繪圖 from matplotlib.figure import Figure2.人臉信息驗證功能
# 人臉圖片顯示函數,所有的人臉圖片顯示的時候可以加載這個函數 def face_image(face_photo):global photo1 # 一定要將photo設置成全局變量不然調用顯示不出來 imagephoto_open1 = Image.open('./' + face_photo + '.jpg') # 打開圖片photo1 = photo_open1.resize((100 , 120)) # 圖片尺寸photo1 = ImageTk.PhotoImage(photo1) Label(Frame1_3,image=photo1).place(x= 90,y = 10) # 放置人臉圖像的標簽及位置#清除函數 def clear(entry1,entry2):print("文本清除")entry1.delete(0,END) #清除文本框內容,從第一個字符到最后一個字符entry2.delete(0,END) #清除文本框內容,從第一個字符到最后一個字符# 人臉注銷函數。function:face_logout def face_logout():print("圖像注銷")Label(Frame1_3,text = " " , bg = "#DAE3F3").place(x= 100,y = 150) # 用空格頂掉原有的信息 Label(Frame1_3,text = " " , bg = "#DAE3F3").place(x= 100,y = 200) # 用空格頂掉原有的信息 face_image('face')# 采集函數。function:fece_collect #利用get()方法獲取用戶輸入的姓名、ID,調用FaceCollect中的Getface函數完成圖像采集。 def register():print("人臉采集")Name = name.get()ID = id.get() #獲取文本框內容GetFace(Name,ID) #采集人臉數據# 人臉訓練函數。function:fece_train #利用get()方法獲取用戶輸入的模型名稱,調用FaceTrain中的函數完成人臉模型的訓練,生成的模型文件保存到Model文件夾內,并以用戶輸入的模型名稱命名。 def Train():print("人臉訓練")Moudle = moudle_name1.get() #獲取文本框內容faces, ids = getImagesAndLabels(path) #獲取訓練程序中的人臉和標簽# 開始訓練recognizer.train(faces, np.array(ids)) # 保存文件recognizer.write(r'./Model/'+ Moudle +'.yml') #以用戶輸入的模型名稱給生成的模型命名# 人臉識別函數 #完善“識別”按鈕函數。調用FaceRecognition中的Face函數來識別用戶身份,并將信息顯示在界面。 def face_recognition():print("人臉識別")Name,idnum,Confidence = Face() #調用人臉識別函數print("您的名字是:", Name,"您的ID是:", idnum)Label(Frame1_3,text=idnum,font=("黑體",15),width=4,bg = "#DAE3F3").place(x=110,y=150)#IDLabel(Frame1_3,text=Name ,font= ("黑體",15),width=4,bg = "#DAE3F3").place(x=110,y=200)#姓名face_image('image') #設置界面的人臉圖像這段程序即界面左邊人臉信息驗證部分的功能。
3.語音交互與TCP數據通信
(1)創建socket客戶端變量,利用socket_client.send方法向TCP發送數據,該客戶端變量是在最下面的主函數中定義的。
(2)執行Start()函數時,首先通過tts合成語音提示用戶進行錄音,然后進行語音識別,用戶說出“系統啟動后”,再進行人臉識別,并給TCP客戶端發送匹配度指數和“start”指令。
4.數據信息可視化
人工智能系統界面的訂單數據可視化功能,要求實現當用戶通過語音完成下單后,在訂單分布界面能夠顯示用戶向每位攤主的需求總數,按下“訂單詳情”按鈕,能夠切換到新的界面,顯示每位攤主的4類物料的需求數量。
(1)定義訂單數量函數,用于后于語音識別中判斷用戶輸入的語音信息中的訂單數量。
(2)定義wait_order函數,該函數在主函數中通過開啟threading線程來啟動,用于等待接受TCP服務端發送過來“xiadingdan”指令,通過開啟線程來持續等待,這樣才不會導致界面刷新不出來。初始化各個變量,等待接受TCP服務端發送過來“xiadingdan”的指令后,通過語音交互,讓用戶向三位攤主分別下單。
#人臉驗證通過后,等待PLC發送過來'xiadingdan',用戶才能語音下單 def wait_order():global face_flagwhile 1: if face_flag == 1: #只有人臉驗證通過后,接收到的PLC下單指令才有用while (True):command = socket_client.recv(1024).decode()print(command)time.sleep(0.1)dingdan_list = ["dingdan"] # 初始化訂單的值order = '' # 初始化每個攤主的訂單sum = 0 #攤主個數label1 = '0' # 每次給新的攤主下訂單需要初始化對應變量label2 = '0'label3 = '0'label4 = '0' No1 = 0No2 = 0No3 = 0need_list = []need_new = []fraces = [] # 扇形圖的占比初始值labels = [] # 扇形圖的標簽初始值colors = []if command == 'xiadingdan': for k in range(3):tts("請為"+ str(k+1) +"號位攤主下單")sum +=1 #攤主個數 tts("開始錄音") baiduasr.record() # 錄音data = baiduasr.asr_updata() # 語音識別t = data.split(',') # 字符串分割print(t)for i in range(len(t)):if '水果' in t[i]:label1 = num(t[i])order = f'{label1},{label2},{label3},{label4}' # 輸出elif '蔬菜' in t[i]:label2 = num(t[i])order = f'{label1},{label2},{label3},{label4}' # 輸出elif '服裝' in t[i]:label3 = num(t[i])order = f'{label1},{label2},{label3},{label4}' # 輸出elif '零食' in t[i]:label4 = num(t[i])order = f'{label1},{label2},{label3},{label4}' # 輸出else:order = '0,0,0,0' #如果沒有上述物品或者輸入錯誤,則全部置零dingdan_list.append(order) # 把每一個向攤主下的單組合到列表dingdan_list(3)把用戶的向每一位攤主下的訂單信息order,填寫到表格中。然后將用戶輸入訂單信息轉為列表dingdan_list,獲取每一位攤主的訂單需求量。例如dingdan_list=[dingdan,[1,0,0,0],[1,1,1,0],[1,1,1,1]],那么No1=1,No2=3,No1=4。設置繪制扇形圖需要的各個變量,這里調用draw_pie函數,其參數frame,colors,fraces,為列表類型,labels為元組類型。
# 填寫相關信息到表格max_row1 = sheet1.max_row # 獲取該表格最大行行數 #將表格中的內容為order的值, order為字符串 '0,0,0,0' ,字符長度是6 sheet1.cell(max_row1+1,1).value = str(sum) # 填寫到“序號”一欄sheet1.cell(max_row1+1,2).value = str(sum) + "號" # 填寫到“攤主”一欄sheet1.cell(max_row1+1,3).value = order[0] # 填寫到“水果”一欄sheet1.cell(max_row1+1,4).value = order[2] # 填寫到“蔬菜”一欄sheet1.cell(max_row1+1,5).value = order[4] # 填寫到“零食”一欄sheet1.cell(max_row1+1,6).value = order[6] # 填寫到“服裝”一欄sheets.save("Data.xlsx") # 保存表格#將每個攤位的元素相加,得到總數!print(dingdan_list)No1 = int(dingdan_list[1][0]) + int(dingdan_list[1][2]) + int(dingdan_list[1][4]) + int(dingdan_list[1][6]) #1號攤主需求量No2 = int(dingdan_list[2][0]) + int(dingdan_list[2][2]) + int(dingdan_list[2][4]) + int(dingdan_list[2][6]) #2號攤主需求量No3 = int(dingdan_list[3][0]) + int(dingdan_list[3][2]) + int(dingdan_list[3][4]) + int(dingdan_list[3][6]) #3號攤主需求量 #print("No1,No2,No3:",No1,No2,No3)#將各個攤主及其需求量和扇形圖對應顏色組合到列表need_list = [["1號",No1, "#63A0DB"], ["2號",No2 , "#FFC727"] , ["3號" , No3 , "#20EA37" ] ]#以下操作是為了剔除占比為需求量為0的那部分,需求量為0則不顯示在扇形圖上 for k in need_list: if k[1]== 0: #提取列表索引為0的值continue #不做處理else:need_new.append(k) #把值不為0的部分拼接起來,例如[["1號攤主",No1, "#63A0DB"],["2號",No2 , "#FFC727"] ] for k in need_new: #遍歷列表,獲得每一個扇形函數的參數,labels參數是標簽,fraces是扇形的占比,colors對應的顏色labels.append(k[0]) # 獲取攤主對應的列表 fraces.append(k[1]) # 獲取需求量對應占比的列表 colors.append(k[2]) # 獲取攤主對應顏色的列表 labels = tuple(labels) # 轉為元組,獲取攤主對應標簽 labels = ("1號","2號","3號") #print(labels,fraces,colors)draw_pie(Frame2_1,labels,fraces,colors) # 畫扇形圖pie_image() # 扇形圖顯示函數Label(Frame2_1,text = str(No1)+ "個", font = ("微軟雅黑",12), bg = "#63A0DB" , width = 4 , height = 2 , anchor = 'w').place(x= 160,y = 150) Label(Frame2_1,text = str(No2)+ "個", font = ("微軟雅黑",12), bg = "#FFC727" , width = 4 , height = 2 , anchor = 'w').place(x= 160,y = 250) Label(Frame2_1,text = str(No3)+ "個", font = ("微軟雅黑",12), bg = "#20EA37" , width = 4 , height = 2 , anchor = 'w').place(x= 160,y = 350) #循環3次后發送最終訂單 例如[dingdan,1,0,0,0,0,1,0,0,0,0,1,0] msg = ",".join(dingdan_list) # 列表轉字符串 "dingdan,1,0,0,0,0,1,0,0,0,0,1,0"3 senddata(msg) #發送最終訂單face_flag = 0 #標志位置0(4)定義扇形圖形式函數。該函數用于將生成的扇形圖片展示在Frame框架上。
# 扇形圖顯示函數,所有的扇形圖圖片顯示的時候可以加載這個函數 def pie_image():global photo3 # 一定要將photo設置成全局變量不然調用顯示不出來 # 初始化的圖片使用PIL庫來加載圖像 photo_open3 = Image.open('./pie.png') # 打開扇形圖片photo3 = photo_open3.resize((350 , 350)) # 圖片尺寸photo3 = ImageTk.PhotoImage(photo3) Label(Frame2_1,image=photo3).place(x= 220,y = 100) # 放置圖像(5)定義draw_pie函數,利用matplotlib模塊畫扇形圖,最后將生成的扇形圖片通過savefig()方法保存到與GUI_3.py同目錄下,并命名為“pie.png”
# matplotlib模塊畫扇形圖 def draw_pie(frame,labels,fraces , colors):# Figure創建圖像對象,figsize指定畫布的大小,(寬度,高度),單位為英寸。# dpi 指定繪圖對象的分辨率,即每英寸多少個像素,默認值為80fig = Figure(figsize=(4, 4), dpi=100)# subplot()均等劃分畫布,如果不想覆蓋之前的圖,需要使用 add_subplot() 函數drawPic_a = fig.add_subplot(111)# 解決漢字亂碼問題,使用指定的漢字字體類型(此處為黑體)matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 繪制pie()餅狀圖:labels為每個扇形區域備注一個標簽名字,autopct格式化字符串"fmt%pct",百分比格式drawPic_a.pie(x=fraces, labels=labels, colors = colors , autopct='%0.2f%%') drawPic_a.set_title('訂單分布圖') #餅狀圖命名fig.savefig('pie.png') # 將扇形圖保存到文件夾下(6)定義訂單詳情畫面,使用Treeview來呈現表格內容。用戶按下初始界面的“訂單詳情”按鈕后,能夠切換到另外一個框架(Frame4)的組成畫面,該畫面放置TreeView組件,是一個樹狀結構和表格的結合體。第一列是樹狀結構,后幾列是列表。創建表格對象tree,第一列為序號,后面幾列分別為“攤位”“水果”“蔬菜”“服裝”“零食”。用戶下單后會將訂單信息保存到“Data.xlsx”表格中,在data_monitorh函數中調用“Data.xlsx”工作表的內容,遍歷每一行(每一位攤主),獲取每一行中各列(4大類物料)的數量,然后通過使用Treeview來呈現表格內容數據。
#訂單詳情畫面,使用Treeview來呈現表格內容 def data_monitor():print("訂單詳情")Frame2_1.pack_forget() # 隱藏Frame3的組件,pack_forget()方法讓控件“不再顯示”但控件還存在可以再次pack出來Frame4 = Frame(Frame2,bg="White",height=500,width=600)Frame4.place(x = 50 , y = 100)Button(Frame4,text = "返回統計圖",bg = "#C1FFC1",font = ("黑體",15),width = 12,height=2, command = Frame4.place_forget).place(x=450,y=430) #返回統計按鈕# 表格。建立標題tree = ttk.Treeview(Frame4) # 創建表格對象tree["columns"] = ("序號","攤位","水果","蔬菜","服裝","零食") # 定義列tree.column("序號" , width = 60 ) # 寬度tree.column("攤位" , width = 60 )tree.column("水果" , width = 60 )tree.column("蔬菜" , width = 60 )tree.column("服裝" , width = 60 ) tree.column("零食" , width = 60 ) tree.heading("#0" , text = "序號") # 表格標題tree.heading("#1" , text = "攤位")tree.heading("#2" , text = "水果")tree.heading("#3" , text = "蔬菜")tree.heading("#4" , text = "服裝")tree.heading("#5" , text = "零食")tree.place(x=20,y=50)max_row1 = sheet1.max_row # 獲取該表格最大行行數 max_column1 = sheet1.max_column # 獲取該表格最大列列數 for i in range(2,max_row1+1): # 從表格第2行開始遍歷b = [] # 設空列表for j in range(1,max_column1+1): # 遍歷每一列,獲取每一行的列內容a = sheet1.cell(i,j).value # 獲取每一個單元格的值,b.append(a) # 字符串轉列表del(b[0]) # 刪除第一個序號tree.insert("", index = END , text = i-1,values=b) # 加載到表格上,text是序號,values是序號后的內容tree.place(x=20,y=50)(7)主函數程序設計。增加人臉識別初始標志,創建TCP客戶端。使用openpyxl.Workbook()創建工作薄,命名為“Data.xlsx”,然后加載打開表格,在表格第一行的前6列寫入相關內容。然后開啟線程,用于接收發送過來PLC的指令,更新到界面。
if __name__ == '__main__':# 創建全局變量face_flag = 0 #人臉識別標志global command# 創建socket客戶端變量socket_client = ''socket_client = socket.socket()socket_client.connect(('127.0.0.1',2005)) # 創建一個新表格,用于存儲人員信息,每次打開都覆蓋原來的表格workbook = openpyxl.Workbook() # 創建一個工作薄worksheet = workbook.active # 在工作薄中創建一個工作表workbook.save("Data.xlsx") # 保存表格到對應路徑 # 打開工作表sheets = openpyxl.load_workbook("Data.xlsx") # 在表格第一行填寫內容sheet1 = sheets[sheets.sheetnames[0]] sheet1.cell(1, 1).value = "序號"sheet1.cell(1, 2).value = "攤位"sheet1.cell(1, 3).value = "水果" sheet1.cell(1, 4).value = "蔬菜" sheet1.cell(1, 5).value = "服裝" sheet1.cell(1, 6).value = "零食" sheets.save("Data.xlsx") # 保存表格# 開啟線程,用于接收發送過來PLC的指令,更新到界面thread = threading.Thread(target=wait_order) #定義wait_order函數,等待接受thread.daemon = Truethread.start()(8)主程序界面設計。創建窗口,設置窗口的相關屬性。
# 人臉訓練集路徑path = './Facedata/'#主界面程序top = Tk()top.title("越疆科技")top.geometry("1200x700")top.configure(bg = "#F8CBAD") # 窗口背景顏色# 大標題Label(top ,text = "人工智能機器人系統集成及應用平臺",font = ("宋體",18),fg = "black",bg = "#F8CBAD",width = 35,height = 2).place(x=440,y = 0)(9)界面放置人臉信息驗證的框架Frame1,在Frame1布置3個小框架,分別用于放置人臉采集、訓練、識別的按鈕或文本框等組件。各個框架中的按鈕通過參數command綁定對應的執行函數。
#在第一個框架再里面放置3個框架Frame1_1、Frame1_2、Frame1_3,用于人臉采集、訓練、識別#在第一個框架再里面放置第1個框架Frame1_1 = Frame(Frame1,bg="#DAE3F3",height=150,width=300)Frame1_1.place(x = 25 , y = 25)#利用StringVar接收用戶ID輸入 var_ID = StringVar() id = Entry(Frame1_1,textvariable=var_ID, font=('黑體', 13) , width=15) #輸入框id.place(x=100,y=25) Label(Frame1_1 ,text = "用戶ID",font = ("黑體",13),bg = "#DAE3F3", width = 8 ).place(x=20,y=25)#利用StringVar接收用戶姓名輸入 var_name = StringVar() name = Entry(Frame1_1,textvariable=var_name, font=('黑體', 13) , width=15) #輸入框name.place(x=100,y=75) Label(Frame1_1 ,text = "用戶姓名",font = ("黑體",13),bg = "#DAE3F3", width = 8 ).place(x=20,y=75)#采集、清除按鈕Button(Frame1_1,text = "采集",bg = "#836FFF",font = ("黑體",13),width = 10,command = register).place(x=35,y=110)Button(Frame1_1,text = "清除",bg = "#836FFF",font = ("黑體",13),width = 10,command = lambda : clear(id,name)).place(x=165,y=110)#在第一個框架再里面放置第2個框架Frame1_2 = Frame(Frame1,bg="#DAE3F3",height=100,width=300)Frame1_2.place(x = 25 , y = 200)#利用StringVar接收用戶輸入的模型名稱 var_moudle1 = StringVar() moudle_name1 = Entry(Frame1_2,textvariable=var_moudle1, font=('黑體', 13) , width=15) #輸入框moudle_name1.place(x=100,y=15) Label(Frame1_2 ,text = "模型名稱",font = ("黑體",13),bg = "#DAE3F3", width = 8 ).place(x=20,y=15)#訓練、清除按鈕Button(Frame1_2,text = "訓練",bg = "#836FFF",font = ("黑體",13),width = 10,command = Train).place(x=35,y=60)Button(Frame1_2,text = "清除",bg = "#836FFF",font = ("黑體",13),width = 10,command = lambda : moudle_name1.delete(0,END)).place(x=165,y=60)#在第一個框架再里面放置第3個框架Frame1_3 = Frame(Frame1,bg="#DAE3F3",height=275,width=300)Frame1_3.place(x = 25 , y = 325)#繪制畫布,用于顯示信息畫布背景為白色face_image('face') # 初始化人臉圖像 #識別用戶姓名 Label(Frame1_3 ,text = "用戶ID:",font = ("黑體",13),bg = "#DAE3F3", width = 9 ).place(x=20,y=150)Label(Frame1_3 ,text = "用戶姓名:",font = ("黑體",13),bg = "#DAE3F3", width = 9 ).place(x=20,y=200)#識別、清除按鈕Button(Frame1_3,text = "識別",bg = "#836FFF",font = ("黑體",13),width = 10,command = face_recognition).place(x=35,y=235)Button(Frame1_3,text = "注銷",bg = "#836FFF",font = ("黑體",13),width = 10,command = face_logout).place(x=165,y=235)(10)界面放置訂單詳情框架Frame2。放置“語音啟動”“退出系統”按鈕,放置攤主詳情的Lable文字組件。
# 第二個框架:訂單信息部分Frame2 = Frame(top,bg="#B4C7E7",height=625,width=700)Frame2.place(x = 450 , y = 50)#系統啟動\訂單詳情按鈕Button(Frame2,text = "語音啟動",bg = "#C1FFC1",font = ("黑體",15),width = 12,height=2,command = Start).place(x=150,y=20)Button(Frame2,text = "退出系統",bg = "#C1FFC1",font = ("黑體",15),width = 12,height=2,command = top.destroy).place(x=400,y=20) #在Frame2框架再里面放置1個框架Frame2_1 = Frame(Frame2,bg="white",height=500,width=600)Frame2_1.place(x = 50 , y = 100)Label(Frame2_1,text = "訂單分布圖 ", font = ("微軟雅黑",15), bg = "white" , width = 18 , height = 2 ).place(x= 200,y = 10) Label(Frame2_1,text = "1號攤位需求量: ", font = ("微軟雅黑",12), bg = "#63A0DB" , width = 15 , height = 2 ).place(x= 20,y = 150) Label(Frame2_1,text = "2號攤位需求量: " , font = ("微軟雅黑",12), bg = "#FFC727" , width = 15 , height = 2 ).place(x= 20,y = 250) Label(Frame2_1,text = "3號攤位需求量: " , font = ("微軟雅黑",12), bg = "#20EA37" , width = 15 , height = 2 ).place(x= 20,y = 350) Button(Frame2_1,text = "訂單詳情",bg = "#C1FFC1",font = ("黑體",15),width = 12,height=2, command = data_monitor).place(x=30,y=430) #返回統計按鈕 top.mainloop() #消息循環五、運行效果
(1)人臉信息驗證
依次在界面左邊欄目中按照人臉采集、模型訓練、人臉識別的順序來完成人臉信息驗證,如下圖所示。
(2)語音交互
點擊“語音啟動”按鈕,系統通過語音合成“開始進行語音識別”,通過麥克風說出“系統啟動”,然后系統提示“開始進行人臉識別”,人臉驗證通過后,可以在界面看到拍攝的人臉圖像和對用的ID、姓名。同時,TCP服務端接受到發送的匹配指數和“start”指令。利用TCP客戶端發送“xiadingdan”指令,如所示。系統提示分別向3位攤主下訂單,例如向1號攤主下單“我要一個水果”,向2號攤主下單“我要一份蔬菜,一個服裝。”,向3號攤主下單“我要一個零食”,下單完成后,生成訂單列表[‘dingdan’, ‘1,0,0,0’, ‘1,1,1,0’, ‘1,1,1,1’],將發送給TCP服務端。同時,界面將展示訂單分布的扇形圖。點擊“訂單詳情”按鈕。可以看到用戶向每位攤主的具體訂單列表。
四、相關附件
本項目相關程序及TCP調試助手、第三方python庫詳見這戳我~
提取碼:lyx4
總結
以上是生活随笔為你收集整理的人工智能交互系统界面设计(Tkinter界面设计)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: K8S—二进制部署安装(包含UI界面设置
- 下一篇: 以下11條小建議,幫助你們的異地戀一直保