骨骼点检测技术详解:探索机器识别人体动作的奥秘

随着人工智能技术的持续进步,机器不仅能听懂人类语言,识别图片内容,还能通过对人体动作的精准捕捉来实现有效的人体行为监测。这项技术主要集中在智能视频监控,病人监护系统,人机交互,虚拟现实,人体动画,智能家居,智能安防,运动员辅助训练等领域。那么机器是如何识别人体动作的呢?我们可以通过学习HarmonyOS SDK基础视觉服务(Core Vision Kit)提供的骨骼点检测能力来进行探索。

人体骨骼点检测,主要是检测人体的一些关键点,当前,基础视觉服务的骨骼检测技术可支持17个关键点的识别,具体为鼻子,左右眼,左右耳,左右肩,左右肘、左右手腕、左右髋、左右膝、左右脚踝。

系统可以通过检测出的关键点描述人体的骨骼信息,并基于骨骼点信息对人体姿势进行估计,从而识别人体的姿势和动作,比如站立、蹲下、跑步等。骨骼点检测技术除了能实现对人体行为的监控,还可以应用于游戏娱乐领域,通过对人体骨骼点的检测捕捉人体动作姿态,并应用于虚拟模型中,使模型可以活动起来。

开发步骤

开发者可以通过集成HarmonyOS SDK基础视觉服务提供的API来调用骨骼检测功能,具体步骤如下:

1.在使用骨骼点检测时,将实现骨骼点检测相关的类添加至工程。

复制代码
import { skeletonDetection, visionBase } from '@kit.CoreVisionKit';
import { BusinessError } from '@kit.BasicServicesKit';

2.简单配置页面的布局,并在Button组件添加点击事件,拉起图库,选择图片。

复制代码
Button('选择图片')
  .type(ButtonType.Capsule)
  .fontColor(Color.White)
  .alignSelf(ItemAlign.Center)
  .width('80%')
  .margin(10)
  .onClick(() => {
    // 拉起图库,获取图片资源
    this.selectImage();
  })

3.通过图库获取图片资源,将图片转换为PixelMap。

复制代码
private async selectImage() {
  let uri = await this.openPhoto()
  if (uri === undefined) {
    hilog.error(0x0000, 'skeletonDetectSample', "Failed to defined uri.");
  }
  this.loadImage(uri)
}

private openPhoto(): Promise<string> {
  return new Promise<string>((resolve, reject) => {
    let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
    photoPicker.select({
      MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE, maxSelectNumber: 1
    }).then(res => {
      resolve(res.photoUris[0])
    }).catch((err: BusinessError) => {
      hilog.error(0x0000, 'skeletonDetectSample', `Failed to get photo image uri. code:${err.code},message:${err.message}`);
      reject('')
    })
  })
}

private loadImage(name: string) {
  setTimeout(async () => {
    let fileSource = await fileIo.open(name, fileIo.OpenMode.READ_ONLY);
    this.imageSource = image.createImageSource(fileSource.fd);
    this.chooseImage = await this.imageSource.createPixelMap();
  }, 100)
}

4.实例化Request对象,并传入待检测图片的PixelMap,实现骨骼点检测功能。

复制代码
// 调用骨骼点识别接口
let request: visionBase.Request = {
inputData: { pixelMap: this.chooseImage, }
};
let data: skeletonDetection.SkeletonDetectionResponse = await (await 
skeletonDetection.SkeletonDetector.create()).process(request);

5.(可选)如果需要将结果展示在界面上,可以用下列代码。

复制代码
let data: skeletonDetection.SkeletonDetectionResponse = await (await skeletonDetection.SkeletonDetector.create()).process(request);
let poseJson = JSON.stringify(data);
hilog.info(0x0000, 'skeletonDetectSample', `Succeeded in face detect:${poseJson}`);
this.dataValues = poseJson;

了解更多详情>>

访问基础视觉服务联盟官网

获取骨骼点检测能力的开发指导文档

相关推荐
zhanshuo11 小时前
构建可扩展的状态系统:基于 ArkTS 的模块化状态管理设计与实现
harmonyos
zhanshuo11 小时前
ArkTS 模块通信全解析:用事件总线实现页面消息联动
harmonyos
codefish79816 小时前
鸿蒙开发学习之路:从入门到实践的全面指南
harmonyos
yrjw1 天前
一款基于react-native harmonyOS 封装的【文档】文件预览查看开源库(基于Harmony 原生文件预览服务进行封装)
harmonyos
搜狐技术产品小编20232 天前
搜狐新闻直播间适配HarmonyOs实现点赞动画
华为·harmonyos
zhanshuo2 天前
ArkUI 玩转水平滑动视图:超全实战教程与项目应用解析
harmonyos·arkui
zhanshuo2 天前
ArkUI Canvas 实战:快速绘制柱状图图表组件
harmonyos·arkui
zhanshuo2 天前
手把手教你用 ArkUI 写出高性能分页列表:List + onScroll 实战解析
harmonyos
zhanshuo2 天前
深入解析 ArkUI 触摸事件机制:从点击到滑动的开发全流程
harmonyos
i仙银3 天前
鸿蒙沙箱浏览器 - SandboxFinder
app·harmonyos