exponenta event banner

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]);

Figure contains an axes. The axes contains 2 objects of type image, text.

Чтение изображения.

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);

Figure contains an axes. The axes contains an object of type image.

     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);

Figure contains an axes. The axes contains an object of type image.

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

Figure contains an axes. The axes contains an object of type image.

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

свернуть все

Входное изображение, определенное в M N 3 truecolor, 2-ми оттенками серого M на Н или двоичным форматом. Входное изображение должно быть вещественным, непарабельным значением. Функция преобразует входные изображения в цветном или оттенках серого в двоичное изображение перед процессом распознавания. Для преобразования используется метод пороговой обработки Otsu. Для получения наилучших результатов распознавания высота строчного символа «x» или сопоставимого символа во входном изображении должна быть больше 20 пикселей. Удалите все повороты текста, превышающие +/- 10 градусов, с горизонтальной или вертикальной осей, чтобы улучшить результаты распознавания.

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

Одна или более представляющих интерес прямоугольных областей, заданных как матрица 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"и одно из следующих:

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

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

Распознаваемый язык, указанный как разделенная запятыми пара, состоящая из 'Language«и вектор символов» 'English', 'Japanese'или массив ячеек символьных векторов. Также можно установить пакет установки файлов данных языка OCR для дополнительных языков или добавить пользовательский язык. Указание нескольких языков позволяет одновременно распознавать все выбранные языки. Тем не менее, выбор более чем одного языка может снизить точность и увеличить время, необходимое для выполнения OCR.

Чтобы указать любой из дополнительных языков, содержащихся в пакете Install OCR Language Data Files, используйте вектор символов языка так же, как и встроенные языки. Указывать путь не требуется.

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

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

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

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

.
Представлен в R2014a