Android AI应用开发:移动检测

基于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.PreviewViewandroid:id="@+id/viewFinder"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center" /><com.szsl.detector.GraphicOverlayandroid: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.xdnf.cn/news/1488868.html

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

相关文章

【性能测试-登录时密码加密存储如何传参】

目的】 登录接口&#xff0c;密码加密传输&#xff0c;开发不做处理的情况下&#xff0c;密码如何加密传输 【方案】 使用前置处理器&#xff1a;JSR223 预处理程序&#xff0c;主要是在执行登录接口前将密码按照加密算法获得对应的加密密码&#xff0c;并传入接口 【说明】前…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 亲子游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

【BUG】已解决:TypeError: a bytes-like object is required, not ‘str‘

TypeError: a bytes-like object is required, not ‘str‘ 目录 TypeError: a bytes-like object is required, not ‘str‘ 【常见模块错误】 【解决方案】 错误原因分析 解决方案 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998https://bbs.csdn.net…

基于扩散的生成模型的语音增强和去噪

第二章 目标说话人提取之《Speech Enhancement and Dereverberation with Diffusion-based Generative Models》 文章目录 前言一、任务二、动机三、挑战四、方法1.方法:基于分数的语音增强生成模型(sgmse)2.网络结构 五、实验评价1.数据集2.采样器设置和评价指标3.基线模型4.评…

PaliGemma:A versatile 3B VLM for transfer

1.model 1.1 Architecture 图像分辨率为固定的正方形,224,448,896,这导致每种模型都有固定数量的图像token,256,1024,4096。图像在最前面,无需特殊的位置标记,BOS标记文本的开始,\n作为SEP token,不出现在前缀中,单独对SEP进行标记,以避免它与前缀的结束或后缀的…

力扣94题(java语言)

题目 思路 使用一个栈来模拟递归的过程&#xff0c;以非递归的方式完成中序遍历(使用栈可以避免递归调用的空间消耗)。 遍历顺序步骤&#xff1a; 遍历左子树访问根节点遍历右子树 package algorithm_leetcode;import java.util.ArrayList; import java.util.List; import…

立仪光谱共焦传感器应用测量之:汽车连接器高度差测量

01 检测要求&#xff0c;要求测量汽车连接器的高度差 02 检测方式 根据观察&#xff0c;我们采用立仪科技光谱共焦H4UC控制器搭配D65A52系列镜头&#xff0c;角度最大&#xff0c;外径最大&#xff0c;量程大&#xff0c;可以有效应用于测量弧面&#xff0c;大角度面等零件。 0…

SAPUI5基础知识19 - 视图嵌套(Nested Views)

1. 背景 SAPUI5 是一个用于构建企业级 Web 应用程序的 JavaScript 框架。它提供了丰富的 UI 控件和工具&#xff0c;帮助开发者创建复杂的用户界面。Nested Views 是 SAPUI5 中的一种设计模式&#xff0c;允许在一个视图中嵌套另一个视图。这种模式有助于模块化和重用代码&…

什么是反射以及反射的应用及例子

反射是Java中框架设计的核心&#xff0c;通过对类的构造、属性、方法等数据的获取提供抽象的底层构建。 反射机制&#xff1a; 反射需要先获得类的class字节码&#xff0c;由JVM类加载器(ClassLoader)负责加载&#xff0c;并在内存中缓存class的内部结构。借助于Java的反射机制…

面试常考Linux指令

文件权限 操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制&#xff0c;在 Linux 中权限一般分为读(readable)、写(writable)和执行(executable)&#xff0c;分为三组。分别对应文件的属主(owner)&#xff0c;属组(group)和其他用…

腾讯智影PC端“智能画布”功能上线

随着人工智能技术的不断发展&#xff0c;图片编辑领域也迎来了创新的变革。腾讯智影PC端近日推出了一项革命性的新功能——“智能画布”&#xff0c;它将AI绘画技术与传统图片编辑相结合&#xff0c;为用户带来了前所未有的便捷体验。 腾讯智影官网 地址&#xff1a;点击此处…

【Sentinel】Sentinel超简单入门,一看就懂!!!

sentinel入门 一、什么是Sentinel1.1、流量控制1.2、熔断降级1.3、热点参数限流1.4、系统负载保护 二、资源和规则的概念三、Sentinel工作主流程四、代码初体验五、集成控制台 一、什么是Sentinel Sentinel 是阿里巴巴开源的流量控制组件&#xff0c;主要用来保护微服务和分布…

Can we Deploy Web Application in Azure OpenAI of Production Level

题意&#xff1a;我们可以在Azure OpenAI中部署生产级别的Web应用程序吗 问题背景&#xff1a; I have created azure ai search service and used Text split skillset and made index. I also deployed a web Application but have a question that If I want to create to …

《Milvus Cloud向量数据库指南》——BGE-M3:多功能、多语言、多粒度的文本表示学习模型

引言 在自然语言处理(NLP)领域,随着大数据时代的到来,对文本信息的精准处理与高效检索成为了研究热点。BERT(Bidirectional Encoder Representations from Transformers)作为近年来NLP领域的里程碑式模型,以其强大的上下文理解能力在多项任务中取得了显著成效。然而,面…

鼠标视觉特效ClickShow

录课、直播都希望能清晰看到鼠标在屏幕上的移动轨迹以及点击动作。WIndows默认是不支持的&#xff0c;为此我找了好久&#xff0c;终于在开源平台github上找到一个精品&#xff0c;这个软件就叫ClickShow。 1.软件基本信息 官网&#xff1a;GitHub - cuiliang/ClickShow: 鼠标…

DolphinDB Web 端权限管理:可视化操作指南

在现代数据库管理中&#xff0c;高效和直观的权限管理对于用户的数据安全是至关重要的。过去 DolphinDB 用户需要依赖系统脚本来管理用户和权限&#xff0c;这对于缺乏技术背景的管理员来说既复杂又容易出错。 为了提升用户体验和操作效率&#xff0c;DolphinDB 目前在 Web 上…

mybatis查询数据字段返回空值

1.描述 数据苦衷实际存储字段全不为空 查询后brand_name/company_name为空 2.原因分析 带下划线的字段&#xff0c;都会返回空值&#xff0c;应该是字段映射出了问题 3.解决方案 在配置文件中添加下划线自动映射为驼峰 <configuration><settings><sett…

如何评价估计量的好坏

目录 三大方法 概念 无偏性 如何计算估计量的无偏性&#xff1f; 步骤 有效性 有效性在不同类型的数据分析中如何评估&#xff1f; 步骤 一致性 一致性原则在实际应用中的挑战有哪些&#xff1f; 挑战 在大样本情况下&#xff0c;如何准确测量估计量的一致性&#xf…

Linux 安装 GDB (无Root 权限)

引入 在Linux系统中&#xff0c;如果你需要在集群或者远程操作没有root权限的机子&#xff0c;安装GDB&#xff08;GNU调试器&#xff09;可能会有些限制&#xff0c;因为通常安装新软件或更新系统文件需要管理员权限。下面我们介绍可以在没有root权限的情况下安装GDB&#xf…

网络安全科普:网络准入控制系统哪个软件最好?

场景&#xff1a; 企业会议室&#xff0c;两人正在进行关于网络安全的讨论。 张无忌&#xff1a;&#xff08;翻阅资料&#xff09;赵姑娘&#xff0c;我听说网络准入控制系统&#xff08;NAC&#xff09;是提升网络安全的重要手段&#xff0c;但具体它有哪些功能呢&#xff1f…