首页 > 编程 > Python > 正文

Face++ API实现手势识别系统设计

2020-02-15 23:46:09
字体:
来源:转载
供稿:网友

        通过普通摄像头拍摄出的照片来进行识别是存在很大的困难的,但是有困难才能找到更好的方法去解决。在百度上大致找了一下手语识别的案例,很少。API只是看到了Face++发布的手势识别,在我写文章的时候又看到了百度发布的手势识别API,之后会尝试去进行使用。

        这次使用的是Face++的API,Face++的API是在之前发现的,功能上的话还是比较强大的,但是没有离线版本,需要将数据进行上传,然后对JSON进行解析得到结果。

这是官网给出的一个Demo,识别率挺不错的,最后给出的是一个在20种手势上的分布概率,接下来我们自己调用一下API分析自己的手势。

1. 查看官方的API。找到Gesture API,先看一下是怎么说的。

调用参数:

官方还给出了一些调用错误返回的参数的说明,有兴趣的可以去官网看一下。

还给出了一个使用命令行调用API的实例:

从实例上不难看出,向 https://api-cn.faceplusplus.com/humanbodypp/beta/gesture 发送请求,默认的参数有 api_key,api_secret,image_file。api_key和api_secret可以通过控制台进行生成。

接下来开始写代码的调用,Python版本的,其他版本的类似。

我们将API封装成一个类 Gesture:

将其中的key和secret替换成自己的就可以使用:

'''# -*- coding:utf-8 -*-@author: TulLing'''import requests from json import JSONDecoder  gesture_englist = ['big_v','fist','double_finger_up','hand_open','heart_d','index_finger_up','ok','phonecall','palm_up','rock','thumb_down','thumb_up','victory']gesture_chinese = ["我最帅",   "拳头,停下",   "我发誓",   "数字5",   "比心",   "数字1",   "好的呢,OK",   "打电话",   "手心向上",   "爱你,520",   "差评,不好的",   "好评,Good,很棒",   "胜利,开心"]# 将字典排序def sort_dict(adict): return sorted(adict.items(),key= lambda item:item[1]) class Gesture(object): def __init__(self): self.http_url = 'https://api-cn.faceplusplus.com/humanbodypp/beta/gesture' self.key = '*****' self.secret = '******' self.data = {"api_key":self.key,"api_secret":self.secret}   # 获取手势信息 def get_info(self,files): response = requests.post(self.http_url,data=self.data,files=files) req_con = response.content.decode('utf-8') req_dict = JSONDecoder().decode(req_con) #print(req_dict) if('error_message' not in req_dict.keys()) and (len(req_dict['hands'])): # 获取  hands_dict = req_dict['hands']  #print(type(hands_dict))  # 获取到手的矩形的字典  gesture_rectangle_dict = hands_dict[0]['hand_rectangle']  # 获取到手势的字典  gesture_dict = hands_dict[0]['gesture']    return gesture_dict,gesture_rectangle_dict else:  return [],[];  # 获取到手势文本信息 def get_text(self,index): return gesture_chinese[index]  # 获取到手势对应的概率 def get_pro(self,gesture_dict,index): # print(gesture_dict) if(gesture_dict is None or gesture_dict == []):  return 0 return gesture_dict[gesture_englist[index]]  # 获取到手势的位置 def get_rectangle(self,gesture_rectangle_dict): if(gesture_rectangle_dict is None or gesture_rectangle_dict == []):  return (0,0,0,0) x = gesture_rectangle_dict['top'] y = gesture_rectangle_dict['left'] width = gesture_rectangle_dict['width'] height = gesture_rectangle_dict['height'] return (x,y,width,height)            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表