如何用pycharm和face_recognition来识别一张图片中的多张人脸,并且将其标志出来
博主之前在做python课程设计的时候,想做一个人脸识别的入门教程,于是自己网上找了些资料,发现用Python加上face_recognition来做人脸识别,非常简单就能实现一些人脸识别常用的功能,例如标志处图片中的每张人脸下面这样:
要实现上面这个功能其实很简单,但首先你要装好face_recognition库,具体安装方法可以自行百度,下面讲讲实现步骤:
开始前的准备工作:
将你要识别的图片放到你pycharm目前的工作目录中
1. 首先肯定要先导入要使用的库
import face_recognition
from PIL import Image, ImageDraw
导入Image和ImageDraw是为了方便在已识别的人脸上画出标志框
2.导入图片,对图片中人脸上的面部特征位置进行定位,并获取人脸的数目
#将图像载入的一个numpy array类型上,函数括号内填你的目标图片文件名
image = face_recognition.load_image_file('alot.jpg')
#给定一个图像,返回图像中每个人脸的面部特征位置(眼睛、鼻子等),返回值是一个元组列表,列表中的每个元组包含每张人脸的人脸位置——(top, right, bottom, left)
locations = face_recognition.face_locations(image)
#用一个变量保存人脸数目
a=len(locations)
3.对图片中的每张人脸进行标志画框
#循环的次数就是人脸的个数,for循环作用相当于在上一次标志人脸的图片上标志下一张人脸
for i in range(0, a):
#由于每次循环只能标志一张人脸,所以要重复载入上次保存的图片
image = face_recognition.load_image_file('alot.jpg')
#对第i张人脸进行标志
pos = locations[i]
#要想在指定图片上绘制图像,要先将指定图片转换为一个可绘制对象
#首先将要进行绘图的图像转换为array
pil_image = Image.fromarray(image)
#再用ImageDraw模块的一个函数—Draw,创建一个给定图像上绘图的对象
d = ImageDraw.Draw(pil_image, 'RGBA')
#rectangle是ImageDraw的一个成员方法,作用是在图像的指定位置绘制一个长方形,前两个表示一个坐标,后两个表示一个坐标
#坐标(pos[3],pos[0])表示人脸的左上角,坐标(pos[1],pos[2])表示人脸的右下角
d.rectangle((pos[3], pos[0], pos[1], pos[2]))
#每次标志完人脸后要保存
pil_image.save("alot.jpg")
#将已经标志好人脸的图片展示在屏幕前
pil_image.show( )
通过上述代码就可标志一张图片上的多张人脸,但是用到的是for循环,而且每次循环都要保存和载入图片,如果人脸数目过多的话,运行速度势必会变慢,不知道大家有什么更好的方法,欢迎在评论区说出你的想法~