def run(self): global Update global MorphOps global Channel global Realtime global bflag global show_backproj self.get_img() if self.selection: self.make_selection() if self.tracking_state == 2: READY[self.video_src] = False self.track() font = cv2.FONT_HERSHEY_SIMPLEX print "Target Missing." cv2.putText(self.vis, 'Target Missing', (10, 400), font, 1, (255, 255, 255), 2, 1) elif self.tracking_state == 1: READY[self.video_src] = True self.selection = None self.track() if self.show_backproj: self.vis[:] = prob[..., np.newaxis] xx0, yy0, xx1, yy1 = self.track_window img_roi = self.frame[yy0:yy0 + yy1, xx0:xx0 + xx1] cv2.imshow("Tracking Window" + str(self.video_src), img_roi) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(self.vis, str(self.track_box[0]), (10, 400), font, 1, (255, 255, 255), 2, 1) status[self.video_src] = self.track_box[0] #print str(track_box[0]) #try: cv2.ellipse(vis, track_box, (0, 0, 255), 2) #except: print track_box mark.draw_machine_mark(60, self.track_box[0], self.vis) #cv2.imshow('Original Footage',self.frame) if flag: cv2.imshow('camshift' + str(self.video_src), self.vis) ch = 0xFF & cv2.waitKey(5) if ch == 27: bflag = False if ch == ord('b'): show_backproj = not show_backproj if ch == ord('m'): MorphOps = not MorphOps if ch == ord('c'): Channel = not Channel if ch == ord('u'): Update = not Update if ch == ord('r'): Realtime = not Realtime
def run(self): global Update global MorphOps global Channel global Realtime global bflag global show_backproj self.get_img() if self.selection: self.make_selection() if self.tracking_state == 2: READY[self.video_src] = False self.track() font = cv2.FONT_HERSHEY_SIMPLEX print "Target Missing." cv2.putText(self.vis, "Target Missing", (10, 400), font, 1, (255, 255, 255), 2, 1) elif self.tracking_state == 1: READY[self.video_src] = True self.selection = None self.track() if self.show_backproj: self.vis[:] = prob[..., np.newaxis] xx0, yy0, xx1, yy1 = self.track_window img_roi = self.frame[yy0 : yy0 + yy1, xx0 : xx0 + xx1] cv2.imshow("Tracking Window" + str(self.video_src), img_roi) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(self.vis, str(self.track_box[0]), (10, 400), font, 1, (255, 255, 255), 2, 1) status[self.video_src] = self.track_box[0] # print str(track_box[0]) # try: cv2.ellipse(vis, track_box, (0, 0, 255), 2) # except: print track_box mark.draw_machine_mark(60, self.track_box[0], self.vis) # cv2.imshow('Original Footage',self.frame) if flag: cv2.imshow("camshift" + str(self.video_src), self.vis) ch = 0xFF & cv2.waitKey(5) if ch == 27: bflag = False if ch == ord("b"): show_backproj = not show_backproj if ch == ord("m"): MorphOps = not MorphOps if ch == ord("c"): Channel = not Channel if ch == ord("u"): Update = not Update if ch == ord("r"): Realtime = not Realtime
def run(self): global Update global MorphOps global Channel global Realtime while True: ret, self.frame = self.cam.read() vis = self.frame.copy() hsv = cv2.cvtColor(self.frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, np.array((0., 60., 32.)), np.array((180., 255., 255.))) mask = cv2.inRange(hsv, np.array((0., 0., 0.)), np.array((180., 255., 255.))) if self.selection: x0, y0, x1, y1 = self.selection self.track_window = (x0, y0, x1 - x0, y1 - y0) hsv_roi = hsv[y0:y1, x0:x1] mask_roi = mask[y0:y1, x0:x1] if Channel: hist = cv2.calcHist([hsv_roi], [0, 1], mask_roi, [16, 5], [0, 180, 0, 256]) else: hist = cv2.calcHist([hsv_roi], [0], mask_roi, [16], [0, 180]) cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX) self.hist = hist.reshape(-1) self.show_hist() vis_roi = vis[y0:y1, x0:x1] cv2.bitwise_not(vis_roi, vis_roi) vis[mask == 0] = 0 if self.tracking_state == 2: if Channel: prob = cv2.calcBackProject([hsv], [0, 1], self.hist, [0, 180, 0, 256], 1) else: prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180], 1) prob &= mask term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1) self.previous_window = self.track_window kernel = np.ones((5, 5), np.uint8) if MorphOps: prob = cv2.morphologyEx(prob, cv2.MORPH_OPEN, kernel) prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel) prob = cv2.GaussianBlur(prob, (5, 5), 0) track_box, self.track_window = cv2.CamShift( prob, self.track_window, term_crit) if get_window_size(self.track_window) <= size_treshold: self.track_window = get_increased_window( self.previous_window) self.tracking_state = 2 else: self.tracking_state = 1 font = cv2.FONT_HERSHEY_SIMPLEX print "Target Missing." cv2.putText(vis, 'Target Missing', (10, 400), font, 1, (255, 255, 255), 2, 1) if self.tracking_state == 1: self.selection = None if Channel: prob = cv2.calcBackProject([hsv], [0, 1], self.hist, [0, 180, 0, 256], 1) else: prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180], 1) prob &= mask term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1) self.previous_window = self.track_window kernel = np.ones((5, 5), np.uint8) if MorphOps: prob = cv2.morphologyEx(prob, cv2.MORPH_OPEN, kernel) prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel) prob = cv2.GaussianBlur(prob, (5, 5), 0) track_box, self.track_window = cv2.CamShift( prob, self.track_window, term_crit) if get_window_size(self.track_window) <= size_treshold: self.track_window = get_increased_window( self.previous_window) self.tracking_state = 2 if self.show_backproj: vis[:] = prob[..., np.newaxis] xx0, yy0, xx1, yy1 = self.track_window img_roi = self.frame[yy0:yy0 + yy1, xx0:xx0 + xx1] cv2.imshow("Tracking Window", img_roi) if get_window_size( self.track_window) >= size_treshold and Update: self.bkp = self.hist font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(vis, 'Updating...', (10, 200), font, 1, (255, 255, 255), 2, 1) xx0, yy0, xx1, yy1 = self.track_window xx1 /= 3 yy1 /= 3 xx0 += xx1 yy0 += yy1 if xx1 > 0 and yy1 > 0: print self.track_window hsv_roi = hsv[yy0:yy0 + yy1, xx0:xx0 + xx1] mask_roi = mask[yy0:yy0 + yy1, xx0:xx0 + xx1] cv2.imshow("Tracking Window", hsv_roi) hist = cv2.calcHist([hsv_roi], [0], mask_roi, [16], [0, 180]) cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX) print cv2.compareHist(hist.reshape(-1), self.bkp, 0) self.hist = hist.reshape(-1) self.show_hist() if not Realtime: Update = not Update font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(vis, str(track_box[0]), (10, 400), font, 1, (255, 255, 255), 2, 1) print str(track_box[0]) #try: cv2.ellipse(vis, track_box, (0, 0, 255), 2) #except: print track_box mark.draw_machine_mark(60, track_box[0], vis) #cv2.imshow('Original Footage',self.frame) if flag: cv2.imshow('camshift', vis) ch = 0xFF & cv2.waitKey(5) if ch == 27: break if ch == ord('b'): self.show_backproj = not self.show_backproj if ch == ord('m'): MorphOps = not MorphOps if ch == ord('c'): Channel = not Channel if ch == ord('u'): Update = not Update if ch == ord('r'): Realtime = not Realtime cv2.destroyAllWindows()
def run(self): global Update global MorphOps global Channel global Realtime while True: ret, self.frame = self.cam.read() vis = self.frame.copy() hsv = cv2.cvtColor(self.frame, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, np.array((0., 60., 32.)), np.array((180., 255., 255.))) mask = cv2.inRange(hsv, np.array((0., 0., 0.)), np.array((180., 255., 255.))) if self.selection: x0, y0, x1, y1 = self.selection self.track_window = (x0, y0, x1-x0, y1-y0) hsv_roi = hsv[y0:y1, x0:x1] mask_roi = mask[y0:y1, x0:x1] if Channel: hist = cv2.calcHist( [hsv_roi], [0,1], mask_roi, [16,5], [0, 180, 0 ,256] ) else: hist = cv2.calcHist( [hsv_roi], [0], mask_roi, [16], [0, 180] ) cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX) self.hist = hist.reshape(-1) self.show_hist() vis_roi = vis[y0:y1, x0:x1] cv2.bitwise_not(vis_roi, vis_roi) vis[mask == 0] = 0 if self.tracking_state == 2: if Channel: prob = cv2.calcBackProject([hsv], [0,1], self.hist, [0, 180, 0, 256], 1) else: prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180], 1) prob &= mask term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 ) self.previous_window = self.track_window kernel = np.ones((5,5),np.uint8) if MorphOps: prob = cv2.morphologyEx(prob, cv2.MORPH_OPEN, kernel) prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel) prob = cv2.GaussianBlur(prob,(5,5),0) track_box, self.track_window = cv2.CamShift(prob, self.track_window, term_crit) if get_window_size(self.track_window) <= size_treshold: self.track_window = get_increased_window(self.previous_window) self.tracking_state = 2 else : self.tracking_state = 1 font = cv2.FONT_HERSHEY_SIMPLEX print "Target Missing." cv2.putText(vis,'Target Missing',(10,400), font, 1,(255,255,255),2,1) if self.tracking_state == 1: self.selection = None if Channel: prob = cv2.calcBackProject([hsv], [0,1], self.hist, [0, 180, 0, 256], 1) else: prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180], 1) prob &= mask term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 ) self.previous_window = self.track_window kernel = np.ones((5,5),np.uint8) if MorphOps: prob = cv2.morphologyEx(prob, cv2.MORPH_OPEN, kernel) prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel) prob = cv2.GaussianBlur(prob,(5,5),0) track_box, self.track_window = cv2.CamShift(prob, self.track_window, term_crit) if get_window_size(self.track_window) <= size_treshold: self.track_window = get_increased_window(self.previous_window) self.tracking_state = 2 if self.show_backproj: vis[:] = prob[...,np.newaxis] xx0, yy0, xx1, yy1 = self.track_window img_roi = self.frame[yy0 : yy0 + yy1, xx0 : xx0 + xx1] cv2.imshow("Tracking Window",img_roi) if get_window_size(self.track_window) >= size_treshold and Update: self.bkp=self.hist font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(vis,'Updating...',(10,200), font, 1,(255,255,255),2,1) xx0, yy0, xx1, yy1 = self.track_window xx1 /= 3 yy1 /= 3 xx0 += xx1 yy0 += yy1 if xx1 > 0 and yy1 > 0: print self.track_window hsv_roi = hsv[yy0 : yy0 + yy1, xx0 : xx0 + xx1] mask_roi = mask[yy0 : yy0 + yy1 , xx0 : xx0 + xx1] cv2.imshow("Tracking Window",hsv_roi) hist = cv2.calcHist( [hsv_roi], [0], mask_roi, [16], [0, 180] ) cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX) print cv2.compareHist(hist.reshape(-1), self.bkp, 0) self.hist = hist.reshape(-1) self.show_hist() if not Realtime: Update = not Update font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(vis,str(track_box[0]),(10,400), font, 1,(255,255,255),2,1) print str(track_box[0]) #try: cv2.ellipse(vis, track_box, (0, 0, 255), 2) #except: print track_box mark.draw_machine_mark(60, track_box[0], vis) #cv2.imshow('Original Footage',self.frame) if flag: cv2.imshow('camshift', vis) ch = 0xFF & cv2.waitKey(5) if ch == 27: break if ch == ord('b'): self.show_backproj = not self.show_backproj if ch == ord('m'): MorphOps = not MorphOps if ch == ord('c'): Channel = not Channel if ch == ord('u'): Update = not Update if ch == ord('r'): Realtime = not Realtime cv2.destroyAllWindows()