భాషందం, భువనందం, బ్రతుకందం

Wednesday, May 26, 2010

వేయిపొద్దులు ఒక్కసారిక్రుంకిన వేటూరి




పంటచేలో పాలకంకీ నవ్విందీ
పల్లకీలో పిల్లఎంకీ నవ్విందీ।
పూతరెల్లు చేలుదాటే ఎన్నెల్లా
లేతపచ్చ కోనసీమా ఎండల్లా॥


నేనెప్పుడైనా గొప్పవాడినవుతానో లేదో తెలియదు కానీ, ఎవరైనా మీ జీవితాన్నే మార్చేసిన నాలుగు బంతులు చెప్పండి అంటే అవి ఖచ్చితంగా ఇవే। ఆయన్ని వ్యక్తిగతంగా కలుసుకునే అదృష్టంలేకపోయింది।

Wednesday, May 19, 2010

Tesseract OCR for Telugu - Part 3

TESSDATA in Telugu

తెలుఁగు చదవడానికి పిల్లవాడికి ఏమేమి నేర్పాలి? పోనీ లెండి ముందు తేలికపాటి ప్రశ్న।
ఆంగ్లం చదవడానికి పిల్లవాడికి ఏమేమి నేర్పాలి?
a నుండి z వఱకును, అలానే A నుండి Z వఱకును। 0 నుండి 9 వఱకును।
ఇప్పుడు తెలుగో।
అ – ఔ వఱకును
అఁ అం అః లు
క – హ వఱకును

సరిపోతుందా అబ్బే, చిన్నప్పుడు బళ్ళో గుణింతాలు నేర్చుకోలేదూ?
క కా కి కీ మొదలు, హొ హో హౌ వఱకూ గుణింతాలు నేర్పాలి కూడా।
సరిపోతుందా అబ్బే, ఒత్తులు మఱి?
అక్క లో వుండే క వత్తు కాడనుండి అహ్హలో వుండే హ వత్తు వఱకూ నేర్వాలి (మధ్యలో ళ,ఱ లు వున్నాయండోయ్)

ఇక అంతవుంటే సరిపోతుందా అంటే, కొన్ని వత్తులు అక్షరాల్లో భాగాలయిపోతాయి,
ఉదా – త్త, స్త, స్తి, ట్లు, ర్ల, వంటివి తఱచు కనబడే సంయుక్తాలు వీటిలోని వత్తులను ప్రక్కకు వ్రాయలేము। క్క స్స బ్బ, ప్ప వంటి వత్తులు ప్రక్కకు వ్రాయవచ్చును। ఇలా లెక్కవేసుకు పోతే, గ్గ, గ్గా, గ్గి, గ్గు, గ్గౌ వంటివి నేర్పుకుంటూ పోవాలి మన టెస్సుగాడికి,

ముఖ్యగమనిక –
ప్రస్తుతానికి మనకున్న టెస్సుగానికి ఇంకా డబ్బాక్రింద డబ్బాపెట్టే సామర్ధ్యం లేదు। ఇది ఎందుకంటారా, పదారణాల ఆంగ్లభాషలో అక్కరం కింద అక్కరం పెట్టే అవసరం లేదు కనక అక్కడ పుట్టిన దీని బుఱ్ఱ కూడా అలా పేర్చబడ్డది। క్కి ని కి, కవత్తులు గా విడదీస్తుంది గాని, గ్గు ని గు క్రింద గవత్తుగా గుర్తించలేదు। కాబట్టి ప్రస్తుతాని గ్గు ని ఒక అక్కరంగా లెక్కవేయాలి। ఇలా మొత్తానికో వెయ్యి అక్కరాలు మనము నేర్పాలి।

Stuff Required for Telugu Training
1) You need to give the program a *.box,*.tiff file pair, the tiff file contains all the possible characters (as an image), and the box file contains co-ordinates of the boxes and the characters corresponding to the tiff file.

Eg:-
Image and Box file contents
sample telugu textకే 29 115 50 154
్య 49 94 67 135
క్రై 81 79 114 150
క్ష్య 142 94 181 148
ప్రే 28 25 56 78
జ్ఞ 82 14 110 61
ఋ 141 36 204 62
As seen in Box File viewer


