def predict(self, image): # Input image or frame self.image = image for coordinate in self.extractLP(): # detect license plate by yolov3 self.candidates = [] x_min, y_min, width, height = coordinate LpRegion = self.image[y_min:y_min + height, x_min:x_min + width] # segmentation self.segmentation(LpRegion) # recognize characters self.recognizeChar() # format and display license plate license_plate = self.format() if len(license_plate) < 8: continue # draw labels self.image = draw_labels_and_boxes(self.image, license_plate, coordinate) # cv2.imwrite('example.png', self.image) return self.image
def predict(self, image): # Input image or frame self.image = image for coordinate in self.extractLP(): self.candidates = [] # convert (x_min, y_min, width, height) to coordinate(top left, top right, bottom left, bottom right) pts = order_points(coordinate) # crop number plate LpRegion = perspective.four_point_transform(self.image, pts) # segmentation self.segmentation(LpRegion) # recognize characters self.recognizeChar() # format and display license plate license_plate = self.format() # draw labels self.image = draw_labels_and_boxes(self.image, license_plate, coordinate) cv2.imwrite('example.png', self.image) return self.image
def predict(self, image): # Input image or frame self.image = image for coordinate in self.extractLP(): # detect license plate by yolov3 self.candidates = [] # convert (x_min, y_min, width, height) to coordinate(top left, top right, bottom left, bottom right) pts = order_points(coordinate) # crop number plate used by bird's eyes view transformation LpRegion = perspective.four_point_transform(self.image, pts) # cv2.imwrite('step1.png', LpRegion) # segmentation self.segmentation(LpRegion) # recognize characters self.recognizeChar() # format and display license plate license_plate = self.format() if len(license_plate) == 0: license_plate = "khong nhan dien duoc . sorry !" # draw labels self.image = draw_labels_and_boxes(self.image, license_plate, coordinate) return (self.image, license_plate)
def predict(self, image): """ Hàm dự đoán giá trị của biển số xe :param image: :return: Ảnh được chú thích vùng biển số và giá trị Chuỗi ký tự biển số xe """ # Ảnh đầu vào self.image = image # Xét các vùng biển số detect được bằng YOLOv3 Tiny for coordinate in self.extractLP(): # Khởi tạo candidates để lưu giá trị biển số và tọa độ cần chú thích trong ảnh self.candidates = [] # Chuyển đổi (x_min, y_min, width, height) thành dạng (top left, top right, bottom left, bottom right) pts = order_points(coordinate) # Cắt ảnh biển số xe dùng bird's eyes view transformation LpRegion = perspective.four_point_transform(self.image, pts) # Xử lý trường hợp biển số 1 dòng và 2 dòng # Chọn ngưỡng tỷ lệ chiều ngang / chiều dọc là 1.5 # Nếu tỷ lệ này > 1.5 => Biển số 1 dòng # Ngược lại => Biển số 2 dòng if (LpRegion.shape[1] / LpRegion.shape[0] > 1.5): # Tỷ lệ scale scale_ratio = 40 / LpRegion.shape[0] (w, h) = (int(LpRegion.shape[1] * scale_ratio), int(LpRegion.shape[0] * scale_ratio)) else: # Tỷ lệ scale scale_ratio = 100 / LpRegion.shape[0] (w, h) = (int(LpRegion.shape[1] * scale_ratio), int(LpRegion.shape[0] * scale_ratio)) # Resize ảnh vùng biển số về kích thước chuẩn # Đối với biển số 2 dòng: chiều cao = 40px # Đối với biển số 1 dòng: chiều cao = 100px LpRegion = cv2.resize(LpRegion, (w, h)) # Phân đoạn từng ký tự self.segmentation(LpRegion) # Nhận diện các ký tự self.recognizeChar() # Định dạng các ký tự biển số self.lpNumber = self.format() # Vẽ bounding box và giá trị biển số vào ảnh self.image = draw_labels_and_boxes(self.image, self.lpNumber, coordinate) # Trả về ảnh dự đoán và giá trị biển số xe return self.image, self.lpNumber
def predict(self, image, name): # Input image or frame self.image = image all_license_plates = [] for coordinate in self.extractLP(): # detect license plate by yolov3 self.candidates = [] # convert (x_min, y_min, width, height) to coordinate(top left, top right, bottom left, bottom right) pts = order_points(coordinate) # crop number plate used by bird's eyes view transformation LpRegion = perspective.four_point_transform(self.image, pts) # height, width, _ = LpRegion.shape # LpRegion = LpRegion[:, int(width * 0.1):int(width * 0.9)] img_path = os.path.join('output/lp/{}.jpg'.format(name)) cv2.imwrite(img_path, LpRegion) license_plate = self.ocr.predict(LpRegion) # # segmentation # self.segmentation(LpRegion, name) # # # recognize characters # self.recognizeChar() # # # format and display license plate # license_plate = self.format() if license_plate is not None and len(license_plate) > 4: # draw labels self.image = draw_labels_and_boxes(self.image, license_plate, coordinate) all_license_plates.append(license_plate) # cv2.imwrite('example.png', self.image) return self.image, all_license_plates
if image_path is not None: # case 1: detect image img = cv2.imread(image_path) # detect faces result = detect_model.detect_faces(img) # cropped face cropped_face, boxes = utils.crop_face(img, result) # predict images = (cropped_face - 128.0) / 255.0 predicted_result = multitask_model.predict(images) # draw label and boxes output = utils.draw_labels_and_boxes(img, boxes, predicted_result) # save image cv2.imwrite('test1.png', output) # show image cv2.imshow('Images', output) if cv2.waitKey(0) & 0xFF == ord('q'): exit(0) elif video_path is not None: # start to the file video stream thread and allow the buffer to # start to fill print('[INFO] starting video file thread....') fvs = FileVideoStream(video_path).start() time.sleep(1.0)
# coordinates of boxes left, top = bounding_box[0], bounding_box[1] right, bottom = bounding_box[0] + bounding_box[2], bounding_box[ 1] + bounding_box[3] # coordinates of cropped image x1_crop = max(int(left), 0) y1_crop = max(int(top), 0) x2_crop = int(right) y2_crop = int(bottom) cropped_face = image[y1_crop:y2_crop, x1_crop:x2_crop, :] face = cv2.resize(cropped_face, (cf.IMAGE_SIZE, cf.IMAGE_SIZE)) faces[i, :, :, :] = face box = (x1_crop, y1_crop, x2_crop, y2_crop) boxes.append(box) # predict result = model.predict(faces / 255.0) # Draw bounding boxes and labels on image image = utils.draw_labels_and_boxes(image, boxes, result, margin) if image is None: exit() image = cv2.resize(image, (img_w, img_h), cv2.INTER_AREA) cv2.imwrite('hoailinh_result.png', image) cv2.imshow('img', image) if cv2.waitKey(0) & 0xFF == ord('q'): exit()