tesseractocr源碼
⑴ android怎麼調用tesseract實現OCR功能
android調用tesseract實現OCR功能的方法為:
一、下載&編譯
1、首先下載tess-two
git clone git://github.com/rmtheis/tess-two tess
2、進入 tess目錄,裡面有三個項目,只需要進入tess-two就可以直接編譯了
cd tess/tess-two
ndk-build
3、編譯好後,將src下的兩個包以及libs導入到自己的項目就可以用
二、使用
tesseract 使用了 leptonica的圖像處理庫,對於圖像處理還是比較強大的
Android官方地址:tesseract-android-tools
但它必須要一個匹配庫,即tessdata,我們可以從官方拷貝,在前面git的項目裡面tesseract源碼目錄有現成的tessdata可以用,對於中文,google code上也有下載,當然也可以自己訓練不同語言的tessdata。
包leptonica的類我們不必使用,只要使用tess包的類就行了
TessBaseAPI
使用時,首先創建TessBaseAPI對象
代碼為:
TessBaseAPI baseApi=new TessBaseAPI();
//初始化tess
//android下面,tessdata肯定得放到sd卡里了
//如果tessdata這個目錄放在sd卡的根目錄
//那麼path直接傳入sd卡的目錄
//eng就是英文,關於語言,按ISO 639-3標準的代碼就行,具體請移步wiki
baseApi.init("tessdata文件夾的父級目錄", "eng");
//options是為了縮放圖片,這個酌情縮放,圖片小的話可以不縮放
BitmapFactory.Options options=new BitmapFactory.Options();
//縮小為原來的1/2
options.inSampleSize=2;
//bitmap,我這里是以流的形式,只要能形成Bitmap就行
Bitmap bitmap = BitmapFactory.decodeStream(instream,null,options);
instream.close();
//如果圖片有Alpha值,那麼最好設置一下
/*ExifInterface exif = new ExifInterface(filename)
int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int rotate = 0;
switch (exifOrientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
}
if (rotate != 0) {
// Getting width & height of the given image.
int w = bitmap.getWidth();
int h = bitmap.getHeight();
// Setting pre rotate
Matrix mtx = new Matrix();
mtx.preRotate(rotate);
// Rotating Bitmap
bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
// tesseract req. ARGB_8888
bitmap = bitmap.(Bitmap.Config.ARGB_8888, true);
} */
//設置要ocr的圖片bitmap
baseApi.setImage(bitmap);
//根據Init的語言,獲得ocr後的字元串
String text= baseApi.getUTF8Text();
//釋放bitmap
baseApi.clear();
//如果連續ocr多張圖片,這個end可以不調用,但每次ocr之後,必須調用clear來對bitmap進行釋放
//釋放native內存
baseApi.end();
///////////////////////////其它方法//////////////////////////////////
//獲取字元邊框
Pixa pixa= baseApi.getCharacters();
//同上,這個是整段文字的邊框
baseApi.getRegions();
//同上,只不過這里是條線
baseApi.getTextlines();
//剩下的自己測試吧。
//轉為rect數組 ,之後,可以很方便的在圖片上框出方框
//怎麼框由你
ArrayList<Rect> rects=pixa.getBoxRects();
⑵ 如何在windows上編譯Tesseract OCR
獲取Tesseract源碼的方式有很多。可以直接從repo獲取,也可以下載壓縮包。不過編譯的時候往往也會出現各種奇怪的問題。這里介紹如何簡單的配置和編譯源碼。
編譯Tesseract
下載
Windows installer of tesseract-ocr 3.02.02
安裝
安裝過程中勾選Tesseract development files:
編譯
在安裝目錄中找到vs2008到工程目錄:
找到所有編譯相關的庫:
打開Visual Studio 2008(沒有的可以去官網下載express版本),導入工程編譯。最後生成DEBUG和RELEASE兩個版本的DLL:libtesseract302d.dll ,libtesseract302.dll
在README中注意這段話:
Dependencies and Licenses
=========================
Leptonica is required. (www.leptonica.com). Tesseract no longer compiles
without Leptonica.
Libtiff is no longer required as a direct dependency.
Tesseract依賴Leptonica庫,所以再看下Leptonica是怎麼編譯的。
編譯Leptonica
Leptonica是C語言編寫的一個圖像處理庫,支持JPEG, PNG, TIFF,GIF。
編譯
把三個包解壓,並按照下面的結構組建編譯環境:
BuildFolder\
include\
leptonica-1.68\
lib\
BuildFolder\leptonica-1.68 contents:
config\ Not used for Windows builds
prog\ Regression tests, examples, utilities
src\ Source files for liblept
vs2008\ Visual Studio 2008 specific files
DLL Debug\ liblept DLL Debug build output
DLL Release\ liblept DLL Release build output
LIB Debug\ liblept LIB Debug build output
LIB Release\ liblept LIB Release build output
prog_projects\ Projects for prog programs
ioformats_reg\ Sample project for prog\ioformats_reg.exe
DLL Debug\ DLL Debug build output for sample project
DLL Release\ DLL Release build output for sample project
LIB Debug\ LIB Debug build output for sample project
LIB Release\ LIB Release build output for sample project
ioformats_reg.vcproj The ioformats_reg project file
leptonica.sln The Leptonica solution file
leptonica.vcproj The Leptonica project file
打開Visual Studio 2008,導入工程編譯。最後生成DEBUG和RELEASE兩個版本的DLL:liblept168d.dll,liblept168.dll
⑶ tesseract-ocr源文件怎麼用
如果你是終端用戶請下載exe安裝包,
這個是源碼包是針對開次開發或DIY用戶使用的
如果你想自己編程調用請直接看api目錄的api.cpp文件即可
這個文件是調用入口,裡面有詳細的注釋,只不過是英文的
⑷ 如何通過Tesseract開源OCR引擎創建Android OCR應用
1要編譯Android平台的Tesseract,需要使用Google提供的tesseract-android-tools。
代碼獲取方式:
⑸ tesseract-ocr參數都有哪些
如果你是終端用戶請下載exe安裝包,這個是源碼包是針對開次開發或DIY用戶使用的如果你想自己編程調用請直接看api目錄的api.cpp文件即可這個文件是調用入口,裡面有詳細的注釋,只不過是英文的
⑹ 如何通過Tesseract開源OCR引擎創建Android OCR應用
Tesseract是遵守Apache License 2.0協議的開源OCR引擎。
如何在Android平台編譯Tesseract,以及如何快速創建一個簡單的OCR應用。
Tesseract Android Tools
要編譯Android平台的Tesseract,需要使用Google提供的tesseract-android-tools。
代碼獲取方式:
打開README,在命令行工具中執行下面的步驟:
cd<project-directory>
curl-O
curl-O
tar-zxvftesseract-ocr-3.02.02.tar.gz
tar-zxvfleptonica-1.69.tar.gz
rm-ftesseract-ocr-3.02.02.tar.gz
rm-fleptonica-1.69.tar.gz
mvtesseract-3.02.02jni/com_googlecode_tesseract_android/src
mvleptonica-1.69jni/com_googlecode_leptonica_android/src
ndk-build-j8
androipdateproject--target1--path.
antdebug(release)
注意:如果在使用NDK r9,編譯的時候會出現錯誤:
[-Werror=format-security]
解決的方法就是在Application.mk中加入一行:
APP_CFLAGS+=-Wno-error=format-security
編譯之後會生成class.jar和一些*.so。
Android OCR Application
創建一個Android應用,把生成的jar和so導入進來。
創建TessOCR:
publicclassTessOCR{
privateTessBaseAPImTess;
publicTessOCR(){
//TODOAuto-generatedconstructorstub
mTess=newTessBaseAPI();
Stringdatapath=Environment.getExternalStorageDirectory()+"/tesseract/";
Stringlanguage="eng";
Filedir=newFile(datapath+"tessdata/");
if(!dir.exists())
dir.mkdirs();
mTess.init(datapath,language);
}
publicStringgetOCRResult(Bitmapbitmap){
mTess.setImage(bitmap);
Stringresult=mTess.getUTF8Text();
returnresult;
}
publicvoidonDestroy(){
if(mTess!=null)
mTess.end();
}
}
構造函數中需要在存儲卡上創建一個目錄tessdata,如果不創建程序運行就會出錯。因為源碼中會檢測這個目錄,不存在就拋出異常:
publicbooleaninit(Stringdatapath,Stringlanguage){
if(datapath==null){
("Datapathmustnotbenull!");
}
if(!datapath.endsWith(File.separator)){
datapath+=File.separator;
}
Filetessdata=newFile(datapath+"tessdata");
if(!tessdata.exists()||!tessdata.isDirectory()){
("!");
}
returnnativeInit(datapath,language);
}
就這么簡單。現在通過三種方式獲取圖片做OCR:
在圖庫中選取一張圖,選擇發送或者分享,選擇OCR應用
在AndroidManifest.xml中加入IntentFilter,讓OCR應用出現在圖庫的分享列表中:
<intent-filter>
<actionandroid:name="android.intent.action.SEND"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
<dataandroid:mimeType="text/plain"/>
<dataandroid:mimeType="image/*"/>
</intent-filter>
獲得URI之後,對URI解碼,獲取bitmap:
if(Intent.ACTION_SEND.equals(intent.getAction())){
Uriuri=(Uri)intent.getParcelableExtra(Intent.EXTRA_STREAM);
uriOCR(uri);
}
privatevoiriOCR(Uriuri){
if(uri!=null){
InputStreamis=null;
try{
is=getContentResolver().openInputStream(uri);
Bitmapbitmap=BitmapFactory.decodeStream(is);
mImage.setImageBitmap(bitmap);
doOCR(bitmap);
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
if(is!=null){
try{
is.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
}
啟動OCR應用,從圖庫中選擇一張圖做OCR
發送Intent調用圖庫,在onActivityResult中獲取返回的URI做OCR:
Intentintent=newIntent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent,REQUEST_PICK_PHOTO);
啟動OCR應用,拍照之後做OCR
為了獲取高質量的圖片,在Intent中加入圖片路徑。返回之後就可以直接使用這個圖片路徑解碼:
(){
IntenttakePictureIntent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);
//Ensurethatthere'
if(takePictureIntent.resolveActivity(getPackageManager())!=null){
//
FilephotoFile=null;
try{
photoFile=createImageFile();
}catch(IOExceptionex){
//
}
//
if(photoFile!=null){
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent,REQUEST_TAKE_PHOTO);
}
}
}
不要忘記下載語言包,並push到存儲卡的tessdata目錄下。
⑺ 如何在windows上編譯Tesseract OCR
so是linux系統的動態鏈接庫,你需要把源碼拿到Windows裡面用vc 或MinGW等編譯工具 重新編譯一下。windows的動態鏈接庫是dll文件。
⑻ 如何在windows上編譯Tesseract OCR
安裝
安裝過程中勾選Tesseract development files:
編譯
在安裝目錄中找到vs2008到工程目錄:
找到所有編譯相關的庫:
打開Visual Studio 2008(沒有的可以去官網下載express版本),導入工程編譯。最後生成DEBUG和RELEASE兩個版本的DLL:libtesseract302d.dll ,libtesseract302.dll
在README中注意這段話:
?
1
2
3
4
5
6
Dependencies and Licenses
=========================
Leptonica is required. (www.leptonica.com). Tesseract no longer compiles
without Leptonica.
Libtiff is no longer required as a direct dependency.
Tesseract依賴Leptonica庫,所以再看下Leptonica是怎麼編譯的。
編譯Leptonica
Leptonica是C語言編寫的一個圖像處理庫,支持JPEG, PNG, TIFF,GIF。
下載
源碼:leptonica-1.68.tar.gz
VS工程:vs2008-1.68.zip
相關頭文件和庫:leptonica-1.68-win32-lib-include-dirs.zip
編譯
把三個包解壓,並按照下面的結構組建編譯環境:
?
1
2
3
4
5
6
7
BuildFolder\
include\
leptonica-1.68\
lib\
BuildFolder\leptonica-1.68 contents:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
config\ Not used for Windows builds
prog\ Regression tests, examples, utilities
src\ Source files for liblept
vs2008\ Visual Studio 2008 specific files
DLL Debug\ liblept DLL Debug build output
DLL Release\ liblept DLL Release build output
LIB Debug\ liblept LIB Debug build output
LIB Release\ liblept LIB Release build output
prog_projects\ Projects for prog programs
ioformats_reg\ Sample project for prog\ioformats_reg.exe
DLL Debug\ DLL Debug build output for sample project
DLL Release\ DLL Release build output for sample project
LIB Debug\ LIB Debug build output for sample project
LIB Release\ LIB Release build output for sample project
ioformats_reg.vcproj The ioformats_reg project file
leptonica.sln The Leptonica solution file
leptonica.vcproj The Leptonica project file
打開Visual Studio 2008,導入工程編譯。最後生成DEBUG和RELEASE兩個版本的DLL:liblept168d.dll,liblept168.dll
⑼ 關於有誰用過tesseract-ocr開源嗎
Tesseract是圖盲,默認情況下只能看得懂未壓縮的TIFF圖像,如果直接用tesseract處理其它格式的圖片,會報錯如下:_to_image_type:Error:Unrecognizedimagetype:code.jpgIMAGE::read_header:Error:Can』treadthisimagetype:code.jpgtesseract:Error:Readoffilefailed:code.jpg所以需要用ImageMagick來轉換圖片格式,ImageMagick(TM)是一個免費的創建、編輯、合成圖片的軟體。它可以讀取、轉換、寫入多種格式的圖片。圖片切割、顏色替換、各種效果的應用,圖片的旋轉、組合,文本,直線,多邊形,橢圓,曲線,附加到圖片伸展旋轉。ImageMagick是免費軟體:全部源碼開放,可以自由使用,復制,修改,發布。它遵守GPL許可協議。它可以運行於大多數的操作系統。ImageMagick的大多數功能的使用都來源於命令行工具。通常來說,它可以支持以下程序語言:Perl,C,C++,Python,PHP,Ruby,Java;現成的ImageMagick介面(PerlMagick,Magick++,PythonMagick,MagickWandforPHP,RubyMagick,andJMagick)是可利用的。這使得自動的動態的修改創建圖片變為可能。ImageMagick支持至少90種圖片格式:A,ART,AVI,AVS,B,BIE,BMP,BMP2,BMP3,C,CACHE,CAPTION,CIN,CIP,CLIP,CLIPBOARD,CMYK,CMYKA,CUR,CUT,DCM,DCX,DNG,DOT,DPS,DPX,EMF,EPDF,EPI,EPS,EPS2,EPS3,EPSF,EPSI,EPT,EPT2,EPT3,FAX,FITS,FPX,FRACTAL,G,G3,GIF,GIF87,GRADIENT,GRAY,HDF,HISTOGRAM,HTM,HTML,ICB,ICO,ICON,JBG,JBIG,JNG,JP2,JPC,JPEG,JPG,JPX,K,LABEL,M,M2V,MAP,MAT,MATTE,MIFF,MNG,MONO,MPC,MPEG,MPG,MSL,MTV,MVG,NULL,O,OTB,P7,PAL,PALM,PATTERN,PBM,PCD,PCDS,PCL,PCT,PCX,PDB,PDF,PFA,PFB,PGM,PGX,PICON,PICT,PIX,PJPEG,PLASMA,PNG,PNG24,PNG32,PNG8,PNM,PPM,PREVIEW,PS,PS2,PS3,PSD,PTIF,PWP,R,RAS,RGB,RGBA,RGBO,RLA,RLE,SCR,SCT,SFW,SGI,SHTML,STEGANO,SUN,SVG,SVGZ,TEXT,TGA,TIF,TIFF,TILE,TIM,TTC,TTF,TXT,UIL,UYVY,VDA,VICAR,VID,VIFF,VST,WBMP,WMF,WMFWIN32,WMZ,WPG,X,XBM,XC,XCF,XPM,XV,XWD,Y,YCbCr,YCbCrA,YUV,ImageMagick.NET的相關項目:UseMagickNettoconvert,compose,andeditimagesfromWindows.NET.ImageMagickAppisa.NETapplicationwritteninC#ormatstodifferentformats.假設需要識別的圖片驗證碼為code.jpg,需要做的只有兩步:d:\ImageMagick\convert.exe-compressnone-depth8-alphaoff./code.gif./code.tifD:\\tesseract\\tesseract.exe./code.tif./result結果就在文本文件./result.txt裡面了,tesseract會自動地在./result後面添加上後綴名.txt。然後再對兩個命令做點解釋。convert.exe:ImageMagick套件的一部分,負責圖片格式轉換,各個參數的意義如下:-compressnone:轉換後的圖片不要壓縮,如果沒有加這一項,後續tesseract處理的時候會報錯:read_tif_image:Error:Illegalimageformat:Compression-depth8:設置轉換後圖像的色深為8位,也就是bpp為8。如果沒有此參數,後果如下:_legal_image_size:Error:Only1,2,4,5,6,8bpparesupported:16Segmentationfault-alphaoff:在轉換後的圖像中不要添加alpha圖層。如果沒有此參數,後果同上。緊跟著就是待轉換的圖片的文件名,最後是轉換後的圖片的文件名。