人臉識別演示界面:python GUI--tkinter實戰(zhàn)(1)

寫在前面

???? 2018年走到尾聲,2019年寒假實習和春招的壓力撲面而來,在大學象牙塔里待了5年多,雖然計算機專業(yè),但是編程能力弱的可憐。借抱大佬大腿馬上要參加的一個比賽,隊友已經(jīng)寫好了核心功能,將界面演示的部分交給了我,順便練習(ru men)一下python的界面編程。由于所選模型底層庫的調用和模型框架必須使用python2,所以界面GUI庫的選擇有很大局限性,這里選擇了python自帶的tkinter庫,無需安裝,簡單快速,python2/3兼容,只需要更改一下一些名稱就可以移植使用。但是最大的缺點就是丑!除了丑還是丑。這里簡單記錄一下tkinter庫的使用,如果寫的不夠準確還請多多指正。

一、tkinter基礎知識

Tkinter:Tkinter 模塊(Tk 接口)是 Python 的標準 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多數(shù)的 Unix 平臺下使用,同樣可以應用在 Windows 和 Macintosh 系統(tǒng)里。Tk8.0 的后續(xù)版本可以實現(xiàn)本地窗口風格,并良好地運行在絕大多數(shù)平臺中。在本文中盡量列出在python2/3中的不同之處。

1、調用

導入tkinter模塊:

import tkinter #python 3

import Tkinter #python 2

導入tkinter庫:

from Tkinter import * #python 2

from tkinter import * #python 3

在其他模塊的調用中也有不同,后續(xù)會詳細介紹。

2、基本結構

·導入 Tkinter 模塊

·創(chuàng)建控件

·指定這個控件的 master, 即這個控件屬于哪一個

·告訴 GM(geometry manager) 有一個控件產(chǎn)生了。

import Tkinter

top = Tkinter.Tk()

#創(chuàng)建控件、指定master、告訴master控件產(chǎn)生

# 進入消息循環(huán)

top.mainloop()

3、Tkinter 組件

?Tkinter的提供各種控件,如按鈕,標簽和文本框,一個GUI應用程序中使用。這些控件通常被稱為控件或者部件。目前有15種Tkinter的部件,具體可以參見鏈接查看詳細參數(shù)。

組件有部分共同屬性,也有各自的特有屬性,在規(guī)定一個控件的屬性時要注意不能混用。

4、幾何管理

幾何管理簡單來說就是一個畫布的版面,規(guī)定了各個控件所在區(qū)域的位置,幾何管理方式有三種:包(pack)、網(wǎng)格(grid)、位置(place)。針對同一個GM不能混用幾何管理,而且tkinter會自動進行大小縮放等操作,所以必須不斷調整參數(shù)得到滿意的布局。(無法實時地進行可視化編程真是逼死強迫癥,你以為的布局和呈現(xiàn)的布局總是不同的)

·包:作為最基本簡單的管理方法,只需要給出方位的大體位置和控件是否延伸等參數(shù)即可完成自動的對齊,如果創(chuàng)建的控件比較簡單就可以使用此方法。

·網(wǎng)格:如果控件比較復雜,最終呈現(xiàn)的效果是整齊的,可以使用網(wǎng)格管理,只需要告訴控件需要放在第幾行第幾列即可。

·位置:如果前兩者的布局仍然無法滿足花式控件的擺放需求,那么就計算一下當下GM大小,給出準確的位置吧。規(guī)定好控件大小和具體擺放坐標(先在紙上畫好,算好...)再不斷運行看看輸出效果再調整。

二、解決思路

在本部分將介紹如何使用tkinter完成一個基本的人臉識別界面呈現(xiàn)的思路。

1、設計目標

我們的基本需求如下:

用戶選擇想得到分類的人臉圖片,顯示在界面中,通過點擊原始模型和修改后模型的按鈕得到分類結果和置信度;將人臉圖片添加一些擾動,顯示擾動后的效果圖,再次放入兩個模型中得到預測結果。得到四組分類結果和置信度,可以進行對比,看出模型的性能以及擾動的效果。

具體需求拆分如下:

1、用戶可以直接選擇本地圖片和攝像頭現(xiàn)場拍照進行人臉識別的數(shù)據(jù)源。

2、對于選擇后的圖片進行顯示,如果是本地照片將給出圖片標簽,截圖照片顯示截圖日期作為圖片標簽。

