Распознавание текста с помощью оптического распознавания символов
[___] = 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 = round (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 <reservedrangesplaceholder2>-by-3 truecolor, M N 2-ми оттенками серого или двоичным форматом. Изображение входа должно быть вещественным, неразборчивым значением. Функция преобразует входные изображения truecolor или полутонового цвета в бинарное изображение перед процессом распознавания. Для преобразования используется метод порогового значения Otsu. Для наилучших результатов ocr высота нижнего регистра «x» или сопоставимого символа в вход изображении должна быть больше 20 пикселей. Из горизонтальной или вертикальной осей удалите любые повороты текста, большие на +/-10 степени, чтобы улучшить результаты распознавания.
Типы данных: single
| double
| int16
| uint8
| uint16
| logical
roi
- Необходимая областьОдна или несколько интересующих прямоугольных областей, заданных как матрица элемента 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'
- Входное текстовое размещение'Auto'
(по умолчанию) | 'Block'
| 'Line'
| 'Word'
Вход текстовое размещение, заданное как разделенная запятой пара, состоящее из 'TextLayout
'и одно из следующих:
TextLayout | Обработка текста |
---|---|
'Auto' | Определяет размещение и порядок чтения текстовых блоков в вход изображении. |
'Block' | Рассматривает текст в изображении как один блок текста. |
'Line' | Рассматривает текст на изображении как одну линию текста. |
'Word' | Рассматривает текст в изображении как единое слово текста. |
'Character' | Рассматривает текст в изображении как один символ. |
Используйте автоматический анализ размещения для распознавания текста из отсканированного документа, содержащего определенный формат, например двойной столбец. Этот параметр сохраняет порядок чтения в возвращенном тексте. Вы можете получить плохие результаты, если ваше входное изображение содержит несколько областей текста или текст расположен в загроможденной сцене. Если вы получаете плохие результаты OCR, попробуйте другое размещение, который совпадает с текстом в вашем изображении. Если текст находится в загроможденной сцене, попробуйте задать информация только для чтения вокруг текста в вашем изображении в дополнение к попытке другого размещения.
'Language'
- Язык'English'
(по умолчанию) | 'Japanese'
| вектор символов | строковый скаляр | массив ячеек из векторов символов | строковые массивыЯзык для распознавания, заданный как разделенная разделенными запятой парами, состоящая из 'Language
'и вектор символов 'English'
, 'Japanese'
, или массив ячеек из векторов символов. Можно также установить пакет Install OCR Language Data Files для дополнительных языков или добавить пользовательский язык. Установка нескольких языков позволяет одновременно распознавать все выбранные языки. Однако выбор более чем одного языка может снизить точность и увеличить время, необходимое для выполнения 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'
Чтобы использовать свои собственные пользовательские языки, укажите путь к обученному файлу данных в качестве вектора символов на языке. Вы должны назвать файл в формате < 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
'и вектор символов. По умолчанию 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
функции для бинаризации изображения. Если символы не видны в результатах бинаризации, это указывает на потенциальную неоднородную проблему подсветки. Попробуйте 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.
Указания и ограничения по применению:
'TextLayout'
, 'Language'
, и 'CharacterSet'
должны быть постоянными во время компиляции.
Сгенерированный код для этой функции использует предварительно скомпилированную совместную библиотеку для конкретной платформы.
graythresh
| imbinarize
| imtophat
| insertShape
| OCR Trainer | ocrText
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.