windows实现yolo-flutter-app项目
开源地址:https://github.com/ultralytics/yolo-flutter-app
1、配置环境
作为测试,在Android手机端运行quickstart.md步骤,需要提前安装的如下:
jdk17
https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
添加环境变量:
JAVA_HOME → C:\Program Files\Java\jdk-17
Path 新增:%JAVA_HOME%\bin
Flutter
下载地址:https://docs.flutter.cn/get-started/install/windows


解压即可,环境变量 Path → 新增:E:\DevelopmentTool\flutter\bin
添加环境变量 FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
添加环境变量 PUB_HOSTED_URL=https://pub.flutter-io.cn
CMD执行:flutter -v 查看安装,显示版本安装成功

Android Studio
下载地址:Android Studio
安装时勾选:Android SDK、Android SDK Command-line Tools、Intel HAXM(虚拟机加速)
也可在安装后安装后:
打开 Android Studio -> 设置 -> Languages & Frameworks -> Android SDK -> SDK Tools
勾选需要安装的选项后 -> OK

添加环境变量:
Path 新增:C:\Users\52884\AppData\Local\Android\Sdk\cmdline-tools\latest\bin
Git For Winddows
下载地址:https://git-scm.com/downloads/win(安装时需勾选"Use Git from Windows Command Prompt")
2、yolo_demo测试
根据开源地址中的quickstart.md步骤
1)Create New Flutter App
flutter create yolo_demo
cd yolo_demo
创建成功后结果如下:

2) Add YOLO Plugin
在自动生成的pubspec.yaml文件中添加:
dependencies:
flutter:
sdk: flutter
ultralytics_yolo: ^0.1.25
image_picker: ^0.8.7 # For image selection


保存后命令行执行
flutter pub get
安装依赖,结果如下:

3)Add a model
下载预训练权重,3种方式下载:
-
Download from the release assets of this repository
-
Get it from Ultralytics Hub
-
Export it from Ultralytics/ultralytics (CoreML/TFLite)
这里以第1种为例,下载yolo11n.tflite

添加到 "E:\Development\flutter\yolo_demo\android\app\src\assets "中,若src中没有assets就新建
4)Minimal Detection Code
用以下内容替换"E:\Development\flutter\yolo_demo\lib\main.dart"的内容:
import 'package:flutter/material.dart';
import 'package:ultralytics_yolo/yolo.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:io';
void main() => runApp(YOLODemo());
class YOLODemo extends StatefulWidget {
@override
_YOLODemoState createState() => _YOLODemoState();
}
class _YOLODemoState extends State<YOLODemo> {
YOLO? yolo;
File? selectedImage;
List<dynamic> results = [];
bool isLoading = false;
@override
void initState() {
super.initState();
loadYOLO();
}
Future<void> loadYOLO() async {
setState(() => isLoading = true);
yolo = YOLO(
modelPath: 'yolo11n',
task: YOLOTask.detect,
);
await yolo!.loadModel();
setState(() => isLoading = false);
}
Future<void> pickAndDetect() async {
final picker = ImagePicker();
final image = await picker.pickImage(source: ImageSource.gallery);
if (image != null) {
setState(() {
selectedImage = File(image.path);
isLoading = true;
});
final imageBytes = await selectedImage!.readAsBytes();
final detectionResults = await yolo!.predict(imageBytes);
setState(() {
results = detectionResults['boxes'] ?? [];
isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('YOLO Quick Demo')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (selectedImage != null)
Container(
height: 300,
child: Image.file(selectedImage!),
),
SizedBox(height: 20),
if (isLoading)
CircularProgressIndicator()
else
Text('Detected ${results.length} objects'),
SizedBox(height: 20),
ElevatedButton(
onPressed: yolo != null ? pickAndDetect : null,
child: Text('Pick Image & Detect'),
),
SizedBox(height: 20),
// Show detection results
Expanded(
child: ListView.builder(
itemCount: results.length,
itemBuilder: (context, index) {
final detection = results[index];
return ListTile(
title: Text(detection['class'] ?? 'Unknown'),
subtitle: Text(
'Confidence: ${(detection['confidence'] * 100).toStringAsFixed(1)}%'
),
);
},
),
),
],
),
),
),
);
}
}
5)Run Your App
这里需要接受SDK许可证(参考:https://blog.csdn.net/qiuyu6958334/article/details/106842880),执行:sdkmanager.bat --licenses,根据提示一直输入 y
再将Android手机连接上电脑(参考:windows连接Android手机)
如果不连接手机执行flutter run会显示如下界面,选择windows为例,得到的界面传入图片将无法识别

这里以Escrpy为例,WIFI无线连接

(注意:若是第二次或多次测试,首先需要执行命令 adb uninstall com.example.yolo_demo卸载原始app,即使手机上已卸载过,其中com.example.yolo_demo名称来自 Android/app/build.gradle.kts文件中的applicationId,否则手机不会显示任何数据):
![]()
命令行执行
flutter run
显示(ALN AL00即连接的手机设备名称):

等待完成即可,手机上会安装一个app

测试结果,使用自己训练的数据转为tflite的结果(自己训练的yolo权重文件转tflite参考:pt格式转tflite)

开源默认的最大检测数量是30,根据需要修改(这里以目标检测为例,放大为1500)
修改 ObjectDetector.kt 中的值:(默认地址在依赖的路径C:\Users\52884\AppData\Local\Pub\Cache\hosted\pub.flutter-io.cn\ultralytics_yolo-0.1.36\android\src\main\kotlin\com\ultralytics\yolo\ObjectDetector.kt)

保存后重新执行:
flutter clean
flutter pub get
flutter run

更多推荐



所有评论(0)