自学记录鸿蒙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能力结合,开发更加智能的解决方案。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Cesium】九、Cesium点击地图获取点击位置的坐标,并在地图上添加图标

文章目录 一、前言二、实现方法三、App.vue 一、前言 查找发现好几种方法可以获取到点击位置的坐标。这里我实现需求就不深究学习了。将几位大佬的方法学习过来稍微整合了一下。 本文参考文章&#xff1a; cesium 4种拾取坐标的方法 【Cesium基础学习】拾取坐标 cesium拾取当…

ts总结一下

ts基础应用 /*** 泛型工具类型*/ interface IProps {id: string;title: string;children: number[]; } type omita Omit<IProps, id | title>; const omitaA: omita {children: [1] }; type picka Pick<IProps, id | title>; const pickaA: picka {id: ,title…

人脑处理信息的速度与效率:超越计算机的直观判断能力

人脑处理信息的速度与效率&#xff1a;超越计算机的直观判断能力 关键词&#xff1a; #人脑信息处理 Human Brain Information Processing #并行处理 Parallel Processing #视觉信息分析 Visual Information Analysis #决策速度 Decision Speed #计算机与人脑比较 Computer v…

CentOS — 目录管理

文章目录 一、目录结构二、切换目录三、查看目录四、创建目录五、复制目录六、剪切目录七、删除目录 目录也是一种文件。 蓝色目录&#xff0c;绿色可执行文件&#xff0c;红色压缩文件&#xff0c;浅蓝色链接文件&#xff0c;灰色其它文件&#xff0c; 点开头的是隐藏文件&…

cursor设备ID修改器,你可以无限试用cursor了!

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

springboot523基于Spring Boot的大学校园生活信息平台的设计与实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本大学校园生活信息平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

RabbitMQ中的异步Confirm模式:提升消息可靠性的利器

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;扮演着至关重要的角色&#xff0c;它能够解耦系统组件、提高系统的可扩展性和可靠性。RabbitMQ作为一款广泛使用的消息队列中间件&#xff0c;提供了多种机制来确保消息的可靠传递。其中&#xff…

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…

什么是 GPT?Transformer 工作原理的动画展示

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 1 图解 “Generative Pre-trained Transformer”&#xff08;GPT&#xff09; 1.1 Generative&#xff1a;生成式 1.1.1 可视化 1.1.2 生成式 vs. 判别式&#xff08;译注&#xff09; 1.2 Pr…

u3d中JSON数据处理

一.认识JSON 1.1 Json概述 JSON&#xff08;JavaScript Object Notation&#xff0c;JavaScript对象表示法&#xff09;JSON和XML是比较类似的技术&#xff0c;都是用来存储文本信息数据的&#xff1b;相对而言&#xff0c;JSON比XML体积更小巧&#xff0c;但是易读性不如XML…

Android 模拟器系统镜像选择指南

Android 模拟器系统镜像选择指南 在选择 Android 模拟器的系统镜像时&#xff0c;根据实际需求选择合适的版本。以下是具体建议&#xff1a; 1. 目标 API Level 如果需要适配最新版本的 Android&#xff1a; 选择&#xff1a;API 35 (Android 14)&#xff08;代号&#xff1…

网络分析工具-tcpdump

文章目录 前言一、tcpdump基础官网链接命令选项详解常规过滤规则tcpdump输出 一、tcpdump实践HTTP协议ICMP状态抓包 前言 当遇到网络疑难问题的时候&#xff0c;抓包是最基本的技能&#xff0c;通过抓包才能看到网络底层的问题 一、tcpdump基础 tcpdump是一个常用的网络分析工…

打造三甲医院人工智能矩阵新引擎(一):文本大模型篇--基于GPT-4o的探索

一、引言 当今时代&#xff0c;人工智能技术正以前所未有的速度蓬勃发展&#xff0c;深刻且广泛地渗透至各个领域&#xff0c;医疗行业更是这场变革的前沿阵地。在人口老龄化加剧、慢性疾病患病率上升以及人们对健康需求日益增长的大背景下&#xff0c;三甲医院作为医疗体系的核…

mysql连接时报错1130-Host ‘hostname‘ is not allowed to connect to this MySQL server

不在mysql服务器上通过ip连接服务提示1130错误怎么回事呢。这个错误是因为在数据库服务器中的mysql数据库中的user的表中没有权限。 解决方案 查询mysql库的user表指定账户的连接方式 SELECT user, host FROM mysql.user;修改指定账户的host连接方式 update mysql.user se…

linux下安装达梦数据库v8详解

目录 操作系统、数据库 1、下载达梦数据库 2、安装前准备 2.1、建立数据库用户和组 2.2、修改文件打开最大数 2.3、挂载镜像 2.4、新建安装目录 3、数据库安装 4、配置环境变量 5、初始化数据库实例 6、注册服务 7、使用数据库 8、卸载数据库 9、多实例管理 10、…

低代码引擎插件开发:开启开发的便捷与创新之路

OneCode授权演示 一、低代码引擎与插件开发的概述 在当今快节奏的软件开发领域&#xff0c;低代码引擎正逐渐崭露头角。低代码引擎旨在让开发人员能够以最少的代码量创建功能丰富的应用程序&#xff0c;而其中的关键组成部分便是插件开发。低代码引擎通过提供可视化的开发环境…

多光谱图像的处理和分析方法有哪些?

一、预处理方法 1、辐射校正&#xff1a; 目的&#xff1a;消除或减少传感器本身、大气条件以及太阳光照等因素对多光谱图像辐射亮度值的影响&#xff0c;使得图像的辐射值能够真实反映地物的反射或发射特性。 方法&#xff1a;包括传感器校正和大气校正。传感器校正主要是根…

贪心算法概述

贪心算法总是作出当前看来最好的选择&#xff0c;是局部最优 可以使用贪心算法的问题一般具有两个重要的性质 贪心选择性质最优子结构性质 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到 其与动态规划的问题区别在于&#xff0c;动态规划算法通…

Git 下载问题及解决方法

在某些网络环境下&#xff0c;可能会遇到 Git 无法下载的问题&#xff0c;通常是由于网络限制或需要通过代理访问导致的。以下是常见的解决方法&#xff0c;包括设置代理、取消代理以及其他诊断方法。 1. 设置 Git 代理 在一些网络环境下&#xff0c;可能会使用工具&#xff0…

【算法刷题】数组篇

文章目录 数组中两个数的最⼤异或值找出所有⼦集的异或总和再求和 数组中两个数的最⼤异或值 leet code&#xff1a;https://leetcode.cn/problems/maximum-xor-of-two-numbers-in-an-array/description/暴力解法&#xff1a;【部分样例超时&#xff0c;通过不了&#xff0c;不…