A *.box file viewer is one of many programs written by OCR enthusiasts for the sake of easy manipulation of box files. CowBoxer is one of them.

Ideal Box File for Telugu.
The ideal box file for Telugu would contain nearly a 10,000 lines composed of 1000 symbols repeating again and again. More probable symbols should be trained better.
Hence, in a 10,000 symbol box file (with repetetions of 1000 symbols) the common symbols డు,ము,వు,లు etc. would appear 20 to 100 times. ప్రథమా విభక్తి అంటే ఏంటో అనుకున్నారు కదా! ఇదన్నమట దాని ఉపయోగం।

For now, download long32.box.txt and long32.tif from here. Rename them as pothana.box and pothana.tif respectively. Also (you may want to) download the tiff images as test images.


Once you have a box file
We shall look at generation of good and huge box files in the next Part. Right now we will concentrate on understanding the system. Assume God, (read me) gives you a good box file that can be used for training. How do we generate the required TESSDATA files? Or, assume you need to train only for non-conjuncts. అ-హ, కా-హౌ। You have a sufficiently huge box file. What do you do next?

RUN
tesseract pothana.tif junk nobatch box.train
Note that the box filename must match the tif filename, including the path, or Tesseract won't find it. The output of this step is pothana.tr which contains the features of each character of the training page.
Error: You might get an error here
read_variables_file:Can't open ./tessdata/configs/box.trainCould not open file, nobatch
To counter this, You have to ensure that the tessdata folder has the config and tessconfig folders in it. See step 1 under TEST RUN for OCRing English text in Part-2.

RUN
mftraining pothana.tr
This will output two data files: inttemp, pffmtable.

cntraining pothana.tr
This will output the normproto data file.

RUN
unicharset_extractor pothana.box
This will generate the unicharset data file.


DATA DICTIONARIES

పిల్లవానికి తెలుఁగు చదవడం నేర్పుతున్నామంటే, వానికి కనీసం కొన్ని తెలుఁగు పదాలు వచ్చివుండాలికదా। ఉదాహరణకు వాడికి వత్తులు సరిగా రావనుకుందాం। మవత్తు, నవత్తు సరిగా గుర్తుపట్టలేడు। కానీ అమ్మ, నాన్న వంటి పదాలు చూసినప్పుడు, వాడు అమ-ఏదో వత్తు కాబట్టి అమ్మ అయ్యింటుంది అని అనుకుంటాడు। అలానే నాన అయితే నాన్న అయివుంటుంది అనుకుంటాడు। టెస్సుగానికి కూడా కొన్ని పదాలు ఇవ్వాళ్ట। తఱచూ వచ్చే పదాలు, మిగిలిన పదాలు।

Tesseract uses 3 dictionary files for each language. To make the DAWG dictionary files, you first need a wordlist for your language. The wordlist is formatted as a UTF-8 text file with one word per line. Split the wordlist into two sets: the frequent words, and the rest of the words, and then use wordlist2dawg to make the DAWG files:

RUN
wordlist2dawg frequent_words_list freq-dawg
wordlist2dawg words_list word-dawg

The third dictionary file is called user-words and is usually empty.

tel.Files
For now leave the DangAmbigs files as a blank file.

Rename the files you have as
tel.inttemp
tel.normproto
tel.pffmtable
tel.unicharset
tel.freq-dawg,
tel.word-dawg,
tel.user-words,
tel.DangAmbigs


Place them in the tessdata directory in the same directory as your tesseract.exe and the libtiff dlls.
* Alternately you can get the above data files as tel.tessdata.zip { from here }.


RUN
tesseract sample_telugu.tif output -l tel 
You should see the recognized telugu characters to sample_telugu.txt file.

Hurray!

Please try the above and ask me if you have any doubts.
+౯౧ ౯౫ ౫౦ ౧౭ ౦౪ ౭౧

Tesseract OCR for Telugu - Part 2

Teaching Tesseract

