Я работаю над системой распознавания номерных знаков, используя YOLOv8 для обнаружения и EasyOCR для распознавания текста. Хотя YOLO правильно определяет области номерного знака, результаты оптического распознавания текста и цифр на арабском языке часто бывают неточными.
Примеры обнаруженного текста:
Обнаружено: «اباز», что не имеет значения.
Обнаружено: "الراق", что частично совпадает с "العراق".
/>Числа типа «٢٦٠٤٩٩» распознаются точно.
Что я пробовал
Настройка конвейера:
YOLOv8 обнаруживает номерной знак и извлекает его ограничивающую рамку.
EasyOCR обрабатывает обрезанный номерной знак для распознавания текста.
Коррекция текста:
Использована функция difflib.get_close_matches() для сопоставления текста, обнаруженного с помощью OCR, с предопределенными словами (например, «العراق», «دهوك»).
Применены пороговые значения достоверности для фильтрации результатов с низкой достоверностью.
Предварительная обработка изображения:
область пластины преобразована в оттенки серого.
Изменен размер области для улучшения распознавания текста. производительность.
Минимально воспроизводимый пример
Код: Выделить всё
import cv2
import easyocr
from ultralytics import YOLO
def detect_plate_with_yolo(image_path, model_path="yolov8n.pt"):
model = YOLO(model_path)
img = cv2.imread(image_path)
results = model(img)
detections = results[0].boxes.xyxy.cpu().numpy()
if detections:
x1, y1, x2, y2 = map(int, detections[0])
return img[y1:y2, x1:x2]
return None
def perform_ocr_on_plate(plate_img):
reader = easyocr.Reader(['ar', 'en'], gpu=False)
plate_gray = cv2.cvtColor(plate_img, cv2.COLOR_BGR2GRAY)
return reader.readtext(plate_gray, detail=1)
plate_img = detect_plate_with_yolo("path/to/image.jpg")
if plate_img is not None:
detected_text = perform_ocr_on_plate(plate_img)
print(detected_text)
Ожидаемое: правильное распознавание арабского текста и цифр (например, «العراق»). .
Актуальные: частичные совпадения (например, «الراق») или нерелевантные результаты (например, «اباز»).
Вопросы
Как повысить точность распознавания арабских номерных знаков с помощью EasyOCR?
Есть ли лучшие альтернативы difflib.get_close_matches( ) для исправления текста?
Какие дополнительные шаги предварительной обработки могут помочь улучшить производительность оптического распознавания символов?
Подробнее здесь: https://stackoverflow.com/questions/792 ... nd-easyocr