2401_83619482 2024-03-28 10:45 采纳率: 0%
浏览 6

请问拍python里面用了detect检测之后,结果视频没有标框,显示no detections怎么解决

Detect检测视频,结果无标注,且显示no detections

  • 写回答

3条回答 默认 最新

  • 专家-皆知 2024-03-28 10:45
    关注

    引自免费微信小程序:皆我百晓生

    在Python中的detection模块用于执行图像对象检测任务,但如果没有正确配置相应的检测器(例如OpenCV或TensorFlow Detection API)和参数,可能会影响结果的准确性并导致no detections的结果。以下是一个可能的解决方案,使用OpenCV进行检测,并使用cv2.waitKey()函数暂停检测过程直到用户输入特定字符。

    首先,确保已经安装了OpenCV库:

    pip install opencv-python
    

    接着,创建一个OpenCV处理文件(例如,opencv_video_detection.py)并添加以下代码:

    import cv2
    import sys
    
    # 检测窗口大小
    WINDOW_WIDTH = 640
     WINDOW_HEIGHT = 480
    
    # 图像路径
    image_path = 'path/to/your/image.jpg'
    
    # 检测器类型和名称
    detector = cv2.CascadeClassifier(cv2.data.haarcascades/OpenCV CascadeClassifier.xml)
    
    # 定义暂停等待命令
    pause_wait = input("Enter a character: ")
    
    while True:
        # 开始帧处理
        frame = cv2.imread(image_path)
        
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        
        # 转换为灰度图像
        gray = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
        
        # 边缘检测
        edges = cv2.Canny(gray, 100, 300)
    
        # 显示原始图像和边缘检测结果
        cv2.imshow('Original Image', image_path)
        cv2.imshow('Edges', edges)
    
        # 用户按下任意键时暂停检测
        if pause_wait.lower() == 'q':
            break
    
        # 如果键盘按键被按下,获取上一帧图像
        key_pressed = cv2.waitKey(1) & 0xFF
    
        # 如果上一帧已识别并保存,则转换回图像并显示
        if key_pressed == ord('s'):
            prev_frame = frame
            new_frame = cv2.bitwise_and(prev_frame, prev_frame, mask=edges == None)
            cv2.imwrite('prev_frame.png', new_frame)
            cv2.imshow('Previous Frame', prev_frame)
            break
    
        # 其他情况(比如设备禁用、关闭窗口等)则清除所有图像和停止检测
        else:
            cv2.destroyAllWindows()
            break
    

    这段代码会在每个视频帧结束后显示原始图像和边缘检测结果,然后等待用户输入“q”(字母Q或q),强制中断检测过程。如果在等待期间有任何按键按下,那么该帧将被保存到图片文件中,并在下一帧中继续检测。当用户按下任意键(例如,“q”)时,程序会停止当前的检测并从上一帧图像中恢复,即创建一个新的“prev_frame.png”图像作为保存帧,并显示上一帧图像。同时,程序也会清除所有的图像并结束检测流程。

    注意:这个示例基于OpenCV的Haar分类器,在某些情况下可能无法准确检测图像中的物体,因为此类算法通常对颜色和纹理有较强的鲁棒性,但在处理高对比度、噪声和复杂形状时可能不如其他方法有效。此外,由于Python是解释型语言,因此可能会遇到内存不足的问题,特别是在处理大量数据时。对于大型视频,可能需要优化内存使用或调整检测器参数以提高性能。

    最后,如果你使用的是Python 3.x版本,可能需要使用cv2.cv2愁布EventLoop类而不是cv2.waitKey()函数来暂停检测。以下是修改后的代码:

    import cv2
    import sys
    
    # 检测窗口大小
    WINDOW_WIDTH = 640
     WINDOW_HEIGHT = 480
    
    # 图像路径
    image_path = 'path/to/your/image.jpg'
    
    # 检测器类型和名称
    detector = cv2.CascadeClassifier(cv2.data.haarcascades/OpenCV CascadeClassifier.xml)
    
    # 边缘检测
    edges = cv2.Canny(gray, 100, 300)
    
    # 持续检测
    cv2.evulpxEventLoop(main_function)
    
    def main_function():
        while True:
            # 启动帧处理
            frame = cv2.imread(image_path)
    
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            
            # 转换为灰度图像
            gray = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
        
            # 边缘检测
            edges = cv2.Canny(gray, 100, 300)
    
            # 显示原始图像和边缘检测结果
            cv2.imshow('Original Image', image_path)
            cv2.imshow('Edges', edges)
    
            # 用户按下任意键时暂停检测
            if pause.wait.lower() == 'q':
                break
    
            # 如果键盘按键被按下,获取上一帧图像
            key_pressed = cv2.waitKey(1) & 0xFF
    
            # 如果上一帧已识别并保存,则转换回图像并显示
            if key_pressed == ord('s'):
                prev_frame = frame
                new_frame = cv2.bitwise_and(prev_frame, prev_frame, mask=edges == None)
                cv2.imwrite('prev_frame.png', new_frame)
                cv2.imshow('Previous Frame', prev_frame)
                break
    
            # 其他情况(比如设备禁用、关闭窗口等)则清除所有图像和停止检测
            else:
                cv2.destroyAllWindows()
                break
    

    这个示例使用cv2.evulpxEventLoop类替代了cv2.waitKey()函数,这使得程序可以在图形化界面中运行,而非等待鼠标或键盘事件的发生。这段代码会在每个视频帧结束后显示原始图像和边缘检测结果,然后在暂停等待期间,程序会不断处理下一个视频帧,直到用户按下“q”或其他指定字符。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月28日

悬赏问题

  • ¥50 vue3 + vite + electron打包找不到第三方包?
  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点