我检查了问题{a1},但没有找到解决办法。我正在尝试使用meanshift和camshift进行多面跟踪,并且我已经将代码从here修改为使用多处理(输入和输出队列作为进程)。 对于所有检测(使用openvino人脸检测器完成):
iq = multiprocessing.Queue()
oq = multiprocessing.Queue()
inputQueues.append(iq)
outputQueues.append(oq)
p = multiprocessing.Process(
target=start_tracker_meanshift, #the function
args=(bb, confidence, frame, iq, oq))
p.daemon = True
p.start()
在这里,对图像中找到的所有边界框执行此操作
meanshift和camshift的代码取自here
我正在使用的修改函数是:
def start_tracker_meanshift(box, label, frame, inputQueue, outputQueue):
startX, startY, endX, endY = box
roi = frame[startY: endY, startX:endX]
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60., 32.)),
np.array((180., 255., 255.)))
roi_hist = cv2.calcHist([hsv_roi], [0], mask, [180], [0, 180])
cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)
# Setup the termination criteria, either 10 iteration or move by atleast 1 pt
term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1)
track_window = [startX, startY, endX-startX, endY-startY]
while(True):
frame = inputQueue.get()
plt.imshow(frame)
plt.show()
# print("got frame")
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
if hsv is None:
continue
dst = cv2.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)
# apply camshift to get the new location
print(track_window)
if track_window != []:
track_window[0] = max(1,track_window[0])
track_window[1] = max(1,track_window[1])
track_window[2] = max(1,track_window[2])
track_window[3] = max(1,track_window[3])
print(track_window)
ret, track_window = cv2.meanShift(dst, track_window,term_crit)
print("excepted")
else:
continue
# Draw it on image
pts = cv2.boxPoints(ret)
pts = np.int0(pts)
outputQueue.put((label, (startX, startY, endX, endY)))
return
camshift也一样。我已经检查了track_窗口,它始终是一个矩形,我试图每次都将所有值保持在大于0的状态,但仍然会出现错误
完整回溯:
[894, 155, 123, 126]
Process Process-2:
Traceback (most recent call last):
File "C:\Users\sajan\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 258, in _bootstrap
self.run()
File "C:\Users\sajan\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "F:\Semester 8\GeekyBee\Object_tracking\multi_object_tracking_fast.py", line 88, in start_tracker_meanshift
ret, track_window = cv2.meanShift(dst, track_window,term_crit)
cv2.error: OpenCV(4.1.2-openvino) C:\jenkins\workspace\OpenCV\OpenVINO\build\opencv\modules\video\src\camshift.cpp:64: error: (-5:Bad argument) Input window has non-positive sizes in function 'cv::meanShift'
编辑:
我将track_窗口转换为tuple,它以某种方式工作(track_window = [startX, startY, endX-startX, endY-startY] to track_window = (startX, startY, endX-startX, endY-startY)
),但是这个示例同时适用于list和tuple,所以我不确定实际的问题是什么
目前没有回答
相关问题 更多 >
编程相关推荐