作品

2024年09月01日 至 2025年04月01日
iOS
AI
图像
Swift
SwiftUI
CoreML
YOLOv11

独立开发基于 SwiftUI 的原生 iOS 应用,实现 YOLOv11 模型在移动端的全链路落地。自主完成数据集标注与训练,通过 CoreML 将模型部署至设备 NPU 实现低延迟实时推理,并结合异步并发请求百度百科 API 实现识别结果的即时交互,达成“识别即百科”的离线 + 在线闭环体验。

iOS本地动物识别App项目的图片

离线识别,在线百科,打造智能动物识别新体验。

ON-DEVICE AI PIPELINE

从训练数据到 iPhone 端侧推理

模型在本地完成识别,网络只负责补充百科内容,让核心体验不依赖云端推理。

50,000训练图片
11动物类别
200训练轮次
01 DATA YOLO 数据集
02 TRAIN YOLO11m
03 EXPORT CoreML
04 INFER Apple NPU
05 ENRICH 百科信息
SwiftUI
Camera
Vision
Async API
CORECoreML

DESIGN DECISION

离线识别 + 在线内容

摄像头帧和相册图片进入同一条 CoreML 推理链;识别结果立即展示,本地历史与异步百科请求再补齐完整信息。

SwiftSwiftUIYOLO11mCoreMLVision

CAPABILITIES

端侧闭环

01实时摄像头识别
02拍照识别
03历史记录
04百科详情

背景

我的毕业设计是《Development of an AI-Powered Mobile Application for Animal Identification and Information》,开发一个可以识别动物的移动软件,在跟导师沟通后打算用Yolo作为深度学习识别模型,移动端软件使用原生的iOS开发,即在XCode上使用Swift+SwiftUI进行iOS开发,原本就一直对iOS开发很感兴趣,借这次机会好好学习一下原生的iOS开发。

开发

技术路线

模型训练

数据集是Open Images V7 Animals YOLO,包含11类动物的50,000张图片。

我选择这个数据集的原因是它有yolo格式的标签,但是直到我完成训练,我发现数据集不是很好,它非常不平衡,如下图所示,近27000张“狗”的图片,但其他平均只有2000张,但我还是尝试训练模型,看看结果。

我使用YOLO11m训练模型,这是最新版本的YOLO,我使用默认参数进行训练,将epochs设置为200,我没有验证过拟合问题。

模型训练

.pt模型性能

系统显示下面的图片是这个模型嵌入在我的小系统中,自动推断系统摄像头中的图像。

.pt模型性能

CoreML模型导出

因为我想在iOS上部署模型,所以我需要将模型导出为CoreML格式,我按照官方教程中的命令导出模型:

from ultralytics import YOLO

# Load the YOLO11 model
model = YOLO("yolov11m.pt")

# Export the model to CoreML format
model.export(format="coreml", nms=True)  # creates 'yolo11n.mlpackage'

成功导出后,生成了一个名为yolo11m.mlpackage的文件,接下来就可以嵌入到我的iOS项目中,在XCode中可以对mlpackage进行预览,结果如下:

CoreML模型预览

iOS App开发

iOS App端功能展示

App的主要功能包括实时动物识别、拍照识别和百科信息查询。

入口主页 入口主页
识别历史列表 识别历史列表
识别结果 识别结果

实时动物识别

实时动物识别