详细流程及源代码帮您快速接入百度大脑手势识别

作者:wangwei8638

手势识别应用于智能家电、家用机器人、可穿戴、儿童教具等硬件设备,通过用户的手势控制对应的功能,人机交互方式更加智能化、自然化。本文主要介绍手势识别API的调用使用攻略。

一.平台接入

此步骤比较简单,不多阐述。可参照之前文档:

https://ai.baidu.com/forum/topic/show/943028

二.分析接口文档

  1. 接口API

https://ai.baidu.com/docs#/Body-API/02f6ce24

(1)接口描述

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

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

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

(2)请求说明

需要用到的信息有:

请求URL:

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

Header格式:Content-Type:application/x-www-form-urlencoded

(3)返回示例

 {

        "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

    }]

    }

2.获取access_token

#client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id =【百度云应用的AK】
client_secret =【百度云应用的SK】

#获取token
def get_token():
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
token_content = response.read()
if token_content:
token_info = json.loads(token_content.decode("utf-8"))
token_key = token_info['access_token']
return token_key

三.识别结果
详细流程及源代码帮您快速接入百度大脑手势识别_第1张图片
返回结果:

{'log_id': 288214665005727209,

 'result': [{'classname': 'Five',

             'height': 253,

             'left': 537,

             'probability': 0.8713970184326172,

             'top': 344,

             'width': 238},

            {'classname': 'Face',

             'height': 237,

             'left': 808,

             'probability': 0.7121545076370239,

             'top': 164,

             'width': 208}],

 'result_num': 2}

处理结果方面:可以看出,检测出手势为Five,以及识别人脸并标出位置。

处理速度方面:处理时间4.80s,时间较长。
四.源码共享

# -*- coding: utf-8 -*-

#!/usr/bin/env python



import os

import requests

import base64

import json

from pprint import pprint

import time

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

api_key = '**************************'

secret_key = '******************************'



class LandmarkRecognizer(object):

    def __init__(self, api_key, secret_key):

        self.access_token = self._get_access_token(api_key=api_key, secret_key=secret_key)

        self.API_URL = 'https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture' + '?access_token=' \

                      + self.access_token

    #获取token

    @staticmethod

    def _get_access_token(api_key, secret_key):

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

            '&client_id={}&client_secret={}'.format(api_key, secret_key)

        rp = requests.post(api)

        if rp.ok:

            rp_json = rp.json()

#            print(rp_json['access_token'])

            return rp_json['access_token']

        else:

            print('=> Error in get access token!')

    def get_result(self, params):

        rp = requests.post(self.API_URL, data=params)

        if rp.ok:

#            print('=> Success! got result: ')

            rp_json = rp.json()

            pprint(rp_json)

            return rp_json

        else:

            print('=> Error! token invalid or network error!')

            print(rp.content)

            return None

    #手势识别

    def detect(self, img_path):

        f = open(img_path, 'rb')

        strover = '识别结果:'

        img_str = base64.b64encode(f.read())

        params = {'image': img_str}

        tic = time.clock()

        rp_json = self.get_result(params)

        toc = time.clock()

        print(strover)

        print('花费时长: '+'%.2f'  %(toc - tic) +' s')



if __name__ == '__main__':

    recognizer = LandmarkRecognizer(api_key, secret_key)

    img = 'F:\paddle\ss5.png'

    recognizer.detect(img)

你可能感兴趣的:(详细流程及源代码帮您快速接入百度大脑手势识别)