1.引用库
2.读入数据
3.获取相机
4.对人脸进行标记
5.运行程序
** 前言**
进行人脸识别的方法有很多,最简单的一种就是使用opencv与face—recognition
此文程序在PyCharm中编译运行。
(此处的face_recognition需要在dilib库安装好了之后才能进行安装,dilib库有些难安装,具体方法请读者百度)
** 二,引入opencv-python,face—recognition库:**
importcv2
import face_recognition
** 2.读入数据并对其进行标记**
为了识别人脸,我们需要从计算机里面读入你要识别的人脸,还需要读入几张不要识别出来的人脸,形成对照。这里我们需要用到face_recognition里面的函数。(注意这里的路径需要改为自己笔记本里面的照片存放的位置,命名可根据自己的喜好。)
lenna=cv2.imread('D://pycharm//lenna.jpg')
wy=cv2.imread('D://pycharm//wy.jpg)
lenna_face_encoding=face_recognition_face_encodings(lenna)[0]
wy_face_encoding=face_recognition_face_encodings(wy)[0]
known_face_encoodings=[lenna_face_encoding,wy_face_encoding]
known_face_names=['lenna','wy']
vc=cv2.VideoCapture(0)
vc.set(100)
while True:
ret,img=vc.read()
if not ret:
print('没有图片’)
break
** 4.对人脸进行标记**
此处仍然需要用到opencv和face_recognition库,总的来说整个程序还是比较简单的,建议读者对opencv和face_recognition库有大概了解后再读此篇文章,理解的会更好,不出两个小时就可以掌握。(缺点就是此种算法运行速度较慢,作为入门的文章还是不错的)
locations=face_recognition.face_locations(img)
face_encodings=face_recognition.face_encodings(img,locations)
for(top,right,bottom,left),face_encoding in zip(locations,face-encodings)
matchs=face_recognition.compare_faces(known_face_encodings,face_encoding)
name='unknown'
for match,known_name in zip(matchs,known_face_names):
if match:
name=known_name
break
cv2.rectangle(img,(left,top),(right,bottom),[0,0,255],2)
cv2.putText(img,name,(left,top-20),cv2.FONT_HERSHEY_COMPLEX,2,[0,0,255],2)
** 5.运行程序**
当我们完成代码编写后,可以来实践一下,最大的缺点就是:运行速度太慢了。进行这个小的实践后,读者可以尝试运用方法(比如训练自己的数据集,速度就会快很多,本人最近也在尝试做这个,熟悉之后再更新呢)
** 完整代码**
import cv2
import face_recognition
lenna = cv2.imread('D://pycharm//lenna.jpg')
wy = cv2.imread('D://pycharm//wy.jpg')
lenna_face_encoding=face_recognition.face_encodings(lenna)[0]
wy_face_encoding=face_recognition.face_encodings(wy)[0]
known_face_encodings=[lenna_face_encoding,wy_face_encoding]
known_face_names=['lenna','wy']
vc=cv2.VideoCapture(0)
vc.set(10,100)
while True:
ret,img=vc.read()
if not ret:
print('没有图片')
break
locations=face_recognition.face_locations(img)
face_encodings=face_recognition.face_encodings(img,locations)
for (top,right,bottom,left),face_encoding in zip(locations,face_encodings):
matchs=face_recognition.compare_faces(known_face_encodings,face_encoding)
name='unknown'
for match,known_name in zip(matchs,known_face_names):
if match:
name=known_name
break
cv2.rectangle(img,(left,top),(right,bottom),[0,0,255],2)
cv2.putText(img,name,(left,top-20),cv2.FONT_HERSHEY_COMPLEX,2,(0,0,255),2)
cv2.imshow('wo',img)
if cv2.waitKey(1)!=-1:
vc.release()
cv2.destroyAllWindows()
break
** 总结**
这就是本人关于人脸识别的一个小尝试,速度较慢,识别准确度还可以。我也在入门学习,如有错误及侵权请指正。