def detect(self): frame_cnt = -1 while self.vdo.grab(): frame_cnt += 1 start = time.time() _, ori_im = self.vdo.retrieve() # im = cv2.cvtColor(ori_im, cv2.COLOR_BGR2RGB) im = ori_im t1_begin = time.time() bbox_xxyy, cls_conf, cls_ids = self.yolo3.predict(im) t1_end = time.time() t2_begin = time.time() if bbox_xxyy is not None: # select class cow # mask = cls_ids == 0 # bbox_xxyy = bbox_xxyy[mask] # bbox_xxyy[:, 3:] *= 1.2 # cls_conf = cls_conf[mask] # bbox_xcycwh = bbox_xxyy # print(" "*10, bbox_xcycwh.shape, cls_conf.shape) detections = [] for i in range(len(bbox_xxyy)): # print(bbox_xxyy[i][0].item(), bbox_xxyy[i][1].item(), # bbox_xxyy[i][2].item(), bbox_xxyy[i][3].item(), # cls_conf[i].tolist()) detections.append([ bbox_xxyy[i][0].item(), bbox_xxyy[i][1].item(), bbox_xxyy[i][2].item(), bbox_xxyy[i][3].item(), cls_conf[i].tolist() ]) # detections.append([*bbox_xcycwh[i].tolist(), cls_conf[i].tolist()]) # print("=" * 30, [*bbox_xcycwh[i], cls_conf[i]]) # print('-'*30, detections) detections = torch.tensor(detections) outputs = self.mot_tracker_sort.update(detections) if len(outputs) > 0: bbox_xyxy = outputs[:, :4] identities = outputs[:, -1] ori_im = draw_bboxes(ori_im, bbox_xyxy, identities) t2_end = time.time() end = time.time() print( "frame:%d|det:%.4f|sort:%.4f|total:%.4f|det p:%.2f%%|fps:%.2f" % (frame_cnt, (t1_end - t1_begin), (t2_end - t2_begin), (end - start), ((t1_end - t1_begin) * 100 / ((end - start))), (1 / (end - start)))) if self.args.display: cv2.imshow("test", ori_im) cv2.waitKey(1) if self.args.save_path: self.output.write(ori_im)
def detect(self): frame_cnt = -1 while self.vdo.grab(): frame_cnt += 1 # skip frames every 3 frames if frame_cnt % 3 == 0: continue start = time.time() _, ori_im = self.vdo.retrieve() # im = cv2.cvtColor(ori_im, cv2.COLOR_BGR2RGB) im = ori_im t1_begin = time.time() bbox_xxyy, cls_conf, cls_ids = self.yolo3.predict(im) t1_end = time.time() t2_begin = time.time() if bbox_xxyy is not None: # select class cow # mask = cls_ids == 0 # bbox_xxyy = bbox_xxyy[mask] # bbox_xxyy[:, 3:] *= 1.2 # cls_conf = cls_conf[mask] bbox_xcycwh = xyxy2xywh(bbox_xxyy) outputs = self.deepsort.update(bbox_xcycwh, cls_conf, im) if len(outputs) > 0: bbox_xyxy = outputs[:, :4] identities = outputs[:, -1] ori_im = draw_bboxes(ori_im, bbox_xyxy, identities) t2_end = time.time() end = time.time() print( "frame:%d|det:%.4f|sort:%.4f|total:%.4f|det p:%.2f%%|fps:%.2f" % (frame_cnt, (t1_end - t1_begin), (t2_end - t2_begin), (end - start), ((t1_end - t1_begin) * 100 / ((end - start))), (1 / (end - start)))) if self.args.display: cv2.imshow("test", ori_im) cv2.waitKey(1) if self.args.save_path: self.output.write(ori_im)
def detect(self, outfile=None): frame_cnt = -1 if outfile is not None: f = open(outfile, 'w') print("begin....") while self.vdo.grab(): frame_cnt += 1 if frame_cnt % 3 == 0: continue start = time.time() _, ori_im = self.vdo.retrieve() im = ori_im t1_begin = time.time() bbox_xxyy, cls_conf, cls_ids = self.yolo3.predict(im) t1_end = time.time() t2_begin = time.time() if bbox_xxyy is not None: # select class # mask = cls_ids == 0 # bbox_xxyy = bbox_xxyy[mask] # bbox_xxyy[:, 3:] *= 1.2 # cls_conf = cls_conf[mask] bbox_xcycwh = xyxy2xywh(bbox_xxyy) outputs = self.deepsort.update(bbox_xcycwh, cls_conf, im) if len(outputs) > 0: bbox_xyxy = outputs[:, :4] identities = outputs[:, -1] # 画框 ori_im = draw_bboxes(ori_im, bbox_xyxy, identities) # frame, id, tlwh(%.2f),1,-1,-1,-1 if outfile is not None: box_xywh = xyxy2tlwh(bbox_xyxy) for i in range(len(box_xywh)): write_line = "%d,%d,%d,%d,%d,%d,1,-1,-1,-1\n" % ( frame_cnt + 1, outputs[i, -1], int(box_xywh[i][0]), int(box_xywh[i][1]), int(box_xywh[i][2]), int(box_xywh[i][3])) f.write(write_line) t2_end = time.time() end = time.time() print( "frame:%d|det:%.4f|sort:%.4f|total:%.4f|det p:%.2f%%|fps:%.2f" % (frame_cnt, (t1_end - t1_begin), (t2_end - t2_begin), (end - start), ((t1_end - t1_begin) * 100 / ((end - start))), (1 / (end - start)))) if self.args.display: cv2.imshow("test", ori_im) cv2.waitKey(1) if self.args.save_path: self.output.write(ori_im) if outfile is not None: f.close()
def detect(self): frame_no = -1 # skip_no = 2 if self.output_file: f = open(output_file, "w") while self.vidCap.grab(): frame_no += 1 # skip frames every n frames # if frame_no % skip_no != 0: # continue # start time total_begin = time.time() _, img = self.vidCap.retrieve() # yolov3部分 yolo_begin = time.time() bbox_xyxy, cls_conf, cls_ids = self.yolov3.predict(img) # [x1,y1,x2,y2] yolo_end = time.time() # deepsort部分 ds_begin = time.time() if bbox_xyxy is not None: bbox_cxcywh = xyxy2xywh(bbox_xyxy) outputs = self.deepsort.update(bbox_cxcywh, cls_conf, img) if len(outputs) > 0: # [x1,y1,x2,y2] id bbox_xyxy = outputs[:, :4] ids = outputs[:, -1] img = draw_bboxes(img, bbox_xyxy, ids) # frame,id,tlwh,1,-1,-1,-1 if self.output_file: bbox_tlwh = xyxy2xywh(bbox_xyxy) for i in range(len(bbox_tlwh)): write_line = "%d,%d,%d,%d,%d,%d,1,-1,-1,-1\n" % ( frame_no + 1, outputs[i, -1], int(bbox_tlwh[i][0]), int(bbox_tlwh[i][1]), int(bbox_tlwh[i][2]), int(bbox_tlwh[i][3])) f.write(write_line) ds_end = time.time() total_end = time.time() if frame_no % 500 == 0: print("frame:%04d|det:%.4f|deep sort:%.4f|total:%.4f|det p:%.2f%%|fps:%.2f" % (frame_no, (yolo_end - yolo_begin), (ds_end - ds_begin), (total_end - total_begin), ((yolo_end - yolo_begin) * 100 / ( total_end - total_begin)), (1 / (total_end - total_begin)))) if self.display is True: cv2.imshow("Test", img) cv2.waitKey(1) if self.save_path: self.output.write(img) if self.output_file: f.close()