总感觉积分涨得好慢啊,我又来了混积分了!

上次我尝试做了一个给眼镜加特效,针对的是静态图像,具体文章参考 https://ai.baidu.com/forum/topic/show/942890 。

这次我尝试在视频中加眼镜特效,并且加上手势识别,不同的手势佩戴不同的眼镜。接下来将介绍手势识别接口,并介绍如何接入。

手势识别接口

接口描述

识别图片中的手势类型,返回手势名称、手势矩形框、概率分数,可识别24种常见手势,适用于手势特效、智能家居手势交互等场景。

支持的24类手势列表:拳头、OK、祈祷、作揖、作别、单手比心、点赞、Diss、我爱你、掌心向上、双手比心(3种)、数字(9种)、Rock、竖中指。

注:

上述24类以外的其他手势会划分到other类。

除识别手势外,若图像中检测到人脸,会同时返回人脸框位置。

人体分析的请求方式和人脸识别的请求方式有所不同,具体的使用说明参见文档 https://ai.baidu.com/docs#/Body-API/27495b11

请求格式

POST 方式调用,请求 URL 为 https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture ,Content-Type 为 application/x-www-form-urlencoded,然后通过 urlencode 格式化请求体。

请求参数

返回说明

返回示例

{

"log_id": 4466502370458351471,

"result_num": 2,

"result": [{

"probability": 0.9844077229499817,

"top": 20,

"height": 156,

"classname": "Face",

"width": 116,

"left": 173

},

{

"probability": 0.4679304957389832,

"top": 157,

"height": 106,

"classname": "Heart_2",

"width": 177,

"left": 183

}]

}

实例

1. 创建应用

由于戴眼镜是使用的人脸识别的接口,手势识别是人体分析的接口,因此为了将手势识别应用到戴眼镜特效中,需要在创建人脸识别应用时勾选人体分析的手势识别。

首先进入“控制台”的“人脸识别”,然后“创建应用”。

然后填上“应用名称”和“应用描述”,并且接口勾选上“人体分析”下的“手势识别”。

之后点击“立即创建”,创建好之后我们就能够获取到应用的 “API key” 和 “Secret key”,用于后面获取 “token key”。

2.获取 token key

通过 API Key 和 Secret Key 获取的 access_token。更多关于 access_token 的获取方法参考 http://ai.baidu.com/docs#/Auth/top。

下面代码是 python3 获取 access_token 的代码

def get_token_key():

# client_id 为官网获取的AK, client_secret 为官网获取的SK

client_id = '【百度云应用的AK】' # API key

client_secret = '【百度云应用的SK】' # Secret key

url = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials' \

f'&client_id={client_id}&client_secret={client_secret}'

headers = {'Content-Type': 'application/json; charset=UTF-8'}

res = requests.post(url, headers=headers)

token_content = res.json()

assert "error" not in token_content, f"{token_content['error_description']}"

token_key = token_content['access_token']

return token_key

3.调用手势识别接口

调用手势识别接口的 python3 代码实现如下:

def get_hand_info(image_base64, token_key):

request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture"

params_d = dict()

params_d['image'] = str(image_base64, encoding='utf-8')

access_token = token_key

request_url = request_url + "?access_token=" + access_token

res = requests.post(url=request_url,

data=params_d,

headers={'Content-Type': 'application/x-www-form-urlencoded'})

data = res.json()

assert 'error_code' not in data, f'Error: {data["error_msg"]}'

return data

正确调用接口获取到数据之后,我们可以得到一些想要的信息。例如:获取检测的类别的数量、各个类别的类别名以及边框。

def get_hand_num(data):

return data['result_num']

def get_hand_cls_and_bbox(data):

result = list()

cls_list = list()

hand_num = get_hand_num(data)

for i in range(hand_num):

res_dict = data['result'][i]

cls = res_dict['classname']

cls_list.append(cls)

bbox = [res_dict['left'], res_dict['top'], res_dict['width'], res_dict['height']]

res = [cls] + bbox

result.append(res)

return result, cls_list

案例代码与说明

整个案例的核心代码如下:(由于人脸识别的 QPS 为 2,因此在显示图像时使用了 cv2.waitKey(500),所以这个应用看起来不是很流畅)

