Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自学记录鸿蒙API 13:实现多目标识别Object Detection

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

原创
作者头像
李游Leo
发布于 2024-12-29 14:23:15
发布于 2024-12-29 14:23:15
11900
代码可运行
举报
文章被收录于专栏:我的鸿蒙之旅我的鸿蒙之旅
运行总次数:0
代码可运行

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

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


先思考

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

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

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


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

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

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

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


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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "module": {
    "abilities": [
      {
        "name": "ObjectDetectionAbility",
        "permissions": [
          "ohos.permission.INTERNET",
          "ohos.permission.READ_MEDIA",
          "ohos.permission.WRITE_MEDIA"
        ]
      }
    ]
  }
}

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


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

初始化与销毁检测器

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

代码语言:javascript
代码运行次数:0
运行
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方法进行检测:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
}

辅助方法:加载图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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设计了一个简单的用户界面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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能力结合,开发更加智能的解决方案。

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
中国队六人全部满分夺冠:国际数学奥林匹克竞赛IMO成绩揭晓
机器之心报道 机器之心编辑部 在 IMO 2022 上,中国队以六人全部满分的成绩夺冠。上次全满分,还是 1994 年的美国队。 又一个见证历史的时刻。 今日,国际数学奥林匹克竞赛(IMO)官网正式公布了 2022 年竞赛成绩。中国队以满分 252 的成绩位列第一,实现「四连冠」。 7 月 6 日至 16 日,IMO 2022 在挪威首都奥斯陆举办,由奥斯陆大学和挪威教育部共同承办。 一直以来,IMO 都被看作数学界传奇人物的诞生地。菲尔茨奖得主陶哲轩在 1986 年、1987 年和 1988 年均参加了
机器之心
2022/07/18
7980
中国队六人全部满分夺冠:国际数学奥林匹克竞赛IMO成绩揭晓
包揽数理化国际奥赛全部第一,全员金牌,网友:中国队太秀了
万博 发自 凹非寺 量子位 | 公众号 QbitAI 今年的国际数理化奥赛,中国队的表现用优秀来形容已经不够了: 第52届国际物理奥林匹克竞赛,中国队5名参赛队员包揽前5全员摘金,取得总分、理论、实验和团体4项第一。 △图片来自南大新闻网 第54届国际化学奥林匹克竞赛,中国队4名参赛队员全员摘金,包揽前3名。 △图片来自南开大学公众号 再加上前不久结束的第63届国际数学奥林匹克竞赛,中国队6名参赛队员并列第一,全员摘金,还是全部满分的那种。 事实上,中国队作为传统强队,在国际赛场上金牌拿到手软也算是“基
量子位
2022/07/19
5250
包揽数理化国际奥赛全部第一,全员金牌,网友:中国队太秀了
奥数国家队时隔十年再有女生入选,6名选手5位来自南方高中
据已公布消息,2020年IMO(国际数学奥林匹克竞赛)中国国家队名单,6名征战选手全部确定。
量子位
2020/06/16
9840
5 金 1 银!中国队蝉联 IMO 总分冠军,“一姐”严彬玮遗憾失金
第 61 届国际数学奥林匹克(IMO)成绩正式出炉,中国队 6 名成员成功摘得 5 金 1 银,以总分 215 分获得团体第一名。
AI科技评论
2020/10/09
9570
5 金 1 银!中国队蝉联 IMO 总分冠军,“一姐”严彬玮遗憾失金
王一川全场唯一满分!中国队夺得IMO国际奥赛团队冠军,共摘6块金牌
当奥运赛场刚刚拉开帷幕时,我们在另一场奥林匹克竞赛——IMO(国际数学奥林匹克竞赛),也听到了好消息!
新智元
2021/07/29
1.1K0
全员满分!中国队IMO达成四连冠,大比分领先第二名韩国
丰色 发自 凹非寺 量子位 | 公众号 QbitAI 今天,第63届国际奥林匹克数学竞赛(IMO 2022)成绩公布。 中国团队6名小伙子以全员满分的绝对优势拿下第一名,获得6枚金牌! △总成绩排名 △个人成绩排名 对此,大家都惊呆了! 有人表示“印象里之前得42的都屈指可数”,我们查了一下过往成绩,确实每届也就1-2个满分。 而今年中国队直接全员拉满,以至于总成绩足足领先了第二名韩国队44分。 现在,我们已经在该赛事上实现了自2019年以来的四连冠,并获得了23次第一。 据悉,本届IMO回归线下,
量子位
2022/07/18
3940
全员满分!中国队IMO达成四连冠,大比分领先第二名韩国
5金1银且团队第一,中国队蝉联2020国际数学奥赛,但下届可能就不只有人类参赛了
2020 年国际数学奥林匹克竞赛(IMO)成绩出炉!中国队获得 5 金一银,成绩获得团体总分第一名。这是中国队在 2019 年和美国队获得并列第一后,再度蝉联冠军的位置。
新智元
2020/10/09
5170
腾讯最隐秘人才计划曝光!今年IOI金牌全员现身,数物化竞赛顶流星聚
4人夺金,总金牌突破100……与此同时,针对这些天才少年的争夺也暗流汹涌、愈加激烈。
量子位
2023/11/18
5950
腾讯最隐秘人才计划曝光!今年IOI金牌全员现身,数物化竞赛顶流星聚
中国队喜提六枚金牌,实现IMO团队三连冠:王一川拿下全场唯一满分
机器之心报道 机器之心编辑部 在 IMO 2021 的赛场上,中国队又一次实现了「全员金牌」并喜提冠军,来自华师大二附中的选手王一川更是获得了全场唯一的满分成绩。 刚刚,国际数学奥林匹克竞赛(IMO)官网正式公布了 2021 竞赛成绩。中国队以总分 208 的成绩位列第一,实现三连冠。俄罗斯队和韩国队分列第二、三名,成绩分别是 183 分和 172 分,第四名和第五名由美国队和加拿大队获得,成绩分别为 165 分和 151 分。 国际数学奥林匹克竞赛(IMO)1959 年首次在罗马尼亚举行,每年举办一届
机器之心
2023/03/29
5800
中国队喜提六枚金牌,实现IMO团队三连冠:王一川拿下全场唯一满分
第63届IMO国家队候选人名单公布!上海中学独占2席
作者|Ailleurs 编辑|陈彩娴 4月18日,第63届国际数学奥林匹克竞赛(International Mathematical Olympiad,IMO)中国数学奥林匹克国家集训队集训活动落下帷幕,中国国家队6人名单出炉! 恭喜这6位同学! 上海中学这次一路霸榜,表现十分亮眼。在60人国家训队名单中,上海中学入选9人;60进15的选拔中 ,上海中学又独揽5个名额;而在最终的国家队候选队列中,上海中学也占据两席。 从年级来看,低年级入选人数最多,有4人高二,1人高一,仅有1人高三。可以看得出,如今中国
AI科技评论
2022/04/21
9430
第63届IMO国家队候选人名单公布!上海中学独占2席
三连冠!中国队再夺6枚国际奥数金牌,第一名选手满分,已保送清华姚班
萧箫 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 巧了,昨天东京奥运会刚刚开幕,而另一场头脑角逐的奥赛上,中国队勇夺六金。 刚刚,第62届国际奥林匹克数学竞赛(IMO 2021)成绩公布。 经过2天6题的角逐,中国队全队以总分208分获得第一名,连续三年夺冠。而且参赛6人均获得金牌,其中王一川成为了本届奥赛唯一一个*满分8选手。 今年参赛的6位中国队选手分别是: 王一川:华东师大第二附属中学,高三 韦晨:北京十一学校,高三 彭也博:深圳中学,高二 夏语兴:华中师大第一附属中学,高二 冯晨旭
量子位
2023/03/10
1.6K0
三连冠!中国队再夺6枚国际奥数金牌,第一名选手满分,已保送清华姚班
IOI 2021前四首次被中国包揽!人大附中邓明扬满分夺金,镇海中学再度大秀“基本操作”
邓明扬在2019年的国际数学奥赛(IMO 2019)上获得金牌,虞皓翔也是在2019年同时入选数学国家集训队和信息学国家集训队,还在本次IOI国家队选拔中排名第一。
量子位
2021/07/19
7940
IMO奥数双冠20年后再现:2019奥数中美并列第一!
第60届国际数学奥林匹克竞赛(IMO)今年在英国巴斯市成功举办。经过16、17日两天的激烈竞争,来自114个国家和地区的643位中学参赛者终于迎来了他们刻苦训练的成果!
新智元
2019/07/23
6890
IMO奥数双冠20年后再现:2019奥数中美并列第一!
全球最难中学生数学竞赛捷报:中国队远程参赛摘下三金一铜,新晋“一姐”严彬玮排名世界第三
去年12月满分夺冠中国奥数竞赛的南师大附中女生严彬玮,本次大师赛发挥稳定,队内成绩最好,排名全球第三。
量子位
2020/03/06
8050
全球最难中学生数学竞赛捷报:中国队远程参赛摘下三金一铜,新晋“一姐”严彬玮排名世界第三
华裔家长举报成功,人大附中无法参赛?这一新规或让中国学生无缘IMO美国队
自1959年第一届IMO举办以来,参赛国已经从当时的7个东欧国家发展到现在的100个了,不过相应的是,每个国家最多只能派出6位选手。
新智元
2021/07/29
7000
新一届信息奥赛国家队出炉:3/4来自浙江,北大英才班成最大赢家
而根据北大官网等公开信息,在这成团的四人中,周雨扬、罗煜翔、王展鹏三人均已被北大招至麾下,唯独蒋明润——王小川的成都七中学弟,选择保送去清华。
量子位
2020/09/04
1.1K0
IOI 2020落幕:中国队团体成绩第一!
2020年国际信息学奥赛(IOI 2020)完成了第二日比赛,四名中国队选手皆进入前十,分列3~7名,团队总成绩第一!
量化投资与机器学习微信公众号
2020/09/24
1.2K0
IOI 2020落幕:中国队团体成绩第一!
IMO 2021国家队6人名单出炉!CMO全国冠军入选,深圳中学独占2席
最新消息:第62届国际数学奥林匹克竞赛(International Mathematical Olympiad)中国参赛名单公布!6 人入选,其中深圳中学独占 2 席,表现突出:
AI科技评论
2021/04/16
3.4K0
IMO 2021国家队6人名单出炉!CMO全国冠军入选,深圳中学独占2席
00后中国队包揽IOI 2022金牌前4,天才少年全是清华保送生
---- 新智元报道   编辑:Joey 桃子 【新智元导读】IOI 2022,中国队再次包揽了金牌。 IOI 2022 开奖了。 中国队4位选手继IOI 2021再次包揽金牌前四名,2位选手拿到了满分。 这四位选手分别是: 戴江齐(南京外国语学校) 唐绍轩(山东省平邑第一中学) 张隽恺(成都外国语学校) 周航锐(杭州学军中学教育集团文渊中学) 其中,戴江齐和唐绍轩获得满分600分,并列金牌第1。张隽恺和周航锐获得555分的成绩,并列金牌第3名。 排名地址:https://ranking.ioi2
新智元
2022/08/26
7330
00后中国队包揽IOI 2022金牌前4,天才少年全是清华保送生
2018国际信息学奥林匹克竞赛4名中国队员的金牌之路
第30届国际信息学奥林匹克竞赛(IOI2018)于9月1日~8日在日本筑波举行,共有来自87个国家(地区)的335名选手参赛。
海天一树
2018/12/12
9380
2018国际信息学奥林匹克竞赛4名中国队员的金牌之路
推荐阅读
中国队六人全部满分夺冠:国际数学奥林匹克竞赛IMO成绩揭晓
7980
包揽数理化国际奥赛全部第一,全员金牌,网友:中国队太秀了
5250
奥数国家队时隔十年再有女生入选,6名选手5位来自南方高中
9840
5 金 1 银!中国队蝉联 IMO 总分冠军,“一姐”严彬玮遗憾失金
9570
王一川全场唯一满分!中国队夺得IMO国际奥赛团队冠军,共摘6块金牌
1.1K0
全员满分!中国队IMO达成四连冠,大比分领先第二名韩国
3940
5金1银且团队第一,中国队蝉联2020国际数学奥赛,但下届可能就不只有人类参赛了
5170
腾讯最隐秘人才计划曝光!今年IOI金牌全员现身,数物化竞赛顶流星聚
5950
中国队喜提六枚金牌,实现IMO团队三连冠:王一川拿下全场唯一满分
5800
第63届IMO国家队候选人名单公布!上海中学独占2席
9430
三连冠!中国队再夺6枚国际奥数金牌,第一名选手满分,已保送清华姚班
1.6K0
IOI 2021前四首次被中国包揽!人大附中邓明扬满分夺金,镇海中学再度大秀“基本操作”
7940
IMO奥数双冠20年后再现:2019奥数中美并列第一!
6890
全球最难中学生数学竞赛捷报:中国队远程参赛摘下三金一铜,新晋“一姐”严彬玮排名世界第三
8050
华裔家长举报成功,人大附中无法参赛?这一新规或让中国学生无缘IMO美国队
7000
新一届信息奥赛国家队出炉:3/4来自浙江,北大英才班成最大赢家
1.1K0
IOI 2020落幕:中国队团体成绩第一!
1.2K0
IMO 2021国家队6人名单出炉!CMO全国冠军入选,深圳中学独占2席
3.4K0
00后中国队包揽IOI 2022金牌前4,天才少年全是清华保送生
7330
2018国际信息学奥林匹克竞赛4名中国队员的金牌之路
9380
相关推荐
中国队六人全部满分夺冠:国际数学奥林匹克竞赛IMO成绩揭晓
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验