概述
百度在线SDK
百度的AI开放平台提供了很多的功能。其中包括了人脸检测、人脸比对、人脸搜索等。可以说得上功能比较强大了。
下面打算用python搞一下,实现人脸的检测与比对。
首先我们需要注册一个账号,然后建立一个应用并下载Python的SDK。
下载了SDK之后,使用命令行窗口到解压后的SDK目录下,用python setup.py install
安装。
之后就可以使用相关的服务了。
人脸检测
第一步,导入相关的第三方库
# 这个就是百度SDK提供的关于人脸识别的库
from aip import AipFace
import os
import numpy as np
import matplotlib.pyplot as plt
# 下面这个库是用来转换图片的
import base64
接下来就相当于是初始化一下。
APP_ID = '【这里要使用你创建的应用提供的APP ID】'
API_KEY = '【同上】'
SK = '【同上】'
client = AipFace(APP_ID,API_KEY,SK)
# 先利用os转换到工程所在的目录
os.chdir(r'E:baidu_face')
# 下面定义一个函数,用来获取你的图片,并且转换为base64格式
def get_img(path):
with open(path,'rb') as fp:
return base64.b64encode(fp.read()).decode()
# 接下来获取图片并检测
img = get_img('photo/lena.png')
#调用人脸检测
imgType = "BASE64"
result = client.detect(img,imgType)
这是返回的结果。
当然,现在还没有使用图像工具,所以下面的图还看不了。不过上面的信息还是要看一下,这里返回的并非是json,而是python的字典。
所以接下来就针对这个筛选信息,从中提出人脸的范围。
# 提取人脸信息
face_list = result['result']['face_list'][0]['location']
x = face_list['left']
y = face_list['top']
w = face_list['width']
h = face_list['height']
#画个矩形框
#先导入另一个模块
import matplotlib.patches as mpt
ax = plt.gca()
imgx = plt.imread('photo/lena.png')
plt.imshow(imgx)
rect = mpt.Rectangle((x,y),w,h,linewidth=2,edgecolor='r',facecolor='none')
ax.add_patch(rect)
plt.axis('off')
plt.show()
人脸比对
这里是直接用两张图片进行比对,然后返回结果。
首先初始化的步骤上面已经有了,所以接下来直接搞。
img1 = get_img('photo/2.jpg')
img2 = get_img('photo/10.jpg')
face_result = client.match([
{
'image': img1,
'image_type': 'BASE64',
},
{
'image': img2,
'image_type': 'BASE64',
}
])
返回的依然是字典,所以我们要从中提取相似度的参数:score
score = face_result['result']['score']
# 打印结果
print('相似度:{}'.format(score))
#下面来看看这两张图
plt.subplot(121)
plt.imshow(plt.imread('photo/2.jpg'))
plt.axis('off')
plt.subplot(122)
plt.imshow(plt.imread('photo/10.jpg'))
plt.axis('off')
plt.show()
不过这样还不能体现什么,所以我们拿另一个人的图像再对比试一下:
img1 = get_img('photo/2.jpg')
img2 = get_img('photo/1.jpg')
face_result = client.match([
{
'image': img1,
'image_type': 'BASE64',
},
{
'image': img2,
'image_type': 'BASE64',
}
])
score = face_result['result']['score']
# 打印结果
print('相似度:{}'.format(score))
#下面来看看这两张图
plt.subplot(121)
plt.imshow(plt.imread('photo/2.jpg'))
plt.axis('off')
plt.subplot(122)
plt.imshow(plt.imread('photo/1.jpg'))
plt.axis('off')
plt.show()
这里基本是复制粘贴的代码,所以如果真的要用可以封装一下。得到的结果就是:
最后
以上就是无辜百合为你收集整理的【Python应用探索笔记一】百度人脸检测与人脸比对百度在线SDK人脸检测人脸比对的全部内容,希望文章能够帮你解决【Python应用探索笔记一】百度人脸检测与人脸比对百度在线SDK人脸检测人脸比对所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复