目录

防止连续警报


  • 下载源-53.8 MB

这是有关使用Android构建实时危害检测器的系列文章中的第四篇。在上一篇文章中,我们研究了如何在屏幕上突出显示对象。我们还注意到,并非所有检测到的物体都是我们要提醒用户的东西。检测器可以识别的其他物体包括鸟类和其他交通工具,这都不是我们要提醒用户的东西。探测器确实可以识别人和各种动物。我们想要这些警报。如果汽车没有移动,则可能根本没有必要提醒用户。人们在汽车等待时穿过街道,这是一个被识别的实体进入手机视野的场景,但在这个场景中,我们不希望系统产生警报。

为了避免不必要地警告用户,我们将选择应生成警报的对象的选择列表。除了TensorFlow Lite模型和标签文件外,我还添加了一个新的文件,名为concerns.txtconcerns.txt的每行包含一个从labels.txt复制的行,该行是检测器将针对其发出警报的标签。检测器以与加载标签相同的方式将它们加载到列表中。

if(concernList.size() == 0) {InputStream concernStream = context.getAssets().open("concerns.txt");BufferedReader br = new BufferedReader(new InputStreamReader(concernStream));String line;while(null != (line = br.readLine())) {Log.i(TAG, String.format("Concern: %s", line));concernList.add(line);}
}

声音是提醒用户的一种选择。如果设备具有立体声扬声器,我们可以通过产生声音通过左扬声器,右扬声器或两个扬声器播放以快速指示危险的总体方向来利用它们。为此,我制作了三个声音文件,并将它们添加到项目的资源中。这些声音文件位于app/src/res/raw文件夹中。声音文件将添加到我们可以在代码中引用的资源中。我定义了一些常数,这些常数保存声音文件的ID,以便更轻松地引用它们。MediaPlayer还需要引用一个变量。该MediaPlayer负责播放声音。

val ALARM_LEFT: Int = R.raw.left_sound
val ALARM_RIGHT: Int = R.raw.right_sound
val ALARM_CENTER: Int = R.raw.center_sound
var soundPlayer: MediaPlayer? = null

创建具有MediaPlayer声音值之一的对象将为我们提供一个可以播放警报声音的对象。

防止连续警报

为了防止在驾驶员不动时发送警报,用户必须超过最低速度。如果用户低于此速度,则不会生成声音警报。Android的位置服务以米/秒为单位返回速度。在考虑行驶速度时,我倾向于以每小时公里数来考虑。为了设置最小速度,我定义了一个常数,该常数设置了每小时的最小公里数,另一个常数使用该第一个常数表示以米/秒为单位的相同速度。

val MIN_ALERT_KMPH:Float = 10.0f
val  MIN_ALERT_MPS:Float = MIN_ALERT_KMPH*1000.0f/(60.0f*60.0f)

检测器将接收有关车辆当前速度的更新。对于用于调试和测试的测试接口,速度将通过代码设置,而不取决于车辆的实际运动。

与其持续向用户发出危险警告,不如在发出另一条警告之前有一段冷却时间。当我们尝试发出警报时,首先要检查是否存在尚未到期的警报。如果没有超过到期时间,则不会发出警报。尝试发出警报还会重置冷却时间。

var coolDownExpiry:Long = 0
val COOL_DOWN_TIME = 10000fun resetCooldown() {coolDownExpiry = Date().time + COOL_DOWN_TIME
}
fun hasCooldownExpired():Boolean {val now = Date().timereturn now > coolDownExpiry
}fun alert(direction: Int) {// using the when statement to filter out invalid// values should they be passed to this functionif(hasCooldownExpired() && currentSpeedMPS>MIN_ALERT_MPS) {when (direction) {ALARM_CENTER, ALARM_RIGHT, ALARM_LEFT -> {soundPlayer = MediaPlayer.create(context, direction)soundPlayer!!.start()}}}resetCooldown()
}

该应用程序所需的大多数功能现已就绪。最后要添加的内容是具有紧急警报的崩溃检测,以及使应用程序使用实时摄像机流而不是用户选择的图像。在本系列的下一篇文章中,我们将研究崩溃检测和通知。

https://www.codeproject.com/Articles/5291391/Alerting-the-Driver-with-AI-Hazard-Detection-on-An

