Skip to content

Latest commit

 

History

History
286 lines (209 loc) · 16.4 KB

File metadata and controls

286 lines (209 loc) · 16.4 KB

Ultralytics logo

English | 简体中文

🚀 YOLO Flutter - Ultralytics 官方插件

Ultralytics Actions .github/workflows/ci.yml codecov

Ultralytics Discord Ultralytics Forums Ultralytics Reddit

Ultralytics YOLO Flutter 是官方 Flutter 插件,用于在 iOS 和 Android 应用中运行 YOLO 模型。它支持目标检测实例分割图像分类姿态估计旋转框检测,并提供两种核心用法:

  • YOLO:单张图片推理
  • YOLOView:实时相机推理

这个插件的目标很直接:要么使用官方模型 ID,要么把你自己的导出模型丢进应用里,让插件自动解析任务元数据。

✨ 为什么用这个插件

  • Ultralytics 官方插件
  • 一套 Dart API 同时覆盖 Android 和 iOS
  • 基于元数据加载模型,并内置官方模型下载与缓存
  • 同时支持实时相机推理和单图推理
  • 提供阈值、GPU、流式数据等生产环境控制项
  • 支持 YOLO26 和 YOLO11 系列模型
功能 Android iOS 说明
目标检测 边界框、类别和置信度
图像分类 Top-1/Top-5 类别预测和分数
实例分割 实例掩膜、边界框和类别
姿态估计 关键点、边界框和置信度
旋转框(OBB)检测 旋转框和多边形角点
实时相机推理 使用 YOLOView 构建实时相机场景
单图推理 使用 YOLO 处理图片字节
官方模型 内置模型 ID 发现、下载和缓存
自定义模型 Android 用 TFLite,iOS 用 Core ML,并优先读取元数据

⚡ 快速开始

安装插件:

插件地址:https://pub.dev/packages/ultralytics_yolo

dependencies:
  ultralytics_yolo: ^0.3.4
flutter pub get

先用默认官方模型跑起来:

import 'package:ultralytics_yolo/ultralytics_yolo.dart';

final modelId = YOLO.defaultOfficialModel() ?? 'yolo26n';

YOLOView(
  modelPath: modelId,
  onResult: (results) {
    for (final r in results) {
      debugPrint('${r.className}: ${r.confidence}');
    }
  },
)

单图推理示例:

final yolo = YOLO(modelPath: 'yolo26n');
await yolo.loadModel();
final results = await yolo.predict(imageBytes);

▶️ 示例应用 | 📖 安装指南 | ⚡ 快速开始文档

📦 模型加载方式

插件支持三种模型来源。

1. 官方模型 ID

可直接使用默认官方模型,或传入指定官方 ID,例如 yolo26n

final yolo = YOLO(modelPath: YOLO.defaultOfficialModel() ?? 'yolo26n');

插件会自动下载并缓存当前平台对应的官方产物。可通过 YOLO.officialModels() 查看当前平台可用的全部官方 ID。

2. 你自己的导出模型

传入你自己的导出 YOLO 模型本地路径或 Flutter 资源路径:

final yolo = YOLO(modelPath: 'assets/models/my-finetuned-model.tflite');

如果模型导出时带有元数据,插件会自动推断 task。如果没有,就显式传入 task

final yolo = YOLO(
  modelPath: 'assets/models/my-finetuned-model.tflite',
  task: YOLOTask.detect,
);

3. 远程模型 URL

传入 httphttps URL,插件会先下载到应用存储,再完成加载。

🧭 官方模型还是自定义模型

场景 推荐方式
想最快跑通接入 使用官方模型 ID,例如 yolo26n
你训练或导出了自己的模型 使用自定义资源或本地文件
不同客户或环境需要不同模型 使用远程 URL
希望插件自动推断 task 使用带元数据的导出模型
你的导出模型没有元数据 自定义模型并显式传入 task

官方模型可直接从 YOLO.defaultOfficialModel()YOLO.officialModels() 开始;自定义模型则直接从你准备实际交付的导出文件开始。

📥 把你自己的模型放进应用

