自学记录鸿蒙API 13:实现多目标识别Object Detection

起步:什么叫多目标识别?

无论是生活中的动物识别、智能相册中的场景分类,还是工业领域的检测任务,都能看到多目标识别的身影。这次,我决定通过学习HarmonyOS最新的Object Detection API(API 13),一步步探索如何实现多目标识别应用,并通过亲手完成一个完整的项目来验证自己的学习成果。


先思考

在深入学习之前,我认真思考了这一技术的潜在应用场景:

  1. 智能图像分类:对用户拍摄的图片进行智能分类,比如区分风景、建筑、人物等。
  2. 工业检测:识别生产线上产品的质量问题,如瑕疵或异常。
  3. 无人零售:分析购物场景中的商品分布,提高商品推荐精度。
  4. 交通监控:检测车辆和行人,实现交通状况分析。
  5. AR互动:结合多目标识别技术,实现与周围物体的实时交互。

你还别说,我认识到多目标识别的广阔潜力,同时也促使我更加系统地理解其背后的实现逻辑。


第一阶段:了解Object Detection API的功能

HarmonyOS的Object Detection API提供了以下能力:

  • 目标类别识别:识别图像中目标的类别,如风景、动物、植物等。
  • 边界框生成:为识别的目标生成精确的边界框,便于后续处理。
  • 高精度置信度:为每个目标提供置信度分数,衡量识别结果的可靠性。
  • 多目标支持:能够在单张图片中同时检测多个目标对象。

这种强大的功能正是我此次学习和实践的重点。


第二阶段:项目初始化与权限配置

为了确保多目标识别服务能够正常运行,我首先配置了项目的权限文件。以下是必要的权限配置:

{"module": {"abilities": [{"name": "ObjectDetectionAbility","permissions": ["ohos.permission.INTERNET","ohos.permission.READ_MEDIA","ohos.permission.WRITE_MEDIA"]}]}
}

通过这些配置,我的项目能够读取用户的图片文件,并与HarmonyOS的AI服务接口交互。


第三阶段:多目标识别核心功能实现

初始化与销毁检测器

多目标识别服务需要初始化一个检测器实例,同时在不再使用时销毁该实例以释放资源。以下是相关代码:

import { objectDetection } from '@kit.CoreVisionKit';let detector: objectDetection.ObjectDetector | undefined = undefined;async function initializeDetector() {detector = await objectDetection.ObjectDetector.create();console.info('多目标识别检测器初始化成功');
}async function destroyDetector() {if (detector) {await detector.destroy();console.info('多目标识别检测器已销毁');}
}

加载图片并处理检测

实现多目标识别的核心在于加载图片并调用process方法进行检测:

async function detectObjects(imageUri: string) {if (!detector) {console.error('检测器未初始化');return;}const pixelMap = await loadPixelMap(imageUri);const request = {inputData: { pixelMap },scene: visionBase.SceneMode.FOREGROUND,};const response = await detector.process(request);if (response.objects.length === 0) {console.info('未检测到任何目标');} else {response.objects.forEach((object, index) => {console.info(`目标 ${index + 1}:类别 - ${object.labels[0]}, 置信度 - ${object.score}`);});}pixelMap.release();
}

辅助方法:加载图片

