最近一直在写关于Android基础控件的内容,今天我们来搞一下有趣一点的东西——百度在线手势识别。百度在线手势识别目前支持24种手势,具体有哪些,可以去官方网站查询相关的API文档。支持上传图片或者byte[]数据进行识别。那下面就来看看如何实现有趣的手势识别吧。
我想,基本上每个开发者都有百度账号,没有的注册一个,使用该账号登录百度开发者平台中的控制台。进入之后是如下画面,并选择到“人体分析”
选择了“人体分析”之后进入如下画面,点击红色框中的创建应用,获取APP_ID,API_KEY,SECRET_KEY。
点击“创建应用”之后,需要编辑一下应用的基本信息,然后就可以获取上面的三个数据了:
在上面“应用列表”的左侧,我们先找到“SDK下载”选项
选择如下的SDK(java)进行下载即可
目前百度在线手势识别提供有免费版本,每天有50000次的免费体验,限制是并发量小于等于2,那我们编写主要还是参考上图中“使用说明”对应的文档资料。
第一步:初始化接口
client = new AipBodyAnalysis(app_id, api_key, secret_key);
其中,client就是我们的AipBodyAnalysis客户端,三个参数就是我们刚刚创建应用获取的数据。
第二步:调用接口,获取数据
//方式1
JSONObject json = client.gesture(imagePath, new HashMap());
//方式2
JSONObject json = client.gesture(bytes, new HashMap());
第三步:解析数据
首先看一下数据格式:
{
"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
}]
}
我们只需要获取“result”字段对应的数据即可,里面的“classname”字段对应的就是手势的名称。
JSONArray array = (JSONArray) jsonObject.get("result");
if (array != null && array.length() > 0) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < array.length(); i++) {
JSONObject json = (JSONObject) array.get(i);
builder.append(json.getString("classname") + ",");
}
Log.e(TAG, "识别到手势:" + builder.toString());
}
当然在这之前,需要把下载的jar包导入到我们的工程中。当然也可以通过其他方式添加依赖,具体参见使用说明文档(重要)
这样,我们的工作就完成了,下面看看实际的使用效果怎样。
Demo源码在GitHub获取。内部支持每天剩余测试数据统计,识别结果预览,视频预览等功能。
注:欢迎扫码关注