def main_IE_infer(): fps = "" framepos = 0 frame_count = 0 vidfps = 0 skip_frame = 0 elapsedTime = 0 args = build_argparser().parse_args() result_file = args.result model_xml = args.model test_dir = args.test_dir model_bin = os.path.splitext(model_xml)[0] + ".bin" time.sleep(1) plugin = IEPlugin(device=args.device) if "CPU" in args.device: print('executing in cpu') plugin.add_cpu_extension("lib/libcpu_extension.so") net = IENetwork(model=model_xml, weights=model_bin) input_blob = next(iter(net.inputs)) exec_net = plugin.load(network=net) counter = 0 images = glob.glob(test_dir + '/*.jpg') print('Num images', len(images)) from PIL import Image results = [] for item in images: t1 = time.time() image = np.asarray(Image.open(item).convert('RGB')) master = np.zeros((1920, 1920, 3), dtype='uint8') master[420:1500, :] = image image = master camera_height, camera_width = image.shape[0:2] new_w, new_h = 416, 416 resized_image = cv2.resize(image, (new_w, new_h), interpolation=cv2.INTER_CUBIC) canvas = np.full((m_input_size, m_input_size, 3), 0) canvas[(m_input_size - new_h) // 2:(m_input_size - new_h) // 2 + new_h, (m_input_size - new_w) // 2:(m_input_size - new_w) // 2 + new_w, :] = resized_image prepimg = canvas prepimg = prepimg[np.newaxis, :, :, :] # Batch size axis add prepimg = prepimg.transpose((0, 3, 1, 2)) # NHWC to NCHW #print (prepimg.shape) outputs = exec_net.infer(inputs={input_blob: prepimg}) objects = [] for output in outputs.values(): objects = ParseYOLOV3Output(output, new_h, new_w, camera_height, camera_width, 0.5, objects) # Filtering overlapping boxes objlen = len(objects) for i in range(objlen): if (objects[i].confidence == 0.0): continue for j in range(i + 1, objlen): if (IntersectionOverUnion(objects[i], objects[j]) >= 0.5): objects[j].confidence = 0 # Save detection for obj in objects: if obj.confidence < 0.5: continue label = obj.class_id confidence = obj.confidence if confidence > 0.5: xmin, ymin, xmax, ymax = obj.xmin, obj.ymin - 420, obj.xmax, obj.ymax - 420 x, y, w, h = xmin, ymin, xmax - xmin, ymax - ymin anns = { 'image_id': item.split('/')[-1].replace('.jpg', ''), 'category_id': 1, 'segmentation': [], 'area': float(w * h), 'bbox': [x, y, w, h], 'score': float(confidence), 'iscrowd': 0 } results.append(anns) elapsedTime = time.time() - t1 fps = "(Playback) {:.1f} FPS".format(1 / elapsedTime) print(fps) json.dump(results, open(result_file, 'w')) del net del exec_net del plugin
def main_IE_infer(): # camera_width = 416 # camera_height = 416 camera_width = 300 camera_height = 300 fps = "" framepos = 0 frame_count = 0 vidfps = 0 skip_frame = 0 elapsedTime = 0 new_w = int(camera_width * m_input_size / camera_width) new_h = int(camera_height * m_input_size / camera_height) args = build_argparser().parse_args() #model_xml = "lrmodels/tiny-YoloV3/FP32/frozen_tiny_yolo_v3.xml" #<--- CPU #model_xml = "lrmodels/tiny-YoloV3/FP16/frozen_tiny_yolo_v3.xml" #<--- MYRIAD model_xml = "/home/pi/openvino/rtdetection/models/mobilenet-ssd/FP16/mobilenet-ssd.xml" #<--- MYRIAD model_bin = os.path.splitext(model_xml)[0] + ".bin" cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FPS, 30) cap.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height) #pdb.set_trace() #cap = cv2.VideoCapture("data/input/testvideo.mp4") #camera_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #camera_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #vidfps = int(cap.get(cv2.CAP_PROP_FPS)) #print("videosFrameCount =", str(frame_count)) #print("videosFPS =", str(vidfps)) time.sleep(1) plugin = IEPlugin(device=args.device) if "CPU" in args.device: plugin.add_cpu_extension("lib/libcpu_extension.so") net = IENetwork(model=model_xml, weights=model_bin) input_blob = next(iter(net.inputs)) exec_net = plugin.load(network=net) while cap.isOpened(): t1 = time.time() ## Uncomment only when playing video files #cap.set(cv2.CAP_PROP_POS_FRAMES, framepos) ret, image = cap.read() if not ret: break #pdb.set_trace() #resized_image = cv2.resize(image, (new_w, new_h), interpolation = cv2.INTER_CUBIC) resized_image = image canvas = np.full((m_input_size, m_input_size, 3), 128) canvas[(m_input_size - new_h) // 2:(m_input_size - new_h) // 2 + new_h, (m_input_size - new_w) // 2:(m_input_size - new_w) // 2 + new_w, :] = resized_image prepimg = canvas prepimg = prepimg[np.newaxis, :, :, :] # Batch size axis add prepimg = prepimg.transpose((0, 3, 1, 2)) # NHWC to NCHW outputs = exec_net.infer(inputs={input_blob: prepimg}) #output_name = detector/yolo-v3-tiny/Conv_12/BiasAdd/YoloRegion #output_name = detector/yolo-v3-tiny/Conv_9/BiasAdd/YoloRegion objects = [] for output in outputs.values(): objects = ParseYOLOV3Output(output, new_h, new_w, camera_height, camera_width, 0.4, objects) # Filtering overlapping boxes objlen = len(objects) for i in range(objlen): if (objects[i].confidence == 0.0): continue for j in range(i + 1, objlen): if (IntersectionOverUnion(objects[i], objects[j]) >= 0.4): if objects[i].confidence < objects[j].confidence: objects[i], objects[j] = objects[j], objects[i] objects[j].confidence = 0.0 # Drawing boxes for obj in objects: if obj.confidence < 0.2: continue label = obj.class_id confidence = obj.confidence #if confidence >= 0.2: label_text = LABELS[label] + " (" + "{:.1f}".format( confidence * 100) + "%)" cv2.rectangle(image, (obj.xmin, obj.ymin), (obj.xmax, obj.ymax), box_color, box_thickness) cv2.putText(image, label_text, (obj.xmin, obj.ymin - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, label_text_color, 1) cv2.putText(image, fps, (camera_width - 170, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (38, 0, 255), 1, cv2.LINE_AA) cv2.imshow("Result", image) if cv2.waitKey(1) & 0xFF == ord('q'): break elapsedTime = time.time() - t1 fps = "(Playback) {:.1f} FPS".format(1 / elapsedTime) ## frame skip, video file only #skip_frame = int((vidfps - int(1/elapsedTime)) / int(1/elapsedTime)) #framepos += skip_frame cv2.destroyAllWindows() del net del exec_net del plugin
def main_IE_infer(): camera_width = 320 camera_height = 240 m_input_size = 513 fps = "" framepos = 0 frame_count = 0 vidfps = 0 skip_frame = 0 elapsedTime = 0 args = build_argparser().parse_args() #model_xml = "lrmodels/PascalVOC/FP32/frozen_inference_graph.xml" #<--- CPU model_xml = "lrmodels/PascalVOC/FP16/frozen_inference_graph.xml" #<--- MYRIAD model_bin = os.path.splitext(model_xml)[0] + ".bin" seg_image = Image.open("data/input/009649.png") palette = seg_image.getpalette() # Get a color palette cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FPS, 10) cap.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height) #cap = cv2.VideoCapture("data/input/testvideo.mp4") #camera_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #camera_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #vidfps = int(cap.get(cv2.CAP_PROP_FPS)) #print("videosFrameCount =", str(frame_count)) #print("videosFPS =", str(vidfps)) time.sleep(1) plugin = IEPlugin(device=args.device, plugin_dirs=args.plugin_dir) if "CPU" in args.device: plugin.add_cpu_extension("lib/libcpu_extension.so") if args.performance: plugin.set_config({"PERF_COUNT": "YES"}) # Read IR net = IENetwork(model=model_xml, weights=model_bin) input_blob = next(iter(net.inputs)) exec_net = plugin.load(network=net) while cap.isOpened(): t1 = time.time() #cap.set(cv2.CAP_PROP_POS_FRAMES, framepos) # Uncomment only when playing video files ret, image = cap.read() if not ret: break ratio = 1.0 * m_input_size / max(image.shape[0], image.shape[1]) shrink_size = (int(ratio * image.shape[1]), int(ratio * image.shape[0])) image = cv2.resize(image, shrink_size, interpolation=cv2.INTER_CUBIC) prepimg = _pre._pre_process(image) prepimg = prepimg.transpose((0, 3, 1, 2)) #NHWC to NCHW res = exec_net.infer(inputs={input_blob: prepimg}) result = _post._post_process(res["ArgMax/Squeeze"], image)[0] outputimg = Image.fromarray(np.uint8(result), mode="P") outputimg.putpalette(palette) outputimg = outputimg.convert("RGB") outputimg = np.asarray(outputimg) outputimg = cv2.cvtColor(outputimg, cv2.COLOR_RGB2BGR) outputimg = cv2.addWeighted(image, 1.0, outputimg, 0.9, 0) outputimg = cv2.resize(outputimg, (camera_width, camera_height)) cv2.putText(outputimg, fps, (camera_width - 180, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (38, 0, 255), 1, cv2.LINE_AA) cv2.imshow("Result", outputimg) if cv2.waitKey(1) & 0xFF == ord('q'): break elapsedTime = time.time() - t1 fps = "(Playback) {:.1f} FPS".format(1 / elapsedTime) # frame skip, video file only skip_frame = int( (vidfps - int(1 / elapsedTime)) / int(1 / elapsedTime)) framepos += skip_frame cv2.destroyAllWindows() del net del exec_net del plugin
class NcsWorker(object): def __init__(self, devid, device, model_xml, frameBuffer, results, camera_width, camera_height, number_of_ncs, vidfps, nPoints, w, h, new_w, new_h): self.devid = devid self.frameBuffer = frameBuffer self.model_xml = model_xml self.model_bin = os.path.splitext(model_xml)[0] + ".bin" self.camera_width = camera_width self.camera_height = camera_height self.threshold = 0.1 self.nPoints = nPoints self.num_requests = 4 self.inferred_request = [0] * self.num_requests self.heap_request = [] self.inferred_cnt = 0 self.plugin = IEPlugin(device=device) if "CPU" == device: if platform.processor() == "x86_64": self.plugin.add_cpu_extension("lib/libcpu_extension.so") self.net = IECore().read_network(model=self.model_xml, weights=self.model_bin) self.input_blob = next(iter(self.net.inputs)) self.exec_net = IECore().load_network(network=self.net, device_name=device, num_requests=self.num_requests) self.results = results self.number_of_ncs = number_of_ncs self.predict_async_time = 250 self.skip_frame = 0 self.roop_frame = 0 self.vidfps = vidfps self.w = w #432 self.h = h #368 self.new_w = new_w self.new_h = new_h def skip_frame_measurement(self): surplustime_per_second = (1000 - self.predict_async_time) if surplustime_per_second > 0.0: frame_per_millisecond = (1000 / self.vidfps) total_skip_frame = surplustime_per_second / frame_per_millisecond self.skip_frame = int(total_skip_frame / self.num_requests) else: self.skip_frame = 0 def predict_async(self): try: if self.frameBuffer.empty(): return self.roop_frame += 1 if self.roop_frame <= self.skip_frame: self.frameBuffer.get() return self.roop_frame = 0 prepimg = self.frameBuffer.get() reqnum = searchlist(self.inferred_request, 0) if reqnum > -1: prepimg = prepimg[np.newaxis, :, :, :] # Batch size axis add prepimg = prepimg.transpose( (0, 3, 1, 2)) # NHWC to NCHW, (1, 3, 368, 432) self.exec_net.start_async(request_id=reqnum, inputs={self.input_blob: prepimg}) self.inferred_request[reqnum] = 1 self.inferred_cnt += 1 if self.inferred_cnt == sys.maxsize: self.inferred_request = [0] * self.num_requests self.heap_request = [] self.inferred_cnt = 0 heapq.heappush(self.heap_request, (self.inferred_cnt, reqnum)) try: cnt, dev = heapq.heappop(self.heap_request) except: return if self.exec_net.requests[dev].wait(0) == 0: self.exec_net.requests[dev].wait(-1) detected_keypoints = [] keypoints_list = np.zeros((0, 3)) keypoint_id = 0 outputs = self.exec_net.requests[dev].outputs[ "Openpose/concat_stage7"] for part in range(self.nPoints): probMap = outputs[0, part, :, :] probMap = cv2.resize(probMap, (self.w, self.h)) # (432, 368) keypoints = getKeypoints(probMap, self.threshold) keypoints_with_id = [] for i in range(len(keypoints)): keypoints_with_id.append(keypoints[i] + (keypoint_id, )) keypoints_list = np.vstack( [keypoints_list, keypoints[i]]) keypoint_id += 1 detected_keypoints.append(keypoints_with_id) self.results.put([detected_keypoints, outputs, keypoints_list]) self.inferred_request[dev] = 0 else: heapq.heappush(self.heap_request, (cnt, dev)) except: import traceback traceback.print_exc()
def main_IE_infer(cap): camera_width = 640 #320 camera_height = 480 # 240 fps = "" framepos = 0 frame_count = 0 vidfps = 0 skip_frame = 0 elapsedTime = 0 new_w = int(camera_width * m_input_size/camera_width) new_h = int(camera_height * m_input_size/camera_height) args = build_argparser().parse_args() model_xml = "lrmodels/YoloV3/FP32/frozen_yolo_v3.xml" #<--- CPU #model_xml = "lrmodels/YoloV3/FP16/frozen_yolo_v3.xml" #<--- MYRIAD model_bin = os.path.splitext(model_xml)[0] + ".bin" cap.set(cv2.CAP_PROP_FPS, 30) cap.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height) time.sleep(1) plugin = IEPlugin(device=args.device) if "CPU" in args.device: plugin.add_cpu_extension("lib/libcpu_extension.so") net = IENetwork(model=model_xml, weights=model_bin) input_blob = next(iter(net.inputs)) exec_net = plugin.load(network=net) while cap.isOpened(): t1 = int(time.time()*1000) ret, image = cap.read() if not ret: continue resized_image = cv2.resize(image, (new_w, new_h), interpolation = cv2.INTER_CUBIC) canvas = np.full((m_input_size, m_input_size, 3), 128) canvas[(m_input_size-new_h)//2:(m_input_size-new_h)//2 + new_h,(m_input_size-new_w)//2:(m_input_size-new_w)//2 + new_w, :] = resized_image prepimg = canvas prepimg = prepimg[np.newaxis, :, :, :] # Batch size axis add prepimg = prepimg.transpose((0, 3, 1, 2)) # NHWC to NCHW outputs = exec_net.infer(inputs={input_blob: prepimg}) objects = [] for output in outputs.values(): objects = ParseYOLOV3Output(output, new_h, new_w, camera_height, camera_width, 0.7, objects) # Filtering overlapping boxes objlen = len(objects) for i in range(objlen): if (objects[i].confidence == 0.0): continue for j in range(i + 1, objlen): if (IntersectionOverUnion(objects[i], objects[j]) >= 0.4): objects[j].confidence = 0 # Drawing boxes for obj in objects: if obj.confidence < 0.2: continue label = obj.class_id confidence = obj.confidence if confidence > 0.2: label_text = LABELS[label] + " (" + "{:.1f}".format(confidence * 100) + "%)" cv2.rectangle(image, (obj.xmin, obj.ymin), (obj.xmax, obj.ymax), box_color, box_thickness) cv2.putText(image, label_text, (obj.xmin, obj.ymin - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, label_text_color, 1) cv2.putText(image, fps, (camera_width - 170, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (38, 0, 255), 1, cv2.LINE_AA) cv2.imshow("Result", image) if cv2.waitKey(1)&0xFF == ord('q'): break elapsedTime = int(time.time()*1000) - t1 fps = "(Playback) {:.1f} FPS".format(1/elapsedTime) ## frame skip, video file only #skip_frame = int((vidfps - int(1/elapsedTime)) / int(1/elapsedTime)) #framepos += skip_frame cv2.destroyAllWindows() del net del exec_net del plugin
def main_IE_infer(): fps = "" framepos = 0 frame_count = 0 vidfps = 0 skip_frame = 0 elapsedTime = 0 args = build_argparser().parse_args() #model_xml = "lrmodels/tiny-YoloV3/FP32/frozen_tiny_yolo_v3.xml" #<--- CPU model_xml = "/home/saket/openvino_models/tiger/km_adam_yolov3_tinytiger_ckpt_9.xml" #<--- MYRIAD model_bin = os.path.splitext(model_xml)[0] + ".bin" ''' cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FPS, 30) cap.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height) ''' #cap = cv2.VideoCapture("data/input/testvideo.mp4") #camera_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #camera_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) #vidfps = int(cap.get(cv2.CAP_PROP_FPS)) #print("videosFrameCount =", str(frame_count)) #print("videosFPS =", str(vidfps)) time.sleep(1) plugin = IEPlugin(device=args.device) if "CPU" in args.device: plugin.add_cpu_extension("lib/libcpu_extension.so") net = IENetwork(model=model_xml, weights=model_bin) input_blob = next(iter(net.inputs)) exec_net = plugin.load(network=net) import glob images = glob.glob('/media/saket/014178da-fdf2-462c-b901-d5f4dbce2e275/nn/PyTorch-YOLOv3/data/tigersamples/*.jpg') print ('Num images',len(images)) counter = 0 while cv2.waitKey(0): if cv2.waitKey(1)&0xFF == ord('q') or counter>len(images)-1: break t1 = time.time() image = np.asarray(Image.open(images[counter]).convert('RGB')) master = np.zeros((1920, 1920, 3),dtype='uint8') master[420:1500,:]=image image = master camera_height, camera_width = image.shape[0:2] new_w,new_h = 416,416 resized_image = cv2.resize(image, (new_w, new_h), interpolation = cv2.INTER_CUBIC) canvas = np.full((m_input_size, m_input_size, 3), 0) canvas[(m_input_size-new_h)//2:(m_input_size-new_h)//2 + new_h,(m_input_size-new_w)//2:(m_input_size-new_w)//2 + new_w, :] = resized_image prepimg = canvas prepimg = prepimg[np.newaxis, :, :, :] # Batch size axis add prepimg = prepimg.transpose((0, 3, 1, 2)) # NHWC to NCHW #print (prepimg.shape) outputs = exec_net.infer(inputs={input_blob: prepimg}) objects = [] #output_name = detector/yolo-v3-tiny/Conv_12/BiasAdd/YoloRegion #output_name = detector/yolo-v3-tiny/Conv_9/BiasAdd/YoloRegion objects = [] for output in outputs.values(): objects = ParseYOLOV3Output(output,new_h, new_w, camera_height, camera_width, 0.5, objects) # Filtering overlapping boxes objlen = len(objects) for i in range(objlen): if (objects[i].confidence == 0.0): continue for j in range(i + 1, objlen): if (IntersectionOverUnion(objects[i], objects[j]) >= 0.5): if objects[i].confidence < objects[j].confidence: objects[i], objects[j] = objects[j], objects[i] objects[j].confidence = 0.0 # Drawing boxes image = image[420:1500,:] print (image.shape) for obj in objects: if obj.confidence < 0.5: continue label = obj.class_id confidence = obj.confidence if confidence > 0.5: label_text = LABELS[label] + " (" + "{:.1f}".format(confidence * 100) + "%)" cv2.rectangle(image, (obj.xmin, obj.ymin-420), (obj.xmax, obj.ymax-420), box_color, box_thickness) cv2.putText(image, label_text, (obj.xmin, obj.ymin - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, label_text_color, 1) cv2.putText(image, fps, (camera_width - 170, 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (38, 0, 255), 1, cv2.LINE_AA) cv2.imshow("Result", image) elapsedTime = time.time() - t1 fps = "(Playback) {:.1f} FPS".format(1/elapsedTime) ## frame skip, video file only #skip_frame = int((vidfps - int(1/elapsedTime)) / int(1/elapsedTime)) #framepos += skip_frame counter= counter+1 cv2.destroyAllWindows() del net del exec_net del plugin