భువనేశ్వరి మనకు ఉత్తబుఱ్ఱనిచ్చి ఈ భూమండలం మీదుకు నెట్టింది అందులో మనం దొరికిన అడ్డమైన చెత్తా నింపాము। అది పవిత్రమని ఇది అపవిత్రమని, అది ఆశయమని ఈ ఆదర్శమని, ఇది మమదని అది పరదని। తెలుఁగునాట పుట్టాము కాబట్టి తెలుఁగు మమదని భావించి సుందరతెలుఁగు అక్షరాలు నింపాము అందులో – అలా మీరు ఈ టపా చదవగలుగుతున్నారు। అలానే గూగులేశ్వరి మనకు అందించిన ఈ టెస్సరాక్టు.exe అనే బుఱ్ఱకు మనము చుట్టూ సరుకులు జేర్చాలి, అప్పుడా బుఱ్ఱ ఉచ్చైశ్రవములా పరిగెట్టి తెలుఁగు చదవగలుగుతుంది। ఆ సరుకులనే TESSDATA అంటారు।


TESSDATA
ఇంగ్లీషు చదివే సామర్థ్యాన్ని ఇచ్చే సరుకులు
tessdata/
eng.freq-dawg,
eng.word-dawg,
eng.user-words,
eng.inttemp,
eng.normproto,
eng.pffmtable,
eng.unicharset,
eng.DangAmbigs
వీటిని మనం గూగులు కోడు నుండే దింపుకోవచ్చుఁ. tesseract-2.00.eng.tar.gz {from here}

మన ధ్యేయం ఇప్పుడు తెలుగు tessdata
tessdata/
tel.freq-dawg,
tel.word-dawg,
tel.user-words,
tel.inttemp,
tel.normproto,
tel.pffmtable,
tel.unicharset,
tel.DangAmbigs

"లెస్సగా" తయారు చేయడం.

TEST RUN for OCRing English text.
బళ్ళో చేర్చుకునెటప్పుడు ఎవరైనా ముందు వీడికి అస్సలు ఎంత వచ్చో తేల్చుకొని దానిని బట్టి పై తరగతిలో వేయడం జరుగుతుంది। అలానే ముందు అసలు ఇది ఆంగ్లాన్ని అర్థం చేసుకొనగలదనే నమ్మకాన్ని మీకు ఏర్పరచి అప్పుడు దీనికి మనము తెలుఁగు నేర్పుకోవడం చేస్తే ఒక పద్ధాతిగానుంటుంది।
ఇది చాలా తేలిక
1) Move the bin.dlg\..\tessdata folder to bin.dlg (the tessdata folder must be in the same place as the tesseract.exe)
2) Copy the downloaded tessdata\eng.* files to the bin.dlg\tessdata directory.
2) run from command line tesseract image.tif output


SAMPLE IMAGES
1) Sample images can be created using MS Paint, GIMP etc.
Write the required text on to a file, and save the image as a TIFF file.
In GIMP, Set
Image -> Mode -> Indexed -> Use black & White 1-bit pallete
and Save
image.tif Compression: CCITT Group 4 fax
Note: Compression reduces image size greatly, you may try with and without compression to test if the LIBTIFF dlls are getting linked properly.

2) You can use real world images, like scanned copies of newspaper clippings or books.
eg: - Sample here.

3) You will get your output to the output.txt file.



Once you are good with this, you can move to Part 3.

Tesseract OCR for Telugu - Part 1

OCR అంటే ఏమిటి?
Optical Character Recognition System అనగా, బొమ్మ రూపంలోనున్న అక్షరాలను గుర్తించడం।

ఉదాహరణకు [ఈ డబ్బాలోనున్న పాఠాన్ని] మీరు ఎంచుకొని దాన్ని కాపీ చేసి నోటుప్యాడో వరడో తెఱచి పేష్టు చేయండి। అక్కడ ఎంచక్కా అక్షరాలా కనిపిస్తుంది। అదే క్రింద బొమ్మలోనున్న పాఠాన్ని ఎంచుకొని-కాపీ చేయడానికి ప్రయత్నించండి అవ్వదు।




