ocr

Распознайте текст с помощью оптического распознавания символов

Синтаксис

txt = ocr(I)
txt = ocr(I, roi)
[___] = ocr(___,Name,Value)

Описание

пример

txt = ocr(I) возвращает объект ocrText, содержащий информацию об оптическом распознавании символов от входного изображения, I. Объект содержит распознанный текст, текстовое местоположение и метрику, указывающую на уверенность результата распознавания.

пример

txt = ocr(I, roi) распознает текст в I в одной или нескольких прямоугольных областях. Вход roi содержит M-by-4 матрица с видимыми областями M.

пример

[___] = 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]);

Readimage.

I = imread('handicapSign.jpg');

Задайте одну или несколько прямоугольных видимых областей во мне.

roi = [360 118 384 560];

Можно также использовать IMRECT, чтобы выбрать область с помощью мыши: фигура; imshow (I); король = вокруг (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);

Входные параметры

свернуть все

Введите изображение, заданное в M-by-N-by-3 истинный цвет, M-by-N 2D шкала полутонов или двоичный формат. Входное изображение должно быть действительным, неразреженным значением. Функция преобразовывает истинный цвет или полутоновые входные изображения к двухуровневому изображению перед процессом распознавания. Это использует метод пороговой обработки Оцу для преобразования. Для лучших результатов ocr высота нижнего регистра ‘x’ или сопоставимый символ во входном изображении, должна быть больше, чем 20 пикселей. Или от горизонтальных или от вертикальных осей, удалите любые текстовые вращения, больше, чем +/-10 градусов, чтобы улучшить результаты распознавания.

Типы данных: single | double | int16 | uint8 | uint16 | logical

Одна или несколько прямоугольных видимых областей, заданных как M-by-4 матрица элемента. Каждая строка, M, задает видимую область во входном изображении, как четырехэлементный вектор, [x y width height]. Вектор задает местоположение верхнего левого угла, [x y], и размер прямоугольной видимой области, [width height], в пикселях. Каждый прямоугольник должен полностью содержаться во входном изображении, I. Перед процессом распознавания функция использует пороговую обработку Оцу, чтобы преобразовать истинный цвет и полутоновые входные видимые области в бинарные области. Функция возвращает текст, распознанный в прямоугольных областях как массив объектов.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример:

Введите текстовое размещение, заданное как пара, разделенная запятой, состоящая из 'TextLayout' и вектора символов 'Auto', 'Block', 'Line' или 'Word'.

Таблица приводит, как функция лечит текст от каждой установки TextLayout.

TextLayoutТекстовая обработка
'Auto'Определяет размещение и чтение порядка текстовых блоков во входном изображении.
'Block'Обрабатывает текст в изображении как один блок текста.
'Line'Обрабатывает текст в изображении как одна строка текста.
'Word'Обрабатывает текст в изображении как отдельное слово текста.

Используйте автоматический анализ топологии, чтобы распознать текст от отсканированного документа, который содержит определенный формат, такой как двойной столбец. Эта установка сохраняет порядок чтения в возвращенном тексте. Можно получить плохие результаты, если входное изображение содержит несколько областей текста, или текст расположен в нарушенной сцене. Если вы получаете плохие результаты OCR, попробуйте различное размещение, которое совпадает с текстом в вашем изображении. Если текст расположен в нарушенной сцене, попытайтесь задать ROI вокруг текста в вашем изображении в дополнение к попытке различного размещения.

Язык, чтобы распознать, заданный как пара, разделенная запятой, состоящая из 'Language' и вектора символов 'English', 'Japanese' или массив ячеек из символьных векторов. Можно также установить пакет Файлов данных Языка OCR Установки для дополнительных языков или добавить пользовательский язык. Определение нескольких языков включает одновременное распознавание всех выбранных языков. Однако выбор больше чем одного языка может уменьшать точность и увеличить время, которое требуется, чтобы выполнить ocr.

Чтобы задать любой из дополнительных языков, которые содержатся в пакете Файлов данных Языка OCR Установки, используйте вектор символов языка тот же путь в качестве встроенных языков. Вы не должны задавать путь.

txt = ocr(img,'Language','Finnish');

 Список языков OCR пакета поддержки

Чтобы использовать ваши собственные языки, задайте путь к обученному файлу данных как вектор символов языка. Необходимо назвать файл в формате, <language>.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 установлен в пустой символьный вектор, ''. Пустой вектор устанавливает функцию искать все символы на языке, заданном свойством Language. Можно установить это свойство на меньший набор известных символов ограничивать процесс классификации.

Функция ocr выбирает лучшее соответствие из CharacterSet. Используя выводимое знание о символах во входе изображение помогает улучшить точность распознавания текста. Например, если вы устанавливаете CharacterSet на все числовые цифры, '0123456789', функция пытается совпадать с каждым символом только к цифрам. В этом случае символ нецифры может неправильно быть распознан цифрой.

Выходные аргументы

свернуть все

Распознанный текст и метрики, возвращенные как объект ocrText. Объект содержит распознанный текст, местоположение распознанного текста во входном изображении и метрики, указывающие на уверенность результатов. Область значений значений уверенности является [0 1] и представляет вероятность процента. Когда вы задаете M-by-4 roi, функция возвращает ocrText как M-by-1 массив объектов ocrText.

Если ваши результаты ocr не то, что вы ожидаете, попробуйте один или несколько следующих опций:

  • Увеличьте изображение 2 к 4 времена первоначальный размер.

  • Если символы в изображении слишком близки вместе, или их ребра касаются, используют морфологию, чтобы сократить символы. Используя морфологию, чтобы сократить символы разделяет символы.

  • Используйте бинаризацию, чтобы проверять на неоднородные проблемы подсветки. Используйте graythresh и функции imbinarize к binarize изображение. Если символы не видимы в результатах бинаризации, она указывает на потенциальную неоднородную проблему подсветки. Попробуйте цилиндр, с помощью функции imtophat или других методов, которые имеют дело с удалением неоднородного освещения.

  • Используйте видимую область опция roi, чтобы изолировать текст. Задайте roi вручную или используйте текстовое обнаружение.

  • Если ваше изображение похоже на естественную сцену, содержащую слова, как уличная сцена, а не отсканированный документ, попытайтесь использовать вход ROI. Кроме того, можно установить свойство TextLayout на 'Block' или 'Word'.

Ссылки

[1] Р. Смит. Обзор Engine OCR Tesseract, Продолжения Девятой Международной конференции по вопросам Анализа Документа и Распознавания (ICDAR 2007) Vol 2 (2007), стр 629-633.

[2] Смит, R., Д. Антонова и Д. Ли. Адаптация Engine OCR с открытым исходным кодом Tesseract для многоязычного OCR. Продолжения международного семинара на многоязычном OCR, (2009).

[3] Р. Смит. Гибридный Анализ Макета страницы через Обнаружение Позиции табуляции. Продолжения 10-й международной конференции по вопросам анализа документа и распознавания. 2009.

Расширенные возможности

Введенный в R2014a