opencv实现简单人脸识别


Posted in Python onFebruary 19, 2021

对于opencv 它提供了许多已经练习好的模型可供使用,我们需要通过他们来进行人脸识别

参考了网上许多资料 

假设你已经配好了开发环境 ,在我之前的博客中由开发环境的配置。

项目代码结构:

opencv实现简单人脸识别

dataSet : 存储训练用的图片,他由data_gen生成,当然也可以修改代码由其他方式生成

haarcascade_frontalface_alt.xml  、 haarcascade_frontalface_default.xml: 用于人脸检测的haar分类器,网上普遍说第一个效果更好,第二个运行速度更快

data_gen.py:生成我们所需的数据

trainer.py: 训练数据集

train.yml: 由train.py生成的人脸识别模型,供后面的人脸识别使用

recognize.py:视频中的人脸识别

data_gen.py

连续拍20张照片当作训练数据,每个人建立一组数据

import cv2
 
detector = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
cap = cv2.VideoCapture(0)
sampleNum = 0
Id = input('enter your id: ')
 
while True:
 ret, img = cap.read()
 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 faces = detector.detectMultiScale(gray, 1.3, 5)
 for (x, y, w, h) in faces:
 cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
 
 # incrementing sample number
 sampleNum = sampleNum + 1
 # saving the captured face in the dataset folder
 cv2.imwrite("dataSet/User." + str(Id) + '.' + str(sampleNum) + ".jpg", gray[y:y + h, x:x + w]) #
 
 cv2.imshow('frame', img)
 # wait for 100 miliseconds
 if cv2.waitKey(100) & 0xFF == ord('q'):
 break
 # break if the sample number is morethan 20
 elif sampleNum > 20:
 break
 
cap.release()
cv2.destroyAllWindows()

train.py

训练数据

import cv2
import os
import numpy as np
from PIL import Image
 
# recognizer = cv2.createLBPHFaceRecognizer()
detector = cv2.CascadeClassifier("/Users/qiuchenglin/PycharmProjects/face_recognize/haarcascade_frontalface_alt.xml")
recognizer = cv2.face.LBPHFaceRecognizer_create()
 
 
def get_images_and_labels(path):
 image_paths = [os.path.join(path, f) for f in os.listdir(path)]
 face_samples = []
 ids = []
 
 for image_path in image_paths:
 image = Image.open(image_path).convert('L')
 image_np = np.array(image, 'uint8')
 if os.path.split(image_path)[-1].split(".")[-1] != 'jpg':
 continue
 image_id = int(os.path.split(image_path)[-1].split(".")[1])
 faces = detector.detectMultiScale(image_np)
 for (x, y, w, h) in faces:
 face_samples.append(image_np[y:y + h, x:x + w])
 ids.append(image_id)
 
 return face_samples, ids
 
 
Faces, Ids = get_images_and_labels('dataSet')
recognizer.train(Faces, np.array(Ids))
recognizer.save('trainner.yml')

recognize.py

下面就是根据训练好的模型进行人脸识别,根据之前生成数据的编号,可以填入相对应的人名,例如以下示例我训练了三组人的数据

import cv2
import numpy as np
 
recognizer = cv2.face.LBPHFaceRecognizer_create()
# recognizer = cv2.createLBPHFaceRecognizer() # in OpenCV 2
recognizer.read('/Users/qiuchenglin/PycharmProjects/face_recognize/trainner.yml')
# recognizer.load('trainner/trainner.yml') # in OpenCV 2
 
cascade_path = "/Users/qiuchenglin/PycharmProjects/face_recognize/haarcascade_frontalface_alt.xml"
face_cascade = cv2.CascadeClassifier(cascade_path)
cam = cv2.VideoCapture(0)
# font = cv2.cv.InitFont(cv2.cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 1, 1) # in OpenCV 2
font = cv2.FONT_HERSHEY_SIMPLEX
 
while True:
 ret, im = cam.read()
 gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
 faces = face_cascade.detectMultiScale(gray, 1.2, 5)
 for (x, y, w, h) in faces:
 cv2.rectangle(im, (x - 50, y - 50), (x + w + 50, y + h + 50), (225, 0, 0), 2)
 img_id, conf = recognizer.predict(gray[y:y + h, x:x + w])
 if conf > 50:
 if img_id == 1:
 img_id = 'liuzb'
 elif img_id == 2:
 img_id = 'linqc'
 elif img_id == 3:
 img_id = 'keaibao'
 else:
 img_id = "Unknown"
 # cv2.cv.PutText(cv2.cv.fromarray(im), str(Id), (x, y + h), font, 255)
 cv2.putText(im, str(img_id), (x, y), font, 1, (0, 255, 0), 1)
 cv2.imshow('im', im)
 if cv2.waitKey(10) & 0xFF == ord('q'):
 break
 
cam.release()
cv2.destroyAllWindows()

简单的一个人脸识别就完成了,只能说准确率没有非常高。

之后想办法进行提高。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的希尔排序算法实例
Jul 01 Python
Python 通过URL打开图片实例详解
Jun 01 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
django 解决manage.py migrate无效的问题
May 27 Python
python实现顺序表的简单代码
Sep 28 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
Python常用的json标准库
Feb 19 Python
在python image 中实现安装中文字体
May 16 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
python脚本框架webpy模板控制结构
Nov 20 Python
Atom Python 配置Python3 解释器的方法
Aug 28 #Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 #Python
Numpy的简单用法小结
Aug 28 #Python
Python 通过截图匹配原图中的位置(opencv)实例
Aug 27 #Python
Python 转换文本编码实现解析
Aug 27 #Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 #Python
python定位xpath 节点位置的方法
Aug 27 #Python
You might like
php 传值赋值与引用赋值的区别
2010/12/29 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
深入理解vue-router之keep-alive
2017/08/31 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
python计算列表内各元素的个数实例
2018/06/29 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python 函数中的内置函数及用法详解
2019/07/02 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
python如何导入依赖包
2020/07/13 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
地震捐款简报
2015/07/21 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
浅谈Python数学建模之线性规划
2021/06/23 Python
js不常见操作运算符总结
2021/11/20 Javascript