java 手势识别_【人体分析-手势识别】-Java示例代码
属于内测接口,需要申请哦。
邀测帖子:http://ai.baidu.com/forum/topic/show/870370
接口说明:http://ai.baidu.com/docs#/Body-API/fd9bc832
识别图片中的手势类型,返回手势名称、手势矩形框、概率分数,可识别15种手势,支持动态手势识别,适用于手势特效、智能家居手势交互等场景;支持的15类手势列表:手指、掌心向前、拳头、OK、祈祷、作揖、作别、单手比心、点赞、diss、rock、掌心向上、双手比心(3种)
-----------------------------------------------------下面开始代码----------------------------------------------------
手势识别接口示例代码-(JavaAPI)
import java.net.URLEncoder;
import com.alibaba.fastjson.JSON;
import com.xs.body.bean.GestureBean;
import com.xs.util.baidu.Base64Util;
import com.xs.util.baidu.FileUtil;
import com.xs.util.baidu.HttpUtil;
/**
* 手势识别Java-API调用示例代码
* Base64Util、FileUtil、HttpUtil工具类下载地址
* http://aixiaoshuai.mydoc.io/?t=234826
* @author 小帅丶
*/
public class GestureAPISample {
public static String GESTURE_URL = "https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture";
public static void main(String[] args) throws Exception {
//返回字符串
//String result = getGestureResult("G:/gesture/摇滚.jpg", "自己的token");
//System.out.println(result);
//返回java对象
GestureBean gestureBean = getGestureBean("G:/ht.jpg", "自己的token");
System.out.println("识别个数:"+gestureBean.getResult_num());
String gestureName = "";
for (int i = 0; i < gestureBean.getResult().size(); i++) {
if(gestureBean.getResult().get(i).getClassname().equals("Face")){
System.out.println("此图中识别出人脸");
}else{
gestureName += GestureClassNameWorkBook.getGestureName(gestureBean.getResult().get(i).getClassname())+",";
}
}
System.out.println("识别的手势:"+gestureName.substring(0, gestureName.length()-1));
}
/**
* 识别图片中的手势类型,返回手势名称、手势矩形框、概率分数,可识别15种手势,支持动态手势识别,适用于手势特效、智能家居手势交互等场景;
* 支持的15类手势列表:手指、掌心向前、拳头、OK、祈祷、作揖、作别、单手比心、点赞、diss、rock、掌心向上、双手比心(3种)。
* @param imagePath 图片本地路径
* @param accessToken 应用AccessToken
* @return String
* @throws Exception
*/
private static String getGestureResult(String imagePath, String accessToken) throws Exception {
byte[] imgData = FileUtil.readFileByBytes(imagePath);
String imgStr = Base64Util.encode(imgData);
String param = "image=" + URLEncoder.encode(imgStr,"UTF-8");
// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
String result = HttpUtil.post(GESTURE_URL, accessToken, param);
return result;
}
/**
* 识别图片中的手势类型,返回手势名称、手势矩形框、概率分数,可识别15种手势,支持动态手势识别,适用于手势特效、智能家居手势交互等场景;
* 支持的15类手势列表:手指、掌心向前、拳头、OK、祈祷、作揖、作别、单手比心、点赞、diss、rock、掌心向上、双手比心(3种)。
* @param imagePath 图片本地路径
* @param accessToken 应用AccessToken
* @return GestureBean
* @throws Exception
*/
private static GestureBean getGestureBean(String imagePath, String accessToken) throws Exception {
byte[] imgData = FileUtil.readFileByBytes(imagePath);
String imgStr = Base64Util.encode(imgData);
String param = "image=" + URLEncoder.encode(imgStr,"UTF-8");
// 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
String result = HttpUtil.post(GESTURE_URL, accessToken, param);
GestureBean gestureBean = JSON.parseObject(result,GestureBean.class);
return gestureBean;
}
}
示例图片
处理后返回的内容
识别个数:2
识别的手势:拳头,掌心向前
识别返回的JSON数据 可以看到识别出2个手势 一个为Fist 另一个为Palm
{
"log_id": 3773186178434508300,
"result_num": 2,
"result": [
{
"probability": 0.9931142926216125,
"top": 153,
"height": 299,
"classname": "Fist",
"width": 269,
"left": 499
},
{
"probability": 0.9748011231422424,
"top": 44,
"height": 455,
"classname": "Palm",
"width": 423,
"left": 86
}
]
}
需要用到的GestureBean
import java.util.List;
/**
* 手势Bean 省略set/get
* @author 小帅丶
*/
public class GestureBean {
//手势数目
private int result_num;
//检测到的目标,手势、人脸
private List result;
//唯一的log id,用于问题定位
private long log_id;
/**
* classname目标所属类别,15种手势、other、face
* top目标框上坐标
* widt目标框的宽
* left目标框最左坐标
* height目标框的高
* probability目标属于该类别的概率
* @author 小帅丶
*/
public static class Result{
private double probability;
private int top;
private int height;
private String classname;
private int width;
private int left;
}
}
classname转中文常量代码
package com.xs.body;
/**
* 手势中文说明
* @author 小帅丶
*
*/
public class GestureClassNameWorkBook {
/**
* 根据classname返回中文对应的名称
* @param classname 手势所属类别,15种手势、other、face
* @return String
* @throws Exception
*/
public static String getGestureName(String classname) throws Exception {
String gestureName ="";
if(classname.equals("Thumb_down")){
gestureName="踩|拇指向下";
return gestureName;
}else if (classname.equals("Ok")) {
gestureName="OK";
return gestureName;
}else if (classname.equals("ILY")) {
gestureName="Rock";
return gestureName;
}else if (classname.equals("Heart_single")) {
gestureName="单手比心";
return gestureName;
}else if (classname.equals("Thumb_up")) {
gestureName="点赞|拇指向上";
return gestureName;
}else if (classname.equals("Prayer")) {
gestureName="祈祷";
return gestureName;
}else if (classname.equals("Fist")) {
gestureName="拳头";
return gestureName;
}else if (classname.equals("Point")) {
gestureName="点|食指";
return gestureName;
}else if (classname.equals("Heart_1")||classname.equals("Heart_2")||classname.equals("Heart_3")) {
gestureName="双手比心";
return gestureName;
}else if (classname.equals("Palm")) {
gestureName="掌心向前";
return gestureName;
}else if (classname.equals("Palm_up")) {
gestureName="掌心向上";
return gestureName;
}else if (classname.equals("Honour")) {
gestureName="作别|告别";
return gestureName;
}else if (classname.equals("Rock")) {
gestureName="摇滚";
return gestureName;
}else if (classname.equals("Congratulation")) {
gestureName="作揖|祝贺";
return gestureName;
}else{
gestureName ="未能匹配的手势:"+classname;
return gestureName;
}
}
}
需要用到的第三方的Jar
com.alibaba
fastjson
1.2.35
-----------------------------------------------------代码结束-----------------------------------------------------
classname与中文的对应
classname中文(个人整理非官方)
Thumb_down踩|拇指向下
OkOK
ILYRock
Heart_single单手比心
Thumb_up点赞|拇指向上
Prayer祈祷
Fist拳头
Point点|食指
Heart_1|Heart_2|Heart_3双手比心
Palm掌心向前
Palm_up掌心向上
Honour作别|告别
Congratulation作揖|祝贺
Face人脸
Rock摇滚
代码地址 https://gitee.com/xshuai/ai/tree/master/AIDemo/src/main/java/com/xs/body
java 手势识别_【人体分析-手势识别】-Java示例代码相关推荐
- 百度AI开放平台人体分析_人像分割的Python示例代码
首发于:https://www.jwldata.com/archives/48.html 人像分割有些API需要用到opencv处理返回结果. https://pypi.org/project/ope ...
- java基准测试_微基准测试进入Java 9
java基准测试 我已经几个月没有在这里写文章了,这种例外还会继续. 我计划在明年三月左右恢复写作. 本文末尾的说明. 等待! 不完全是最后,因为您可以向下滚动. 它在文章结尾处. 继续阅读! 三年前 ...
- Java继承_这10道Java面试题!大部分的人回答不出来
1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Java中不支持多重继承? 3.为什么Java不支持运算符重载? 4.为什么 String 在 Java 中是不可 ...
- 网易 java工程师_网易微专业Java开发工程师
Java 基础 1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境. JRE:Java Run ...
- java 委托_动态代理:Java开发必学
一句话概括:java 动态代理通过反射机制,可在不修改原代码的情况下添加新的功能,应用于多种场景,简单.实用.灵活,是 java 开发必学知识,本文将对动态代理使用进行详细介绍. 1. 引言 最近开发 ...
- 常用的java虚拟机_带你了解 JAVA虚拟机 面试必备
Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途.创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有 些区域则是依赖 ...
- java 精通_你真的精通Java吗?
简历和自我介绍上经常能够读到"精通Java"这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一 ...
- 斯坦福java下载_斯坦福解析器java错误
我正在研究NLP,我想用斯坦福解析器从文本中提取名词短语,我使用的解析器版本是3.4.1 这是我使用的示例代码 package stanfordparser; import java.util.Col ...
- java基准测试_星期五基准功能Java
java基准测试 让我们的产品所有者有一天变得疯狂,并要求您执行以下操作: From a set of Strings as follows : " marco_8"," ...
- 精通java益处_你真的精通Java吗?
简历和自我介绍上经常能够读到"精通Java"这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一 ...
最新文章
- Fitnesse测试系列--如何做成模块Module供调用
- 数据库——高级匹配条件
- mysql 的自动启动 使用配置文件 /etc/my.cnf
- 整理记录word2016小技巧,自用
- 重写、重构、重载区别
- 如何给领导打造一款掌上财务管理驾驶舱?
- ActiveMQ-为什么需要消息中间件及优缺点
- C# 中的readonly属性
- 电脑管理器地址栏 按右键会有的功能
- Informix ODBC 设置
- 疑似APT组织响尾蛇的JavaScript脚本调试分析
- 想撤回没门!电脑版微信、QQ 、TIM的防撤回工具
- oracle客户端 PLSQL安装配置教程
- 微信ubuntu版服务器,Ubuntu 18.04 安装微信(Linux通用)
- 冒犯有时是必要的:如何开启一段亲密关系?
- 2022年PYTHON应用行业,PYTHON就业方向
- 相关性扫描匹配CSM与分支限界
- Kettle/Pentaho的Carte集群配置和使用
- 华为IoT首席架构师王启军:全栈工程师“养成记”
- 连续复利怎么用计算机算,请问银行的连续复利计算公式
热门文章
- 使用CODERUN部署阿里云KUBERNETES
- python.day.04——常用数据类型(一):strList
- 优云软件又双叒通过CMMI ML3评估 , 研发和质量管理水平创新高
- Git提交代码的处理流程(转)
- 【DATAGUARD】 基于同一个主机建立物理备库和逻辑备库(二)
- html入门的一些东西
- IE 下 telerik RadAjaxManager 多次请求,LoadingPanel 点击消失
- java的中文源代码
- 按钮按一下画个直线_直线导轨数控车床概念和作用
- 2580 php to yuan,PHP版汉字转拼音类-ASCII版本 | 学步园