అలానే మన కొత్తపాళీ గారి బ్లాగులో తిలక్ అనే పాఠాన్ని వెదకాలనుకోండి శోధన పెట్టిలోనికి వెళ్ళి అక్కడ తిలక్ అని కొడితే అదే వెదికి పెడుతుంది। అదే పనిని మీరు ఏ పీడీఎఫ్ ప్రతిలోనో జేపెగ్ బొమ్మలోనే చేస్తే ప్రయోజనం వుండదు। ఉదాహరణకు మీరు గ్రేటాంధ్రా అనే గూడుకు విరాభిమాని అనుకోండి (మంచి వైద్యులను సంప్రదిస్తే ప్రయోజనం వుండవచ్చు), అందులో మీ అభిమాన తార రంగుల స్వాతమ్మ గుఱించి అచ్చుచేయఁబడ్డ వ్యాసాలను శోధించాలనుకోండి, వీలుపడదు, ఎందుకంటే సెలిబ్రిటీ గాసిప్ వ్రాసే వాడికి దాన్ని యూనీకోడులో వ్రాయలని తెలియకపోవడం సహజం కాబట్టి!
అందుకే మీరు కంప్యూటరీకరణ యొక్క పూర్తి సత్తాని ఆవిష్కరించదలచితే దాన్ని యూనీకోడులోనుంచాలి।
ఇంకో ఉదాహరణ – నన్నయ్యభట్టు భారతంలో సీసపద్యాలు ఎన్నున్నాయి అన్నది లెక్కవేయాలనుకోండి, మన దగ్గర దాని యూనీకోడు ప్రతి వుండడం వలన మనకోసమో కంప్యూటరీపనిని చిటికెలో చేసిపెట్టగలదు।


తెలుఁగుకు ఓసీయార్ వుందా?
ఆంగ్లానికి మంచి ఓసియారులు వున్నాయి, అంటే మీ దగ్గర బొమ్మగా మార్చబడ్డ ఆంగ్ల పుస్తకపుట ఒకటి వుందనుకోండి దాన్ని కంప్యూటరులో శోధించగల పాఠ్యముగా మార్చడానికి చాలా మంది పరికరాలు చేసియున్నారు। తెలుఁగుకి ఇంకా అటువంటి విజయవంతమైన నాణ్యమైన పరికరాలు లేవు। కాబట్టి వాటిని చేసి ఆవిష్కరించి, ఘనులయ్యే అవకాశం మనకే వుంది।


ఓసీయార్ కు కావలసినది యేమిటి?
ఓసీయార్ అంటే చిన్న పిల్లలకు భాష నేర్పడం వంటిది। అలా చాలామంది కంప్యూటర్-చిన్నపిల్లలకు ఆంగ్లం నేర్పారు, ఇక తెలుఁగు నేర్పడే తరువాయి। అయితే ఈ చిన్న పిల్లలు ఎక్కడ దొరుకుతారు వారికి నేర్పేటి పద్ధతి యేమిటి?
తెలుఁగు చదవచ్చిన వ్యక్తి కావాలంటే ముందు మనము దేఁవుఁడి దగ్గర నుండి పిల్లని అడగాలి। దానిచే మన అఆఇఈలు దిద్దించాలి। అలాంటి ఒక పిల్లని గూగులు వారు మనకు అందిస్తున్నారు, దాని పేరే టెస్సరాక్టు। దానిచేతనిప్పుడు తెలుఁగు అక్షరాలు దిద్దించాలి। ఎలాగో చూద్దాం పదండి।


టెస్సరాక్టుఁ బుఱ్ఱ గుఱించి (Tesseract Engine)
దీనిని C++ భాషలో వ్రాసినారు। కాబట్టి ఏ కంప్యూటరు మీదనైనా, తేలికగా పరుగెడుతుంది। దీనిని కంపైలు చేసుకోవడం కూడా సుళువే। ఈ బుఱ్ఱ(source code or .exe) మీకు మూఁడు విధాల లభ్యం అవుతుంది।

౧) మీరే ప్రోగ్రాములను కంపైలు చేసుకొని బిల్డు చేసుకోవడం. – Building from source code
౨) టెస్సరాక్టు గూడులో ఇవ్వబడిన exe వాడడం. కానీ ఇందులో కొన్ని సౌకర్యాలు* లేవు. – Get the windows exe from the website. (But this does not have Libtiff support)
౩) నేను ఆ సౌకర్యాలతో కంపైలు చేసిన exe వాడడం. – Use and exe generated with Libtiff support.

