Распознавание текста с помощью оптического распознавания символов
[___] = ocr(___, использует дополнительные параметры, указанные одним или несколькими Name,Value)Name,Value пары аргументов, используя любой из предшествующих синтаксисов.
businessCard = imread('businessCard.png');
ocrResults = ocr(businessCard)ocrResults =
ocrText with properties:
Text: '‘ MathWorks®...'
CharacterBoundingBoxes: [103x4 double]
CharacterConfidences: [103x1 single]
Words: {16x1 cell}
WordBoundingBoxes: [16x4 double]
WordConfidences: [16x1 single]
recognizedText = ocrResults.Text;
figure;
imshow(businessCard);
text(600, 150, recognizedText, 'BackgroundColor', [1 1 1]);
Чтение изображения.
I = imread('handicapSign.jpg');Определите одну или несколько прямоугольных областей, представляющих интерес, внутри I.
roi = [360 118 384 560];
Можно также использовать IMRECT для выбора области с помощью мыши: фигура; imshow (I); roi = скругление (getPosition (imrect))
ocrResults = ocr(I, roi);
Вставка распознанного текста в исходное изображение
Iocr = insertText(I,roi(1:2),ocrResults.Text,'AnchorPoint',... 'RightTop','FontSize',16); figure; imshow(Iocr);

businessCard = imread('businessCard.png');
ocrResults = ocr(businessCard)ocrResults =
ocrText with properties:
Text: '‘ MathWorks®...'
CharacterBoundingBoxes: [103x4 double]
CharacterConfidences: [103x1 single]
Words: {16x1 cell}
WordBoundingBoxes: [16x4 double]
WordConfidences: [16x1 single]
Iocr = insertObjectAnnotation(businessCard, 'rectangle', ... ocrResults.WordBoundingBoxes, ... ocrResults.WordConfidences); figure; imshow(Iocr);

businessCard = imread('businessCard.png'); ocrResults = ocr(businessCard); bboxes = locateText(ocrResults, 'MathWorks', 'IgnoreCase', true); Iocr = insertShape(businessCard, 'FilledRectangle', bboxes); figure; imshow(Iocr);

