当前位置: 首页 > news >正文

HarmonyOS NEXT 技术实践-基于基础视觉服务实现骨骼点识别

本示例展示了如何在HarmonyOS Next中实现基于基础视觉服务的骨骼点识别功能。骨骼点识别是计算机视觉中的一项重要技术,广泛应用于运动分析、健身监控和增强现实等领域。通过使用HarmonyOS Next提供的视觉API,开发者能够轻松地对人物图像进行骨骼点检测,并返回准确的骨骼点信息。本文将详细介绍项目的实现过程,包括如何调用骨骼点检测API、设计应用界面,以及如何展示识别结果。通过本示例,开发者将深入了解如何在HarmonyOS Next环境中集成视觉识别技术,并实现图像中的骨骼点自动识别和分析功能。
在这里插入图片描述


一、项目背景与目标

1. 框架介绍

HarmonyOS Next提供了一整套的视觉服务框架,使开发者可以轻松实现图像识别、处理等功能。特别是基础视觉服务,它为开发者提供了丰富的API接口,支持包括骨骼点识别、物体检测、人脸识别等多种图像分析任务。

在智能设备和应用中,骨骼点识别功能被广泛应用于运动分析、健身跟踪、虚拟人物建模等领域。目前,HarmonyOS Next的骨骼点识别功能支持17个关键点的识别,具体为鼻子,左右眼,左右耳,左右肩,左右肘、左右手腕、左右髋、左右膝、左右脚踝。

在这里插入图片描述

本示例使用了 基础视觉服务 提供的 骨骼点识别 功能,结合HarmonyOS Next的开发平台,演示如何通过图像中的骨骼点检测,实现人物的骨骼结构识别和展示。开发者可以通过这个示例,掌握如何在HarmonyOS Next应用中集成并调用视觉识别API。

2. 项目目标

本项目旨在展示如何使用HarmonyOS Next基础视觉服务进行骨骼点识别,帮助开发者快速了解如何集成骨骼点识别功能。通过实现该功能,用户可以在应用中上传一张人物全身照片,系统自动识别并返回图片中的骨骼点信息。

具体目标如下:

  • 实现骨骼点识别API的调用。
  • 用户可以上传图片或拍照,应用识别人物骨骼点并展示。
  • 骨骼点信息通过文本形式展示,帮助用户理解和分析图像中的人物结构。

二、项目实现

1. 项目目录结构

以下是本项目的目录结构:

├─ entry/src/main/ets
│  ├─ entryability
│  │  └─ EntryAbility.ets            // 程序入口
│  ├─ entrybackupability
│  │  └─ EntryBackupAbility.ets
│  └─ pages
│     └─ Index.ets                   // 应用主界面
└─ entry/src/main/resources          // 资源文件目录
  • EntryAbility.ets:程序的入口文件,负责应用初始化和界面设置。
  • Index.ets:应用的主界面,用户在该界面中选择图片并启动骨骼点识别。
  • resources目录:存放资源文件,如图片、图标等。

2. 项目实现

本示例使用的核心功能是调用骨骼点识别接口,该接口在@hms.ai.vision.skeletonDetection.d.ts中定义,开发者可以通过该API处理上传的图片,获取人物的骨骼点信息。

  1. 导入骨骼点检测接口
    在项目中需要先导入骨骼点检测的API:

    import { skeletonDetection } from '@hms.ai.vision.skeletonDetection';
    
  2. 选择图片或拍照
    用户通过点击按钮选择本地图库中的图片,或直接使用相机拍摄一张新的图片。

  3. 调用骨骼点识别接口
    使用process方法调用骨骼点识别服务:

    skeletonDetection.process({uri: 'imageUri'  // 图片的路径或URI
    }).then(response => {// 处理返回的识别结果console.log('骨骼点识别结果:', response);
    }).catch(error => {console.error('骨骼点识别失败:', error);
    });
    
  4. 展示结果
    将识别到的骨骼点信息通过文本形式显示在应用界面上,帮助用户查看识别结果。

3. 注意事项

  • 图片格式:确保上传的图片格式符合基础视觉服务的要求,一般支持JPG、PNG等常见格式。输入图像具有合适成像的质量(建议720p以上),100px<高度<10000px,100px<宽度<10000px,高宽比例建议5:1以下,接近手机屏幕高宽比例为宜。
  • API限制:该骨骼点识别API可能会对处理的图片大小、分辨率等有所限制,开发者需要提前了解相关文档。
  • 权限管理:在使用相机或访问图库时,需要合理配置相应的权限,如CAMERAREAD_EXTERNAL_STORAGE等。

三、核心代码解析

1. 导入必要的依赖

Index.ets文件中,我们首先导入骨骼点识别API和其他必要的模块:

