Spaces:
Runtime error
Runtime error
| # %% | |
| # pip install torch torchvision torchaudio yolov5 | |
| import gradio as gr | |
| import cv2 | |
| import requests | |
| import os | |
| import torch | |
| import numpy as np | |
| from ultralytics import YOLO | |
| import yolov5 | |
| import easyocr | |
| from paddleocr import PaddleOCR | |
| import keras_ocr | |
| import matplotlib.pyplot as plt | |
| from paddleocr import draw_ocr | |
| import pandas as pd | |
| # %% | |
| # Loading Yolo V5 model | |
| model = yolov5.load('License_Plate_Model_Y5.pt')#, device="cpu") | |
| # %% | |
| def get_LicencePlate(frame, conf_threshold: gr.inputs.Slider = 0.1): | |
| lst_plate_xyxy = [] | |
| # Setting model configuration | |
| model.conf = conf_threshold | |
| results = model(frame) | |
| for index, row in results.pandas().xyxy[0].iterrows(): | |
| xmin = int(row['xmin']) | |
| ymin = int(row['ymin']) | |
| xmax = int(row['xmax']) | |
| ymax = int(row['ymax']) | |
| class_name=(row['name']) | |
| if (class_name == 'license-plate'): | |
| lst_plate_xyxy.append((xmin,ymin,xmax,ymax, class_name)) | |
| return lst_plate_xyxy | |
| # %% | |
| def extract_License_Number_PaddleOCR(image_path, conf_threshold): | |
| image = cv2.imread(image_path) | |
| # image = cv2.resize(image,(1020,800)) | |
| results = get_LicencePlate(image, conf_threshold) | |
| PaddleOCR_output = [] | |
| # words = [] | |
| # boxes = [] | |
| # scores = [] | |
| for index in results: | |
| x1 = index[0] | |
| y1 = index[1] | |
| x2 = index[2] | |
| y2 = index[3] | |
| class_name=(index[4]) | |
| cropped_img = image[y1:y2, x1:x2] | |
| # processed_img = cropped_img | |
| processed_img = cropped_img | |
| # Perform OCR using PaddleOCR | |
| paddle_ocr = PaddleOCR() | |
| paddle_ocr_result = paddle_ocr.ocr(processed_img) | |
| PaddleOCR_output.append(paddle_ocr_result) | |
| print('\nPaddleOCR:') | |
| print(''.join([text[1][0] + ' ' for text in paddle_ocr_result[0]])) | |
| # Extract the words and bounding boxes from the OCR results | |
| words = [] | |
| boxes = [] | |
| scores = [] | |
| for line in paddle_ocr_result: | |
| for bbox in line: | |
| words.append(bbox[1][0]) | |
| scores.append(bbox[1][1]) | |
| boxes.append(bbox[0]) | |
| output_image = cv2.rectangle(image,(x1,y1),(x2,y2),(0,0,255),2) | |
| cv2.putText(output_image,str(words),(x1,y1),cv2.FONT_HERSHEY_PLAIN,2,(255,0,255),3) | |
| return words, boxes, scores, output_image | |
| # %% | |
| def extract_License_Number_EasyOCR(image_path,conf_threshold ): | |
| image = cv2.imread(image_path) | |
| # image = cv2.resize(image,(1020,800)) | |
| results = get_LicencePlate(image ,conf_threshold=0.1 ) | |
| easyOCR_output = [] | |
| paddle_output = [] | |
| # print("results************************", results) | |
| for index in results: | |
| x1 = index[0] | |
| y1 = index[1] | |
| x2 = index[2] | |
| y2 = index[3] | |
| class_name=(index[4]) | |
| cropped_img = image[y1:y2, x1:x2] | |
| processed_img = cropped_img | |
| easyocr_reader = easyocr.Reader(['en'], verbose=False) | |
| easyocr_result = easyocr_reader.readtext(processed_img) | |
| easyOCR_output.append(easyocr_result) | |
| print('\nEasyOCR:') | |
| print(''.join([text[1] + ' ' for text in easyocr_result])) | |
| # Extract the words and bounding boxes from the OCR results | |
| words = [] | |
| boxes = [] | |
| scores = [] | |
| for line in easyocr_result: | |
| words.append(line[1]) | |
| scores.append(line[2]) | |
| boxes.append(line[0]) | |
| output_image = cv2.rectangle(image,(x1,y1),(x2,y2),(0,0,255),2) | |
| cv2.putText(output_image,str(words),(x1,y1),cv2.FONT_HERSHEY_PLAIN,1,(255,0,255),2) | |
| return words, boxes, scores, output_image | |
| # %% | |
| def createDataframe(words, boxes, scores): | |
| df = pd.DataFrame(list(zip(words, boxes, scores)), columns=['words', 'boxes', 'scores']) | |
| return df | |
| # %% | |
| def initiate_Extract(image_path, conf_threshold: gr.inputs.Slider = 0.10, ocr_type="PaddleOCR"): | |
| if ocr_type == "PaddleOCR": | |
| words, boxes, scores, output_img = extract_License_Number_PaddleOCR(image_path, conf_threshold) | |
| elif ocr_type == "EasyOCR": | |
| words, boxes, scores, output_img = extract_License_Number_EasyOCR(image_path, conf_threshold) | |
| else: | |
| words, boxes, scores, output_img = extract_License_Number_PaddleOCR(image_path ,conf_threshold ) | |
| dataframe = createDataframe(words, boxes, scores) | |
| return cv2.cvtColor(output_img, cv2.COLOR_BGR2RGB), dataframe | |
| # %% | |
| import numpy as np | |
| title = "License Plate Number Recognition using YOLO & Paddle OCR - EasyOCR" | |
| description = "" | |
| css = """.output_image, .input_image {height: 600px !important}""" | |
| examples = [['truck1.jpg'],['c1.jpg']] | |
| iface = gr.Interface(fn=initiate_Extract, | |
| inputs=[ | |
| gr.inputs.Image(type="filepath", label="Input Image"), | |
| gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.10, step=0.05, label="Confidence Threshold"), | |
| gr.inputs.Dropdown(label="Select the OCR",default="PaddleOCR", choices=["PaddleOCR", "EasyOCR"]), | |
| ], | |
| outputs=[gr.outputs.Image(type="pil", label="annotated image"),"dataframe"] , | |
| title=title, | |
| description=description, | |
| examples=examples, | |
| css=css, | |
| analytics_enabled = True, enable_queue=True) | |
| iface.launch(inline=False , debug=True) | |
| # %% | |
| # %% | |