import cv2 import numpy as np #import time #video_path = 'D:/OfficeWork/VS_code_exp/exp/video_1.mp4' #image_path = 'D:/OfficeWork/VS_code_exp/exp/test.jpg.jpg' def load_model(): model= cv2.dnn.readNet(model='frozen_inference_graph.pb', config='ssd_mobilenet_v2_coco_2018_03_29.pbtxt.txt', framework='TensorFlow') with open('object_detection_classes_coco.txt', 'r') as f: class_names = f.read().split('\n') COLORS = np.random.uniform(0, 255, size=(len(class_names), 3)) return model, class_names, COLORS def load_img(img_path): img=cv2.imread(img_path) img=cv2.resize(img, None, fx=0.4, fy=0.4) height, width, channels = img.shape return img, height, width, channels def detect_objects(img, net): blob = cv2.dnn.blobFromImage(img, size=(300, 300), mean=(104, 117, 123), swapRB=True) net.setInput(blob) outputs = net.forward() #print (outputs) return blob, outputs def get_box_dimensions(outputs, height, width): boxes = [] class_ids = [] for detect in outputs[0,0,:,:]: scores = detect[2] class_id = detect[1] if scores > 0.3: center_x = int(detect[0] * width) center_y = int(detect[1] * height) w = int(detect[5] * width) h = int(detect[6] * height) x = int((detect[3] * width)) y = int((detect[4] * height)) boxes.append([x, y, w, h]) class_ids.append(class_id) return boxes, class_ids def draw_labels(boxes, colors, class_ids, classes, img): font = cv2.FONT_HERSHEY_PLAIN model, classes, colors = load_model() for i in range(len(boxes)): x, y, w, h = boxes[i] label = classes[int(class_ids[0])-1] color = colors[i] cv2.rectangle(img, (x,y), (w,h), color, 5) cv2.putText(img, label, (x, y - 5), font, 5, color, 5) return img def image_detect(img_path): model, classes, colors = load_model() image, height, width, channels = load_img(img_path) blob, outputs = detect_objects(image, model) boxes, class_ids = get_box_dimensions(outputs, height, width) image1 = draw_labels(boxes, colors, class_ids, classes, image) return image1 #def start_video(video_path): model, classes, colors = load_model() cap = cv2.VideoCapture(video_path) while True: _, frame = cap.read() height, width, channels = frame.shape blob, outputs = detect_objects(frame, model) boxes, class_ids = get_box_dimensions(outputs, height, width) frame=draw_labels(boxes, colors, class_ids, classes, frame) yield cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) cv2.destroyAllWindows()