百度在线人脸识别API简单实现教程

2023-05-16

这里,记录一下百度人脸识别在线API的调用,语言是python2.7,供大家一起学习参考

本教程目录如下

1.申请百度人脸识别应用

2.获取token

3.图片的base64编码

4.人脸识别

5.结果绘制与可视化

6.实现的完整源代码


1.申请百度人脸识别应用

首先需要在百度智能云平台登录

https://console.bce.baidu.com/ai/?_=1558444274128&fromai=1#/ai/face/overview/index

登陆后创建应用,创建的应用是人脸识别的,默认已帮你勾选上了相关功能。

创建应用后,点击管理应用,你就可以获取API Key和Secret Key

2.获取token

现在就可以编写代码调用在线的人脸检测API了

首先是获取token,用于校验,代码如下,注意换成自己申请的API Key和Secret Key

def getToken():
    global token
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的API Key&client_secret=你的Secret Key'
    request = urllib2.Request(host)
    request.add_header('Content-Type', 'application/json; charset=UTF-8')
    response = urllib2.urlopen(request)
    content = response.read()
    if (content):
        token=json.loads(content)['access_token']

3.图片的base64编码

上传的用于检测的图片需经过Base64编码。需要注意的是,图片的base64编码是不包含图片头的,代码如下:

def imgToBase64(imgPath):
    with open(imgPath, "rb") as f:  # 转为二进制格式
        base64_data = base64.b64encode(f.read())  # 使用base64进行加密
        return base64_data

4.人脸识别

最后就是调用接口进行人脸识别了

def faceDetect(imgBase64):
    '''
    人脸检测与属性分析
    '''
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
    request_url = request_url + "?access_token=" + token
    request = urllib2.Request(request_url)
    request.add_header('Content-Type', 'application/json')
    data = {"image": imgBase64, "image_type": "BASE64","face_field":"age,beauty,expression,face_shape,gender"}
    response = urllib2.urlopen(request, urllib.urlencode(data))
    content = response.read()
    if content:
        return content

这个函数中输入的是图片的base64编码,请求的参数中比较重要的是那个face_field,默认只返回人脸框的位置、概率和旋转角度,age(年龄预测),beauty(颜值打分),expression(表情)等更多属性,需要在这个参数中添加,具体的请参考官方说明文档:http://ai.baidu.com/docs#/Face-Detect-V3/top

5.结果绘制与可视化

人脸识别最后返回的是json数据,但我们往往需要画个框框,把人脸框出来,同时把一些预测的属性也标注上,这个代码我已经附在最后面了。

最终实现的效果如下:

 

 

 

6.实现的完整源代码

下面我附上实现这些功能的完整代码:

#coding:utf-8
import urllib,urllib2, sys
import ssl
import json
import base64
import cv2
global token

def getToken():
    global token
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的API Key&client_secret=你的Secret Key'
    request = urllib2.Request(host)
    request.add_header('Content-Type', 'application/json; charset=UTF-8')
    response = urllib2.urlopen(request)
    content = response.read()
    if (content):
        token=json.loads(content)['access_token']

def faceDetect(imgBase64):
    '''
    人脸检测与属性分析
    '''
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
    request_url = request_url + "?access_token=" + token
    request = urllib2.Request(request_url)
    request.add_header('Content-Type', 'application/json')
    data = {"image": imgBase64, "image_type": "BASE64","face_field":"age,beauty,expression,face_shape,gender"}
    response = urllib2.urlopen(request, urllib.urlencode(data))
    content = response.read()
    if content:
        return content

def imgToBase64(imgPath):
    with open(imgPath, "rb") as f:  # 转为二进制格式
        base64_data = base64.b64encode(f.read())  # 使用base64进行加密
        return base64_data


if __name__=="__main__":

    getToken()
    imgPath=r"C:\Users\lee\Pictures\lena.jpg"
    result=json.loads(faceDetect(imgToBase64(imgPath)))['result']
    face_list=result['face_list'][0]
    location=face_list['location']
    age=face_list['age']
    beauty=face_list['beauty']
    expression=face_list['expression']['type']
    gender=face_list['gender']['type']

    img = cv2.imread(imgPath, cv2.IMREAD_COLOR)
    leftTopX=int(location['left'])
    leftTopY=int(location['top'])
    rightBottomX=int(leftTopX+int(location['width']))
    rightBottomY = int(leftTopY + int(location['height']))
    cv2.rectangle(img, (leftTopX, leftTopY), (rightBottomX, rightBottomY), (0, 255, 0), 2)
    font = cv2.FONT_HERSHEY_SIMPLEX
    # 第一个坐标表示起始位置
    cv2.putText(img,"age:"+str(age),(0, 20),font, 0.5, (200, 255, 255), 1)
    cv2.putText(img, "gender:" + gender.encode("utf-8"), (0, 40), font, 0.5, (200, 255, 255), 1)
    cv2.putText(img, "beauty:" + str(beauty), (0, 60), font, 0.5, (200, 255, 255), 1)
    cv2.putText(img, "expression:" + str(expression), (0, 80), font, 0.5, (200, 255, 255), 1)
    cv2.imshow('image', img)
    cv2.waitKey(0)

    print("end")

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度在线人脸识别API简单实现教程 的相关文章

