YOLOv8/YOLOv11多任务应用打包为EXE的关键实现
核心功能实现
1. 模型加载与初始化
from ultralytics import YOLO
# 初始化不同任务的YOLO模型
det_model = YOLO("yolov8n.pt") # 目标检测
seg_model = YOLO("yolov8n-seg.pt") # 实例分割
cls_model = YOLO("yolov8n-cls.pt") # 图像分类
pose_model = YOLO("yolov8n-pose.pt") # 姿态估计
关键说明:
- 使用Ultralytics官方提供的预训练模型
- 每个任务需要加载对应的专用模型
- 模型文件需放在项目目录下或指定路径
2. 图像处理与推理核心代码
def process_image(mode, image_path):
img = cv2.imread(image_path)
if mode == "detect":
results = det_model(img)
return results[0].plot() # 返回带检测框的图像
elif mode == "segment":
results = seg_model(img)
return results[0].plot() # 返回带分割掩码的图像
elif mode == "classify":
results = cls_model(img)
return results[0].probs # 返回分类概率
elif mode == "pose":
results = pose_model(img)
return results[0].plot() # 返回带姿态关键点的图像
关键说明:
- 统一接口处理不同任务
- 每个任务返回适合显示的结果格式
- plot()方法自动生成可视化结果
3. 界面与结果显示
# 使用Tkinter创建简单界面
root = tk.Tk()
mode_var = tk.StringVar(value="detect")
# 结果显示组件
result_label = ttk.Label(root)
result_text = tk.Text(root)
def update_result():
mode = mode_var.get()
result = process_image(mode, image_path)
if mode == "classify":
# 处理分类文本结果
result_text.insert(tk.END, str(result))
else:
# 显示图像结果
img = Image.fromarray(cv2.cvtColor(result, cv2.COLOR_BGR2RGB))
photo = ImageTk.PhotoImage(img)
result_label.config(image=photo)
关键说明:
- 使用Tkinter构建简单GUI
- 根据任务类型动态显示结果
- 图像结果和文本结果分开处理
打包为EXE文件
1. 使用PyInstaller打包
创建打包脚本build.spec
:
# -*- mode: python -*-
from PyInstaller.utils.hooks import collect_data_files
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=collect_data_files('ultralytics') + [('models/*', 'models')],
hiddenimports=[],
hookspath=[],
...
)
pyz = PYZ(a.pure)
exe = EXE(pyz, a.scripts, ...)
coll = COLLECT(...)
2. 关键打包命令
pyinstaller --onefile --windowed --icon=app.ico --add-data "models;models" main.py
关键参数说明:
--onefile
: 生成单个EXE文件--windowed
: 不显示控制台窗口--icon
: 设置应用图标--add-data
: 包含模型文件和资源
项目部署注意事项
-
模型文件处理:
- 确保模型文件(.pt)被打包进EXE
- 模型文件较大,考虑使用较小版本(yolov8n)
-
依赖管理:
- 创建requirements.txt包含所有依赖
- 特别注意OpenCV和PyTorch的版本兼容性
-
性能优化:
- 对于边缘设备,考虑转换为ONNX或TensorRT格式
- 可以使用半精度(FP16)推理提升速度
-
错误处理:
- 添加模型加载失败处理
- 增加图像读取验证
- 处理GPU不可用时的CPU回退
这个实现提供了YOLO多任务应用的核心框架,可以根据实际需求进一步扩展功能,如添加视频处理、批量处理、结果保存等功能。