编写移动物体检测 iOS 应用程序
了解如何使用 ONNX Runtime 构建 iOS 物体检测应用程序。此应用程序持续检测您的 iOS 设备后置摄像头所看到的帧中的物体并显示
- 检测到的物体的类别(类型)
- 检测到的物体的边界框
- 推理置信度
该应用程序使用预训练的量化 MobileNet SSD V1 模型。
此示例在很大程度上基于 Google Tensorflow lite - 物体检测示例
这是应用程序的示例屏幕截图
目录
先决条件
- Xcode 12.5 及以上版本(最好是最新版本)
- 有效的 Apple Developer 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 格式
- 进一步将其转换为 ORT 格式,该格式可以由 ONNX Mobile Runtime 执行
该脚本输出一个
ModelsAndData
目录,其中包含 ORT 格式的模型ssd_mobilenet_v1.all.ort
和模型标签数据文件labelmap.txt
。此模型的转换是一个两部分的过程。原始模型为 tflite 格式。首先使用 tf2onnx 转换器将其转换为 ONNX 格式。
然后使用 onnx to 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 mobile 的预构建软件包之一。如果您的目标环境的需求需要,您也可以构建自己的自定义运行时。要在您的 iOS 应用程序中包含自定义 ONNX Runtime 构建,请参阅自定义 iOS 软件包
-
构建项目
在 Xcode 中打开
<onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/ORTObjectDetection.xcworkspace
。在“
签名与功能
”工作区设置中选择您的“开发团队
”。单击“
产品
”->“为运行而构建
”以编译应用程序。 -
运行应用程序
连接您的 iOS 设备并运行该应用程序。您必须授予应用程序使用设备摄像头的权限。
您应该在您的设备上看到一个带有 ONNX Runtime 徽标的应用程序。运行该应用程序将打开您的摄像头并执行物体检测。«插入屏幕截图»
相关信息
-
此应用程序使用 ONNX Runtime Objective-C API 执行物体检测功能。
它完全用 Swift 编写,并使用 bridgingheader 文件以便在 Swift 应用程序中使用该框架。
-
原始 TensorFlow 教程和模型在此处
-
有关将 tflite 模型转换为 ONNX 的更多信息,请参阅将 TFlite 模型转换为 ONNX