我是靠谱客的博主 无辜百合,最近开发中收集的这篇文章主要介绍【Python应用探索笔记一】百度人脸检测与人脸比对百度在线SDK人脸检测人脸比对,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

百度在线SDK

百度的AI开放平台提供了很多的功能。其中包括了人脸检测、人脸比对、人脸搜索等。可以说得上功能比较强大了。
百度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)

这是返回的结果。
lena
当然,现在还没有使用图像工具,所以下面的图还看不了。不过上面的信息还是要看一下,这里返回的并非是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()

result

人脸比对

这里是直接用两张图片进行比对,然后返回结果。
首先初始化的步骤上面已经有了,所以接下来直接搞。

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()

这里基本是复制粘贴的代码,所以如果真的要用可以封装一下。得到的结果就是:
对比1

最后

以上就是无辜百合为你收集整理的【Python应用探索笔记一】百度人脸检测与人脸比对百度在线SDK人脸检测人脸比对的全部内容,希望文章能够帮你解决【Python应用探索笔记一】百度人脸检测与人脸比对百度在线SDK人脸检测人脸比对所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部