编写一个移动物体检测 iOS 应用程序
学习如何使用 ONNX Runtime 构建 iOS 物体检测应用程序。此应用程序会持续检测您的 iOS 设备后置摄像头所看到的帧中的物体,并显示
- 检测到的物体的类别(类型)
- 检测到的物体的边界框
- 推理置信度
该应用程序使用预训练的量化 MobileNet SSD V1 模型。
此示例主要基于 Google Tensorflow lite - 物体检测示例
以下是该应用程序的示例截图
目录
先决条件
- Xcode 12.5 及更高版本(最好是最新版本)
- 有效的 Apple 开发者 ID
- 配备摄像头的真实 iOS 设备(最好是 iPhone 12/iPhone 12 Pro)
- Xcode 命令行工具
xcode-select --install
- 克隆 onnxruntime-inference-examples 源代码仓库
为移动部署准备模型
-
创建一个独立的 Python 环境,以便此应用程序的依赖项与其他 Python 项目分离
conda create -n ios-app Python=3.8 conda activate ios-app
-
安装 Python 依赖项
cd <onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/ORTObjectDetection pip install -r ./prepare_model.requirements.txt
requirements 文件包含下一步模型转换所需的 onnxruntime、tf2onnx 和 tensorflow Python 包。
-
下载模型并将其转换为 ORT 格式
./prepare_model.sh
该脚本
- 下载原始的 tflite 模型以及模型元数据
labelmap.txt
- 将其转换为 ONNX 格式
- 进一步将其转换为 ONNX Mobile Runtime 可执行的 ORT 格式
该脚本会输出一个
ModelsAndData
目录,其中包含 ORT 格式模型ssd_mobilenet_v1.all.ort
和模型标签数据文件labelmap.txt
。该模型的转换过程分为两部分。原始模型为 tflite 格式。首先使用 tf2onnx 转换器 将其转换为 ONNX 格式。
然后使用 onnx 到 ort 转换器 将模型转换为 ORT 格式。
除了生成 ORT 格式的模型外,转换脚本还会输出一个 运算符配置文件
- 下载原始的 tflite 模型以及模型元数据
创建 iOS 应用程序
-
安装 CocoaPods
sudo gem install cocoapods
-
安装依赖项并生成工作区文件
cd <onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/ pod install
Podfile
包含onnxruntime-objc
依赖项,后者是包含 Objective C API 的 Pod。在此步骤结束时,您应该在
mobile/examples/object_detection/ios
目录中看到一个名为ORTObjectDetection.xcworkspace
的文件。本教程使用 ONNX Runtime 移动版的 预构建 包之一。如果您的目标环境有要求,您也可以构建自己的 自定义 运行时。要在 iOS 应用程序中包含自定义 ONNX Runtime 构建,请参阅 自定义 iOS 包
-
构建项目
在 Xcode 中打开
<onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/ORTObjectDetection.xcworkspace
。在
Signing & Capabilities
工作区设置中选择您的Development Team
。单击
Product
->Build for Running
以编译应用程序。 -
运行应用程序
连接您的 iOS 设备并运行应用程序。您需要授予应用程序使用设备摄像头的权限。
您应该在设备上看到带有 ONNX Runtime 标志的应用程序。运行应用程序会打开您的摄像头并执行物体检测。«插入截图»
相关信息
-
此应用程序使用 ONNX Runtime Objective-C API 来执行物体检测功能。
它完全用 Swift 编写,并使用一个桥接头文件,以便在 Swift 应用程序中使用该框架。
-
原始的 TensorFlow 教程和模型位于 此处
-
有关将 tflite 模型转换为 ONNX 的更多信息,请参阅 将 TFlite 模型转换为 ONNX