Я работаю над проектом распознавания текста, который должен обнаруживать и распознавать текст на изображении.На изображении есть две короткие строки текста (320px * 320 px).Первая строка - это аббревиатура кода страны.Вторая строка - это телефонный код.Все изображение можно повернуть на произвольный угол.Ниже приведены некоторые примеры.
изображение одно
изображение два
изображение три
Поскольку текст очень короткий, такой метод, как грубое преобразование (обнаружение длинной строки), преобразование Фурье и проекция профиля, не может работать хорошо.Я использую обнаружение контура для определения угла текстового блока.Однако это не может работать хорошо, если текстовый блок треугольный.Кроме того, текст будет переворачиваться вверх ногами, слева вниз и справа вниз после удаления перекоса, если текстовый блок имеет прямоугольную форму.Кто-нибудь может подсказать?
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)