python3+opencv+tkinter开发简单的人脸识别小程序
学校里有门图像处理的课程最终需要提交一个图像处理系统,
正好之前对于opencv有些了解,就简单的写一个人脸识别小程序吧
效果图如下
笔者IDE使用Pycharm,GUI编程直接使用内置的tkinter
环境:
python3.6
opencv4.1
首先导入需要使用的各个库
#-*- coding: utf-8 -*-
import sys
import importlib
import cv2
import tkinter as tk
import tkinter.messagebox
from tkinter import filedialog
之后我们需要做一个路径选择函数,因为毕竟不能每次识别而去手动改代码内的地址
而这个函数我们稍后会绑定至一个button方便使用
def selectPath():
global path_
path_ = filedialog.askopenfilename()
path.set(path_) path = tk.StringVar()
最关键的人脸识别函数
其中所使用到的训练参数数据下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades
并且xml文件需要放到项目目录下
def imgface():
try:
# github获取训练好的人脸的参数数据
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml') # 读取图片
image = cv2.imread(path_) #转化为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 探测图片中的人脸
faces = face_cascade.detectMultiScale(
gray,
scaleFactor=1.15,
minNeighbors=5,
minSize=(5, 5),
flags=cv2.IMREAD_GRAYSCALE) if(len(faces)==0):
tkinter.messagebox.showerror('错误', '未识别出人脸,请选择更为清晰的图片') print("find {0} faces!".format(len(faces))) # faces中的四个量分别为左上角的横坐标、纵坐标、宽度、长度
for (x, y, w, h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+w),(255,245,0),1)
if (len(faces) > 0):
cv2.imshow("find {0} faces!".format(len(faces)), image) cv2.waitKey(0)
except:
tkinter.messagebox.showerror('错误', '请选择正确的图片文件!')
之后进行GUI编程:
importlib.reload(sys) window = tk.Tk()
window.title('人脸识别小程序') fm1 = tk.Frame(window)
fm2 = tk.Frame(window)
fm3 = tk.Frame(window) def selectPath():
global path_
path_ = filedialog.askopenfilename()
path.set(path_) path = tk.StringVar() Ltop=tk.Label(fm1,text="请选择图片路径")
B1=tk.Button(fm2, text = "路径选择", command = selectPath)
E1=tk.Entry(fm2, textvariable = path,bd=5)
B2=tk.Button(fm2, text = "确定", command =imgface)
Lbot=tk.Label(fm3,text="学号:1622107031xx 姓名:istw") Ltop.pack(side = tk.TOP)
B1.pack(side=tk.LEFT)
E1.pack(side = tk.LEFT)
B2.pack(side=tk.LEFT)
Lbot.pack(side = tk.BOTTOM) fm1.pack(side=tk.TOP)
fm2.pack(side=tk.TOP)
fm3.pack(side=tk.TOP) sw = window.winfo_screenwidth()
#得到屏幕宽度
sh = window.winfo_screenheight()
#得到屏幕高度
ww = 300
wh = 100
#窗口宽高为100
x = (sw-ww) / 2
y = (sh-wh) / 3
window.geometry("%dx%d+%d+%d" %(ww,wh,x,y)) window.mainloop()
怎么样,一个简单的有交互界面的小程序就写出来了,只不过因为运用的人脸训练数据是官方提供的好多年前的,所以识别精度并不会太准
整个工程代码如下:
#-*- coding: utf-8 -*-
import sys
import importlib
import cv2
import tkinter as tk
import tkinter.messagebox
from tkinter import filedialog def imgface():
try:
# github获取训练好的人脸的参数数据
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml') # 读取图片
image = cv2.imread(path_) #转化为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 探测图片中的人脸
faces = face_cascade.detectMultiScale(
gray,
scaleFactor=1.15,
minNeighbors=5,
minSize=(5, 5),
flags=cv2.IMREAD_GRAYSCALE) if(len(faces)==0):
tkinter.messagebox.showerror('错误', '未识别出人脸,请选择更为清晰的图片') print("find {0} faces!".format(len(faces))) # faces中的四个量分别为左上角的横坐标、纵坐标、宽度、长度
for (x, y, w, h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+w),(255,245,0),1)
if (len(faces) > 0):
cv2.imshow("find {0} faces!".format(len(faces)), image) cv2.waitKey(0)
except:
tkinter.messagebox.showerror('错误', '请选择正确的图片文件!') importlib.reload(sys) window = tk.Tk()
window.title('人脸识别小程序') fm1 = tk.Frame(window)
fm2 = tk.Frame(window)
fm3 = tk.Frame(window) def selectPath():
global path_
path_ = filedialog.askopenfilename()
path.set(path_) path = tk.StringVar() Ltop=tk.Label(fm1,text="请选择图片路径")
B1=tk.Button(fm2, text = "路径选择", command = selectPath)
E1=tk.Entry(fm2, textvariable = path,bd=5)
B2=tk.Button(fm2, text = "确定", command =imgface)
Lbot=tk.Label(fm3,text="学号:1622107031xx 姓名:istw") Ltop.pack(side = tk.TOP)
B1.pack(side=tk.LEFT)
E1.pack(side = tk.LEFT)
B2.pack(side=tk.LEFT)
Lbot.pack(side = tk.BOTTOM) fm1.pack(side=tk.TOP)
fm2.pack(side=tk.TOP)
fm3.pack(side=tk.TOP) sw = window.winfo_screenwidth()
#得到屏幕宽度
sh = window.winfo_screenheight()
#得到屏幕高度
ww = 300
wh = 100
#窗口宽高为100
x = (sw-ww) / 2
y = (sh-wh) / 3
window.geometry("%dx%d+%d+%d" %(ww,wh,x,y)) window.mainloop()
还有一个问题就是关于.py文件如何向别人展示的问题,因为不是每个人的电脑中都有py环境的,并且各个版本也不兼容,所以我们为了方便展示,有时候会运用些方法将其转换为exe文件,这个以后会讲到。
python3+opencv+tkinter开发简单的人脸识别小程序的更多相关文章
- 2018-09-28 用Python3和tkinter开发简单图形界面程序
源码库: program-in-chinese/wubi_code_editor 起因在这里. 由于此项目和汉字相关, 个人也想尝试Python的图形界面开发, 于是开始尝试. 遇到的一个坑. 用户测 ...
- 10分钟手把手教你运用Python实现简单的人脸识别
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 前言:让我的电脑认识我 我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现高大上的人脸识别技术! Python里,简单的 ...
- java使用face++简单实现人脸识别注册登录
java使用face++简单实现人脸识别注册登录 前言 人脸识别,好高大上!!! 理解之后很简单. 支付宝使用的就是face++, 至于face++账号信息,apikey…..,本文不做讲述,网上很多 ...
- 基于Tesseract的OCR识别小程序
一.背景 先说下开发背景,今年有次搬家找房子(2020了应该叫去年了),发现每天都要对着各种租房广告打很多电话.(当然网上也找了实地也找),每次基本都是对着墙面看电话号码然后拨打,次数一多就感觉非常麻 ...
- 微信小程序开发系列(一)小程序开发初体验
开发小程序所需的基本技能 关于小程序的介绍和使用场景这里不作介绍,这个系列的文章会一步一步地带领大家快速地学习和掌握小程序的开发. 关于还没有接触过小程序的开发者来说,最关心的问题无非就是,开发小 ...
- mpvue开发美团外卖点餐小程序
mpvue-meituan mpvue-meituan 是一款使用mpvue开发的实战小程序项目,完全仿制美团官方外卖点餐小程序开发而成,项目的框架结构完全按照企业开发架构搭建而成.结合了原生小程序的 ...
- [转]微信小程序开发系列(一)小程序开发初体验
本文转自:http://www.cnblogs.com/rennix/p/6287432.html 开发小程序所需的基本技能 关于小程序的介绍和使用场景这里不作介绍,这个系列的文章会一步一步地带领 ...
- 头脑王者pk答题小程序开发思路 微信pk答题小程序开发 PK答题游戏你也可以做 微信pk答题游戏
想必大家最近的朋友圈和微信群里都被头脑王者PK答题刷屏了吧.确实很好玩,尤其是2018年的这波风口,手机答题,大家掏出手机,创建一个好友PK,然后你的好友点击进来就可以和你一起PK答题.比之前的游戏好 ...
- 微信小程序开发系列五:微信小程序中如何响应用户输入事件
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
随机推荐
- direct2d: antialiasing and drawing a line with a 1 pixel stroke
http://xboxforums.create.msdn.com/forums/t/61448.aspx I'm currently porting a number of custom MFC C ...
- SpringBoot学习笔记(3)----SpringBoot的profile多环境配置
在实际的应用开发中,可能会需要不同配置文件来支撑程序的运行,如开发,测试,预生产,生产环境等,程序在不同的环境下可能需要不同的配置,如不同数据源等,如果每次在不同的环境下都要去修改配置文件就会闲得不合 ...
- 带参数,头信息,代理,cookie爬取
1.get传参 (1)汉字报错 :解释器器ascii没有汉字 url汉字转码 urllib.parse.quote safe="string.printtable" (2)字典传参 ...
- 前端那些事之----jQuery
1.jquery是什么 一个js的框架,可以方便的使用js 2 什么是jQuery对象 是由jQuery封装后的DOM对象 注意:与DOM对象的方法不同,不可以混用,但是可以相 ...
- Base64编码字符串时数据量明显变大
那就是当把byte[]通过Convert.ToBase64String转换成Base64编码字符串时数据量明显变大 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需 ...
- java zyUpload 实现多文件上传
1.html部分 <form enctype="multipart/form-data"> <label>请选择文件</label> <i ...
- 学习参考《父与子的编程之旅python【第二版】》高清中文版PDF+高清英文版PDF+源代码
对于初步接触编程语言的朋友,推荐看一看<父与子的编程之旅第2版>,对于完全编程零基础的很友好! 图文并茂,过多的文字堆垒很容易让人产生厌倦情绪,也更容易让人产生放弃的想法.使用了大量插图, ...
- angular.js和vue.js中实现函数去抖(debounce)
问题描述 搜索输入框中,只当用户停止输入后,才进行后续的操作,比如发起Http请求等. 学过电子电路的同学应该知道按键防抖.原理是一样的:就是说当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用 ...
- CSS 子元素选择器
所有选择器参考手册:http://www.w3school.com.cn/cssref/css_selectors.asp 1)子元素选择器 参考链接:http://www.w3school.com. ...
- 三期_day02_数据库表设计和开发准备工作
数据库脚本 drop table crm_user_info; drop table crm_work_customer_relation; drop table crm_business; drop ...