#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)