Как определить, нужно ли повернуть изображение
Я пытаюсь найти способ определить, нужно ли повернуть изображение, чтобы текст был выровнен по горизонтали. И если его нужно повернуть, то на сколько градусов?
Я посылаю изображения в тессеракт, и для того, чтобы тессеракт был эффективным, текст на изображениях должен быть выровнен по горизонтали.
Я ищу способ сделать это без зависимости от метаданных "Ориентация" в изображении.
Я думал о следующих способах сделать это:
- Поверните изображение на 90 градусов по часовой стрелке четыре раза и отправьте все четыре изображения в тессеракт. Это не идеально из-за необходимости обрабатывать одно изображение 4 раза.
- Используйте грубое преобразование линий, чтобы увидеть, являются ли линии вертикальными или горизонтальными. Если они вертикальные, поверните изображение. Таким образом, изображение все еще может быть повернуто на 180 градусов. Поэтому я не уверен, насколько это будет эффективно.
Мне интересно, есть ли другие способы сделать это, используя OpenCV, imageMagik или любые другие методы обработки изображений.
2 ответа
Aytempting ocr на всех 4 направлениях кажется разумным выбором, и я сомневаюсь, что вы найдете более надежную эвристику.
Если скорость является проблемой, вы можете сначала распознать небольшую часть изображения. Выберите прямоугольную область, которая имеет правильное количество краевых пикселей и соотношение белого / черного для текста, а затем отправьте это тессеракту в разных ориентациях. С небольшой областью вы можете даже попробовать сделать шаги меньше 90° или объединить их с другой эвристикой, такой как Hough.
Если вы помните наиболее вероятную ориентацию, основанную на предыдущих изображениях, и остановитесь после того, как тессеракт успешно обработает ориентацию, вам, вероятно, даже не придется пробовать большинство ориентаций в большинстве случаев.
Если у вас есть 1000 изображений с горизонтальным или вертикальным изображением, вы можете изменить размер этих изображений до 224x224, а затем выполнить точную настройку сверточной нейронной сети, например, AlexNet или VGG, для этой задачи. Если вы хотите узнать, сколько правильных поворотов сделать для изображения, вы можете установить метки как количество поворотов по часовой стрелке, например, 0,1,2,3.
http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html
Вы можете понять это в терминале с помощью tesseract's psm
вариант.
tesseract --psm 0 "infile" "outfile"
будет создавать outfile.osd
который содержит информацию:
Page number: 0
Orientation in degrees: 90
Rotate: 270
Orientation confidence: 27.93
Script: Latin
Script confidence: 6.55
man tesseract
...
--psm N
Set Tesseract to only run a subset of layout analysis and assume a certain form of image. The options for N are:
0 = Orientation and script detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR. (not implemented)
...