编写一个移动物体检测 iOS 应用程序

学习如何使用 ONNX Runtime 构建 iOS 物体检测应用程序。此应用程序会持续检测您的 iOS 设备后置摄像头所看到的帧中的物体,并显示

  • 检测到的物体的类别(类型)
  • 检测到的物体的边界框
  • 推理置信度

该应用程序使用预训练的量化 MobileNet SSD V1 模型。

此示例主要基于 Google Tensorflow lite - 物体检测示例

以下是该应用程序的示例截图

Screenshot showing iOS objection detection app

目录

先决条件

  • Xcode 12.5 及更高版本(最好是最新版本)
  • 有效的 Apple 开发者 ID
  • 配备摄像头的真实 iOS 设备(最好是 iPhone 12/iPhone 12 Pro)
  • Xcode 命令行工具 xcode-select --install
  • 克隆 onnxruntime-inference-examples 源代码仓库

为移动部署准备模型

  1. 创建一个独立的 Python 环境,以便此应用程序的依赖项与其他 Python 项目分离

    conda create -n ios-app Python=3.8
    conda activate ios-app
    
  2. 安装 Python 依赖项

    cd <onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/ORTObjectDetection
    pip install -r ./prepare_model.requirements.txt
    

    requirements 文件包含下一步模型转换所需的 onnxruntime、tf2onnx 和 tensorflow Python 包。

  3. 下载模型并将其转换为 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 格式的模型外,转换脚本还会输出一个 运算符配置文件

创建 iOS 应用程序

  1. 安装 CocoaPods

    sudo gem install cocoapods
    
  2. 安装依赖项并生成工作区文件

    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 包

  3. 构建项目

    在 Xcode 中打开 <onnxruntime-inference-example-root>/mobile/examples/object_detection/ios/ORTObjectDetection.xcworkspace

    Signing & Capabilities 工作区设置中选择您的 Development Team

    单击 Product -> Build for Running 以编译应用程序。

  4. 运行应用程序

    连接您的 iOS 设备并运行应用程序。您需要授予应用程序使用设备摄像头的权限。

    您应该在设备上看到带有 ONNX Runtime 标志的应用程序。运行应用程序会打开您的摄像头并执行物体检测。«插入截图»