Обнаружение фигур, которые не являются одним связанным компонентом в OpenCV

Код должен обнаруживать буквы и цифры с помощью OpenCV. Проблема в том, что он не может распознать буквы, состоящие из двух частей, например i, j, или арабские буквы ب،ت،ث،ج،خ،ض и т. д.

Это мой код:

image = cv2.imread('output.png')

height, width, depth = image.shape

# resizing the image to find spaces better
image = cv2.resize(image, dsize=(width * 5, height * 4), interpolation=cv2.INTER_CUBIC)
# grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# binary
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)

# dilation
kernel = np.ones((5, 5), np.uint8)
img_dilation = cv2.dilate(thresh, kernel, iterations=1)

# adding GaussianBlur
gsblur = cv2.GaussianBlur(img_dilation, (5, 5), 0)

# find contours
ctrs, hier = cv2.findContours(gsblur.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

m = list()
# sort contours
sorted_ctrs = sorted(ctrs, key=lambda ctr: cv2.boundingRect(ctr)[0])
pchl = list()
dp = image.copy()
for i, ctr in enumerate(sorted_ctrs):
    # Get bounding box
    x, y, w, h = cv2.boundingRect(ctr)
    cv2.rectangle(dp, (x - 10, y - 10), (x + w + 10, y + h + 10), (90, 0, 255), 9)

Что мне нужно изменить, чтобы обнаруживать фигуры с несколькими частями?


person Ishak Barkat    schedule 05.05.2019    source источник


Ответы (1)


Распознавание скорописных встроенных оптических символов — непростая задача не столько с точки зрения распознавания отдельных символов, сколько из-за правильной сегментации отдельных символов.

Популярный подход в этой области состоит в том, чтобы идентифицировать каждый элемент conex, изолировать их и построить какой-либо алгоритм ассоциации. По сути, у вас будет куча частей персонажей, некоторые полные персонажи, некоторые нет. Для этих незавершенных элементов (которые не могут быть классифицированы как персонажи сами по себе) проверьте окрестности этого элемента, чтобы построить символ с элементами вокруг него (могут ли они быть левыми или правыми, или даже немного выше или ниже). Обратная связь классификатора имеет решающее значение для задачи сегментации.

В литературе вы найдете этот подход под названием: Неявная пересегментация или Сегментация на основе распознавания. Дополнительные сведения см. в этом и в этом документе, а для арабских символов больше в этой статьи.

person RobertMoga    schedule 10.05.2019