import cv2

from util import pic_base64, get_face_info, get_face_location, get_face_num, frame2base64, get_hand_info

from pprint import pprint

import util

import face_util

import gesture_util

import os

import random

token_key = '【获取的 token key】'

glasses_img = ['images/glasses/'+img for img in os.listdir('images/glasses')]

glasses = cv2.imread('images/glasses/glasses6.png', cv2.IMREAD_UNCHANGED)

cap = cv2.VideoCapture(0)

while True:

_, image = cap.read()

detect_img = image.copy()

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

image_base64 = frame2base64(image)

face_data = get_face_info(image_base64, token_key)

hand_data = get_hand_info(image_base64, token_key)

_, cls_list = util.get_hand_cls_and_bbox(hand_data)

if face_data:

location = get_face_location(face_data)

face_num = util.get_face_num(face_data)

landmark4 = util.get_landmark4(face_data)

if util.compare_hand(cls_list, 'Heart_single'):

detect_img = gesture_util.draw_heart_single(detect_img)

if util.compare_hand(cls_list, 'Ok'):

detect_img = gesture_util.draw_firework(detect_img)

if util.compare_hand(cls_list, 'One'):

glasses = cv2.imread(glasses_img[1], cv2.IMREAD_UNCHANGED)

detect_img = gesture_util.draw_one(detect_img)

if util.compare_hand(cls_list, 'Two'):

glasses = cv2.imread(glasses_img[2], cv2.IMREAD_UNCHANGED)

detect_img = gesture_util.draw_two(detect_img)

if util.compare_hand(cls_list, 'Three'):

glasses = cv2.imread(glasses_img[3], cv2.IMREAD_UNCHANGED)

detect_img = gesture_util.draw_three(detect_img)

if util.compare_hand(cls_list, 'Four'):

glasses = cv2.imread(glasses_img[4], cv2.IMREAD_UNCHANGED)

detect_img = gesture_util.draw_four(detect_img)

if util.compare_hand(cls_list, 'Five'):

glasses = cv2.imread(glasses_img[5], cv2.IMREAD_UNCHANGED)

detect_img = gesture_util.draw_five(detect_img)

if util.compare_hand(cls_list, 'Fist'):

glasses = cv2.imread(glasses_img[random.randint(0, len(glasses_img)-1)], cv2.IMREAD_UNCHANGED)

if util.compare_hand(cls_list, 'ILY'):

detect_img = gesture_util.draw_love(detect_img)

detect_img = face_util.wear_glasses(detect_img, glasses, face_num, landmark4)

detect_img = cv2.flip(detect_img, 1)

else:

detect_img = cv2.flip(detect_img, 1)

# for i, cls in enumerate(cls_list):

# if cls != 'Face':

# cv2.putText(detect_img, cls, (50, 50 + 100 * i), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 255), 2)

cv2.imshow('pic', detect_img)

key = cv2.waitKey(500) & 0xFF

if key == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

该代码主要识别数字1-5、比心、OK、单手我爱你和拳头手势,数字1-5对应不同类型的眼镜,拳头代表随机更换眼镜,比心会在界面上画出心❤,OK会在界面上展示一些烟花,单手我爱你展示爱你的表情。

下面是一些截图展示:

one:

two:

three:

four:

five:

OK:

比心:

我爱你:

项目代码地址: https://github.com/busyboxs/baiduAIFace ,修改好自己的 API key 和 Secret Key 之后直接执行 camera_face 即可。

