コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    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)
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
    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)
コード例 #7
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()