ocr

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

Описание

пример

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

пример

txt = ocr(I, roi) распознает текст в I внутри одной или нескольких прямоугольных областей. The 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 = round (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 <reservedrangesplaceholder2>-by-3 truecolor, M N 2-ми оттенками серого или двоичным форматом. Изображение входа должно быть вещественным, неразборчивым значением. Функция преобразует входные изображения truecolor или полутонового цвета в бинарное изображение перед процессом распознавания. Для преобразования используется метод порогового значения Otsu. Для наилучших результатов ocr высота нижнего регистра «x» или сопоставимого символа в вход изображении должна быть больше 20 пикселей. Из горизонтальной или вертикальной осей удалите любые повороты текста, большие на +/-10 степени, чтобы улучшить результаты распознавания.

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

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

Вход текстовое размещение, заданное как разделенная запятой пара, состоящее из 'TextLayout'и одно из следующих:

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

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

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

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

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 файл должен также существовать в той же папке, что и Hindi traineddata файл. ocr поддерживает только traineddata файлы, созданные с помощью tesseract-ocr 3.02 или использование OCR Trainer.

Для целей развертывания, сгенерированных MATLAB® Coder™: сгенерированный исполняемый файл ocr и папка файла языковых данных должны быть колокированы. The 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 функции для бинаризации изображения. Если символы не видны в результатах бинаризации, это указывает на потенциальную неоднородную проблему подсветки. Попробуйте top hat, используя imtophat функция или другие методы, которые касаются удаления неоднородного освещения.

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

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

Ссылки

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

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

[3] Р. Смит. Макет страницы с помощью Tab-Stop Detection. Материалы десятой международной конференции по анализу и признанию документов. 2009.

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

.
Введенный в R2014a