数字世界的“风暴”,来的也很猛烈!
185 2025-07-27
你有没有过这种体验,拍照时对着镜头,脑子一片空白、表情僵硬、手和脚无处安放,最后拍出来的照片很是奇怪拍照软件中的固定姿势抓拍功能可以帮助你:选择一个你想要的姿势模板,当你摆出同款姿势时,软件会进行自动抓拍,完美避开拍照时的尴尬。
本文详细介绍了华为HMS ML kit人体骨骼识别技术的集成过程,该技术精准定位了14个骨骼点,可以轻松实现固定姿势抓拍人体骨骼检测功能开发实战做了一个视频流骨骼识别小demo,做一次实战演练,Github demo源码:
https://github.com/HMS-Core/hms-ml-demo/tree/master/MLKit-Sample1. 开发前准备您需要完成必要的开发准备工作,同时请确保您的工程中已经配置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中引入SDKdependencies { 。
implementationcom.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 task = analyzer.asyncAnalyseFrame(frame); task.addOnSuccessListener(
new OnSuccessListener() { publicvoidonSuccess(List skeletons
) { // 对检测结果进行处理 } }).addOnFailureListener(new OnFailureListener() { 。
publicvoidonFailure(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接口,使用此类中的“transactResult”方法获取检测结果并实现具体业务。
publicclassSkeletonAnalyzerTransactorimplementsMLAnalyzer.MLTransactor { @Overridepublic
voidtransactResult(MLAnalyzer.Result results){ SparseArray items = results.getAnalyseList();
// 开发者根据需要处理识别结果,例如,在此方法中进行相似度计算,从而在检测到特定姿势后进行拍照等操作// 需要注意,这里只对检测结果进行处理,不可调用ML Kit提供的其他检测相关接口// 将SparseArray封装的结果转换为List数组,以便进行相似度比较。
List resultsList = new ArrayList<>(); for (int i = 0; i < items.size(); i++) { resultsList.add(items.valueAt(i)); }
// 在检测结果和模板之间进行相似度比较// templateList表示人体骨骼模板,可以通过静态图片检测的方式生成模板,支持单人或多人模板匹配float result = analyzer.caluteSimilarity(resultsList, templateList); } 。
@Overridepublicvoiddestroy(){ // 检测结束回调方法,用于释放资源等 } } 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
原作者:留下落叶