python人脸识别系统界面_人脸识别演示界面:python GUI--tkinter实战(1)
寫在前面
2018年走到尾聲,2019年寒假實(shí)習(xí)和春招的壓力撲面而來,在大學(xué)象牙塔里待了5年多,雖然計(jì)算機(jī)專業(yè),但是編程能力弱的可憐。借抱大佬大腿馬上要參加的一個(gè)比賽,隊(duì)友已經(jīng)寫好了核心功能,將界面演示的部分交給了我,順便練習(xí)(ru men)一下python的界面編程。由于所選模型底層庫的調(diào)用和模型框架必須使用python2,所以界面GUI庫的選擇有很大局限性,這里選擇了python自帶的tkinter庫,無需安裝,簡單快速,python2/3兼容,只需要更改一下一些名稱就可以移植使用。但是最大的缺點(diǎn)就是丑!除了丑還是丑。這里簡單記錄一下tkinter庫的使用,如果寫的不夠準(zhǔn)確還請多多指正。
一、tkinter基礎(chǔ)知識(shí)
Tkinter:Tkinter 模塊(Tk 接口)是 Python 的標(biāo)準(zhǔn) Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多數(shù)的 Unix 平臺(tái)下使用,同樣可以應(yīng)用在 Windows 和 Macintosh 系統(tǒng)里。Tk8.0 的后續(xù)版本可以實(shí)現(xiàn)本地窗口風(fēng)格,并良好地運(yùn)行在絕大多數(shù)平臺(tái)中。在本文中盡量列出在python2/3中的不同之處。
1、調(diào)用
導(dǎo)入tkinter模塊:import tkinter #python 3
import Tkinter #python 2
導(dǎo)入tkinter庫:from Tkinter import * #python 2
from tkinter import * #python 3
在其他模塊的調(diào)用中也有不同,后續(xù)會(huì)詳細(xì)介紹。
2、基本結(jié)構(gòu)
·導(dǎo)入 Tkinter 模塊
·創(chuàng)建控件
·指定這個(gè)控件的 master, 即這個(gè)控件屬于哪一個(gè)
·告訴 GM(geometry manager) 有一個(gè)控件產(chǎn)生了。import Tkinter
top = Tkinter.Tk()
#創(chuàng)建控件、指定master、告訴master控件產(chǎn)生
# 進(jìn)入消息循環(huán)
top.mainloop()
3、Tkinter 組件
Tkinter的提供各種控件,如按鈕,標(biāo)簽和文本框,一個(gè)GUI應(yīng)用程序中使用。這些控件通常被稱為控件或者部件。目前有15種Tkinter的部件,具體可以參見鏈接查看詳細(xì)參數(shù)。
組件有部分共同屬性,也有各自的特有屬性,在規(guī)定一個(gè)控件的屬性時(shí)要注意不能混用。
4、幾何管理
幾何管理簡單來說就是一個(gè)畫布的版面,規(guī)定了各個(gè)控件所在區(qū)域的位置,幾何管理方式有三種:包(pack)、網(wǎng)格(grid)、位置(place)。針對同一個(gè)GM不能混用幾何管理,而且tkinter會(huì)自動(dòng)進(jìn)行大小縮放等操作,所以必須不斷調(diào)整參數(shù)得到滿意的布局。(無法實(shí)時(shí)地進(jìn)行可視化編程真是逼死強(qiáng)迫癥,你以為的布局和呈現(xiàn)的布局總是不同的)
·包:作為最基本簡單的管理方法,只需要給出方位的大體位置和控件是否延伸等參數(shù)即可完成自動(dòng)的對齊,如果創(chuàng)建的控件比較簡單就可以使用此方法。
·網(wǎng)格:如果控件比較復(fù)雜,最終呈現(xiàn)的效果是整齊的,可以使用網(wǎng)格管理,只需要告訴控件需要放在第幾行第幾列即可。
·位置:如果前兩者的布局仍然無法滿足花式控件的擺放需求,那么就計(jì)算一下當(dāng)下GM大小,給出準(zhǔn)確的位置吧。規(guī)定好控件大小和具體擺放坐標(biāo)(先在紙上畫好,算好...)再不斷運(yùn)行看看輸出效果再調(diào)整。
二、解決思路
在本部分將介紹如何使用tkinter完成一個(gè)基本的人臉識(shí)別界面呈現(xiàn)的思路。
1、設(shè)計(jì)目標(biāo)
我們的基本需求如下:
用戶選擇想得到分類的人臉圖片,顯示在界面中,通過點(diǎn)擊原始模型和修改后模型的按鈕得到分類結(jié)果和置信度;將人臉圖片添加一些擾動(dòng),顯示擾動(dòng)后的效果圖,再次放入兩個(gè)模型中得到預(yù)測結(jié)果。得到四組分類結(jié)果和置信度,可以進(jìn)行對比,看出模型的性能以及擾動(dòng)的效果。
具體需求拆分如下:
1、用戶可以直接選擇本地圖片和攝像頭現(xiàn)場拍照進(jìn)行人臉識(shí)別的數(shù)據(jù)源。
2、對于選擇后的圖片進(jìn)行顯示,如果是本地照片將給出圖片標(biāo)簽,截圖照片顯示截圖日期作為圖片標(biāo)簽。
3、顯示在原始模型和修改模型中運(yùn)行后的分類結(jié)果和置信度。
4、在所選圖片上選擇要添加的擾動(dòng)(圖片標(biāo)記)。
5、顯示觸發(fā)器和所選照片合成后的效果圖。
6、將合成圖片在原始模型和修改模型中進(jìn)行預(yù)測,并給出分類結(jié)果和置信度。
2、布局效果圖
根據(jù)上述需求,繪制出理想的界面效果圖:
圖一:界面理想效果圖
3、控件布局
如圖一所示:
7個(gè)按鈕控件(Button),供用戶選擇,其中3按鈕需要出現(xiàn)彈窗(filedialog):選擇文件(get_file)、拍照截圖(shot_pic)、選擇擾動(dòng)(get_trg);
5個(gè)標(biāo)簽控件(Label),其中2個(gè)用于顯示圖片,三個(gè)分別顯示圖片標(biāo)簽、分類結(jié)果、置信度;
8個(gè)輸入控件(Entry),用于輸出從后臺(tái)模型中獲取的分類結(jié)果和置信度的值。
由于控件較多,而且希望盡量整齊,這里選用grid()幾何布局來規(guī)劃控件的位置,可以在Excel里標(biāo)記各個(gè)控件的大體位置,方便標(biāo)注行列值:
圖二:grid()布局行列值
由于tkinter的布局會(huì)自行進(jìn)行調(diào)整,所以這個(gè)demo的運(yùn)行結(jié)果并不理想,比如按鈕之間的間距,整個(gè)面板在窗口的位置,還有,最想要的背景圖片!在修改了無數(shù)版的布局以后,最終呈現(xiàn)的效果如下:
圖三:最終運(yùn)行效果圖
看到這里是不是已經(jīng)覺得可以右上角小叉叉退出了?絞盡腦汁搜索配色方案,依然拯救不了tkinter呈現(xiàn)的效果,理想和現(xiàn)實(shí)的差距隔了十萬八千里。會(huì)在后面的細(xì)節(jié)中詳細(xì)介紹可以優(yōu)化的細(xì)節(jié)參數(shù)。
先暫時(shí)總結(jié)強(qiáng)調(diào)一下tkinter不能做到的:
(1)tkinter的幾何布局不能混用:所以當(dāng)我們使用了grid()進(jìn)行控件布局以后,無法采用pack()進(jìn)行填充背景圖片,因此多彩炫酷的背景圖沒有了,只能填充一下基本的純色;而且為了使主體功能區(qū)域處于整個(gè)窗口的中央,留下來的grid布局空白處,其實(shí)會(huì)被tkinter自行調(diào)節(jié)吞掉,不會(huì)有合適的留白,只能通過慢慢調(diào)整空間邊距獲得一些空白;
(2)控件不能選擇透明度:在tkinter中,想要調(diào)整透明度就得針對整個(gè)生成窗口進(jìn)行操作,無法改變部分控件的透明度,也就沒有了扁平化的按鈕和好看的文本顯示框。(題外話:當(dāng)生成一個(gè)完全透明的,隱藏標(biāo)題欄的窗口時(shí),會(huì)發(fā)生什么?)
(3)對于插入圖片的格式有嚴(yán)格要求:tkinter自己只認(rèn)gif,而且將jpg和png強(qiáng)制轉(zhuǎn)換成gif也是無法識(shí)別的,想擴(kuò)展這個(gè),裝pillow庫實(shí)現(xiàn),調(diào)用語句:from PIL import Image, ImageTk
看到此處,一定破滅了夢想,如果不是因?yàn)橹荒苡胮ython2,還是去嘗試pyqt寫界面吧。下一篇文章將每個(gè)模塊的具體實(shí)現(xiàn)進(jìn)行代碼描述,而且會(huì)針對如何調(diào)用攝像頭實(shí)現(xiàn)截圖進(jìn)行詳細(xì)介紹!
see you again~
參考鏈接:
總結(jié)
以上是生活随笔為你收集整理的python人脸识别系统界面_人脸识别演示界面:python GUI--tkinter实战(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: CSS3学习手记(10) 过渡
- 下一篇: 玩转iOS开发:NSURLSession
