Using standard tess api to recognize text:
image1 = imread("/home/user/Desktop/src.png");
cv::cvtColor(image1, image1, COLOR_RGB2GRAY);
cv::threshold(image1, image1, 125, 255, THRESH_BINARY);
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
if (api->Init(NULL, "eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
};
api4->SetImage((uchar*)image1.data, image1.size().width, image1.size().height, image1.channels(), image1.step1());
char *outText = api->GetUTF8Text();
cout << "outText:" << outText << endl;
Need to train tesseract to recognize more precisely some symbols
Using the guide below:
jTessBox Editor: https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
Step 1: Make box files for images that we want to train Syntax: tesseract [langname].[fontname].[expN].[file-extension] [langname].[fontname].[expN] batch.nochop makebox Eg:tesseract train.my.exp0.tif train.my.exp0 batch.nochop makebox
{*Note: After making box files we have to change or modify wrongly identified characters in box files.}
Step 2: Create .tr file (Compounding image file and box file) Syntax: tesseract [langname].[fontname].[expN].[file-extension] [langname].[fontname].[expN] box.train Eg: tesseract train.my.exp.tif train.my.exp0 box.train
step 3: Extract the charset from the box files (Output for this command is unicharset file) Syntax: unicharset_extractor [langname].[fontname].[expN].box Eg: unicharset_extractor train.my.exp0.box
step 4: Create a font_properties file based on our needs. Syntax: echo "[fontname] [italic (0 or 1)] [bold (0 or 1)] [monospace (0 or 1)] [serif (0 or 1)] [fraktur (0 or 1)]" [angle bracket should be here] font_properties Eg: echo "arial 0 0 1 0 0" [angled bracket] font_properties
Step 5: Training the data. Syntax: mftraining -F font_properties -U unicharset -O [langname].unicharset [langname].[fontname].[expN].tr Eg: mftraining -F font_properties -U unicharset -O train.unicharset train.my.exp0.tr
Step 6: Syntax: cntraining [langname].[fontname].[expN].tr Eg: cntraining train.my.exp0.tr {*Note:After step 5 and step 6 four files were created.(shapetable,inttemp,pffmtable,normproto) }
Step 7: Rename four files (shapetable,inttemp,pffmtable,normproto) into ([langname].shapetable,[langname].inttemp,[langname].pffmtable,[langname].normproto) Syntax: rename filename1 filename2 Eg: rename shapetable train.shapetable rename inttemp train.inttemp rename pffmtable train.pffmtable rename normproto train.normproto
Step 8: Create .traineddata file Syntax: combine_tessdata [langname]. Eg: combine_tessdata train.
Move .traineddata file to tesseract programs tessdata directory C:\Program Files\Tesseract-OCR\tessdata
Run tesseract for trained fronts
tesseract Test2.png stdout -l train
I'm confused with font name, as I don't know the font name.
step 4: Create a font_properties file based on our needs. Syntax: echo "[fontname] [italic (0 or 1)] [bold (0 or 1)] [monospace (0 or 1)] [serif (0 or 1)] [fraktur (0 or 1)]" [angle bracket should be here] font_properties Eg: echo "arial 0 0 1 0 0" [angled bracket] font_properties
How to get font name set for TessBaseAPI read with c+ and command line?
does the trick, but tesseract representive mentioned somewhere that it might not be that reliable