YOLOv11多任务应用打包为EXE可执行文件-图像识别and图像分割and图像分类and姿态识别界面代码

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: 包含模型文件和资源

项目部署注意事项

  1. 模型文件处理

    • 确保模型文件(.pt)被打包进EXE
    • 模型文件较大,考虑使用较小版本(yolov8n)
  2. 依赖管理

    • 创建requirements.txt包含所有依赖
    • 特别注意OpenCV和PyTorch的版本兼容性
  3. 性能优化

    • 对于边缘设备,考虑转换为ONNX或TensorRT格式
    • 可以使用半精度(FP16)推理提升速度
  4. 错误处理

    • 添加模型加载失败处理
    • 增加图像读取验证
    • 处理GPU不可用时的CPU回退

这个实现提供了YOLO多任务应用的核心框架,可以根据实际需求进一步扩展功能,如添加视频处理、批量处理、结果保存等功能。