python百度手势识别_【百度大脑新品体验】手势识别相关推荐

  1. 【百度大脑新品体验】手势识别

    [百度大脑新品体验]手势识别 作者:才能我浪费99 1.功能描述: 识别图片中的手部位置和手势类型,可识别24种常见手势,包括拳头.OK.比心.作揖.作别.祈祷.我爱你.点赞.Diss.Rock.竖中 ...

  2. 【百度大脑新品体验】新版增值税发票识别

    [百度大脑新品体验]新版增值税发票识别 作者:才能我浪费99 1.功能描述: 在日常工作中经常要用到增值税发票.在使用的时候需要对增值税发表进行检查,验真,录入等很多工作.使用增值税发票识别技术,实现 ...

  3. 【百度大脑新品体验】人体关键点识别

    [百度大脑新品体验]人体关键点识别 作者:才能我浪费99 1.功能描述: 检测图像中的人体并返回人体矩形框位置,精准定位21个核心关键点,包含头顶.五官.颈部.四肢主要关节部位,支持多人检测.大动作等 ...

  4. 【百度大脑新品体验】人脸情绪实时识别

    [百度大脑新品体验]人脸情绪实时识别 作者:才能我浪费99 首先认证授权: 在开始调用任何API之前需要先进行认证授权,具体的说明请参考: http://ai.baidu.com/docs#/Auth ...

  5. 【百度大脑新品体验】人脸面部动作识别

    [百度大脑新品体验]人脸面部动作识别 作者:busyboxs 最近在尝试做一个类似于 Facedance challenge 的应用,这个应用需要识别人脸五官的动作.目前可能的解决方法就是通过对关键点 ...

  6. 【百度大脑新品体验】,人脸检测,轮廓测试建议

    [百度大脑新品体验],人脸检测,轮廓测试建议 作者:worddict 近日,备受关注的人脸关键点检测从72个升级至150个,对用户的眼睛.嘴唇.眉毛的描述更加细腻,可以更好地应用于互联网娱乐.营销等场 ...

  7. 基于android的百度地图_百度的71个炸天的开源项目

    本文为大家整理了百度开源的70+项目,看看有没有感兴趣的. 1.JavaScript图表库 ECharts ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Ja ...

  8. php案例分析百度云_百度阅读|助力推动阅读领域无障碍优化(二)

    三.百度阅读无障碍解决方案 (一)前期深度调研了解视障用户阅读习惯及需求 在深圳市信息无障碍研究会的支持下,对视障用户阅读内容及阅读操作习惯进行了深度调研.大部分视障用户在调研过程中提供了多方面的建议 ...

  9. python名片识别_百度AI攻略:名片识别

    1.功能描述: 支持对各类名片的9个关键字段进行结构化识别,包括姓名.公司.职位.邮编.邮箱.电话.网址.地址.手机号.使用名片识别技术,实现对用户名片关键信息的结构化识别和录入,可应用于线下会议.论 ...

最新文章

  1. 数据结构(04)— 线性顺序表实战
  2. UNL(Ubiquitous Navigation Lab)
  3. linux内核如何安装vim,如何在Linux 中安装和使用 PacVim?
  4. 我的 Rokid 之路 附:记事本技能全部源代码
  5. Axios的基本使用
  6. part.write java_小白向:web中利用request.getPart()上传文件到服务器
  7. C++有用的字符函数库
  8. radio被选中,但是重复点击后事件不触发
  9. 关于windows防火墙关不掉解决办法
  10. 《Python Cookbook 3rd》笔记(2.6):字符串忽略大小写的搜索替换
  11. 微信聊天可以带话题了 网友:朋友分享安利更方便了
  12. html段落排版,美化网页段落排版的css教程
  13. 随机森林分类算法python代码_随机森林的原理及Python代码实现
  14. 并发控制技术手段之时间戳(二)
  15. java mapxtreme_mapxtreme的地图绘制概念
  16. 微软补丁地址以及查找方式
  17. 【硬件通信协议】2. 详细解析SPI通信协议(标准4线SPI)
  18. AlphaBlend 详解
  19. 企业管理系统可视化权限功能设计
  20. rar压缩包已加密如何解除,rar压缩包权限限制怎么办?

热门文章

  1. 2015各地高温补贴发放标准时间一览表
  2. 会计证考试《财经法规与职业道德》第三章精选题
  3. 疫情过后,2020年各省市GDP排行榜top10新鲜出炉,你的家乡排在第几?
  4. 重磅推出校园疫情填报系统,永洪BI助力疫情防控
  5. 一招教你解决大数据量下的各种报表使用问题
  6. “两元故事”后,谭木匠需要新叙事
  7. “生骨肉”概念加速奔跑,宠物行业真要起飞了?
  8. 数字化时代,阿里、京东们能否解决困扰市场已久的“倒奶问题”?
  9. android运行内存与存储内存,运行内存和机身内存的区别 这些知识你知道吗
  10. android软件更新模块实现的技术和方法,Android APK签名原理及方法