import { skeletonDetection } from '@hms.ai.vision.skeletonDetection';
import { ImagePicker, Camera } from '@ohos.multimedia.media';

2. 图片选择与拍照

我们实现了两个功能:从图库选择图片和直接通过相机拍摄图片。以下是从图库选择图片的代码:

const selectImage = () => {ImagePicker.pickImage().then(uri => {// 获取到图片URIstartSkeletonDetection(uri);}).catch(error => {console.error('选择图片失败:', error);});
};

3. 调用骨骼点识别接口

当图片选择完成后,调用骨骼点识别接口进行处理:

const startSkeletonDetection = (imageUri) => {skeletonDetection.process({uri: imageUri}).then(response => {displaySkeletonPoints(response);}).catch(error => {console.error('骨骼点识别失败:', error);});
};

4. 显示识别结果

识别结果以文本的形式展示:

const displaySkeletonPoints = (response) => {const points = response.skeletonPoints;  // 假设API返回的结果包含骨骼点数组let resultText = '识别到的骨骼点信息:\n';points.forEach((point, index) => {resultText += `${index + 1}: (${point.x}, ${point.y})\n`;});console.log(resultText);
};

四、效果预览

在应用启动后,用户可以选择图片或者拍摄一张照片,点击“开始骨骼点识别”后,应用会开始识别图片中的骨骼点并在界面上以文本形式展示结果。以下是效果预览:

  1. 选择图片:用户选择图片或拍照。

在这里插入图片描述

  1. 识别过程:点击“开始骨骼点识别”后,应用将处理图片并进行骨骼点识别。

在这里插入图片描述

  1. 结果展示:识别到的骨骼点信息通过文本在界面上展示。

在这里插入图片描述


五、总结

通过本项目的实现,我们学习了如何利用HarmonyOS Next中的基础视觉服务,进行骨骼点识别功能的开发。通过调用@hms.ai.vision.skeletonDetection API,开发者可以轻松实现对人物全身图像的骨骼点检测,为智能健身、运动分析、虚拟现实等应用提供技术支持。

本示例展示了如何集成图像识别API,如何获取图片并传递给识别服务,最终将结果展示给用户。开发者可以基于此示例进一步扩展功能,如对不同类型的图像进行处理、优化识别精度、结合其他AI能力等,提升应用的智能化水平。

相关文章:

HarmonyOS NEXT 技术实践-基于基础视觉服务实现骨骼点识别

本示例展示了如何在HarmonyOS Next中实现基于基础视觉服务的骨骼点识别功能。骨骼点识别是计算机视觉中的一项重要技术&#xff0c;广泛应用于运动分析、健身监控和增强现实等领域。通过使用HarmonyOS Next提供的视觉API&#xff0c;开发者能够轻松地对人物图像进行骨骼点检测&…...

Debian系统宝塔面板安装LiteSpeed Memcached(LSMCD)

参考链接 1. 官网指引&#xff1a; https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:lsmcd:installation 2. 安装OpenLiteSpeed官方LSMCD对象缓存替换Memcached详细图文教程 - 搬主题 实操记录&#xff1a; 首先LSMCD 默认的端口是11211&#xff0c;…...

tcp 的三次握手与四次挥手

问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…...

QT--信号与槽机制

什么是信号与槽&#xff1f; 在 Qt 中&#xff0c;信号与槽是一种用于对象间通信的机制。它使得一个对象可以通知其他对象某个事件的发生&#xff0c;而不需要直接知道这些对象的具体实现。这种机制非常适合事件驱动的编程模型&#xff0c;如用户界面交互。 1. 信号&#xff…...

vue3项目history路由模式部署上线405、刷新404问题(包括部分页面刷新404问题)

一、找不到js模块 解决方法&#xff1a;配置Nginx配置文件&#xff1a; // root /your/program/path/dist root /www/wwwroot/my_manage_backend_v1/dist;二、刷新页面导致404问题(Not found) 经过一系列配置后发现进入页面一切正常&#xff0c;包括路由前进和回退&#xff0…...

电阻容差是啥意思

定义 电阻器在生产过程中&#xff0c;由于工艺等因素的限制&#xff0c;其实际阻值不可能与标称阻值完全一致&#xff0c;总会存在一定的误差。例如&#xff0c;一个标称阻值为100Ω、容差为5%的电阻&#xff0c;其实际阻值可能在95Ω至105Ω之间。 产生原因 材料特性差异&a…...

Rust: offset祼指针操作

offset是偏移元素个数&#xff0c;不是字节数&#xff01; fn main(){let student_a Student{id:20240001,name:"张三娃".into(),class_id:3,age:14,grade:1};let student_b Student{id:20240002,name:"李四牛".into(),class_id:3,age:15,grade:1};let …...

SD本地部署和云端部署的区别以及优劣

相信有相当多多小伙伴应该是看了一些技术或者设计的博主的教程后开始尝试使用SD的&#xff0c;在大多数的SD教程中&#xff0c;绝大多数都是推荐本地化的部署流程&#xff0c;毕竟本地部署后的SD自由度会显得高一些&#xff0c;大部分的操作也都完全可以实现&#xff0c;只不过…...

4、数据结构与算法解析(C语言版)--栈

栈的数据存储遵循“后进先出的规则”&#xff0c;这在计算机里面是非常有用的&#xff0c;比如word等编辑软件的"撤销"功能&#xff0c;就是使用栈进行实现的。 1、创建项目 main.h #ifndef _MAIN_H #define _MAIN_H#include <stdio.h> #include <stdlib.…...

c# 后台任务自动执行

如果有些任务需要在后台自动执行&#xff0c;且时不时需要添加一个任务&#xff0c;且按照优先级顺序执行&#xff0c;那么可以参考本文的方法。 后台任务类 定义一个后台任务类BackgroundTaskThread&#xff0c;其中Start方法是用来启动任务的&#xff0c;循环查询是否有添加…...

被裁20240927 --- 嵌入式硬件开发 前篇

前篇主要介绍一些相关的概念&#xff0c;用于常识扫盲&#xff0c;后篇开始上干货&#xff01; 他捧着一只碗吃过百家的饭 1. 处理器芯片1.1 处理器芯片制造商一、 英特尔&#xff08;Intel&#xff09;二、 三星&#xff08;SAMSUNG&#xff09;三、 高通&#xff08;Qualcomm…...

重温设计模式--观察者模式

文章目录 观察者模式&#xff08;Observer Pattern&#xff09;概述观察者模式UML图作用&#xff1a;实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题&#xff08;Subject&#xff09;&#xff1a;具体主题&#xff08;Concrete Subject&#xf…...

vulnhub靶场——Log4j2

第一步:搭建靶场环境 #开启环境 cd vulhub/log4j/CVE-2021-44228 docker-compose up -d 来到网站首页 第二步:搭建一个dnslog平台上获取我们注入的效果 第三步:发现 /solr/admin/cores?action 这里有个参数可以传 我们可以看到留下了访问记录并且前面的参数被执行后给我们回…...

Vue3中使用resolve进行路径别名设置

Vue3中使用resolve进行路径别名设置 使用Vite初始化Vue3项目工程请参考文章&#xff1a;Vite创建Vue3工程并引入ElementPlus&#xff08;图文详细&#xff09; 1.使用~路径别名替换根目录&#xff0c;使用路径别名替换src目录 在vite.config.js配置文件下添加如下配置 impo…...

Linux 添加磁盘

1、编辑虚拟机添加磁盘 然后开启虚拟机 选项如下&#xff1a; DOS (MBR) a 切换可引导标志 b 编辑嵌套的 BSD 磁盘标签 c 切换 DOS 兼容标志 通用 d 删除一个分区 F 列出未分配的空闲空间 l 列出已知的分区类型 n 添加一个新分区 p 打印分区表 t 更改分区类…...

集成 jacoco 插件,查看单元测试覆盖率

文章目录 前言集成 jacoco 插件&#xff0c;查看单元测试覆盖率1. 添加pom2. 配置完成、执行扫描3. 执行结果4. 单元测试报告 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞…...

MySQL purged gtid是如何生成和维护的

目录 1. GTID的基本概念2. GTID的生成3. GTID的清除3.1 手动清除二进制日志3.2 自动清除二进制日志3.3 重置主库 在MySQL中&#xff0c;gtid_purged表示已清除的GTID集合。 gtid_purged的生成和维护过程如下&#xff1a; 1. GTID的基本概念 GTID&#xff08;Global Transact…...

[创业之路-206]:《华为战略管理法-DSTE实战体系》- 6-关键成功因素法CSF

目录 一、概述 1、定义与起源 2、关键成功因素的定义 3、关键成功因素的来源 4、关键成功因素的确认方法 5、关键成功因素法的步骤 6、关键成功因素法的应用 7、关键成功因素法的优势与局限性 二、 关键成功因素法CSF的应用 1、企业战略管理 2、项目管理 3、绩效管…...

[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算

在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…...

目标检测——基于yolov8和pyqt的螺栓松动检测系统

目录 1.项目克隆和环境配置1.1 我这里使用的是v8.0.6版本1.2 项目代码结构介绍 2.数据集介绍2.1 数据集采集2.2采集结果介绍 3.模型训练4.pyqt界面设计4.1 界面内容介绍4.2 界面实现 5.操作中的逻辑实现5.1 图片检测5.2 文件夹检测5.3 视频检测和摄像头检测 6. 效果展示 1.项目…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...