利用python实现简单的人脸识别


#前言

一,什么是face_recognition?

二, 编写步骤

 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

** 总结**
这就是本人关于人脸识别的一个小尝试,速度较慢,识别准确度还可以。我也在入门学习,如有错误及侵权请指正。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值