Распознавание текста на картинке на C++ можно проводить с помощью различных готовых библиотек. Одна из таких библиотек - бесплатная библиотека tesseract.
Пример использования этой библиотеки можно найти по адресу:
https://github.com/gulakov/tesseract-ocr-sample
На основе этого примера можно сделать и своё приложение.
В MS Visual C++ делается следующее:
- Пример скачивается из Интернет и распаковывается.
- Создаётся новый проект.
- Пути к папкам leptonica и tesseract из папки tesseract-include прописываются в свойствах проекта в
VC++ Directories-> Include Directories
- К проекту подключается библиотеки liblept168.lib и libtesseract302.lib.
- Сам код файла cpp проекта может выглядеть примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include "stdafx.h" #include <baseapi.h> // подключаем заголовочные файлы библиотек, связанных с tesseract #include <allheaders.h> #include <iostream> // подключаем функции ввода/вывода using namespace std; // эта строка нужна чтобы не писать std int _tmain(int argc, _TCHAR* argv[]) { FILE* f; // объявляем файловую переменную tesseract::TessBaseAPI *myOCR = new tesseract::TessBaseAPI(); myOCR->Init(NULL, "eng"); //будем распознавать тексты на английском языке Pix *pix = pixRead("c:\\1.jpg"); // загружаем картинку с текстом с диска myOCR->SetImage(pix); // вывод результатов распознавания текста в файл f=fopen("text.txt","w"); fprintf(f, "OCR output:\n\n"); fprintf(f,myOCR->GetUTF8Text()); } |
Эта программа откроет файл с картинкой на компьютере по адресу c:\1.jpg, затем программа распознает текст на картинке и выведет этот текст в кодировке UTF8 в файл text.txt.
- В папку к exe-файлу нужно положить файлы liblept168.dll и libtesseract302.dll, в общем всё примерно также как и при подключении любой другой dll.
- Особенностью является то, что нужно положить в папку к exe-шнику ещё и папку tessdata. Если нужно распознавание не только английского языка, то можно скачать и использовать аналогичные файлам из папки tessdata файлы для этого другого языка.
Подскажите пожалуйста, появляется ошибка, когда подключаю библиотеку "Undefined structure 'INT_FEATURE_STRUCT'
Full parser context
Unit1.cpp(11): #include C:\...\baseapi.h"
в строке "typedef INT_FEATURE_STRUCT INT_FEATURE_ARRAY[MAX_NUM_INT_FEATURES];" 66 - по счету
что делать?
среда разработки - Embarcadero RAD Studio XE6
Наверное, самое простое из того, что помогает в этом случае:
1 вариант. Использовать какой-нибудь бесплатный Visual C++. Библиотека под него больше.
2 вариант. Можно использовать немного другой способ работы с tesseract в Embarcadero RAD Studio XE6 (Example using the C-API in a C program). Пример здесь в самом низу:
https://github.com/tesseract-ocr/tesseract/wiki/APIExample