I - Входное изображениеВходное изображение, определенное в M N 3 truecolor, 2-ми оттенками серого M на Н или двоичным форматом. Входное изображение должно быть вещественным, непарабельным значением. Функция преобразует входные изображения в цветном или оттенках серого в двоичное изображение перед процессом распознавания. Для преобразования используется метод пороговой обработки Otsu. Для получения наилучших результатов распознавания высота строчного символа «x» или сопоставимого символа во входном изображении должна быть больше 20 пикселей. Удалите все повороты текста, превышающие +/- 10 градусов, с горизонтальной или вертикальной осей, чтобы улучшить результаты распознавания.
Типы данных: single | double | int16 | uint8 | uint16 | logical
roi - Регион интересовОдна или более представляющих интерес прямоугольных областей, заданных как матрица M-by-4 элемента. Каждая строка, M, указывает интересующую область во входном изображении, как четырехэлементный вектор, [x y width height]. Вектор задает расположение верхнего левого угла [x y] и размер представляющей интерес прямоугольной области (высота ширины) в пикселях. Каждый прямоугольник должен быть полностью помещен во входное изображение, I. Перед процессом распознавания функция использует пороговое значение Otsu для преобразования представляющих интерес областей ввода в цветном и оттенках серого в двоичные области. Функция возвращает текст, распознаваемый в прямоугольных областях как массив объектов.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
ocr(I,'TextLayout','Block')'TextLayout' - Формат входного текста'Auto' (по умолчанию) | 'Block' | 'Line' | 'Word'Макет входного текста, указанный как разделенная запятыми пара, состоящая из 'TextLayout"и одно из следующих:
| TextLayout | Обработка текста |
|---|---|
'Auto' | Определяет макет и порядок чтения текстовых блоков во входном изображении. |
'Block' | Обработка текста на изображении как единого блока текста. |
'Line' | Обработка текста на изображении как одной строки текста. |
'Word' | Обрабатывает текст на изображении как одно слово текста. |
'Character' | Обработка текста на изображении как отдельного символа. |
Используйте автоматический анализ макета для распознавания текста из отсканированного документа, содержащего определенный формат, например двойной столбец. Этот параметр сохраняет порядок чтения в возвращаемом тексте. Вы можете получить плохие результаты, если входное изображение содержит несколько областей текста или текст находится в загроможденной сцене. При плохих результатах OCR попробуйте использовать другой макет, соответствующий тексту на изображении. Если текст находится в загроможденной сцене, попробуйте указать ROI вокруг текста на изображении, а также попробовать другой макет.
'Language' - Язык'English' (по умолчанию) | 'Japanese' | символьный вектор | строковый скаляр | массив ячеек символьных векторов | строковый массивРаспознаваемый язык, указанный как разделенная запятыми пара, состоящая из 'Language«и вектор символов» 'English', 'Japanese'или массив ячеек символьных векторов. Также можно установить пакет установки файлов данных языка OCR для дополнительных языков или добавить пользовательский язык. Указание нескольких языков позволяет одновременно распознавать все выбранные языки. Тем не менее, выбор более чем одного языка может снизить точность и увеличить время, необходимое для выполнения OCR.
Чтобы указать любой из дополнительных языков, содержащихся в пакете Install OCR Language Data Files, используйте вектор символов языка так же, как и встроенные языки. Указывать путь не требуется.
txt = ocr(img,'Language','Finnish');
Список языков OCR пакета поддержки
'Afrikaans'
'Albanian'
'AncientGreek'
'Arabic'
'Azerbaijani'
'Basque'
'Belarusian'
'Bengali'
'Bulgarian'
'Catalan'
'Cherokee'
'ChineseSimplified'
'ChineseTraditional'
'Croatian'
'Czech'
'Danish'
'Dutch'
'English'
'Esperanto'
'EsperantoAlternative'
'Estonian'
'Finnish'
'Frankish'
'French'
'Galician'
'German'
'Greek'
'Hebrew'
'Hindi'
'Hungarian'
'Icelandic'
'Indonesian'
'Italian'
'ItalianOld'
'Japanese'
'Kannada'
'Korean'
'Latvian'
'Lithuanian'
'Macedonian'
'Malay'
'Malayalam'
'Maltese'
'MathEquation'
'MiddleEnglish'
'MiddleFrench'
'Norwegian'
'Polish'
'Portuguese'
'Romanian'
'Russian'
'SerbianLatin'
'Slovakian'
'Slovenian'
'Spanish'
'SpanishOld'
'Swahili'
'Swedish'
'Tagalog'
'Tamil'
'Telugu'
'Thai'
'Turkish'
'Ukrainian'
Для использования собственных пользовательских языков укажите путь к обучаемому файлу данных в качестве вектора символов языка. Необходимо присвоить файлу имя в формате < язык >.traineddata. Файл должен находиться в папке с именемtessdata'. Например:
txt = ocr(img,'Language','path/to/tessdata/eng.traineddata');
txt = ocr(img,'Language', ...
{'path/to/tessdata/eng.traineddata',...
'path/to/tessdata/jpn.traineddata'});
traineddata файлы в массиве ячеек содержатся в папке "path/to/tessdata’. Поскольку следующий код указывает на две разные содержащие папки, он не работает. txt = ocr(img,'Language', ...
{'path/one/tessdata/eng.traineddata',...
'path/two/tessdata/jpn.traineddata'});traineddata файл также должен существовать в той же папке, что и хинди traineddata файл. ocr поддерживает только traineddata файлы, созданные с помощью tesseract-ocr 3.02 или с использованием OCR Trainer.
Для целей развертывания, созданных MATLAB ® Coder™: Создаваемые исполняемые файлы OCR и файлы языковых данных должны располагаться рядом. tessdata папка должна иметь имя tessdata:
Для английского языка: C:/path/tessdata/eng.traineddata
Для японского: C:/path/tessdata/jpn.traineddata
Для пользовательских файлов данных: C:/path/tessdata/customlang.traineddata
C:/path/ocr_app.exe
Файлы данных на английском и японском языках можно скопировать из:
fullfile(matlabroot, 'toolbox','vision','visionutilities','tessdata');
'CharacterSet' - поднабор символов'' все символы (по умолчанию) | вектор символов | строковый скалярПодмножество символов, указанное как разделенная запятыми пара, состоящая из 'CharacterSet«и вектор символов». По умолчанию CharacterSet устанавливается в пустой символьный вектор, ''. Пустой вектор задает функцию для поиска всех символов на языке, указанном Language собственность. Можно задать для этого свойства меньший набор известных символов, чтобы ограничить процесс классификации.
ocr функция выбирает наилучшее соответствие из CharacterSet. Использование выводимых знаний о символах на входном изображении помогает повысить точность распознавания текста. Например, если задать CharacterSet ко всем цифровым цифрам, '0123456789'функция пытается сопоставить каждый символ только цифрам. В этом случае незначный символ может быть неправильно распознан как цифра.
txt - Распознанный текст и метрикиocrText объектРаспознанный текст и метрики, возвращенные как ocrText объект. Объект содержит распознанный текст, местоположение распознанного текста во входном изображении и метрики, указывающие на достоверность результатов. Диапазон доверительных значений равен [0 1] и представляет процентную вероятность. При указании M-by-4 roi, функция возвращает ocrText как M-by-1 массив ocrText объекты.
Если ваш ocr результаты не являются ожидаемыми, попробуйте один или несколько из следующих вариантов:
Увеличьте размер изображения в 2-4 раза по сравнению с исходным размером.
Если символы в изображении расположены слишком близко друг к другу или их края соприкасаются, используйте морфологию, чтобы уменьшить количество символов. Использование морфологии для удаления символов разделяет символы.
Используйте бинаризацию для проверки неоднородности освещения. Используйте graythresh и imbinarize для бинаризации изображения. Если символы не видны в результатах бинаризации, это указывает на потенциальную неоднородную проблему освещения. Попробуйте верхнюю шапку, используя imtophat функция или другие методы, которые касаются удаления неравномерного освещения.
Использовать интересующий регион roi для изоляции текста. Укажите roi вручную или используйте обнаружение текста.
Если изображение выглядит как естественная сцена, содержащая слова, как уличная сцена, а не отсканированный документ, попробуйте использовать ввод окупаемости инвестиций. Кроме того, можно установить TextLayout свойство для 'Block' или 'Word'.
[1] Р. Смит. Обзор механизма OCR Тессеракта, материалы девятой Международной конференции по анализу и признанию документов (ICDAR 2007) Том 2 (2007), стр. 629-633.
[2] Смит, R., Д. Антонова и Д. Ли. Адаптация Tesseract Open Source OCR Engine для многоязычного OCR. Материалы Международного семинара по многоязычному ОРС (2009 год).
[3] Р. Смит. Анализ компоновки гибридной страницы с помощью клавиши Tab-Stop Detection. Материалы десятой международной конференции по анализу и признанию документов. 2009.
Примечания и ограничения по использованию:
'TextLayout', 'Language', и 'CharacterSet' должны быть константами времени компиляции.
Созданный код для этой функции использует предварительно скомпилированную общую библиотеку для конкретной платформы.
graythresh | imbinarize | imtophat | insertShape | Преподаватель OCR | ocrText
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.