*సౌకర్యము = Libtiff for reading compressed tiff images.
** Linux/Unix వారు తమంత తామే తయారు చేసుకోవడం సర్వోత్తమం

Download
1) If you want to complie on your own (Linux, Windows) tesseract-2.04.tar.gz {from here}
2) If you want pre built (Windows) (Not recommended) tesseract-2.04.exe.tar.gz {from here}
3) Pre-built with Libtiff (Windows) tesseract_bin.zip or tesseract_bin.7z {from here}

Compiling S/W
+ If you want to complie on your own : VC++ (Windows) , gcc or equiv.(Linux)

LIBTIFF (For building your own tesseract.exe)
టెస్సరాక్టులో స్వతహాగా compressed images చదవగలిగే సామర్థ్యంలేదు. కాబట్టి libtiff అనే open source tiff library అవసరం వుంది.
Linux

లైనక్సు వాడువారు http://remotesensing.org/libtiff/ నుండి నేఱుగా source code దింపుకొని దానిని కంపైలు చేసుకొని, అక్కడి నుండి libraries, header files లను tesseract makefile కి అందించవచ్చుఁ
Windows
WinGNU32 వారు మంచిగా కంపైలు చేయబడ్డ libs, dlls, మఱియు .hలను రెడీమేడ్ గుడ్డల్లా అందిస్తున్నారు. http://gnuwin32.sourceforge.net/packages.html నుండి Libtiff, Jpeg, Zlib డైరక్టరీలను దింపుకోండి.

Self Compiling with LIBTIFF
1) Open the project in VC++ by opening the downloaded project files, tesseract.sln or .dsw or .vcproj ( VC may do some format conversion from previous VC versions, this does not affect the actual program in anyway)
2) When compiling by yourself using LIBTIFF capabilities, you need to add a preprocessor definition HAVE_LIBTIFF.
For this, in VC, go to
Project -> Properties (Alt F7) -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions
And add HAVE_LIBTIFF to the existing Preprocessor Definitions

3) Build Solution (F7).
You will have an exe that is sure to run on your system. This is found in the directory tesseract\bin.dbg . You will also have other exes that are used for training.

4) To get LIBTIFF capability,
While running the newly generated tesseract.exe file, ensure that you add the downloaded directory GnuWin32\bin to the path.
OR
Copy the libtiff*.dll, zlib*.dll, jpeg*.dll to the same folder as the exe.


Once you have the exe files, you can proceed to Part-2.

Tesseract OCR - Getting Started

ఇది డెవలప్పర్లకోసం వ్రాయబడినది. అంటే OCRకి తెలుఁగు నేర్పదలచినవారి కోసం. ఒక సారి తెలుగు నేర్పిన తరువాత, దానిని వాడడం గుఱించి సమయం వచ్చినప్పుడు ఇంకో టపా వేస్తాము.

TESSERACT ENGINE
టెస్సరాక్టుకు ట్రెయినింగు ఇవ్వడానికి కావలసిన ప్రోగ్రాము మూడు విధాల చేయవచ్చు,
౧) మీరే ప్రోగ్రాములను కంపైలు చేసుకొని బిల్డు చేసుకోవడం.
౨) టెస్సరాక్టు గూడులో ఇవ్వబడిన exe వాడడం. కానీ ఇందులో కొన్ని సౌకర్యాలు* లేవు.
౩) నేను ఆ సౌకర్యాలతో కంపైలు చేసిన exe వాడడం.
*సౌకర్యము = Libtiff for reading compressed tiff images.
** ౨,౩ windows వారికే

Download
1) If you want to complie on your own (Linux, Windows)
tesseract-2.04.tar.gz {from here}

2) If you want pre built (Windows) (Not recommended)
tesseract-2.04.exe.tar.gz {from here}

3) Pre-built with Libtiff (Windows)
tesseract_bin.zip {from here}

