Как выровнять и распознать короткий текст на изображении - PullRequest
1 голос
/ 23 мая 2019

Я работаю над проектом распознавания текста, который должен обнаруживать и распознавать текст на изображении.На изображении есть две короткие строки текста (320px * 320 px).Первая строка - это аббревиатура кода страны.Вторая строка - это телефонный код.Все изображение можно повернуть на произвольный угол.Ниже приведены некоторые примеры.

изображение одно

image one

изображение два

image two

изображение три

image three

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

file = r"/home/hank/Desktop/af_36.jpg"
image = cv2.imread(os.path.normpath(file))
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

blur = cv2.GaussianBlur(gray, (3, 3), 0)
_, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
dilation = cv2.dilate(thresh, kernel, iterations=1)

contours, hierarchy = cv2.findContours(dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

contours = [contours[i] for i in range(len(contours)) if
                 not (hierarchy[0][i][3] >= 0 and hierarchy[0][i][2] == -1)]

angles = []

for cnt in contours:
    rect = cv2.minAreaRect(cnt)
    angles.append(rect[2])

angle = sum(angles)/len(angles)

print(angle)

1 Ответ

0 голосов
/ 23 мая 2019

Как насчет Вы не можете обнаружить текст, попробуйте определить расстояние между двумя текстами (вверх и вниз).

(1).

пороговое значение изображения для поиска текста (со словом = 1 без слова = 0. Затем найдите центральную точку прямоугольного блока. Средние точки x и y должны быть пустыми.

Попытайтесь повернуть линию (одинаковой длины) с центром в средних точках на ширину, просто прикоснувшись к верхнему и нижнему тексту. Результат с максимальным количеством ненулевых пикселей (означает, что строка не пересекается с текстом) со значением 1 должен быть углом, в котором находится текст.

enter image description here

(2) Использовать старую систему обнаружения лиц. Используйте шаблон, подобный гарру, с шаблоном под углом N поворота.

Для петли для всех x, y, угол

Тогда постепенно уточняйте.

E.g Это угловая версия функции Harr. выровняйте это с изображением соответствием шаблона. затем выровняйте повернутый шаблон и добавьте поверх предыдущего шаблона угла соответствующее изображение. Объедините все результаты сопоставления с шаблоном и запустите min-max, чтобы найти максимальный результат

enter image description here

...