Распознайте текст с помощью оптического распознавания символов
txt = ocr(I)
txt = ocr(I, roi)
[___] = ocr(___,Name,Value)
[___] = 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
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'TextLayout'
— Введите текстовое размещение'Auto'
(значение по умолчанию) | 'Block'
| 'Line'
| 'Word'
Введите текстовое размещение, заданное как пара, разделенная запятой, состоящая из 'TextLayout
' и вектора символов 'Auto'
, 'Block'
, 'Line'
или 'Word'
.
Таблица приводит, как функция лечит текст от каждой установки TextLayout
.
TextLayout | Текстовая обработка |
---|---|
'Auto' | Определяет размещение и чтение порядка текстовых блоков во входном изображении. |
'Block' | Обрабатывает текст в изображении как один блок текста. |
'Line' | Обрабатывает текст в изображении как одна строка текста. |
'Word' | Обрабатывает текст в изображении как отдельное слово текста. |
Используйте автоматический анализ топологии, чтобы распознать текст от отсканированного документа, который содержит определенный формат, такой как двойной столбец. Эта установка сохраняет порядок чтения в возвращенном тексте. Можно получить плохие результаты, если входное изображение содержит несколько областей текста, или текст расположен в нарушенной сцене. Если вы получаете плохие результаты 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.