import { fileIo } from '@kit.CoreFileKit';
import { image } from '@kit.ImageKit';async function loadPixelMap(imageUri: string): Promise<image.PixelMap> {try {console.info(`加载图片: ${imageUri}`);// 打开图片文件const fileDescriptor = await fileIo.open(imageUri, fileIo.OpenMode.READ_ONLY);const imageSource = image.createImageSource(fileDescriptor.fd);// 创建PixelMap对象const pixelMap = await imageSource.createPixelMap();// 关闭文件资源await fileIo.close(fileDescriptor);console.info('PixelMap加载成功');return pixelMap;} catch (error) {console.error('加载图片失败:', error);throw new Error('加载PixelMap失败');}
}

第四阶段:用户界面设计

为了使用户可以方便地选择图片并查看检测结果,我利用ArkUI设计了一个简单的用户界面:

import { View, Text, Button } from '@ohos.arkui';export default View.create({build() {return {type: "flex",flexDirection: "column",children: [{type: Text,content: "多目标识别应用",style: { fontSize: "20vp", textAlign: "center", marginTop: "20vp" },},{type: Button,content: "选择图片",style: { height: "50vp", marginTop: "10vp" },onClick: this.onSelectImage,},{type: Button,content: "检测目标",style: { height: "50vp", marginTop: "10vp" },onClick: this.onDetectObjects,},],};},onSelectImage() {this.imageUri = '/data/media/sample_image.jpg';console.info('图片已选择:', this.imageUri);},async onDetectObjects() {await detectObjects(this.imageUri);},
});

第五阶段:性能优化与功能扩展

性能优化

  1. 分辨率调节:降低图片分辨率以减少处理时间。
  2. 并行处理:利用多线程同时处理多张图片。
  3. 缓存机制:缓存已处理的图片结果,避免重复计算。

功能扩展

  1. 目标类型可视化:在图片上绘制检测到的目标边界框。
  2. 分类统计:统计不同类别目标的数量。
  3. 实时检测:结合相机模块实现实时多目标识别。

最后的感悟

通过此次学习和实践,我不仅掌握了多目标识别API的基本功能,还深刻认识到其广阔的应用场景。在未来的开发中,我计划探索更多创新的实现方式,例如结合语音助手,通过语音控制触发目标识别,或与其他AI能力结合,开发更加智能的解决方案。

如果你也对多目标识别感兴趣,不妨从这些基础功能开始,一步步实现自己的创意!

当然如果你也在这一领域研究,不妨关注我,我们一起进步~!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501541.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光伏安装在屋顶:安全、环保还是潜在威胁?

随着环保意识的增强和科技的进步&#xff0c;光伏发电作为一种可再生能源技术&#xff0c;正逐渐走进千家万户。然而&#xff0c;随着光伏板的普及&#xff0c;关于其在屋顶安装是否对人体有害的疑问也随之而来。 一、光伏发电的基本原理 光伏发电是利用半导体界面的光生伏特效…

被催更了,2025元旦源码继续免费送

“时间从来不会停下&#xff0c;它只会匆匆流逝。抓住每一刻&#xff0c;我们才不会辜负自己。” 联系作者免费领&#x1f496;源&#x1f496;码。 三联支持&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 更多内容敬请期待。如有需要源码可以联系作者免…

MYsql--------ubantu中安装mysql

在Ubuntu平台上下载、启动和关闭MySQL的方法如下&#xff1a; 下载安装MySQL 更新软件包列表&#xff1a;打开终端&#xff0c;输入以下命令&#xff0c;确保软件包列表是最新的。sudo apt update安装MySQL服务器&#xff1a;执行以下命令安装MySQL服务器。在安装过程中&…

pygame飞机大战

飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 import random import pygame WIND…

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存

Flutter中的网络请求图片存储为缓存&#xff0c;与定制删除本地缓存 1&#xff1a;封装请求图片函数 2&#xff1a;访问的图片都会转为本地缓存&#xff0c;当相同的请求url&#xff0c;会在本地调用图片 3&#xff1a;本地缓存管理【windows与andriod已经测试】【有页面】【有…

无线AP安装注意事项

现在的办公楼、酒店等项目中都设计含有网络无线覆盖这一项&#xff0c;在项目实施中&#xff0c;往往采用的是便捷并且后期便于网络无线设备管理的无线ap设备&#xff0c;作为前端无线信号的覆盖。在具体安装无线AP过程中&#xff0c;我们必须要注意以下几点才能保证项目实施完…

Golang的容器编排实践

Golang的容器编排实践 一、Golang中的容器编排概述 作为一种高效的编程语言&#xff0c;其在容器编排领域也有着广泛的运用。容器编排是指利用自动化工具对容器化的应用进行部署、管理和扩展的过程&#xff0c;典型的容器编排工具包括Docker Swarm、Kubernetes等。在Golang中&a…

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

C# 在PDF中添加和删除水印注释 (Watermark Annotation)

目录 使用工具 C# 在PDF文档中添加水印注释 C# 在PDF文档中删除水印注释 PDF中的水印注释是一种独特的注释类型&#xff0c;它通常以透明的文本或图片形式叠加在页面内容之上&#xff0c;为文档添加标识或信息提示。与传统的静态水印不同&#xff0c;水印注释并不会永久嵌入…

分析服务器 systemctl 启动gozero项目报错的解决方案

### 分析 systemctl start beisen.service 报错 在 Linux 系统中&#xff0c;systemctl 是管理系统和服务的主要工具。当我们尝试重启某个服务时&#xff0c;如果服务启动失败&#xff0c;systemctl 会输出错误信息&#xff0c;帮助我们诊断和解决问题。 本文将通过一个实际的…

Dubbo扩展点加载机制

加载机制中已经存在的一些关键注解&#xff0c;如SPI、©Adaptive> ©Activateo然后介绍整个加载机制中最核心的ExtensionLoader的工作流程及实现原理。最后介绍扩展中使用的类动态编译的实 现原理。 Java SPI Java 5 中的服务提供商https://docs.oracle.com/jav…

如何利用Logo设计免费生成器创建专业级Logo

在当今的商业世界中&#xff0c;一个好的Logo是品牌身份的象征&#xff0c;它承载着公司的形象与理念。设计一个专业级的Logo不再需要花费大量的金钱和时间&#xff0c;尤其是当我们拥有Logo设计免费生成器这样的工具时。接下来&#xff0c;让我们深入探讨如何利用这些工具来创…

游戏如何检测iOS越狱

不同于安卓的开源生态&#xff0c;iOS一直秉承着安全性更高的闭源生态&#xff0c;系统中的硬件、软件和服务会经过严格审核和测试&#xff0c;来保障安全性与稳定性。 据FairGurd观察&#xff0c;虽然iOS系统具备一定的安全性&#xff0c;但并非没有漏洞&#xff0c;如市面上…

智联视频超融合平台:电力行业的智能守护者

文章目录 一、远程实时监控与设备状态监测二、提高应急响应能力三、实现无人值守与减员增效四、保障电力设施安全与防范外部破坏五、提升电网运行管理效率与决策科学性六、助力电力企业数字化转型与智能化发展七、智联视频超融合平台 在当今数字化浪潮下&#xff0c;视频联网平…

卸载干净 IDEA(图文讲解)

目录 1、卸载 IDEA 程序 2、注册表清理 3、残留清理 1、卸载 IDEA 程序 点击屏幕左下角 Windows 图标 -> 设置-控制面板->intellij idea 勾选第一栏 Delete IntelliJ IDEA 2022.2 caches and local history&#xff0c;表示同时删除 IDEA 本地缓存以及历史。 Delete I…

计算机网络•自顶向下方法:路由选路算法

路由选路算法 在网络层中&#xff0c;选路是指数据包从源主机到目的主机的传输过程中&#xff0c;如何通过网络中的路由器选择一条合适的路径。路由器根据网络拓扑、路由表、协议规则等来决定如何将数据包转发到下一跳&#xff0c;直到数据包到达目的地。 选路算法分类 静态算…

Qemu配置QXL显卡支持分辨率

默认情况下&#xff0c;创建的vm的视频RAM限制为16MB。在win操作系统中分辨率最高就只能调到1024x768。 <video><model typecirrus vram16384 heads1 primaryyes/><address typepci domain0x0000 bus0x00 slot0x02 function0x0/> </video>单单修改ram…

【区块链】零知识证明基础概念详解

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 零知识证明基础概念详解引言1. 零知识证明的定义与特性1.1 基本定义1.2 三个核心…

Redis面试相关

Redis开篇 使用场景 缓存 缓存穿透 解决方法一&#xff1a; 方法二&#xff1a; 通过多次hash来获取对应的值。 小结 缓存击穿 缓存雪崩 打油诗 双写一致性 两种不同的要求 强一致 读锁代码 写锁代码 强一致&#xff0c;性能低。 延迟一致 方案一&#xff1a;消息队列 方…

以太网协议和LWIP协议详解

一、以太网协议简介 以太网是一种产生较早&#xff0c;使用相当广泛的局域网技术。目前以太网根据速度等级分类大概分为&#xff1a;标准以太网&#xff08;10Mbit/s&#xff09;&#xff0c;快速以太网&#xff08;100Mbit/s&#xff09;&#xff0c;千兆以太网&#xff08;1…