Я разрабатываю Orange Widgets для распознавания лиц.Я хочу нарисовать прямоугольник вокруг лиц, захваченных в видео, установив события мыши с помощью cv2.setMouseCallback.Я могу захватить видео в окне изображения (cv2.namedWindow ("image")) с помощью cv2.VideoCapture (0), но я не могу вызвать функцию MouseCallBack в окне изображения.Я новичок в разработке виджетов Orange и не уверен, что функция cv2.setMouseCallback может работать внутри класса OrangeWidget.Любое предложение / помощь будет принята с благодарностью.Вот код:
class MouseCallBackWidget(OWWidget):
name = "MouseCallBack"
# Short widget description
description = "Draw rectangle"
icon = "icons/DataSamplerA.svg"
want_main_area = False
# with a fixed non resizable geometry.
resizing_enabled = False
def MouseCallBack(self,event, x, y, flags, param):
#global boxRefPt, boxCX, boxCY, boxW, boxH, click, mode_learn, completed_rect, ix, iy
# check if the left mouse button is clicked.
if event == cv2.EVENT_LBUTTONDOWN:
if self.completed_rect == False:
self.boxRefPt = [(x, y)] # record the starting (x, y) coordinate of a new rectangle.
self.ix, self.iy = x, y
self.click = True
# check if the left mouse button is released.
elif event == cv2.EVENT_LBUTTONUP:
self.boxRefPt.append((x, y)) # record the ending (x, y) coordinate a new rectangle.
self.click = False
self.completed_rect = True
self.mode_learn = True
(x1, y1) = self.boxRefPt[0]
(x2, y2) = self.boxRefPt[1]
self.boxCX = min(x1, x2)
self.boxCY = min(y1, y2)
self.boxW = abs(x1 - x2)
self.boxH = abs(y1 - y2)
def __init__(self):
super().__init__()
from AnyQt.QtGui import QIntValidator
self.boxRefPt = []
self.click = False
self.mode_learn = False
self.completed_rect = False
self.ix = 0
self.iy = 0
self.boxCX = 0
self.boxCY = 0
self.boxW = 0
self.boxH = 0
self.cap = cv2.VideoCapture(0)
cv2.namedWindow("image")
cv2.setMouseCallback("image", self.MouseCallBack)
while (True):
self.ret, self.frame = self.cap.read()
if self.completed_rect == True:
cv2.rectangle(self.frame, self.boxRefPt[0], self.boxRefPt[1], (0, 255, 0), 2)
cv2.putText(self.frame,'LEARN AREA', (self.boxCX, (self.boxCY - 12)), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), lineType=cv2.LINE_AA)
cv2.imshow("image", self.frame)
cv2.waitKey(1)