随机推荐

  • Ubuntu18.04扩展home目录分区记录

    前言 最近Ubuntu18 04系统的home目录空间不够用了 xff0c 之前安装系统的时候 xff0c 给home分配的空间只占了根目录的很小一部分 xff0c 因此就想把根目录的空余空间转给home 涉及到系统分区调整 xff0c 因
  • 优化后亲测可用!免费下载QQ音乐大部分资源

    音乐下载器 优化后亲测可用 xff01 免费下载QQ音乐大部分资源 眼看着网上许多下歌的插件用不了了 xff0c 又不想买VIP xff0c 便非常着急 突然我想到了接口这玩意儿 xff0c 于是我 奥我真是个人才 xff01 突然我看见了
  • 自动祝福程序(定时发送消息)

    有个同学找我帮忙 xff1a 明天是她朋友的生日 xff0c 但她没时间发送祝福 xff0c 问我能不能弄个自动发送 我想 xff0c QQ并没有内置的定时发送功能 xff0c 紧接着又想起了QQ刷屏助手 xff08 见我以前的博文 xff
  • 停更

    停更CSDN CSDN是我的第一个博客 xff0c 它也很完美 xff0c 但我的博客经常没能通过它的审核 xff0c 用起来很不爽 因此 xff0c 我决定停更CSDN xff0c 以后的博客都将发布到博客园 新博客链接 https ww
  • 停更规则更新

    我觉得嘛 来这里写东西点击量更高 所以以后软件不在这里发 其他的东西我还是会更新的 xff01 另外 xff0c 我会设定从WordPress个人博客上进行博客搬家 xff0c 不过 xff0c 除了上面所谓的 其他东西 以外 xff0c
  • 免费建站记

    好久不见 xff01 另外 xff0c 我可能还会发布一篇国内操作系统的测评记录 xff08 会不会发布取决于我写不写得完 xff09 首先 xff0c 这篇文章是从我个人博客上搬运的 xff0c 所以可能有些地方会有格式上的不正确 xff
  • 如果没有Linux,这个世界会怎样?

    众所周知 xff0c Linux是一个开源的操作系统 自从它流行起来 xff0c 微软就渐渐失去了地位 Linux在我们生活中的每一处 xff0c 但是 xff0c 假如没有Linux这一些开源操作系统 xff0c 会发生什么 xff1f
  • 音乐播放器

    完善音乐下载器时找到一个音乐播放器 xff0c 自己完善了下 软件原作者 xff1a 嘟嘟还没长大 完善内容 支持文件拖动打开 支持自动获取必应每日一图并显示 随机播放支持选择路径 代码 span class token keyword i
  • Python Tkinter颜色参考程序

    这是一个颜色参考程序 xff0c Python程序员专用 点击任意颜色可以复制颜色的英文名称 已经修改前景色 xff0c 所有字都看得清 xff08 终于找到一件比肝作业更累的事情 xff09 话不多说 xff0c 贴代码 代码 span
  • 脚本控制nginx

    以下 etc init d nginx 文件的内容 bin bash nginx Startup script for the Nginx HTTP Server it is v 0 0 2 version chkconfig 85 15
  • 关于计算机系统基础debian 11安装(感觉也适用debian10啥的)

    一定要记住自己起的用户名 xff01 xff01 xff01 xff01 xff01 xff01 xff01 还要记得自己的密码 额 xff0c 这门课程需要安装virtualbox和debian xff0c 有的同学会像我一样为此苦恼 x
  • android获取wifi的IP,子网掩码,网关,dns等信息

    使用 DhcpInfo 获取这些信息 xff0c 返回的是一个int型数据 xff0c 转换下得到想要的信息 xff0c 代码如下 xff1a public class MainActivity extends Activity priva
  • 【iOS开发-画线】使用贝塞尔曲线(UIBezierPath)画线

    步骤 xff1a span class hljs comment 创建贝塞尔曲线对象 span UIBezierPath span class hljs variable currenPath span 61 UIBezierPath be
  • 电脑连接无线路由上不了网 连接手机热点却可以上网

    mercury wireless n adapter 外置无线网卡 1 在网络设置中删除连接过的无线网络 2 设备管理器 网卡右键 属性 高级 wifi config wifi xff08 代替performance xff09 3 ban
  • Godot Engine:GDScript 4.X中语法的变化(2020年8月4日 更新)

    文章目录 4 X版 GDScript范例支持注解属性 xff08 Properties xff09 的定义格式await关键字代替yield加入super关键字去除了多级调用问题小结 4 X版 GDScript范例 支持注解 从4 x开始
  • mysql group by 取出分组结果中每一组的某个字段值不同的数据 分组

    数据 xff1a 目的 xff1a 基于以上查询结果得到每一组指标 xff08 KPI CODE xff09 中不同的KPI INSTANCE的值的数据 预期是取出上图中的第一条数据和第二或第三条数据中的任何一条 尝试 xff1a 刚开始直
  • Codeblocks 常用快捷键整理

    Ctrl 43 Shift 43 C 注释选中文本 Ctrl 43 Shift 43 X 解除选中文本的注释 Shift 43 Tab 回退一个制表符 Ctrl 43 PageUp xff08 Ctrl 43 PageDown xff09
  • 将PNG序列帧图片合成视频

    import globimport cv2def skadi idle img array 61 print 34 开始读取图片 34 修改此处为自己的路径for filename in glob glob r 34 F interact
  • 在树莓派3b/3b+上搭建rt-thread多核开发环境

    1 本文目的 nbsp nbsp nbsp 本 主要介绍如何快速 效的搭建树莓派rt thread的开发环境 按照 章的步骤 可以很快速的将rt thread SMP系统在树莓派上运 起来 2 准备条件 nbsp nbsp 1 raspbe
  • 百度在线人脸识别API简单实现教程

    这里 xff0c 记录一下百度人脸识别在线API的调用 xff0c 语言是python2 7 xff0c 供大家一起学习参考 本教程目录如下 1 申请百度人脸识别应用 2 获取token 3 图片的base64编码 4 人脸识别 5 结果绘