手势识别
百度 官方文档
识别图片中的手部位置和手势类型,可识别24种常见手势
基本说明:
接口地址:https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture
返回格式:json
请求方式:post
请求示例:https://aip.baidubce.com/rest/2.0/image-classify/v1/gesture?access_token=test
请求参数说明:
名称 类型 必填 说明
image string 必填 图像数据,Base64编码字符串,以图片文件形式请求时必填。图片的base64编码是不包含图片头的,(支持图片格式:jpg,bmp,png),图片Base64编码后大小不超过4M。最短边至少50px,最长边最大4096px
返回参数说明:
名称 类型 说明
result_num int 结果数量
result object[] 检测到的目标,手势、人脸
+classname string 目标所属类别,24种手势、other、face
+top int 目标框上坐标
+width int 目标框的宽
+left int 目标框最左坐标
+height int 目标框的高
+probability float 目标属于该类别的概率
log_id int64 唯一的log id,用于问题定位
JSON返回示例:
{
	"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
		}
	]
}
服务级错误码参照
错误码 说明
1 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
2 服务暂不可用,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
3 调用的API不存在,请检查请求URL后重新尝试,一般为URL中有非英文字符,如“-”,可手动输入重试
4 集群超限额,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
6 无权限访问该用户数据,创建应用时未勾选相关接口
13 获取token失败
14 IAM 鉴权失败
15 应用不存在或者创建失败
17 每天请求量超限额,可通过QQ群(860337848)联系群管、提交工单提升限额
18 QPS超限额,可通过QQ群(860337848)联系群管、提交工单提升限额
19 请求总量超限额,可通过QQ群(860337848)联系群管、提交工单提升限额
100 无效的access_token参数,请检查后重新尝试
110 access_token无效
111 access token过期
282000 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
216100 请求中包含非法参数,请检查后重新尝试
216101 缺少必须的参数,请检查参数是否有遗漏
216102 请求了不支持的服务,请检查调用的url
216103 请求中某些参数过长,请检查后重新尝试
216110 appid不存在,请重新核对信息是否为后台应用列表中的appid
216200 图片为空,请检查后重新尝试
216201 上传的图片格式错误,现阶段我们支持的图片格式为:PNG、JPG、BMP,请进行转码或更换图片
216202 上传的图片大小错误,现阶段我们支持的图片大小为:base64编码后小于4M,分辨率不高于4096 * 4096,请重新上传图片
216203 上传的图片base64编码有误,请校验base64编码方式,并重新上传图片
216630 识别错误,请再次请求,如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
216634 检测错误,请再次请求,如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。
282003 请求参数缺失
282005 处理批量任务时发生部分或全部错误,请根据具体错误码排查
282006 批量任务处理数量超出限制,请将任务数量减少到10或10以下
282114 URL长度超过1024字节或为0
282808 request id xxxxx 不存在
282809 返回结果请求错误(不属于excel或json)
282810 图像识别错误
283300 入参格式有误,可检查下图片编码、代码格式是否有误
完整教学代码示例
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;
	}
}