如何在python中利用Opencv实现一个人脸识别功能

  介绍

如何在python中利用Opencv实现一个人脸识别功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

python是什么意思

python是一种跨平台的,具有解释性,编译性,互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。

<强> 1,视频流中进行人脸识别

#, - *安康;编码:utf-8  - * -   ,   import  cv2   import 系统   得到PIL  import 形象   ,   ,   def  CatchUsbVideo (window_name, camera_idx):   cv2.namedWindow才能(window_name)   ,   #,才能视频来源,可以来自一段已存好的视频,也可以直接来自USB摄像头   时间=cap 才能;cv2.VideoCapture (camera_idx)   ,   #,才能告诉OpenCV使用人脸识别分类器   classfier 才能=,cv2.CascadeClassifier (“/usr/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml")   ,   #,才能识别出人脸后要画的边框的颜色,RGB格式   color 才能=,(0,,255,,0)   ,   ,数=0   ,   while 才能cap.isOpened ():   ,,,好的,,frame =, cap.read(), #,读取一帧数据   ,,,if  not 好:   ,,,,,休息   ,   ,,,,,#,将当前帧转换成灰度图像   ,,,grey =, cv2.cvtColor(框架,,cv2.COLOR_BGR2GRAY)   ,   ,,,#,人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数   ,,,faceRects =, classfier.detectMultiScale(灰色,scaleFactor=1.2, minNeighbors=3,, minSize=(32岁,32))   ,,,if  len (faceRects),祝辞,0:,#,大于0则检测到人的脸   ,,,,,=数+ 1   return 才能;计数   ,   ,   if  __name__ ==, & # 39; __main__ # 39;:   结果才能=CatchUsbVideo(“识别人脸区域,,,& # 39;2222. mp4 # 39;)   if 才能;result> 0:   ,,,print(& # 39;视频中有人! ! & # 39;)   其他的才能:   ,,,print(& # 39;视频中无人! ! & # 39;)

<强> 2,通过图片识别人脸

# - *编码:use utf8 - * - #   ,   import 操作系统   import  cv2   得到PIL  import 形象,ImageDraw   得到datetime  import  datetime   import 时间   ,   # detectFaces()返回图像中所有人脸的矩形坐标(矩形左上,右下顶点)   #使用哈尔特征的级联分类器haarcascade_frontalface_default.xml,在haarcascades目录下还有其他的训练好的xml文件可供选择。   注:haarcascades目录下训练好的分类器必须以灰度图作为输入。   def  detectFaces (image_name):   时间=img 才能;cv2.imread (image_name)   face_cascade 才能=,cv2.CascadeClassifier (“/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml")   if 才能;img.ndim ==, 3:   ,,,gray =, cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)   其他的才能:   ,,,gray =, img  #如果语句:如果img维度为3,说明不是灰度图,先转化为灰度图灰色,如果不为3,也就是2,原图就是灰度图   ,   faces 才能=,face_cascade.detectMultiScale(灰色,,1.2,,5)# 1.3和5是特征的最小,最大检测窗口,它改变检测结果也会改变   时间=result 才能;[]   for 才能;(x, y,宽度、高度),拷贝的脸:   ,,,result.append ((x, y, x +宽度,y +高度))   return 才能结果   ,   ,   #保存人脸图   def  saveFaces (image_name):   时间=faces 才能;detectFaces (image_name)   if 才能;面临:   ,,,#将人脸保存在save_dir目录下。   ,,,#图像模块:Image.open获取图像句柄,作物剪切图像(剪切的区域就是detectFaces返回的坐标),保存保存。   ,,,save_dir =, image_name.split(& # 39; # 39;公司)[0]+“_faces"   ,,,os.mkdir (save_dir)   ,,,count =0   ,,,for  (x1, y1, x2, y2),拷贝的脸:   ,,,,,file_name =, os.path.join (save_dir, str(数)+“.jpg")   ,,,,,Image.open (image_name) .crop ((x1, y1, x2, y2)) .save (file_name)   ,,,,,计数+=1   ,   #在原图像上画矩形,框出所有人的脸。   #调模用图像块的画方法,Image.open获取图像句柄,ImageDraw.Draw获取该图像的画实例,然后调用该画实例的矩形方法画矩形(矩形的坐标即   # detectFaces返回的坐标),大纲是矩形线条颜色(B, G, R)。   注:原始图像如果是灰度图,则去掉轮廓,因为灰度图没有RGB可言.drawEyes, detectSmiles也一样。   def  drawFaces (image_name):   时间=faces 才能;detectFaces (image_name)   if 才能;面临:   ,,,img =, Image.open (image_name)   ,,,draw_instance =, ImageDraw.Draw (img)   ,,,for  (x1, y1, x2, y2),拷贝的脸:   ,,,,,draw_instance.rectangle ((x1, y1, x2, y2),大纲=(255,0,0))   ,,,img.save (& # 39; drawfaces_& # 39; + image_name)   ,   #检测眼睛,返回坐标   #由于眼睛在人脸上,我们往往是先检测出人的脸,再细入地检测眼睛。故detectEyes可在detectFaces基础上来进行,代码中需要注意”相对坐标”。   #当然也可以在整张图片上直接使用分类器,这种方法代码跟detectFaces一样,这里不多说。   def  detectEyes (image_name):   eye_cascade 才能=,cv2.CascadeClassifier (& # 39;/usr/share/opencv/haarcascades/haarcascade_eye.xml& # 39;)   时间=faces 才能;detectFaces (image_name)   ,   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在python中利用Opencv实现一个人脸识别功能