Как сделать так, чтобы YoloV5 обнаруживался с помощью захвата экрана?

#python #artificial-intelligence #object-detection #yolov5

Вопрос:

Я использую следующее для того, чтобы делать скриншоты из открытого приложения в режиме реального времени. Как я могу бежать 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) amp; 0xFF) == ord('q'):
        cv2.destroyAllWindows()
        break
 

ЙолоВ5 detect.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()

 

ожидаемый результат:

введите описание изображения здесь

Ответ №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) amp; 0xFF) == ord('q'):
        cv2.destroyAllWindows()
        break
 

Комментарии:

1. Спасибо за ваш ответ, я пытался, но код вернул меня 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'

2. о, попробуйте, scr_img.show() может быть, модель возвращает объект, а не только изображение postporoces.

3. да, когда я использую scr_img.show() , он возвращает меня как изображение. Означает ли это, что мне нужно каждый раз сохранять изображение и читать с него ?

4. Не обязательно, если вы можете получить доступ к изображению каким-либо другим способом, вы можете использовать cv2.imshow (), что-то подобное этому img = scr_img.show() . Если это не сработает, попробуйте найти источник из .show() метода и посмотреть, какую переменную они печатают.

5. Изображение все еще отображается из-за .show() . Я пытался img = scr_img.show() cv.imshow('Testing', img)