You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS Melodic中迁移OpenCV人体检测代码遇语法错误求助

问题解决方案:ROS Melodic(Python3.6)下YOLO代码语法错误

问题背景

在Ubuntu 22.04的Python3.10环境编写的OpenCV人体检测代码,迁移至Docker运行的ROS Melodic环境(Python3.6.9)时触发语法错误,错误信息如下:

错误信息

File "/ws/src/vision-car/scripts/yolo-cam.py", line 70
    cvzone.putTextRect(img,f"{currentClass} {conf}",(max(0,x1),max(35,y1)),scale=2,thickness=2)
                                                  ^
SyntaxError: invalid syntax

核心解决方案

1. 修复当前语法错误

虽然Python3.6官方支持f-string,但部分旧环境或依赖库可能存在兼容性问题。将报错行的f-string替换为Python3.6完全兼容的字符串格式化方式:

原代码:

cvzone.putTextRect(img,f"{currentClass} {conf}",(max(0,x1),max(35,y1)),scale=2,thickness=2)

修改为(二选一):

方式1:使用str.format()

cvzone.putTextRect(img,"{} {}".format(currentClass, conf),(max(0,x1),max(35,y1)),scale=2,thickness=2)

方式2:使用%格式化

cvzone.putTextRect(img,"%s %.2f" % (currentClass, conf),(max(0,x1),max(35,y1)),scale=2,thickness=2)

2. 解决YOLOv8的Python版本兼容问题

你使用的ultralytics YOLOv8要求Python3.7及以上,而ROS Melodic默认的Python3.6不满足该要求,后续会触发更多运行时错误,需二选一处理:

选项A:降级YOLO版本到YOLOv5

YOLOv5支持Python3.6+,修改代码适配YOLOv5的API:

  • 将from ultralytics import YOLO替换为from yolov5 import YOLO(或直接使用YOLOv5的官方代码结构)
  • 调整检测结果的解析逻辑(YOLOv5的结果格式与YOLOv8略有不同)

选项B:在Docker中配置Python3.7+环境

在Dockerfile中指定Python3.7版本,并兼容ROS Melodic:

FROM ros:melodic
# 安装Python3.7及依赖
RUN apt-get update && apt-get install -y software-properties-common
RUN add-apt-repository ppa:deadsnakes/ppa && apt-get update
RUN apt-get install -y python3.7 python3.7-dev python3-pip
# 设置Python3.7为默认
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
# 安装所需库
RUN python3 -m pip install opencv-python cvzone ultralytics

额外使用建议

  • ROS Python版本规范:将脚本开头的#!/usr/bin/env python改为#!/usr/bin/env python3,确保使用Python3环境运行;所有依赖用pip3 install安装。
  • ROS节点优化:当前代码的while True循环未结合ROS的生命周期管理,会导致CPU占用过高,修改为:
    while not rospy.is_shutdown():
        # 原有的图像读取、检测逻辑
        rate.sleep()
    
  • Docker摄像头权限:运行容器时需添加设备映射并赋予权限:
    docker run --device=/dev/video0:/dev/video0 --privileged -it your-image-name
    
  • 依赖版本锁定:在requirements.txt中明确指定依赖版本,避免环境差异导致问题,例如:
    opencv-python==4.5.5.62
    cvzone==1.5.6
    ultralytics==7.0.0  # 仅当使用Python3.7+时
    yolov5==7.0.13      # 若降级到YOLOv5
    

内容的提问来源于stack exchange,提问作者MikeyFlores

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:52:05