简介
dlib提供了dlib.correlation_tracker()类用于跟踪目标,于是自己修改了下直接在屏幕上绘制识别物体,效果一般有时识别会出错。
完整代码
import cv2
import numpy as np
import dlib, mss, os
window_name = 'Testone'
window_size = 2
sct = mss.mss()
screen_width = 1920
screen_height = 1080
# win_left , win_top, win_width, win_height = screen_width // 3, screen_height // 3, screen_width // 3, screen_height // 3
rwidth, rheight = screen_width // window_size, screen_height // window_size
monitor = {
'left': 0,
'top': 0,
'width': 1920,
'height': 1080,
}
tracker = dlib.correlation_tracker()
start_flag = True
selection = None
track_window = None
drag_start = None
def onMouseClicked(event, x, y, flags, param):
global selection, track_window, drag_start
if event == cv2.EVENT_LBUTTONDOWN:
drag_start = (x, y)
track_window = None
if drag_start:
xMin = min(x, drag_start[0])
yMin = min(y, drag_start[1])
xMax = max(x, drag_start[0])
yMax = max(y, drag_start[1])
selection = (xMin, yMin, xMax, yMax)
if event == cv2.EVENT_LBUTTONUP:
drag_start = None
track_window = selection
selection = None
cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
cv2.resizeWindow(window_name, rwidth, rheight)
cv2.setMouseCallback(window_name, onMouseClicked)
while True:
try:
img = sct.grab(monitor=monitor)
img = np.array(img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
if start_flag == True:
while True:
img_first = img.copy()
if track_window:
cv2.rectangle(img_first, (track_window[0], track_window[1]), (track_window[2], track_window[3]), (255,255,255), 2)
elif selection:
cv2.rectangle(img_first, (selection[0], selection[1]), (selection[2], selection[3]), (255,255,255), 2)
cv2.imshow(window_name, img_first)
if cv2.waitKey(5) == 13:
break
start_flag = False
tracker.start_track(gray, dlib.rectangle(track_window[0], track_window[1], track_window[2], track_window[3]))
else:
tracker.update(gray)
box_predict = tracker.get_position()
cv2.rectangle(img,(int(box_predict.left()),int(box_predict.top())),(int(box_predict.right()),int(box_predict.bottom())),(0,255,255),2)
cv2.imshow(window_name, img)
if cv2.waitKey(10) == 27:
break
except Exception as e:
print(e)
os._exit(0)
cv2.destroyAllWindows()
评论 (0)