乐趣区

关于android:用华为HMS-ML-kit人体骨骼识别技术Android快速实现人体姿势动作抓拍

  你有没有过这种体验,拍照时对着镜头,脑子一片空白、表情生硬、手和脚无处安放,最初拍进去的照片很是奇怪。拍照软件中的固定姿态抓拍性能能够帮忙你:抉择一个你想要的姿态模板,当你摆出同款姿态时,软件会进行主动抓拍,完满避开拍照时的难堪。本文具体介绍了华为 HMS ML kit 人体骨骼辨认技术的集成过程,该技术精准定位了 14 个骨骼点,能够轻松实现固定姿态抓拍。

人体骨骼检测性能开发实战

  做了一个视频流骨骼辨认小 demo,做一次实战演练,Github demo 源码:https://github.com/HMS-Core/h…;

1. 开发前筹备

  您须要实现必要的开发筹备工作,同时请确保您的工程中曾经配置 HMS Core SDK 的 Maven 仓地址,并且实现了本服务的 SDK 集成。

1.1 在我的项目级 build.gradle 文件中配置 maven 仓地址。

buildscript {
  repositories {google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
    // 配置 AGC 插件
    dependencies {classpath "com.android.tools.build:gradle:3.3.2"}
}
allprojects {
    repositories {google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

1.2 在利用级 build.gradle 中引入 SDK。

dependencies {
    implementation 'com.huawei.hms:ml-computer-vision-skeleton-model:2.0.1.300'
    implementation 'com.huawei.hms:ml-computer-vision-skeleton:2.0.1.300'
    implementation 'com.huawei.hms:ml-computer-vision-base:2.0.1.300'
}

2. 开发步骤

2.1 动态图片检测

2.1.1 创立人体骨骼检测器。

MLSkeletonAnalyzer analyzer = MLSkeletonAnalyzerFactory.getInstance().getSkeletonAnalyzer();

2.1.2 通过 bitmap 创立 MLFrame,倡议图片尺寸不小于 320 320 像素,不大于 1920 1920 像素。

// 通过 bitmap 创立 MLFrame。MLFrame frame = MLFrame.fromBitmap(bitmap);

2.1.3 调用“asyncAnalyseFrame”办法进行人体骨骼检测。

  Task<List<MLSkeleton>> task = analyzer.asyncAnalyseFrame(frame);
         task.addOnSuccessListener(new OnSuccessListener<List<MLSkeleton>>() {public void onSuccess(List<MLSkeleton> skeletons) {// 对检测后果进行解决。}
         }).addOnFailureListener(new OnFailureListener() {public void onFailure(Exception e) {// 检测失败。}
         });

2.1.4 检测实现,进行分析器,开释检测资源。

try {if (analyzer != null) {analyzer.stop();
    }
} catch (IOException e) {// 异样解决。}

给大家看下 Demo 成果:

2.2 动静视频检测

2.2.1 创立人体骨骼检测器。

MLSkeletonAnalyzer analyzer = MLSkeletonAnalyzerFactory.getInstance().getSkeletonAnalyzer();

2.2.2 开发者创立辨认后果解决类“SkeletonAnalyzerTransactor”,该类实现 MLAnalyzer.MLTransactor<T> 接口,应用此类中的“transactResult”办法获取检测后果并实现具体业务。

public class SkeletonAnalyzerTransactor implements MLAnalyzer.MLTransactor<MLSkeleton> {
    @Override
    public void transactResult(MLAnalyzer.Result<MLSkeleton> results) {SparseArray<MLSkeleton> items = results.getAnalyseList();
        // 开发者依据须要解决辨认后果,例如,在此办法中进行类似度计算,从而在检测到特定姿态后进行拍照等操作。// 须要留神,这里只对检测后果进行解决,不可调用 ML Kit 提供的其余检测相干接口。// 将 SparseArray 封装的后果转换为 List 数组,以便进行类似度比拟。List<MLSkeleton> resultsList = new ArrayList<>();
        for (int i = 0; i < items.size(); i++) {resultsList.add(items.valueAt(i));
        }
        // 在检测后果和模板之间进行类似度比拟。// templateList 示意人体骨骼模板,能够通过动态图片检测的形式生成模板,反对单人或多人模板匹配。float result = analyzer.caluteSimilarity(resultsList, templateList);
    }
    @Override
    public void destroy() {// 检测完结回调办法,用于开释资源等。}
}

2.2.3 设置辨认后果处理器,实现分析器与后果处理器的绑定。

analyzer.setTransactor(new SkeletonAnalyzerTransactor());

2.2.4 创立 LensEngine,该类由 ML Kit SDK 提供,用于捕获相机动静视频流并传入分析器。倡议设置的相机显示尺寸不小于 320 320 像素,不大于 1920 1920 像素。

// Create LensEngine.
LensEngine lensEngine = new LensEngine.Creator(getApplicationContext(), analyzer)
    .setLensType(LensEngine.BACK_LENS)
    .applyDisplayDimension(1280, 720)
    .applyFps(20.0f)
    .enableAutomaticFocus(true)
    .create();

2.2.5 开发者启用相机,读取视频流并进行辨认,待检测实现,进行分析器, 开释检测资源。

if (analyzer != null) {  
    try {analyzer.stop();    
    } catch (IOException e) {// 异样解决。}
}
if (lensEngine != null) {lensEngine.release();
}

动静视频流成果:

  
基于华为 HMS ML kit 人体骨骼辨认技术,咱们能做的还有很多:
a. 在体感游戏中让虚构形象模仿真人动作,减少游戏趣味性。
b. 辅助健身锤炼或康复训练时的姿态改正。
c. 在监控中检测异样行为。

更具体的开发指南参考华为开发者联盟官网:

华为开发者联盟机器学习服务开发指南

欲了解更多详情,请参阅:

华为开发者联盟官网:https://developer.huawei.com/consumer/cn/hms
获取开发领导文档:https://developer.huawei.com/consumer/cn/doc/development
参加开发者探讨请到 Reddit 社区:https://www.reddit.com/r/HMSCore/
下载 demo 和示例代码请到 Github:https://github.com/HMS-Core
解决集成问题请到 Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest


原文链接:https://developer.huawei.com/consumer/cn/forum/topicview?fid=18&tid=0202333916402640253
原作者:留下落叶

退出移动版