Android AI应用开发:移动检测

news2024/12/25 8:59:30

基于Google ML模型的Android移动物体检测应用——检测、跟踪视频中的物体

A. 项目描述

ML Kit物体检测器可以对视频流进行操作,能够检测视频中的物体并在连续视频帧中跟踪该物体。

相机捕捉视频时,检测到移动物体并为其生成一个边界框,并分配一个跟踪ID。即使在物体在视野中移动时,后续帧中的边界框会根据其新位置更新,但跟踪ID保持不变。这意味着尽管物体在不同帧内的位置和相机角度有所不同,但它仍被识别为同一物体。

B. 开发工具

  • Android Studio Koala
  • Kotlin
  • Gradle 8.7

C. 代码设计

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp">

    <androidx.camera.view.PreviewView
        android:id="@+id/viewFinder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" />

    <com.szsl.detector.GraphicOverlay
        android:id="@+id/graphicOverlay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
</FrameLayout>

在FrameLayout中,首先是一个PreviewView控件,用于呈现相机的视频流。其上层是一个自定义控件GraphicOverlay,它在预览视图的上层提供了一个叠加层,允许在其上绘制边界框图形。

自定义的GraphicOverlay类的工作是管理一组图形对象,这些对象由边界框及其标签组成,并在画布上进行绘制。

首先,设置预览视图(viewFinder)以渲染相机的帧流:

            // 预览
            val preview = Preview.Builder()
                .build()
                .also {
                    it.setSurfaceProvider(viewFinder.surfaceProvider)
                }

接下来是图像分析器。当你调用setAnalyzer时,CameraX会逐帧调用该函数,对图像进行处理。需要指定一个处理分析的类;在这里,使用了一个名为ObjectAnalyzer的类,它将利用物体检测API对帧进行处理:

            val imageAnalyzer = ImageAnalysis.Builder()
                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                .build()
                .also {
                    it.setAnalyzer(cameraExecutor, ObjectAnalyzer(graphicOverlay))
                }

一旦这些准备就绪,将它们绑定到相机的生命周期上。这样CameraX就能够管理它们,分别用于渲染预览和逐帧处理:

                // 相机绑定
                cameraProvider.bindToLifecycle(
                    this, cameraSelector, preview, imageAnalyzer
                )

小结

使用CameraX,可以指定一个预览视图和一个分析器。在启用流模式时,分析器调用ML Kit物体检测器。检测到的物体被用来创建表示边界框的对象,并将这些对象添加到叠加层中。
这里使用了ML Kit的通用模型,因此分类方式相对较少——它只检测物体并为每个物体分配一个ID。

D. 项目演示

E. 项目源码

关注公众号『数字森林』,后台发送关键字:移动检测,获取项目源码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法/训练】:动态规划(线性DP)

一、路径类 1. 字母收集 思路&#xff1a; 1、预处理 对输入的字符矩阵我们按照要求将其转换为数字分数&#xff0c;由于只能往下和往右走&#xff0c;因此走到&#xff08;i&#xff0c;j&#xff09;的位置要就是从&#xff08;i - 1&#xff0c; j&#xff09;往下走&#…

2024第八届全国职工职业技能大赛“网络与信息安全管理员”赛项技术文件及任务书

2024第八届全国职工职业技能大赛“网络与信息安全管理员”赛项技术文件及任务书 一、赛项概述&#xff1a;二、竞赛形式&#xff1a;三、竞赛规则四、竞赛样题4.1、第一场4.1.2、实操闯关赛4.2、第二场4.3、第三场 需要培训可以私信博主 欢迎交流学习&#xff01; [X] &#x1…

Tuxera NTFS for Mac 2023安装教程+2024年软件Tuxera安装包下载

‌在数字化时代&#xff0c;文件格式的兼容性问题一直是用户头疼的问题。尤其是在Mac和Windows两大操作系统之间&#xff0c;由于文件系统的不统一&#xff0c;使得文件在不同平台之间的传输和访问变得困难。然而&#xff0c;随着Tuxera NTFS for Mac 2023的出现&#xff0c;这…

好书推荐 -- 《精通推荐算法》

新书发布&#xff0c;京东限时15天内5折优惠&#xff0c;半天即可送到。 图书封底有读者微信群&#xff0c;作者也在群里&#xff0c;任何技术、offer选择和职业规划的问题&#xff0c;都可以咨询。 《精通推荐算法》&#xff0c;限时半价&#xff0c;半日达https://u.jd.com…

[CISCN2019 华东南赛区]Web11

进来先做信息收集&#xff0c;右上角显示当前ip&#xff0c;然后有api的调用地址和请求包的格式以及最重要的是最下面的smarty模版&#xff0c;一看到这个就得想到smarty模版注入 测试了一下两个api都无法访问 直接切到数据包看看能不能通过XFF来修改右上角ip 成功修改&#x…

