Android设备上的危险检测器开发指南

在自动驾驶技术日益成熟的今天,车辆安全系统能够提前预警驾驶员潜在的危险。然而,如果驾驶的是一辆旧车,而手头只有一部Android设备,是否能够创建一个应用来检测危险并在驶入危险区域之前提醒呢?本系列教程将向展示如何使用Android设备创建一个危险检测器。完成的项目将在检测到危险区域中的障碍物时发出音频警报并高亮显示。

技术栈

要开始这个项目,需要Android Studio、一个AI模型以及Python解释器。此外,可能还需要一个名为Netron的免费软件工具来查看训练过的网络模型信息。作为开发的第一个步骤,将让解决方案在设备上存储的照片上工作。需要一些带有一些障碍物的驾驶区域的照片。稍后,将让应用程序使用相机的实时视频。

将使用Kotlin来创建Android应用。如果已经进行了很多Android开发,可能习惯于使用Java。那么,如果Java仍然可以很好地工作,为什么要使用Kotlin呢?简而言之,Kotlin现在是Google首选的Android开发语言。新的Android API将为Kotlin设计——虽然它们也可以从Java使用,但这样做可能会有些尴尬。

但是,如果是Java老手,不用担心!Kotlin旨在让Java开发者感到非常熟悉,并且它还具有出色的Java互操作性。可以加载任何Java库,并在Kotlin应用中无缝使用它。

AI模型将使能够在视觉场景中检测物体。与其从头开始构建模型,可能想要从一个现有的模型开始作为起点。可以在ONNX模型库或TensorFlow Hub中找到训练过的模型。ONNX是表示训练过的网络的格式。ONNX模型可以转换为其他表示形式。将转换一个用于TensorFlow Lite的模型。在查看了各种可用的模型之后,决定使用ONNX模型库中的一个YOLO模型。YOLO是一个相对容易使用的模型,可以检测多种不同类型的物体。一些图片分析模型只能告诉一些物体存在,但不能告诉它们在图片中的确切位置。YOLO还会返回关于物体位置的信息。

ONNX模型库中的模型必须转换。从脚本中执行此操作最容易。要执行转换,需要Python和Python的TensorFlow包。截至本文撰写之时,应该使用Python 3.8。尽管3.9可用,但TensorFlow与3.8版本兼容。如果已经安装了Python,可以使用以下命令安装TensorFlow包和Python的ONNX到TensorFlow转换包。

pip3 install tensorflow pip3 install onnx-tf

将模型从ONNX转换为TensorFlow Lite是一个两阶段的过程。文件必须从ONNX转换为TensorFlow,然后从TensorFlow转换为TensorFlow Lite。要将模型从ONNX转换为TensorFlow,请使用以下命令。

onnx-tf convert -i yolov4.onnx -o yolo.pb

对于第二次转换,需要一个简短的Python脚本。将以下内容保存到名为convert.py的文件中。变量saved_model_dir应该设置为保存转换后的模型的路径。

import tensorflow as tf saved_model_dir = '/dev/projects/models' converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) converter.optimizations = [tf.lite.Optimize.DEFAULT] tf_lite_model = converter.convert() open('yolov4.tflite', 'wb').write(tf_lite_model)

对于Android项目,创建一个带有空活动的新建应用程序。这个应用程序最终将是一个使用相机实时视图的全屏应用程序。这个应用程序将需要相机访问和位置访问的权限。将以下权限添加到AndroidManifest.xml中。为了发送紧急警报,应用程序还需要短信权限。

<uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.SEND_SMS"/>

应用程序需要在代码中请求这些权限。为了更专注于这个应用程序特定的功能,一些相当常见的调用在这里没有展示,但包含在示例项目中。这包括对短信、位置和相机访问的requestPermissions调用。

Android项目需要一些配置更改,以准备使用TensorFlow Lite。必须添加对TensorFlow库的引用,项目应该设置为不压缩TensorFlow模型文件。要添加TensorFlow库,请将以下三行添加到依赖项部分的底部。

implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly' implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly' implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly' aaptOptions { noCompress "tflite" }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485