百度在线SDK
百度的AI开放平台提供了很多的功能。其中包括了人脸检测、人脸比对、人脸搜索等。可以说得上功能比较强大了。
下面打算用python搞一下,实现人脸的检测与比对。
首先我们需要注册一个账号,然后建立一个应用并下载Python的SDK。
下载了SDK之后,使用命令行窗口到解压后的SDK目录下,用python setup.py install
安装。
之后就可以使用相关的服务了。
人脸检测
第一步,导入相关的第三方库
复制代码
1
2
3
4
5
6
7
8# 这个就是百度SDK提供的关于人脸识别的库 from aip import AipFace import os import numpy as np import matplotlib.pyplot as plt # 下面这个库是用来转换图片的 import base64
接下来就相当于是初始化一下。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18APP_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的字典。
所以接下来就针对这个筛选信息,从中提出人脸的范围。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# 提取人脸信息 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()
人脸比对
这里是直接用两张图片进行比对,然后返回结果。
首先初始化的步骤上面已经有了,所以接下来直接搞。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14img1 = 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
复制代码
1
2
3
4
5
6
7
8
9
10
11
12score = 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()
不过这样还不能体现什么,所以我们拿另一个人的图像再对比试一下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25img1 = 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人脸检测人脸比对内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复