SOPPORTING S/W
+ If you want to complie on your own : VC++ (Windows) , gcc or equiv.(Linux)
+ For printing any formatted telugu unicode text to a tiff file : MS Word (Windows), idonno (Linux)
+ For unzipping tar, gz, zip archive : 7-zip or equiv.


LIBTIFF (For building your own tesseract.exe)
టెస్సరాక్టులో స్వతహాగా compressed images చదవగలిగే సామర్థ్యంలేదు. కాబట్టి libtiff అనే open source tiff library అవసరం వుంది.
Linux
లైనక్సు వాడువారు http://remotesensing.org/libtiff/ నుండి నేఱుగా source code దింపుకొని దానిని కంపైలు చేసుకొని, అక్కడి నుండి libraries, header files లను tesseract makefile కి అందించవచ్చుఁ
Windows
WinGNU32 వారు మంచిగా కంపైలు చేయబడ్డ libs, dlls, మఱియు .hలను రెడీమేడ్ డస్సుల్లా అందిస్తున్నారు. http://gnuwin32.sourceforge.net/packages.html నుండి Litiff, Jpeg, Zlib డైరక్టరీలను దింపుకోండి.

TESSDATA
tesseract అనేది cpu అయితే, దానికి కావలసిన memory యే tessdata.
ఒక భషలో training ఇవ్వడమంటేనే, ఆ భాషలో ఈ tessdataని తయారు చేయడమన్నమట.
ఉదా -
మీకు ఒక చిన్న పిల్లాడు వున్నాడనుకుందాం. వాడికి భగవంతుడు బుఱ్ఱనిచ్చాడు. వాడికి మనము తెలుఁగు నేర్పితే తెలుగు నేర్చుకుంటాడు, ఆంగ్లం పేరుమీద తెగులిష్ నేర్పితే తెగులిష్ నేర్చుకుంటాడు. అలాఁ...
ఇక్కడ మనకు hp భగవంతుడు, google మంత్రసాని; tessearct.exe మనకున్న పిల్లవాడు. వాడికి tessdata రూపంలో తెలుగు చదివే సార్థ్యాన్ని అందించాలి.

ఇంగ్లీషు చదివే సామర్థ్యాన్ని మనం గూగులు కోడు నుండే దింపుకోవచ్చుఁ.
* tessdat/eng.freq-dawg, eng.word-dawg, eng.user-words, eng.inttemp, eng.normproto, eng.pffmtable, eng.unicharset, eng.DangAmbigs
tesseract-2.00.eng.tar.gz {from here}

మన ధ్యేయం ఇప్పుడు తెలుగు tessdata
* tessdat/tel.freq-dawg, tel.word-dawg, tel.user-words, tel.inttemp, tel.normproto, tel.pffmtable, tel.unicharset, tel.DangAmbigs

"మంచిగా" తయారు చేయడం.

మంచి tessdata తయారు చేయడం ఒక iterative process.
నేను మొదటి వాడిగా చేసాను కాబట్టి, మొదలు నేను ఆంగ్లమో కన్నడమో వాడి అక్షరాలను గుర్తించమన్నాను. (tessdata/eng.* or tessdata/kan.*)
అలా ఆంగ్లం వాడి నేను tessdata కి కొంత నేర్పడం జరిగింది, దాని ఫలితమే
tel.tessdata.zip {from here}

నేను తయారు చేసింది, సంయుక్త అక్షరాలను చదవలేదు. కాబట్టి మనము ఇంకా మంచివి తాయరు చేసుకోవలసివుంది.

ప్రస్తుతానికి ఇవన్నీ మీఱు డౌనులోడు చేసుకొనవలసివున్నవి.
తరువాతి టపాలో
మీరు సొంతంగా tesseract.exe ని ఎలా తయారుచేసుకోగలరు అన్నది చూద్దాం.
ఆ పై టపాలో
tesseract.exe వాడి tessdata ని ఎలా తయారు చేయవచ్చు అన్నది చూద్దాం.
ఆ తరువాతి టపాలో
మంచి tessdata ని ఎలా తయారు చేయవచ్చు అన్నది చూద్దాం. దీనికి రెండు విధానాలు వున్నాయి. వాటి మంచిచెడులు చూద్దాం.