人脸识别face_recognition尝试(win7下安装和测试)

人脸识别face_recognition尝试(win7下安装和测试)

 

一、安装

步骤一:pip install face_recognition

人脸识别face_recognition尝试(win7下安装和测试)

人脸识别face_recognition尝试(win7下安装和测试)

人脸识别face_recognition尝试(win7下安装和测试)

100M,不是吧,这么大,果然中断多次。

人脸识别face_recognition尝试(win7下安装和测试)

这个结果。dlib安装不成功,辛苦安装(中断)这么多次,提示要安装cmake。

人脸识别face_recognition尝试(win7下安装和测试)

步骤二:pip install cmake

人脸识别face_recognition尝试(win7下安装和测试)

32M,也不小。果然,又中断,什么网?还是服务器的问题?无语。

人脸识别face_recognition尝试(win7下安装和测试)

多试几次,终于安装完成。

步骤三:安装vs2019(网上查,说,需要安装,不一定)

人脸识别face_recognition尝试(win7下安装和测试)

人脸识别face_recognition尝试(win7下安装和测试)

dlib还是安装失败,看样子没找到问题。一阵度娘。

步骤四:安装低版本dlib

先试:pip install dlib==19.6.1,安装成功。

人脸识别face_recognition尝试(win7下安装和测试)

但是face_recognition好象最低要求19.7,安装过程中,程序自动安装的下载的缓存包19.18,又导致失败。

人脸识别face_recognition尝试(win7下安装和测试)

再试:pip install dlib==19.7.0,安装成功。

人脸识别face_recognition尝试(win7下安装和测试)

步骤五:安装face_recognition

pip3.6 install face_recognition,成功,但有个错误提示,说click版本过高,不管。

人脸识别face_recognition尝试(win7下安装和测试)

至此,到底第三步安装的vs2019有没有用呢,先不管。

人脸识别face_recognition尝试(win7下安装和测试)

导入成功,安装OK。

步骤六:安装cv2

pip3.6 install opencv-python,不是直接用pip install cv2,但是导入是可以的:import cv2.

人脸识别face_recognition尝试(win7下安装和测试)

人脸识别face_recognition尝试(win7下安装和测试)

二、测试人脸识别

代码:

import face_recognition

import cv2

 

def demoFunc():#在一张包含人脸的图片中圈出来人脸,并保存图片

    image = face_recognition.load_image_file("test3.jpg")

    face_locations = face_recognition.face_locations(image)

    for one in face_locations:  

        y0, x1, y1, x0=one

        cv2.rectangle(image, pt1=(x0, y0), pt2=(x1, y1), color=(0, 0, 255), thickness=3)

    cv2.imshow('aaa', image)#图片太大,看不到全貌,不知道怎么设置,加下句

    cv2.imwrite("reco3.jpg", image)# 保存为文件,再打开文件查看。

    if cv2.waitKey(0) & 0xFF == ord('q'):

        cv2.destroyAllWindows()

 

demoFunc()

效果:

人脸识别face_recognition尝试(win7下安装和测试)

看样子,不是正面的人脸,很难把它识别出来。

三、取出头像保存为文件

代码:

img = cv2.imread("test3.jpg")

image = face_recognition.load_image_file("test3.jpg")

face_locations = face_recognition.face_locations(image)

k=0

for one in face_locations:

  print(one)

  k+=1

  y0, x1, y1, x0=one

  cv2.imwrite(str(k)+'.jpg',img[y0:y1,x0:x1])

这个CV2好象没有crop功能,如果直接用上面的image的话,图像色彩改变了,所以加了img。

四、人脸比较

通过和已知人脸批量比较,确定是谁。方法是将一张合影上的人脸(已知的)取出来,分存为姓名+.jpg,然后用另外一张合影上的人脸来比对。

代码:

def compare(one_pic,two_pic):

    '''给定两张图片,判断是否是同一个人'''

    read_1 = face_recognition.load_image_file(one_pic)

    read_2 = face_recognition.load_image_file(two_pic)

    encoding_1 = face_recognition.face_encodings(read_1,num_jitters=1)[0]

#这个jitter好象看不出来么效果

    #print(type([encoding_1]))

    encoding_2 = face_recognition.face_encodings(read_2,num_jitters=1)[0]

    results = face_recognition.compare_faces([encoding_1], encoding_2,0.41)#这个公差系数要调整

    #print('results: ',results)

    return results[0]

 

def recog_name(pic_n):#给定一张图片,比对已知人名的所有图片

   dir_name='pic/names/'#已知人脸图片目录名,文件名为人名

   name_list=os.listdir(dir_name)

   for name_pic in name_list:

      print(u'正在比较:'+name_pic)

      result=compare(dir_name+name_pic,pic_n)

      if result:

         print(u'*****\/*****这个人是:'+name_pic.split('.')[0])

      else:

         print(u'不是哦')

#recog_face_out()

#compare('3.jpg','4.jpg')

recog_name('8.jpg')

比较结果如下:

人脸识别face_recognition尝试(win7下安装和测试)

只有不停调整tolerance系数,才会达到满意的效果,换个人又需要调整,晕。

五、数据类型

>>>a= face_recognition.load_image_file('test.jpg')

>>> type(a)

<class 'numpy.ndarray'>

>>> len(a)

310  #图片的行数,高

>>> len(a[0])

488  #图片每行的点数,宽

>>> ds=face_recognition.face_encodings(a)

>>> type(ds)

<class 'list'>  #列表,共识别了几个人脸

>>> len(ds)

5  #五个

>>> len(ds[0])

128  #特征码长度为128

>>> type(ds[0])

<class 'numpy.ndarray'>  #类型:数组

>>> face_recognition.compare_faces(ds,ds[1],0.4)

[False, True, False, False, False]

人脸比较的第一个参数必须是个列表list类型,代表已知,第二个为数组类型。

>>> ds[1].ndim

1   #一维数组

第三个参数为容错系数,经测试在0.38-0.44之间比较适当,不同的人或照片的清晰程度不同,这个系数不是很好确定。

 

*********其它***********

pip自身升级

问题:通过“pip install --upgrade pip”升级,出现了错误,pip命令也丢失了,提示:no module named pip。

解决:python -m ensurepip。另外:easy_install pip

升级方法:python -m pip install --upgrade pip