在Android上通过AI危险检测向驾驶员发出警报相关推荐

  1. android 评分软件,AI颜值检测评分app

    AI颜值检测评分app是比较新颖的一款软件有趣又好玩,你还在等什么,用户可以在这个平台上传自己的照片,现在确实是一个比较看脸的时代, . AI颜值检测评分appai颜值检测评分软件简介 你还可以看看自 ...

  2. 解决android上WIFI提示“未检测到任何互联网连接,因此不会自动重新连接“

    问题描述: 在android5.1中出现如题提示,导致机器重启后不会链接WIFI. 分析代码: frameworks/opt/net/wifi/service/java/com/android/ser ...

  3. 在Pixel 4 XL上尝试具有对象检测功能的Android NNAPI ML加速器

    As the requirements for more private and fast, low-latency machine learning increases, so does the n ...

  4. Tensorflow object detection API 搭建自己的目标检测模型并迁移到Android上

    参考链接:https://blog.csdn.net/dy_guox/article/details/79111949 之前参考上述一系列博客在Windows10下面成功运行了TensorFlow A ...

  5. AI辅助检测脑动脉瘤,灵敏度达97.5%,华为云联合成果登上国际顶级期刊

    本文转载自机器之心. 近日,放射学领域国际顶级期刊<Radiology>发表了华为云 EI 创新孵化 lab.华中科技大学电信学院.华中科技大学同济医学院附属协和医院放射科联合团队的最新研 ...

  6. 全球KYC服务商ADVANCE.AI 活体检测产品通过ISO国际安全认证 产品能力再上一新台阶

    近期,在全球KYC服务商ADVANCE.AI发布的资讯中得知,它旗下研发的活体检测产品成功通过了iBeta PAD测试(Presentation Attack Detection,活体冒用攻击),符合 ...

  7. 全球No.1集装箱人工智能领军企业中集飞瞳,已完成上百万AI集装箱箱况检测,上亿箱信息识别,全球最先进集装箱AI动态感知箱况检测

    中集集团[000039]人工智能企业,全球No.1集装箱人工智能企业CIMC中集飞瞳,是全球集装箱AI应用范围最广,最先进的航运港口人工智能领军企业.CIMCAI已完成百万人工智能集装箱箱况检验,完成 ...

  8. 边缘设备上的实时AI人员检测:在Raspberry Pi上测试SSD模型

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 在本系列的上一篇文章中,我们已经在Raspberry Pi设备上启动了人体检测软件.在这一本文中,我们将比较Raspbe ...

  9. 边缘设备上的实时AI人员检测:在Raspberry Pi上启动SSD

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 在本系列的最后一篇文章中,我们编写了Python代码,用于使用SSD模型检测图像中的人物.在本文中,我们将介绍在Rasp ...

最新文章

  1. can t connect to mysql server on ‘localhost‘解决方法
  2. 程序员你为什么这么累【续】:如何应对需求变更
  3. java注释日志打印_java 注解结合 spring aop 实现自动输出日志
  4. Ctrl+Alt+F1~F6
  5. [学习笔记]Hadoop 配置调试错误收集
  6. Keyboard驱动介绍
  7. JAVA代码—算法基础:数独问题(Sodoku Puzzles)
  8. QT子线程与主线程的信号槽通信
  9. Python《使用selenium解决动态加载的问题》
  10. 深入解析:从源码窥探MySQL优化器
  11. 22_python基础—异常
  12. docker 镜像修改的配置文件自动还原_所以到底该如何修改 docker 容器的端口映射!!!...
  13. 二级计算机vf题型,2010计算机等级考试二级VF考试题型与解题技巧
  14. C++中map的用法详解
  15. word转chm文件
  16. Nature:13个维度,手把手教“研究er”如何做学术报告
  17. 51单片机LCD1602显示电子时钟 带按键设置和星期显示
  18. sequelize 的op模块
  19. Mellanox网卡FW刷新方法
  20. ljd-2008+下载式多功能实验开发系统_运动控制模型仿真实验平台(YXMCP-ATCA-150)...

热门文章

  1. python考试pass or fail_Pytest官方教程-12-skip及xfail: 处理不能成功的测试用例
  2. java 取余_JAVA面试解析(有赞)
  3. python内置对象是什么_Python的内置对象类型——元组、文件,python
  4. sis地址获取器_TencentOS tiny深度源码分析(2)—— 调度器
  5. c# mvvm模式获取当前窗口_对Vue中的MVVM原理解析和实现
  6. 浓浓中国风的雅致新年元旦PSD分层海报模板
  7. 自学UI设计,应当具备的基础技能(软件)
  8. UI设计干货素材|网页设计巧妙使用背景纹理
  9. git查看两次提交之间的差异_如何在同一分支的两个不同提交之间区分同一文件?...
  10. c++除法保留小数_Golang中除法和取模运算与Python3的区别