你有没有过这种体验,拍照时对着镜头,脑子一片空白、表情僵硬、手和脚无处安放,最后拍出来的照片很是奇怪。拍照软件中的固定姿势抓拍功能可以帮助你:选择一个你想要的姿势模板,当你摆出同款姿势时,软件会进行自动抓拍,完美避开拍照时的尴尬。本文详细介绍了华为HMS ML kit人体骨骼识别技术的集成过程,该技术精准定位了14个骨骼点,可以轻松实现固定姿势抓拍。
人体骨骼检测功能开发实战
做了一个视频流骨骼识别小demo,做一次实战演练,
Github demo源码:https://github.com/HMS-Core/hms-ml-demo/tree/master/Skeleton-Camera
1. 开发前准备
您需要完成必要的开发准备工作,同时请确保您的工程中已经配置HMS Core SDK的Maven仓地址,并且完成了本服务的SDK集成。
1.1 在项目级build.gradle文件中配置maven仓地址。
buildscript
{
repositories
{
google()
jcenter()
maven
{ url
'https://developer.huawei.com/repo/' }
}
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 创建人体骨骼检测器。
MLSkeletonAnalyzer analyzer
= MLSkeletonAnalyzerFactory
.getInstance().getSkeletonAnalyzer();
2.2 开发者创建识别结果处理类“SkeletonAnalyzerTransactor”,该类实现MLAnalyzer.MLTransactor接口,使用此类中的“transactResult”方法获取检测结果并实现具体业务。
public class SkeletonAnalyzerTransactor implements MLAnalyzer.MLTransactor<MLSkeleton> {
@Override
public void transactResult(MLAnalyzer
.Result
<MLSkeleton> results
) {
SparseArray
<MLSkeleton> items
= results
.getAnalyseList();
List
<MLSkeleton> resultsList
= new ArrayList<>();
for (int i
= 0; i
< items
.size(); i
++) {
resultsList
.add(items
.valueAt(i
));
}
float result
= analyzer
.caluteSimilarity(resultsList
, templateList
);
}
@Override
public void destroy() {
}
}
2.3 设置识别结果处理器,实现分析器与结果处理器的绑定。
analyzer
.setTransactor(new SkeletonAnalyzerTransactor());
2.4 创建LensEngine,该类由ML Kit SDK提供,用于捕捉相机动态视频流并传入分析器。建议设置的相机显示尺寸不小于320 * 320像素,不大于1920 * 1920像素。
LensEngine lensEngine
= new LensEngine.Creator(getApplicationContext(), analyzer
)
.setLensType(LensEngine
.BACK_LENS
)
.applyDisplayDimension(1280, 720)
.applyFps(20.0f)
.enableAutomaticFocus(true)
.create();
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/hms-ml-demo/tree/master/Skeleton-Camera 解决集成问题请到Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest
原文链接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202333916402640253&fid=18 作者:留下落叶
华为开发者论坛
安卓开发
华为开发者论坛是一个为开发者提供信息传播、开发交流、技术分享的交流空间。开发者可以在此获取技术干货、华为源码开放、HMS最新活动等信息,欢迎大家来交流分享!