对于自定义模型,应用侧配置应尽量简单:

  • Android 原生资源:把 .tflite 放到 android/app/src/main/assets
  • Android Flutter 资源:把 .tflite 放到 assets/models/
  • iOS 工程资源:把 .mlpackage.mlmodel 拖进 ios/Runner.xcworkspace
  • iOS Flutter 资源:把 .mlpackage.zip 放到 assets/models/

然后把对应路径传给 modelPath 即可。

iOS 导出注意事项

导出 Core ML 检测模型时必须使用 nms=True

from ultralytics import YOLO

# Square [640, 640] works best when one model must run in both portrait and landscape.
# Ultralytics imgsz order is [height, width]; use [640, 384] for portrait-only or [384, 640] for landscape-only.
YOLO("yolo26n.pt").export(format="coreml", nms=True, imgsz=[640, 640])

其他任务可以使用默认导出参数,imgsz 同样优先使用方形尺寸。 固定方向场景再使用对应的长宽比。

🎯 该用哪个 API

如果你已经拿到了图片字节并且只想做单次推理,用 YOLO

final yolo = YOLO(modelPath: 'yolo26n');
await yolo.loadModel();
final results = await yolo.predict(imageBytes);

如果你要做实时相机推理,用 YOLOView

final controller = YOLOViewController();

YOLOView(
  modelPath: 'yolo26n',
  controller: controller,
  onResult: (results) {},
)

await controller.switchModel('assets/models/custom.tflite', YOLOTask.detect);

🧩 推荐接入模式

应用类型 推荐模型加载方式
实时相机场景 YOLOView(modelPath: 'yolo26n')
图库或单图推理流程 YOLO(modelPath: 'yolo26n')
应用内置自定义模型 YOLO(modelPath: 'assets/models/custom.tflite')
同时支持 Core ML 与 TFLite 的跨平台应用 使用各平台对应导出文件,并让元数据决定 task
运行时动态切换模型 YOLOViewController.switchModel(...)

📚 文档

指南 说明
安装指南 环境要求与平台配置
快速开始 最短路径跑通第一个示例
模型指南 官方模型、自定义模型、导出流程
使用指南 常见应用模式与示例
API 参考 完整 API 文档
性能优化 性能调优与控制项
故障排查 常见问题与修复方法

🤝 社区与支持

Ultralytics Discord Ultralytics Forums Ultralytics Reddit

💡 参与贡献

Ultralytics 的成长离不开社区协作,我们非常重视你的贡献。无论是修复 bug、增强功能还是改进文档,你的参与都非常重要。请查看我们的贡献指南以了解如何参与,也欢迎通过问卷分享你的反馈。衷心感谢所有贡献者的支持!🙏

Ultralytics open-source contributors

📄 许可证

Ultralytics 提供两种许可证,以适应不同需求:

  • AGPL-3.0 License:适合学生、研究人员以及热衷于开源协作的开发者。这是一个经 OSI 批准的许可证,鼓励知识共享和开放贡献。详情请参阅 LICENSE 文件。
  • Enterprise License:适用于商业应用,允许将 Ultralytics 软件和 AI 模型无缝集成到商业产品与服务中,而无需遵守 AGPL-3.0 的开源要求。如有商业使用需求,请了解企业许可证

🔗 相关资源

原生 iOS 开发

如果你希望在 iOS 应用中直接使用 YOLO 模型与 Swift 集成,而不是通过 Flutter,可以查看我们的专用 iOS 仓库:

👉 Ultralytics YOLO iOS App - 一个原生 iOS 应用,演示如何使用 Ultralytics YOLO 模型进行实时目标检测、分割、分类、姿态估计和旋转框检测。

该仓库提供:

  • 面向 iOS 的纯 Swift 实现
  • 直接的 Core ML 集成
  • 原生 iOS UI 组件
  • 多种 YOLO 任务的示例代码
  • 针对 iOS 性能的优化

📮 联系方式

如果你在使用 Ultralytics YOLO 时遇到问题,或有功能建议,请通过 GitHub Issues 提交。若想参与更广泛的讨论、提问或获取社区支持,欢迎加入我们的 Discord 服务器。


Ultralytics GitHub space Ultralytics LinkedIn space Ultralytics Twitter space Ultralytics YouTube space Ultralytics TikTok space Ultralytics BiliBili space Ultralytics Discord