3、顯示在原始模型和修改模型中運行后的分類結果和置信度。

4、在所選圖片上選擇要添加的擾動(圖片標記)。

5、顯示觸發(fā)器和所選照片合成后的效果圖。

6、將合成圖片在原始模型和修改模型中進行預測,并給出分類結果和置信度。

2、布局效果圖

根據(jù)上述需求,繪制出理想的界面效果圖:

圖一:界面理想效果圖

3、控件布局

如圖一所示:

7個按鈕控件(Button),供用戶選擇,其中3按鈕需要出現(xiàn)彈窗(filedialog):選擇文件(get_file)、拍照截圖(shot_pic)、選擇擾動(get_trg);

5個標簽控件(Label),其中2個用于顯示圖片,三個分別顯示圖片標簽、分類結果、置信度;

8個輸入控件(Entry),用于輸出從后臺模型中獲取的分類結果和置信度的值。

由于控件較多,而且希望盡量整齊,這里選用grid()幾何布局來規(guī)劃控件的位置,可以在Excel里標記各個控件的大體位置,方便標注行列值:

圖二:grid()布局行列值

由于tkinter的布局會自行進行調整,所以這個demo的運行結果并不理想,比如按鈕之間的間距,整個面板在窗口的位置,還有,最想要的背景圖片!在修改了無數(shù)版的布局以后,最終呈現(xiàn)的效果如下:

圖三:最終運行效果圖

看到這里是不是已經(jīng)覺得可以右上角小叉叉退出了?絞盡腦汁搜索配色方案,依然拯救不了tkinter呈現(xiàn)的效果,理想和現(xiàn)實的差距隔了十萬八千里。會在后面的細節(jié)中詳細介紹可以優(yōu)化的細節(jié)參數(shù)。

先暫時總結強調一下tkinter不能做到的:

(1)tkinter的幾何布局不能混用:所以當我們使用了grid()進行控件布局以后,無法采用pack()進行填充背景圖片,因此多彩炫酷的背景圖沒有了,只能填充一下基本的純色;而且為了使主體功能區(qū)域處于整個窗口的中央,留下來的grid布局空白處,其實會被tkinter自行調節(jié)吞掉,不會有合適的留白,只能通過慢慢調整空間邊距獲得一些空白;

(2)控件不能選擇透明度:在tkinter中,想要調整透明度就得針對整個生成窗口進行操作,無法改變部分控件的透明度,也就沒有了扁平化的按鈕和好看的文本顯示框。(題外話:當生成一個完全透明的,隱藏標題欄的窗口時,會發(fā)生什么?)

(3)對于插入圖片的格式有嚴格要求:tkinter自己只認gif,而且將jpg和png強制轉換成gif也是無法識別的,想擴展這個,裝pillow庫實現(xiàn),調用語句:

from PIL import Image, ImageTk

看到此處,一定破滅了夢想,如果不是因為只能用python2,還是去嘗試pyqt寫界面吧。下一篇文章將每個模塊的具體實現(xiàn)進行代碼描述,而且會針對如何調用攝像頭實現(xiàn)截圖進行詳細介紹!

see you again~


參考鏈接:

Python GUI 編程(Tkinter) | 菜鳥教程

Python Tkinter GUI(三)顯示圖片 - 小飛飛的博客 - CSDN博客

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1、圖形化界面設計的基本理解當前流行的計算機桌面應用程序大多數(shù)為圖形化用戶界面(Graphic User Inte...
    IIronMan閱讀 260,113評論 15 244
  • Python 面向對象Python從設計之初就已經(jīng)是一門面向對象的語言,正因為如此,在Python中創(chuàng)建一個類和對...
    順毛閱讀 4,376評論 4 16
  • 0 寫在前面 未經(jīng)允許,不得轉載,謝謝~ 之前在這篇文章python 圖形界面開發(fā)里記錄了最開始學習python界...
    與陽光共進早餐閱讀 102,572評論 27 139
  • 原文博客鏈接地址 Python提供了多個圖形開發(fā)界面的庫,幾個常用Python GUI庫如下: Tkinter:T...
    TitanCoder閱讀 2,316評論 0 10
  • 那是孩子的隨想…… 星星眨著眼睛 那是櫨葉飄上了天空 夕陽照在水平面上 像秋天里的香山 火一樣的紅 憧憬似海里的艨...
    立德優(yōu)教育閱讀 458評論 0 0

友情鏈接更多精彩內(nèi)容