Unity横版动作游戏 -瓦片地形和动画瓦片

(规则瓦片)瓦片地形和动画瓦片 准备阶段 在Tilemap中创建一个新的文件夹起名叫做Rule Tile&#xff0c;创建一个Rule Tile&#xff0c;用来设置瓦片地形&#xff0c;我们将用他来绘制地形图&#xff0c;类似于Godot中的瓦片地形。 这里给他取名为了Ground 1&#xff0c;用于创…

ARM32开发——PWM蜂鸣器案例

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求原来的驱动移植操作替换初始化 更新Play函数完整代码 需求 通过控制PB9来播放音乐&#xff0c;PB9对应的定时器通道&#xff1…

CTF之网站被黑

简单看一下网页和源码没发现什么明显漏洞 那就扫描一下目录 发现了/shell.php文件&#xff0c;访问一下&#xff0c;发现是一个后台管理登录页面 别无他法只能爆破喽&#xff0c;爆破后发现密码是hack flag{25891d9e9d377f006eda3ca7d4c34c4d}

2024第三届钉钉杯大学生大数据挑战赛【A题】完整分享

2024第三届钉钉杯大学生大数据挑战赛已经开赛&#xff0c;小编给大家带来非常实用的助力【A题】完整&#xff0c;&#xff08;看图片下方的说明&#xff09;&#xff0c;资料预览&#xff1a; 微信公众号

【python】批量读取Word文档中的特定表格并保存为Excel文件

批量读取Word文档中的特定表格并保存为Excel文件 在工作中&#xff0c;我们常常需要从多个Word文档中提取数据&#xff0c;然后将这些数据汇总到一个Excel文件中进行分析。下面&#xff0c;我将分享一个Python脚本&#xff0c;它可以从多个Word文档中读取特定的表格数据&#…

暑期c++ 命名空间

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 今天是暑期第一天开始写c笔记&#xff0c;新起点&#xff0c;新开始加油 我们先来看两串代码 这串代码编译没有问题 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int rand 14; int main(…

手机图片如何转化为word文档?分享3种好用的软件。

在数字化时代&#xff0c;手机已经成为我们生活中不可或缺的一部分。随着手机拍照功能的日益强大&#xff0c;我们常常用手机记录下重要的信息和瞬间。但你有没有遇到过这样的烦恼&#xff1a;如何将手机里的图片快速转化为可编辑的Word文档呢&#xff1f;今天&#xff0c;就为…

从工艺到性能:模具3D打印材料不断革新

在模具3D打印领域&#xff0c;材料性能的持续优化与创新是推动模具3D打印的关键因素&#xff0c;近年来&#xff0c;各种3D打印新材料不断涌现&#xff0c;模具3D打印材料也开始重工艺导向逐步向性能导向发展&#xff0c;如毅速公司推出的ESU-EM191/191S及ESU-EM201不锈钢粉末、…

C语言 | Leetcode C语言题解之第299题猜数字游戏

题目&#xff1a; 题解&#xff1a; #define MIN(a, b) ((a) < (b) ? (a) : (b))char * getHint(char * secret, char * guess){int A 0;int B 0;int dicS[10] {0};int dicG[10] {0};int i 0;while(secret[i]){if(secret[i] guess[i]){//同位置且相等&#xff08;完…

【React】useState:状态管理的基石

文章目录 一、什么是 useState&#xff1f;二、useState 的基本用法三、useState 的工作原理四、高级用法五、最佳实践 在现代前端开发中&#xff0c;React 是一个非常流行的库&#xff0c;而 useState 是 React 中最重要的 Hook 之一。useState 使得函数组件能够拥有自己的状态…

RHEL 7.6 安装oracle database 19c Real Application Cluster Part5: RU配置

RHEL 7.6 安装oracle database 19c Real Application Cluster Part1: 基础环境配置 RHEL 7.6 安装oracle database 19c Real Application Cluster Part2: Grid Infrastructure配置 RHEL 7.6 安装oracle database 19c Real Application Cluster Part3: ASM磁盘组配置 RHEL 7.…

《程序猿入职必会(5) · CURD 页面细节规范 》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

深入理解多态:发工资

看完目录就可以大概理解了&#xff0c;然后就需要去敲一敲代码&#xff0c;不过这个多态还确实挺厉害的。 目录 做一件事 员工1&#xff1a;干第一个过程 员工2&#xff1a;干第二个过程 员工3&#xff1a;干第三个过程 员工4&#xff1a;干第四个过程 员工5&#xff1a;…

Live555源码阅读笔记:哈希表的实现(C++)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

重生之“我打数据结构,真的假的?”--6.排序

1.排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的⼤⼩&#xff0c;递增或递减的排列起来的 操作。 1.1排序分类 2.排序算法实现 2.1插入排序 直接插⼊排序是⼀种简单的插⼊排序法&#xff0c;其基本思想是&#…