【人体分析-手势识别】-Java示例代码
756665228 发布于2018-08-13 14:19 浏览:3649 回复:6
3
收藏
最后编辑于2019-09-20
  • 属于内测接口,需要申请哦。
  • 邀测帖子: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					踩|拇指向下
Ok							OK
ILY							Rock
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

收藏
点赞
3
个赞
共6条回复 最后由756665228回复于2019-09-20 17:43
#7756665228回复于2019-09-20 17:43:29
#6 无人引航的船回复
我接unity,怎么接

unity 不会哦。

0
#6无人引航的船回复于2019-09-20 14:16:01

我接unity,怎么接

0
#5wangwei8638回复于2019-04-10 07:16:14

帅总威武~ 疯狂打call~

0
#4wangxujun59回复于2018-09-20 16:02:44

帅总威武~ 疯狂打call~

0
#2melissayoung回复于2018-08-13 19:02:57

帅总威武~ 疯狂打call~

0
TOP
切换版块