人脸识别演示界面:python GUI--tkinter实战(1)

写在前面

     2018年走到尾声,2019年寒假实习和春招的压力扑面而来,在大学象牙塔里待了5年多,虽然计算机专业,但是编程能力弱的可怜。借抱大佬大腿马上要参加的一个比赛,队友已经写好了核心功能,将界面演示的部分交给了我,顺便练习(ru men)一下python的界面编程。由于所选模型底层库的调用和模型框架必须使用python2,所以界面GUI库的选择有很大局限性,这里选择了python自带的tkinter库,无需安装,简单快速,python2/3兼容,只需要更改一下一些名称就可以移植使用。但是最大的缺点就是丑!除了丑还是丑。这里简单记录一下tkinter库的使用,如果写的不够准确还请多多指正。

一、tkinter基础知识

Tkinter:Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。在本文中尽量列出在python2/3中的不同之处。

1、调用

导入tkinter模块:

import tkinter #python 3

import Tkinter #python 2

导入tkinter库:

from Tkinter import * #python 2

from tkinter import * #python 3

在其他模块的调用中也有不同,后续会详细介绍。

2、基本结构

·导入 Tkinter 模块

·创建控件

·指定这个控件的 master, 即这个控件属于哪一个

·告诉 GM(geometry manager) 有一个控件产生了。

import Tkinter

top = Tkinter.Tk()

#创建控件、指定master、告诉master控件产生

# 进入消息循环

top.mainloop()

3、Tkinter 组件

 Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。目前有15种Tkinter的部件,具体可以参见链接查看详细参数。

组件有部分共同属性,也有各自的特有属性,在规定一个控件的属性时要注意不能混用。

4、几何管理

几何管理简单来说就是一个画布的版面,规定了各个控件所在区域的位置,几何管理方式有三种:包(pack)、网格(grid)、位置(place)。针对同一个GM不能混用几何管理,而且tkinter会自动进行大小缩放等操作,所以必须不断调整参数得到满意的布局。(无法实时地进行可视化编程真是逼死强迫症,你以为的布局和呈现的布局总是不同的)

·包:作为最基本简单的管理方法,只需要给出方位的大体位置和控件是否延伸等参数即可完成自动的对齐,如果创建的控件比较简单就可以使用此方法。

·网格:如果控件比较复杂,最终呈现的效果是整齐的,可以使用网格管理,只需要告诉控件需要放在第几行第几列即可。

·位置:如果前两者的布局仍然无法满足花式控件的摆放需求,那么就计算一下当下GM大小,给出准确的位置吧。规定好控件大小和具体摆放坐标(先在纸上画好,算好...)再不断运行看看输出效果再调整。

二、解决思路

在本部分将介绍如何使用tkinter完成一个基本的人脸识别界面呈现的思路。

1、设计目标

我们的基本需求如下:

用户选择想得到分类的人脸图片,显示在界面中,通过点击原始模型和修改后模型的按钮得到分类结果和置信度;将人脸图片添加一些扰动,显示扰动后的效果图,再次放入两个模型中得到预测结果。得到四组分类结果和置信度,可以进行对比,看出模型的性能以及扰动的效果。

具体需求拆分如下:

1、用户可以直接选择本地图片和摄像头现场拍照进行人脸识别的数据源。

2、对于选择后的图片进行显示,如果是本地照片将给出图片标签,截图照片显示截图日期作为图片标签。

3、显示在原始模型和修改模型中运行后的分类结果和置信度。

4、在所选图片上选择要添加的扰动(图片标记)。

5、显示触发器和所选照片合成后的效果图。

6、将合成图片在原始模型和修改模型中进行预测,并给出分类结果和置信度。

2、布局效果图

根据上述需求,绘制出理想的界面效果图:

图一:界面理想效果图

3、控件布局

如图一所示:

7个按钮控件(Button),供用户选择,其中3按钮需要出现弹窗(filedialog):选择文件(get_file)、拍照截图(shot_pic)、选择扰动(get_trg);

5个标签控件(Label),其中2个用于显示图片,三个分别显示图片标签、分类结果、置信度;

8个输入控件(Entry),用于输出从后台模型中获取的分类结果和置信度的值。

由于控件较多,而且希望尽量整齐,这里选用grid()几何布局来规划控件的位置,可以在Excel里标记各个控件的大体位置,方便标注行列值:

图二:grid()布局行列值

由于tkinter的布局会自行进行调整,所以这个demo的运行结果并不理想,比如按钮之间的间距,整个面板在窗口的位置,还有,最想要的背景图片!在修改了无数版的布局以后,最终呈现的效果如下:

图三:最终运行效果图

看到这里是不是已经觉得可以右上角小叉叉退出了?绞尽脑汁搜索配色方案,依然拯救不了tkinter呈现的效果,理想和现实的差距隔了十万八千里。会在后面的细节中详细介绍可以优化的细节参数。

先暂时总结强调一下tkinter不能做到的:

(1)tkinter的几何布局不能混用:所以当我们使用了grid()进行控件布局以后,无法采用pack()进行填充背景图片,因此多彩炫酷的背景图没有了,只能填充一下基本的纯色;而且为了使主体功能区域处于整个窗口的中央,留下来的grid布局空白处,其实会被tkinter自行调节吞掉,不会有合适的留白,只能通过慢慢调整空间边距获得一些空白;

(2)控件不能选择透明度:在tkinter中,想要调整透明度就得针对整个生成窗口进行操作,无法改变部分控件的透明度,也就没有了扁平化的按钮和好看的文本显示框。(题外话:当生成一个完全透明的,隐藏标题栏的窗口时,会发生什么?)

(3)对于插入图片的格式有严格要求:tkinter自己只认gif,而且将jpg和png强制转换成gif也是无法识别的,想扩展这个,装pillow库实现,调用语句:

from PIL import Image, ImageTk

看到此处,一定破灭了梦想,如果不是因为只能用python2,还是去尝试pyqt写界面吧。下一篇文章将每个模块的具体实现进行代码描述,而且会针对如何调用摄像头实现截图进行详细介绍!

see you again~


参考链接:

Python GUI 编程(Tkinter) | 菜鸟教程

Python Tkinter GUI(三)显示图片 - 小飞飞的博客 - CSDN博客

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • 1、图形化界面设计的基本理解当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Inte...
    IIronMan阅读 256,545评论 15 241
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,210评论 4 16
  • 0 写在前面 未经允许,不得转载,谢谢~ 之前在这篇文章python 图形界面开发里记录了最开始学习python界...
    与阳光共进早餐阅读 101,789评论 27 139
  • 原文博客链接地址 Python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter:T...
    TitanCoder阅读 2,170评论 0 10
  • 那是孩子的随想…… 星星眨着眼睛 那是栌叶飘上了天空 夕阳照在水平面上 像秋天里的香山 火一样的红 憧憬似海里的艨...
    立德优教育阅读 287评论 0 0