下载SDK

下载手势识别-离线版Android SDK

1. 登录 习悦开发者平台,进入 手势识别-离线版 SDK 页面,点击“Android SDK下载”按钮,如图:

2. 按要求填写您 下载SDK的用途 ,填完后点击“生成SDK”按钮,如图:

3. 系统将根据您所填的内容生成一个离线SDK,耗时0-3秒,如图:

4. 成功生成后,请点击上方大蓝按钮进行sdk的下载,如图:

Android 开发

手势识别 - 开发流程图

开始开发

1. SDK配置:将SDK中的libs下的所有文件复制到android项目中的libs下,包括so库和jar包。

2. so库路径配置:在编辑项目中的build.gradle文件,配置lib路径,配置如下:

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

    右键选择jar包,选择 add as library

3. 使用ZHThinkjoyGesture类进行手势识别,具体的使用方法请看 api文档

数据类

Point

用于保存坐标信息,使用两个float的的成员x,y来标志位置。

成员名 类型 描述
x float 横坐标
y float 纵坐标

GestureInfo

用于保存手势识别的结果,包含长度为2的Point数组用于保存手势的坐标,和int类型的type用于保存手势的类型。

成员名 类型 描述
type int 手势的类型
gestureRectangle Points[2] 手势框左上和右下的坐标
FIST 常量 握拳
PALM 常量 手掌
OK_GESTURE 常量 OK手势
V_GESTURE 常量 V型手势
INDEX_FINGER 常量 单指手势

GestureDetectConfig

用于保存手势识别的相关配置信息。

成员名 类型 描述
Rotation int 图片旋转的角度(右旋)
ResultMode int 返回结果坐标为原图坐标还是旋转之后图片的坐标
RESULT_MODE_NORMAL 常量 返回结果为原图的坐标
RESULT_MODE_ROTATE 常量 返回结果为旋转图片的坐标
ROTATE_0 常量 设置旋转角度为0
ROTATE_90 常量 设置旋转角度为90
ROTATE_180 常量 设置旋转角度为180
ROTATE_270 常量 设置旋转角度为270

接口类

ZHThinkjoyGesture

手势识别的主要接口类,可以用来对视频图像进行单手的检测跟踪。

创建类对象

ZHThinkjoyGesture getInstance(Context context);
参数说明
参数名 参数类型 参数说明
必须 context Context 当前的上下文
返回值
参数类型 参数说明
ZHThinkjoyGesture 接口操作对象
使用示例
ZHThinkjoyGesture zhThinkjoyGesture = ZHThinkjoyGesture.getInstance(this);

初始化

init();
使用示例
zhThinkjoyGesture.init();

参数设置

GestureConfig getConfig();
返回值
参数类型 参数说明
GestureConfig 返回当前的手势检测参数
void setConfig(GestureConfig);
参数说明
参数名 参数类型 参数说明
gestureConfig GestureConfig 当前手势检测的参数
参数范围说明
参数名 范围
Rotation ROTATE_0 旋转0度
ROTATE_90 旋转90度
ROTATE_180 旋转180度
ROTATE_270 旋转270度
ResultMode RESULT_MODE_ROTATE 返回结果为旋转之后的图片坐标
RESULT_MODE_NORMAL 返回结果为原图的坐标
使用示例
GestureConfig gestureConfig = zhthinkjoyGesture.getConfig();
//设置图片的方向
gestureConfig.Rotation = GestureConfig.ROTATE_90;
//设置返回结果为旋转之后图片的坐标
gestureConfig.ResultMode = GestureConfig.RESULT_MODE_ROTATE;
zhthinkjoyGesture.setConfig(gestureConfig);

手势检测跟踪

传入视频图像,返回手的位置和手势类型。
如果是第一次调用,则会返回图像中最大的手的坐标。接下来的调用会跟踪这只手的运动,返回它的位置和手势类型。如果跟丢了,则会重新对全图做检测,把跟踪目标重定为图像中最大的手。 检测结果放在gestureInfoList里。
如果没有检测到手,gestureInfoList的长度为0。
如果检测到手,因为此API是单手检测跟踪,所以gestureInfoList的长度会为1。不会出现大于gestureInfoList的长度大于1的情况。

String detect(Bitmap bitmap, List<GestureInfo> gestureInfoList);
参数说明
参数名 参数类型 参数说明
必须 bitmap Bitmap 位图
必须 gestureInfoList List<GestureInfo> (返回参数)用于保存手势位置和类型
使用示例
List<GestureInfo> gestureInfoList = new ArrayList<>();
zhThinkjoyGesture.detect(bitmap, gestureInfoList);
if (gestureInfoList.size() > 0) {
    int type = gestureInfoList.get(0).type;
    float left = gestureInfoList.get(0).gestureRectangle[0].x;
    float top = gestureInfoList.get(0).gestureRectangle[0].y;
    float right = gestureInfoList.get(0).gestureRectangle[1].x;
    float bottom = gestureInfoList.get(0).pogestureRectangle[1].y;
    //do something
}
String detect(byte[] imageArray, int imageType, int imageWidth, int imageHeight, List<GestureInfo> gestureInfoList);
参数说明
参数名 参数类型 参数说明
必须 imageArray byte 保存图片的byte数组
必须 imageType int 图片的类型
必须 imageWidth int 图片的宽度
必须 imageHeight int 图片的高度
必须 gestureInfoList List<GestureInfo> (返回参数)用于保存手势位置和类型
参数取值范围
参数名 取值范围
imageType IMAGE_FORMAT_NV21 设置图片格式为NV21
使用示例
List<GestureInfo> gestureInfoList = new ArrayList<>();
zhThinkjoyGesture.detect(imageArray, ZHThinkjoyGesture.IMAGE_FORMAT_NV21, 640, 480, gestureInfoList);
if (gestureInfoList.size() > 0) {
    int type = gestureInfoList.get(0).type;
    float left = gestureInfoList.get(0).gestureRectangle[0].x;
    float top = gestureInfoList.get(0).gestureRectangle[0].y;
    float right = gestureInfoList.get(0).gestureRectangle[1].x;
    float bottom = gestureInfoList.get(0).pogestureRectangle[1].y;
    //do something
}
Q群
咨询