ocr

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

Описание

пример

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 имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: ocr(I,'TextLayout','Block')

Введите текстовое размещение, заданное как разделенная запятой пара, состоящая из '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