Распознавание (конвертация) pdf. Оптическое распознавание (использование OCR Tesseract)
Опыт работы с распознаванием pdf. Конвертация pdf в текст. Оптическое распознавание (OCR Tesseract)
- Описание
- Подробнее
Описание
Возникла необходимость распознавать pdf файлы. Наткнулся на работы
//sale.itcity.ru/public/1217607/
//sale.itcity.ru/public/1535600/
Очень интересно. Первый вариант очень хорошо работает с пдф файлами, которые сохранены из word, excel или другие программы, но он не распознает отсканированные документы (пдф, собранный из картинок).
Вторая работа тоже очень интересная, захотелось опробовать оба, собрать в одной обработке и описать в данной статье.
Первый вариант, описанный в //sale.itcity.ru/public/1217607/ — работает очень хорошо

Но стоить распечатать и отсканировать данный текст — уже не распознает
Воспользуемся OCR Tesseract
Скачал его отсюда https://github.com/UB-Mannheim/tesseract/wiki
Суть его работы очень простая: подаете на вход картинки — на выходе получаете текст. Управление через командную строку.
1. Преобразуем ПДФ в картинки — любым удобным способом (я воспользовался работами из //sale.itcity.ru/public/1217607/)
2. Разместил их в каталоге временных файлов
ФайлывКаталоге = НайтиФайлы(КаталогСохраненияФайлов,"*.png");
ФайлыКУдалению = новый Массив;
ТекстИзПДФ = "";
Для каждого Элемент Из ФайлывКаталоге Цикл
ЗапуститьПриложение("""C:\Program Files\Tesseract-OCR\tesseract.exe"" """+Элемент.ПолноеИмя+""" "+КаталогСохраненияФайлов+"\Text_"+Элемент.ИмяБезРасширения+" -l rus",,Истина); //Скармлеваем тесеракту
Текст = Новый ЧтениеТекста;
Текст.Открыть(КаталогСохраненияФайлов+"\Text_"+Элемент.ИмяБезРасширения+".txt",КодировкаТекста.UTF8); //считываем распознанный текст
Строка = Текст.ПрочитатьСтроку();
Пока Строка <> Неопределено Цикл
ТекстИзПДФ = ТекстИзПДФ + Строка+Символы.ПС;
Строка = Текст.ПрочитатьСтроку();
КонецЦикла;
Текст.Закрыть();
ФайлыКУдалению.Добавить(Элемент.ПолноеИмя);
ФайлыКУдалению.Добавить(КаталогСохраненияФайлов+"\Text_"+Элемент.ИмяБезРасширения+".txt");
КонецЦикла;
//Удаляем все созданные файлы
Для каждого Стркудал Из ФайлыКУдалению Цикл
УдалитьФайлы(Стркудал);
КонецЦикла;Все
Реализовал это в обработке

Тестировалась на платформе 8.3.17.2256. ОС Windows (x64).
Обработку скачивать не обязательно, все описано выше и вышеуказанных работах.

