人脸识别属于计算机视觉的范畴在当今的应用范围中不可谓不广泛但是人脸识别发展至今仍然没有发展到饱和阶段。我在网上查了一些资料并做出了一个简单的人脸识别小程序,拿出来分享一下。
首先说一下OpenCV,opencv严格来说是一个计算机程序,因为它需要安装,在安装完成之后呢你就可以在C++语言Java语言和Python语言中调用OpenCV在相关程序模块。我把你Siri主要是用于计算机视觉的图像分析,由于视频也是由一帧的图像组成,所以OpenCV也可以用来处理视频。
访问网站https://opencv.org/releases/就可以选择你的计算机版本来下载合适的OpenCV。下载完成之后直接傻瓜式安装就可以了,Java语言可以Eclipse进入到OpenCV的安装文件夹列表选择OpenCV for Java这个jar包就可以,Python语言则可以直接在pip中输入pip install OpenCV就可以了。
java程序在使用opencv时可以预载入OpenCV的jar包, Python程序在直接import cv2就可以了。
python代码如下:
```python
# 导入OpenCv人脸识别库
from time import sleep
# from matplotlib.font_manager import FontProperties
import cv2
# 读取人脸模型库
face_cascade = cv2.CascadeClassifier('RecognitionModel.xml')
# 获取摄像头
cap = cv2.VideoCapture(0)
while(True ):
# 读取摄像头当前这一帧的画面 ret:True fase image:当前这一帧画面
ret, img = cap.read()
# 图片y轴反转
img= cv2.flip(img, 1)
# 图片进行灰度处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 人脸检测
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=5)
# 绘制人脸框
for(x, y, w, h) in faces:
width = x+w
height = y+h
strok = 1
color = (255, 255, 255)
cv2.rectangle(img, (x, y), (width, height), color, strok)
font = cv2.FONT_HERSHEY_TRIPLEX # 设置字体
# 图片对象、文本、像素、字体、字体大小、颜色、字体粗细
cv2.putText(img, "find a pig", (x, y-5), font, 0.5, (255, 255, 255), 1, )
cv2.imshow('search pig',img)
#sleep(33)
if cv2.waitKey(20) & 0XFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
注意此程序需要用到RecognitionModel.xml这个XML文件,这个文件包含了人脸识别的人脸信息模型,大家如果需要可以使用我的百度云分享来下载。
链接:https://pan.baidu.com/s/17LeAtJqLdEoaInD7pT7Iaw
提取码:qle0
需要注意的是人脸识别模块只能识别灰度图像所以你必须把彩色图像给转成灰度图像,还有就是笔记本摄像头捕获的画面一般是反转的,如果你感觉这样不舒服你还可以给他重新翻转过来。这些操作并不需要太多的OpenCV技术,你只需要在网上搜索OpenCV的基本函数就好。
还有就是OpenCV的画图操作只能在一张图上进行,这些画图操作包括在图片上绘制圆形矩形等各种图像和绘制文字。
如果你对OpenCV有着简单的了解,并且对本程序基本知道其操作原理后,您就可以实现从文件中读取图片并使用opencv来进行人脸识别,这些只需要将程序中的代码改掉几行.就可以有一过程非常简单我这里就不做演示了.
OpenCV并不能实现Python的图形化操作,如果你需要有更多的GUI控件,我建议你去学习一下Python图形化。