人脸识别
实现思路
一、提供识别图片
我是把需要的图片放到了 D:/人脸识别 中,并且把图片命名为 0.jpg。
识别图片如下:
二、在百度AI创建一个人脸识别应用
1、百度搜索,“百度AI”,进入官网,点击右上角控制台,扫码登录。
2、登录之后,找到人脸识别
3、创建应用,创建成功,点击管理应用,会得到三个值
三、识别代码
from aip import AipFace from PIL import Image, ImageDraw, ImageFont import base64 # 在百度AI里面新建的应用的 APP_ID API_KEY SECRET_KEY APP_ID = '你的APP_ID值' API_KEY = '你的API_KEY值' SECRET_KEY = '你的SECRET_KEY值' client = AipFace(APP_ID, API_KEY, SECRET_KEY) # 调用人脸检测接口并进行人脸检测 image = str(base64.b64encode(open('D:/人脸识别/0.jpg', 'rb').read()), 'utf-8') imageType = "BASE64" options = dict() options["face_field"] = "age,beauty,gender,expression,face_shape" # 包括很多内容,例如这里的年龄,颜值,性别,表情 options["max_face_num"] = 1 # 最多可识别人脸数量,默认值为1,最大值为10 options["face_type"] = "LIVE" # 人脸的类型,默认为“LIVE”,即生活照 options["liveness_control"] = "NONE" a = client.detect(image, imageType, options) # 输出检测结果 print('总共检测了', a['result']['face_num'], '个人脸') # 这部分可以看一下官方文档的返回实例,就懂了 print('人物的年龄:', a['result']['face_list'][0]['age']) print('人物的颜值:', a['result']['face_list'][0]['beauty']) print('人物的表情:', a['result']['face_list'][0]['expression']['type']) print('人物的性别:', a['result']['face_list'][0]['gender']['type']) print('人物的脸型:', a['result']['face_list'][0]['face_shape']['type']) # 打开检测的图像 im = Image.open("D:/人脸识别/0.jpg") # image.open需要精确到图片的位置,而不是图片文件夹的位置 # 在图像上绘制信息,矩形,文本信息 my_draw = ImageDraw.Draw(im) x1 = a['result']['face_list'][0]['location']['left'] y1 = a['result']['face_list'][0]['location']['top'] x2 = a['result']['face_list'][0]['location']['left']+a['result']['face_list'][0]['location']['width'] y2 = a['result']['face_list'][0]['location']['top']+a['result']['face_list'][0]['location']['height'] my_draw.rectangle([x1, y1, x2, y2], outline='blue', width=3) # 在图像上输出文本 my_text = ImageFont.truetype('C:/Windows/Fonts/simfang.ttf', 25) # 字体所在的文件路径(这里是仿宋),字体大小 text1 = '年龄:'+str(a['result']['face_list'][0]['age']) my_draw.text((x2+180, y1), text1, fill='black', font=my_text) text2 = '性别:'+str(a['result']['face_list'][0]['gender']['type']) my_draw.text((x2+180, y1+120), text2, fill='black', font=my_text) text3 = '脸型:'+a['result']['face_list'][0]['face_shape']['type'] my_draw.text((x2+180, y1+80), text3, fill='black', font=my_text) text4 = '表情:'+str(a['result']['face_list'][0]['expression']['type']) my_draw.text((x2+180, y1+160), text4, fill='black', font=my_text) text5 = '颜值:'+str(a['result']['face_list'][0]['beauty']) my_draw.text((x2+180, y1+40), text5, fill='black', font=my_text) # 显示并保存结果 im.show() im.save("D:/人脸识别/result.jpg")
四、运行结果
五、补充
1、本例中的识别每次只能识别一张人脸,即,一张图中有多张人脸时,只会识别一张。
2、颜值,表情的数据会随着照片的清晰度而发生变化,例如,同一个人,拍摄的角度和距离会影响这些数据。