OpenCV Python - исправление разбитого текста - программирование
Подтвердить что ты не робот

OpenCV Python - исправление разбитого текста

Я пытаюсь восстановить поврежденный текст (изображения ниже), чтобы я мог выполнить распознавание изображений. Как мне исправить текст ниже? Я уже пробовал расширение, эрозию, закрытие морфологии и использование расстояния между контурами. Ни один из них, кажется, не работает. Буду признателен за любую помощь, спасибо.

Неработающий текст:

enter image description here

enter image description here

enter image description here

Попытки Решения (ни одна работа):

import cv2
import pytesseract
import numpy as np

img = cv2.imread ("/Users/2020shatgiskessell/Desktop/OpenSlate/FN2.png")

def OCR (img):
    config = ('-l eng --oem 1 --psm 3')
    text = pytesseract.image_to_string(img, config = config)
    return text

def get_countour(img):
        try:
            output = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            output = output.copy()
        except Exception:
            output = img.copy()
        #imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        #ret, thresh = cv2.threshold(output, 127, 255, 0)
        contours, hierarchy = cv2.findContours(output, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        c = max(contours, key = cv2.contourArea)
        contours.remove(c)
        cv2.drawContours(output, contours, -1, (0,255,0),-1)

        kernel = np.ones((2,1),np.uint8)
        #eroded = cv2.erode(output, kernel,1)
        output = cv2.dilate(output, kernel,1)
        return output



def strengthen(img):
    try:
        imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    except Exception:
        imgray = img
    #ret, thresh = cv2.threshold(imgray,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    #blur1 = cv2.blur(imgray,(5,5))
    blur2 = cv2.GaussianBlur(imgray,(5,5),0)
    thresh2 = cv2.adaptiveThreshold(blur2, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
    kernel = np.ones((2,1),np.uint8)
    #eroded = cv2.erode(thresh2, kernel,1)
    #opening = cv2.morphologyEx(eroded, cv2.MORPH_CLOSE, kernel)
    #closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel)
    return thresh2


#MNIST(img)
strengthened= strengthen(img)

contours = get_countour(strengthened)

print("from morphology transformation: "+ OCR(contours))

cv2.imshow('img', img)
cv2.imshow('contour', contours)

cv2.waitKey(0)
cv2.destroyAllWindows()

Вышеуказанные изображения распознаются как:

Изображение 1: (МОЖЕТ Ajne oF

Изображение 2:> AMAR VRAIR

Изображение 3: STure

4b9b3361

Ответ 1

Вы можете обучить GAN (Generative Adversarial Network), чтобы сделать это, хотя завершение изображения:

Завершение изображения с использованием глубоких сверточных генеративных состязательных сетей

https://github.com/saikatbsk/ImageCompletion-DCGAN

Пример:

Image Completion

Для получения дополнительной информации о GAN:

Презентация GAN

Ответ 2

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

blur2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur2 = cv2.GaussianBlur(blur2 , (21, 21), 0)