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