OCR: Подготовка OCR движка для распознавания текста
В этом разделе
Создание экземпляра класса TesseractOcr
Для распознавания текста с помощью Tesseract OCR необходимы следующие файлы:
-
Файл Tesseract5.Vintasoft.x86.dll, если Tesseract OCR должен использоваться в 32-битном Windows-приложении.
ВАЖНО:
Распространяемый пакет Microsoft Visual C++ 2019 (32-разрядная версия) должен быть установлен на компьютере под управлением Windows для корректной работы Tesseract5.Vintasoft.x86.dll.
-
Файл Tesseract5.Vintasoft.x64.dll, если Tesseract OCR необходимо использовать в 64-битном Windows-приложении.
ВАЖНО:
Распространяемый пакет Microsoft Visual C++ 2019 (64-разрядная версия) должен быть установлен на компьютере под управлением Windows для корректной работы Tesseract5.Vintasoft.x64.dll.
- Файл libTesseract5.Vintasoft.x64.so, если Tesseract OCR должен использоваться в 64-битном Linux-приложении.
- Каталог "tessdata" с языковыми файлами.
По умолчанию файлы Tesseract OCR расположены в папке "TesseractOcr", и эта папка имеет следующую структуру:
-
TesseractOcr
- Tesseract5.Vintasoft .x86.dll
- Tesseract5.Vintasoft.x64.dll
-
tessdata
- eng.traineddata
- deu.traineddata
- ...
Необходимо создать экземпляр класса
TesseractOcr для распознавания текста с помощью Tesseract OCR. Конструктор по умолчанию (конструктор без параметров) использует папку "<current_directory>\TesseractOcr" в качестве папки, в которой расположены файлы Tesseract OCR. Чтобы указать другую папку, необходимо использовать конструктор со строковым параметром.
Вот C#/VB.NET код, который демонстрирует, как создать экземпляр класса
TesseractOcr и указать папку, в которой расположены файлы Tesseract OCR:
string tesseractOcrDllPath = @"D:\Vintasoft.Imaging.Ocr.Tesseract.">TesseractOcr";
Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr tesseractOcr =
new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr(tesseractOcrDllPath);
// ...
tesseractOcr.Dispose();
Dim tesseractOcrDllPath As String = "D:\Vintasoft.Imaging.Ocr.Tesseract.">TesseractOcr"
Dim tesseractOcr As New Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr(tesseractOcrDllPath)
' ...
tesseractOcr.Dispose()
Инициализация экземпляра класса TesseractOcr
После создания экземпляра класса
TesseractOcr необходимо вызвать метод
TesseractOcr.Init для инициализации экземпляра.
TesseractOcr.Init позволяет указать язык по умолчанию для распознавания текста.
Tesseract OCR 5 позволяет распознавать текст на более чем 100 языках. В установочный пакет SDK по умолчанию входит только словарь английского языка.
В следующей таблице показан полный список языков, поддерживаемых Tesseract OCR 5, и ссылки для загрузки языковых файлов:
Вот C#/VB.NET код, который демонстрирует, как указать немецкий язык в качестве основного языка, который будет использоваться для распознавание текста:
// create the OCR engine
using (Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr tesseractOcr =
new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr())
{
// specify that OCR engine will recognize German text
Vintasoft.Imaging.Ocr.OcrLanguage language = Vintasoft.Imaging.Ocr.OcrLanguage.German;
// create the OCR engine settings
Vintasoft.Imaging.Ocr.Tesseract.TesseractOcrSettings settings =
new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcrSettings(language);
// initialize the OCR engine
tesseractOcr.Init(settings);
// ...
// shutdown the OCR engine
tesseractOcr.Shutdown();
}
' create the OCR engine
Using tesseractOcr As New Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr()
' specify that OCR engine will recognize German text
Dim language As Vintasoft.Imaging.Ocr.OcrLanguage = Vintasoft.Imaging.Ocr.OcrLanguage.German
' create the OCR engine settings
Dim settings As New Vintasoft.Imaging.Ocr.Tesseract.TesseractOcrSettings(language)
' initialize the OCR engine
tesseractOcr.Init(settings)
' ...
' shutdown the OCR engine
tesseractOcr.Shutdown()
End Using
Параметры Tesseract OCR
Tesseract OCR 5 имеет множество параметров.
Вы можете получить значение любого параметра, используя метод
TesseractOcr.GetVariable.
Вы можете установить значение любого параметра, используя метод
TesseractOcr.SetVariable.
Вот C#/VB.NET код, который демонстрирует, как использовать параметр "белый список символов":
/// <summary>
/// Specifies that text contains only the limited set of characters and
/// recognizes the text in image.
/// </summary>
/// <param name="filename">The name of file, which stores images with text.</param>
public static void OcrImageWithDigits(string filename)
{
// create an image collection
using (Vintasoft.Imaging.ImageCollection images =
new Vintasoft.Imaging.ImageCollection())
{
// add images from file to the image collection
images.Add(filename);
System.Console.WriteLine("Create Tesseract OCR engine...");
// create the Tesseract OCR engine
using (Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr tesseractOcr =
new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr())
{
System.Console.WriteLine("Initialize OCR engine...");
// init the Tesseract OCR engine
tesseractOcr.Init(new Vintasoft.Imaging.Ocr.OcrEngineSettings(
Vintasoft.Imaging.Ocr.OcrLanguage.English));
// set the "white list" of recognizing characters
tesseractOcr.SetVariable(
"tessedit_char_whitelist", "01234567890");
// for each image
foreach (Vintasoft.Imaging.VintasoftImage image in images)
{
System.Console.WriteLine("Recognize the image...");
// recognize text in image
Vintasoft.Imaging.Ocr.Results.OcrPage ocrResult = tesseractOcr.Recognize(image);
// output the recognized text
System.Console.WriteLine("Page Text:");
System.Console.WriteLine(ocrResult.GetText());
System.Console.WriteLine();
}
// shutdown the Tesseract OCR engine
tesseractOcr.Shutdown();
}
// free images
images.ClearAndDisposeItems();
}
}
''' <summary>
''' Specifies that text contains only the limited set of characters and
''' recognizes the text in image.
''' </summary>
''' <param name="filename">The name of file, which stores images with text.</param>
Public Shared Sub OcrImageWithDigits(filename As String)
' create an image collection
Using images As New Vintasoft.Imaging.ImageCollection()
' add images from file to the image collection
images.Add(filename)
System.Console.WriteLine("Create Tesseract OCR engine...")
' create the Tesseract OCR engine
Using tesseractOcr As New Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr()
System.Console.WriteLine("Initialize OCR engine...")
' init the Tesseract OCR engine
tesseractOcr.Init(New Vintasoft.Imaging.Ocr.OcrEngineSettings(Vintasoft.Imaging.Ocr.OcrLanguage.English))
' set the "white list" of recognizing characters
tesseractOcr.SetVariable("tessedit_char_whitelist", "01234567890")
' for each image
For Each image As Vintasoft.Imaging.VintasoftImage In images
System.Console.WriteLine("Recognize the image...")
' recognize text in image
Dim ocrResult As Vintasoft.Imaging.Ocr.Results.OcrPage = tesseractOcr.Recognize(image)
' output the recognized text
System.Console.WriteLine("Page Text:")
System.Console.WriteLine(ocrResult.GetText())
System.Console.WriteLine()
Next
' shutdown the Tesseract OCR engine
tesseractOcr.Shutdown()
End Using
' free images
images.ClearAndDisposeItems()
End Using
End Sub