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

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

  你有没有过这种体验,拍照时对着镜头,脑子一片空白、表情僵硬、手和脚无处安放,最后拍出Q & 8 / r I来的照片= , w 很是奇怪。拍照软件中的固定姿势抓拍功能可以帮助你:选择一个你想要的姿势模板,当你摆出同款姿势时,软件会进行自动抓拍,完美避开拍照时的尴尬。本文详细介绍了华为HMS ML kit人体骨骼识别技术的集成过程,该技术精准定v n v Z ! U !位了14个骨骼点,可以轻松实现固定姿势抓拍。

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

  做了一个视频骨骼识别小demo,做一次实战演练,Github demo源码:https://github.cov S km/HMS-Core/hms-ml-demo/tree/ma| y 3 Rster/MLKit-Sample 

1.开发前准备

  您需要完成必J t _ ` ) . p要的开发准备工作,同时请确保您的工程中已经配置HMS Core SDK的Maven仓地址,并且完@ 3 ! V 5 0成了本服务的SDK集成。

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

buix B : ?ldscript {
repositories {
google()
jcenter()
maven { url 'https://developer.hu] 6 - f x @awei.com/repo/' }
}
//配置AGC插件
dep8 _ G # + SendencieU R p s J ysa @ J (  M ~ O {
classpath "com.android.tools.build:gradle:3.3.2+ - y j B I :"
}
}
allpp E U F Hrojects {
rep7 D Qositories {
google()B h h x # o E
jcenter()
maven { url 'https://developer.huawei.com/repo/' }
}
}

1.2在应用级build.5 [ sgradley x y c Y { 5中引入SDK。

dependencies {
implementk Z Lation 'com.U l ! & thuaweil 6 b L.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 创建人体骨骼检测器。

MLSkeletonAnalyze, % {r anal9 } S M e |yzeb } & q b ,r = MLSkeletonAnalyzerFa0 Q L 1 V U 0 j [ctory.get) / w ( J I 6 gInstance().getSkeletof ` # OnAnalyzer();

2.1.2 通过bitmap创建MLFrame,建议l n ? ? @ A图片尺寸不小于320 320像素,不大于1920 1920像素。

//通过bitmap创建MLF[ D M V 1 urame。
MLFrame frame = MLFrame.fromBitmap(bitmap);

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

  Task<List&lo - N e St;MLSkeleton>> task = analyzer.asyncAnalyseFrame(frame);
task.addOF m 5nSuccessListener(new OnSuccessListener<List<MLSkeleton>>() {
public void onSuccess4 D 2 q 0 q ( o(List&p { f i Wlt;MLSkeK a 9 j _ } rleton> skelT Y c - u B Cetons) {
// 对检测结果进行处理。
}
}).addOnFailureListener(new OnFailug O T p sreListener() {
public void onFailurg { k S [e(Exception e) {
// 检测失败。
}
});

2.1.4 检测完成,停止分析器,释放检测资源。

try {
if (analyzer != null) {
analyzer.stop();
}
} catch (IOException e) {
// 异常处理。
}

给大家看下Demo效果:

2.2 动态视频检测

2.2.1 创建人体骨骼检/ F c Z !测器( - / l ! /

MLSkeletonAnalyzer analyzer = MLSkeletonAnalyzerFactory.getInstance().g6 : ] WetSkl ( k 4 # d +eletonAnalyzer();

2.2.2 开发者创建识别结果处理类“SkeletonAnalyzerTr[ E % E # [ c D kansactor”t _ Q %,该类实现MLAna: K 7 ^ ~ Z $ N zlyzer.MLTransactor<T>接口,使用此类中的“transactResult”方法获取检测结果并实现具体业务。v b )

public class SkeletonAnalyzerTransacU o k 5 L D , etor implements MLAnalyzer.MLTransactor<ML] E ; o 3Skeleton> {
@Overridp B j Fe
public void transactResult(MLAnalyzer.Result<MLSkT _ $e* C aleton> results) {
SparseArray<MLSkeleton> items = results.getAnalyseList();
// 开发者根据需要处理识别结果,例如,在此方法中进行相似度计算,从而在检测到特定姿势后进行拍照等操作。
// 需要注意,这里只对_ F A u检测结果进行处理,不可调用ML Kit提供的其他检测相关接口。
// 将SparseArray封装的结果转换为List数组,以便进行相似度比较。
List<e : 9 & 7 { { q ;MLSkeleton> resultsList = new ArrayLY F V K 0 4 .ist<>();
fn : Y Q # Dor (int i = 0; i < items.size(); i++) {
results# 0 N s E g KList.add(itemsn Y o z J |.vale ; B H K K $ )ueAt(i));
}
// 在检测结果和模板之间进行相似度比较。
// templateList表示人体骨骼模板,可以通过静态图片检测的方式生成模板,支持单人或多人模板匹L = H ` s @ P L配。
f5 v qloat result = analyzer.caluteSimilI H n / 4 F C Narity(resultsList, templateList);
}
@Override
public void destroy() {
// 检测结束回调方法,用于释放资源等。
}
}

2.2.3 设置识别结果处理器,实现分析器与结果处理j z 3 O E器的绑H ) G v n k v c定。

analyzer.setTransa~ N Mctor(new SkeletonAnalyzerTransactor());

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

// Create LensEngine.
LensEngine lensEngine = nC Z d d y n ` P Bew LensEngine.Creator(getA{ I / *pplicationContext(), analyze* + = [ * q b . ]r)
.setLensType(LensEngine$ I h ) f.BACK_LENS)
.applyDisplayDimension(1280, 720)
.applyFps(20.0f)
.enr / { 2 7 2 * u EableAutomaticFocus(true)
.create();

2.2.5 开发者启用相机,读取视频流并进行识别,待检测完成,停止分析器,释放检测资源。

if (analyzer != null) {
try {
analyzer.t / _ R Gstop();
} catchd K 3 c L (IOException e) {
// 异常处理。
}
}
if (lensEngine != null)( @ ? l E 2  6 H {
lensEngine.release();
}

动态视频流效果:

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

基于华为HMS ML kit人体骨骼识别技术,我们能做的还有很多:
a.在体感游戏中让虚拟形象模拟% 9 k真人动作,增加游戏趣味性。
b.辅6 A I U 6助健身锻炼或康复训练时的姿势矫正。
c.在监控中检测异常行为。

更详细的开发指南参考华为/ U ) % ) g Y 开发者联盟官网:

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

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

华为开发者联盟官网:https://developer.huawei.com/consumer/cn/hms
获取开发指导文档:https://developer.huawei.com/coE 6 ( ~ s 4 & 3 ansumer/cn/doc/development
参与开发者讨论请到Reddit社区:https://www.reddit.com/r/HMSCore/
下载demo和示例代码请到Github:https://github.com/HMS-Core
解决集成问题请到Stack Overflow:https://stackoverflow.{ x H ( Z g ) n dcom/questions/tagged/huawei-mD @ + x M a obile-services?tab=Newest


原文链接:https5 ] & . 2 . |://developer.huawei.com/j e T y & nconsumer/cn/forum/topicview?fid=18&tid=02023339O 4 ! ] 5 0 ~ m164. 0 * s ; V 002640253
原作者:留下落叶F $ + / * K