【问题标题】:How to make YoloV5 detect by screen grab?如何让 YoloV5 通过屏幕抓取进行检测?
【发布时间】:2021-11-04 13:27:25
【问题描述】:

我正在使用以下内容从打开的应用程序中实时抓取屏幕截图。如何运行仅检测来自抓取屏幕的输入的 detect.py?谢谢。

我的抓取屏幕

import cv2 as cv
import numpy as np

import numpy as np
import cv2
from mss import mss
from PIL import Image

bounding_box = {'top': 340, 'left': 800, 'width': 350, 'height': 400}

sct = mss()


while True:
    sct_img = sct.grab(bounding_box)
    scr_img = np.array(sct_img)

    #cv2.imshow('screen', scr_img) # display screen in box
    cv.imshow('Testing', scr_img)

    if (cv2.waitKey(1) & 0xFF) == ord('q'):
        cv2.destroyAllWindows()
        break

YoloV5 检测.py

目前它只检测图像而不是我的实时抓取屏幕

# PyTorch Hub
import torch

# Model
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# Images
dir = 'https://ultralytics.com/images/'
imgs = [dir + f for f in ('zidane.jpg', 'bus.jpg')]  # batch of images

# Inference
results = model(imgs)
results.print()  # or .show(), .save()

预期结果:

【问题讨论】:

    标签: python artificial-intelligence object-detection yolov5


    【解决方案1】:

    将屏幕抓取传递给模型:

    import cv2 as cv
    import numpy as np
    
    import numpy as np
    import cv2
    from mss import mss
    from PIL import Image
    
    # PyTorch Hub
    import torch
    
    # Model
    model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
    
    bounding_box = {'top': 340, 'left': 800, 'width': 350, 'height': 400}
    
    sct = mss()
    
    
    while True:
        sct_img = sct.grab(bounding_box)
        scr_img = np.array(sct_img)
    
        #cv2.imshow('screen', scr_img) # display screen in box
        scr_img = model(scr_img)
        cv.imshow('Testing', scr_img)
    
        if (cv2.waitKey(1) & 0xFF) == ord('q'):
            cv2.destroyAllWindows()
            break
    

    【讨论】:

    • 感谢您的回复,我试过了,但代码返回给我line 26, in <module> cv.imshow('Testing', scr_img) cv2.error: OpenCV(4.5.3) :-1: error: (-5:Bad argument) in function 'imshow' > Overload resolution failed: > - mat is not a numpy array, neither a scalar > - Expected Ptr<cv::cuda::GpuMat> for argument 'mat' > - Expected Ptr<cv::UMat> for argument 'mat'
    • 哦,试试scr_img.show() 也许模型正在返回一个对象,而不仅仅是postporoces图片。
    • 是的,当我使用scr_img.show() 时,它会将我作为图像返回。这是否意味着我每次都需要保存图像并从中读取?
    • 不一定,如果您可以通过其他方式访问图像,您可以使用 cv2.imshow(),类似于 img = scr_img.show()。如果这不起作用,请尝试从 .show() 方法中查找源代码并查看它们打印的变量。
    • 由于.show(),图像仍在显示。我试过img = scr_img.show() cv.imshow('Testing', img)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2013-12-31
    • 2013-01-12
    • 2017-02-25
    • 2023-03-25
    相关资源
    最近更新 更多