目录
技术栈
AI模型
我们的Android项目
- 下载源-53.8 MB
许多现代车辆都配备了摄像头,可以检测前方道路上的危险并向驾驶员发出警报。但是,如果您驾驶的是旧车,而您所拥有的只是一部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模型AI模型将能够检测视觉场景中的物体。您可能不希望从头开始构建模型,而是要以现有模型作为起点。您可以在ONNX Model Zoo或TensorFlow Hub上找到经过训练的模型。ONNX是一种表示受训网络的格式。ONNX模型可以转换为其他表示形式。我们将转换一个使用TensorFlow Lite。浏览了可用的各种模型之后,我决定使用ONNX Model Zoo的YOLO模型。YOLO是一种相对易于使用的模型,可以检测各种不同类型的对象。一些图片分析模型只能分辨出存在某些对象集,而无法判断它们在图片中的位置。YOLO还将返回有关对象位置的信息。
必须转换ONNX Model Zoo中的模型。从脚本执行此操作最简单。要执行转换,我们需要Python和适用于Python的TensorFlow软件包。在撰写本文时,您将要使用Python 3.8。虽然3.9可用,但TensorFlow兼容3.8版本。如果已安装Python,则可以使用以下命令为Python安装TensorFlow软件包和ONNX到TensorFlow转换软件包。
pip3 install tensorflow
Pip3 install onnx-tf
将我们的模型从ONNX转换到TensorFlow Lite的过程分为两个阶段。必须将文件从ONNX转换为TensorFlow,然后从TensorFlow转换为TensorFlow Lite。要将模型从ONNX转换为TensorFlow,请使用以下命令。
onnx-tf convert -i youlov4.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项目
aaptOptions {
noCompress "tflite"
}
对于Android项目,创建一个活动为空的新应用程序。该应用程序最终将成为使用相机实时取景的全屏应用程序。此应用程序将需要相机访问权限和位置访问权限。将以下权限添加到您的AndroidManifest.xml。要发送紧急警报,该应用程序也需要SMS权限。
应用程序将需要在代码中请求这些权限。为了更加专注于特定于此应用程序的功能,此处未演示一些相当普通的调用,但是这些调用在示例项目中。这包括对requestPermissions 的SMS、位置和摄像头访问的调用。
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'
在同一文件的android部分中,必须添加以下内容以防止模型被压缩。
aaptOptions {
noCompress "tflite"
}
现在,该项目已准备好处理TensorFlow Lite模型。在本系列的下一篇文章中,我们将TensorFlow Lite模型添加到项目中并准备进行处理。
https://www.codeproject.com/Articles/5291388/AI-Hazard-Detection-on-Android-with-Tensorflow-Lit