Как подготовить изображение для EasyOCR, чтобы удалить шумы, используя Python?

Здравствуйте, любители экспериментов и нестандартных решений! <br/> <br/> У меня возникла задача по парсингу японских сертификатов на экспорт автомобилей. Конкретно нужно извлекать из документов в формате .pdf вин-номер автомобиля и его габариты. Сначала я пробовал решить эту задачу с помощью Tesseract, но в конечном итоге предпочел EasyOCR. <br/> <br/> Поскольку документ большой, со сторонами 2700 х 1900, и нас интересует только содержимое пяти ячеек в таблице, я подобрал приблизительные координаты областей, где расположен необходимый текст. После ряда манипуляций, включая обрезку изображений, финальную подгонку и регулировку яркости и контрастности, мне это удалось. <br/> <br/> Однако после этого я столкнулся с черно-белыми сканами, содержащими множество шумов. После обрезки по нужным участкам получившаяся картинка выглядела следующим образом: <br/>
  • 3 октября 2024 г. 23:24
Ответы на вопрос 2
Для подготовки изображения к распознаванию текста с использованием EasyOCR, вы можете использовать библиотеку OpenCV и другие инструменты для предобработки изображений. Ниже приведен пример кода на Python, который выполняет предобработку изображения, чтобы удалить шумы и улучшить качество текста перед передачей в EasyOCR.

### Шаги по обработке изображений:

1. **Загрузка изображения**: Используйте OpenCV для чтения изображения.
2. **Преобразование в оттенки серого**: Это поможет упростить обработку.
3. **Морфологические операции**: Примените эрозию и дилатацию для удаления шумов.
4. **Устранение фона**: Используйте бинаризацию для выделения текста.
5. **Сохранение или отображение результата**: Для дальнейшей проверки.

### Пример кода

```python
import cv2
import numpy as np
import easyocr

# 1. Загрузка изображения
image_path = 'path_to_your_image.jpg'  # Убедитесь, что вы указали правильный путь к изображению
image = cv2.imread(image_path)

# 2. Преобразование в оттенки серого
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 3. Применение гауссового размывания для уменьшения шума
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)

# 4. Бинаризация изображения (пороговая обработка)
_, binary_image = cv2.threshold(blurred_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 5. Применение морфологических операций для удаления шумов
kernel = np.ones((3, 3), np.uint8)
morphed_image = cv2.morphologyEx(binary_image, cv2.MORPH_CLOSE, kernel) 

# 6. Отображение результата (можно закомментировать, если не нужно визуализировать)
cv2.imshow('Processed Image', morphed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 7. Использование EasyOCR для распознавания текста
reader = easyocr.Reader(['ja'])  # 'ja' для японского языка
result = reader.readtext(morphed_image)

# 8. Вывод результата
for (bbox, text, prob) in result:
    print(f"Detected text: {text} (Confidence: {prob})")
```

### Описание этапов работы кода:
- **Загрузка изображения**: Убедитесь, что изображение считывается корректно.
- **Преобразование и размывание**: Это поможет уменьшить детали, которые не важны для распознавания текста.
- **Бинаризация**: Упрощает изображение, выделяя текст на чистом фоне.
- **Морфологические операции**: Эрозия и дилатация помогают удалить мелкие шумы, сохраняя контуры текста.
- **EasyOCR**: Используется для извлечения текста из подготовленного изображения.

### Примечание:
- Вам может потребоваться экспериментировать с размерами ядра при морфологических операциях и значениями порога для бинаризации, чтобы достичь оптимального результата в зависимости от ваших изображений.
- Обязательно установите необходимые библиотеки, если они еще не установлены:
  ```bash
  pip install opencv-python easyocr
  ```

Этот процесс должен помочь вам улучшить качество изображений и увеличить точность распознавания текста с помощью EasyOCR.
Устранение шумов можно попробовать вариацией применения нескольких фильтров: Превитта, Собеля, Лапласа, Гаусса, эрозией/диляцией. Так же можно попробовать FFT (Быстрое Фурье Преобразование). 
Довольно мощный опенсорсный OCR - TesseractOCR https://github.com/tesseract-ocr/tesseract
Похожие вопросы