導航:首頁 > 操作系統 > androidocr開源

androidocr開源

發布時間:2023-02-03 18:01:27

❶ 如何通過Tesseract開源OCR引擎創建android OCR應用

Tesseract是遵守Apache License 2.0協議的開源OCR引擎。

如何在Android平台編譯Tesseract,以及如何快速創建一個簡單的OCR應用。

Tesseract Android Tools

要編譯Android平台的Tesseract,需要使用Google提供的tesseract-android-tools。

代碼獲取方式:


打開README,在命令行工具中執行下面的步驟:

  1. cd<project-directory>

  2. curl-O

  3. curl-O

  4. tar-zxvftesseract-ocr-3.02.02.tar.gz

  5. tar-zxvfleptonica-1.69.tar.gz

  6. rm-ftesseract-ocr-3.02.02.tar.gz

  7. rm-fleptonica-1.69.tar.gz

  8. mvtesseract-3.02.02jni/com_googlecode_tesseract_android/src

  9. mvleptonica-1.69jni/com_googlecode_leptonica_android/src

  10. ndk-build-j8

  11. androipdateproject--target1--path.

  12. 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:

  1. publicclassTessOCR{

  2. privateTessBaseAPImTess;

  3. publicTessOCR(){

  4. //TODOAuto-generatedconstructorstub

  5. mTess=newTessBaseAPI();

  6. Stringdatapath=Environment.getExternalStorageDirectory()+"/tesseract/";

  7. Stringlanguage="eng";

  8. Filedir=newFile(datapath+"tessdata/");

  9. if(!dir.exists())

  10. dir.mkdirs();

  11. mTess.init(datapath,language);

  12. }

  13. publicStringgetOCRResult(Bitmapbitmap){

  14. mTess.setImage(bitmap);

  15. Stringresult=mTess.getUTF8Text();

  16. returnresult;

  17. }

  18. publicvoidonDestroy(){

  19. if(mTess!=null)

  20. mTess.end();

  21. }

  22. }

構造函數中需要在存儲卡上創建一個目錄tessdata,如果不創建程序運行就會出錯。因為源碼中會檢測這個目錄,不存在就拋出異常:

  1. publicbooleaninit(Stringdatapath,Stringlanguage){

  2. if(datapath==null){

  3. ("Datapathmustnotbenull!");

  4. }

  5. if(!datapath.endsWith(File.separator)){

  6. datapath+=File.separator;

  7. }

  8. Filetessdata=newFile(datapath+"tessdata");

  9. if(!tessdata.exists()||!tessdata.isDirectory()){

  10. ("!");

  11. }

  12. returnnativeInit(datapath,language);

  13. }

就這么簡單。現在通過三種方式獲取圖片做OCR:

在圖庫中選取一張圖,選擇發送或者分享,選擇OCR應用

在AndroidManifest.xml中加入IntentFilter,讓OCR應用出現在圖庫的分享列表中:

  1. <intent-filter>

  2. <actionandroid:name="android.intent.action.SEND"/>

  3. <categoryandroid:name="android.intent.category.DEFAULT"/>

  4. <dataandroid:mimeType="text/plain"/>

  5. <dataandroid:mimeType="image/*"/>

  6. </intent-filter>

獲得URI之後,對URI解碼,獲取bitmap:

  1. if(Intent.ACTION_SEND.equals(intent.getAction())){

  2. Uriuri=(Uri)intent.getParcelableExtra(Intent.EXTRA_STREAM);

  3. uriOCR(uri);

  4. }

  5. privatevoiriOCR(Uriuri){

  6. if(uri!=null){

  7. InputStreamis=null;

  8. try{

  9. is=getContentResolver().openInputStream(uri);

  10. Bitmapbitmap=BitmapFactory.decodeStream(is);

  11. mImage.setImageBitmap(bitmap);

  12. doOCR(bitmap);

  13. }catch(FileNotFoundExceptione){

  14. //TODOAuto-generatedcatchblock

  15. e.printStackTrace();

  16. }finally{

  17. if(is!=null){

  18. try{

  19. is.close();

  20. }catch(IOExceptione){

  21. //TODOAuto-generatedcatchblock

  22. e.printStackTrace();

  23. }

  24. }

  25. }

  26. }

  27. }

啟動OCR應用,從圖庫中選擇一張圖做OCR

發送Intent調用圖庫,在onActivityResult中獲取返回的URI做OCR:

  1. Intentintent=newIntent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

  2. startActivityForResult(intent,REQUEST_PICK_PHOTO);

啟動OCR應用,拍照之後做OCR

為了獲取高質量的圖片,在Intent中加入圖片路徑。返回之後就可以直接使用這個圖片路徑解碼:

  1. (){

  2. IntenttakePictureIntent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);

  3. //Ensurethatthere'

  4. if(takePictureIntent.resolveActivity(getPackageManager())!=null){

  5. //

  6. FilephotoFile=null;

  7. try{

  8. photoFile=createImageFile();

  9. }catch(IOExceptionex){

  10. //

  11. }

  12. //

  13. if(photoFile!=null){

  14. takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,

  15. Uri.fromFile(photoFile));

  16. startActivityForResult(takePictureIntent,REQUEST_TAKE_PHOTO);

  17. }

  18. }

  19. }

不要忘記下載語言包,並push到存儲卡的tessdata目錄下。

❷ 如何通過Tesseract開源OCR引擎創建Android OCR應用

要編譯Android平台的Tesseract,需要使用Google提供的tesseract-android-tools。

代碼獲取方式:

git clone https //code google com/p/tesseract-android-tools/

打開README,在命令行工具中執行下面的步驟:

cd <project-directory>
curl -O https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz
curl -O http://leptonica.googlecode.com/files/leptonica-1.69.tar.gz
tar -zxvf tesseract-ocr-3.02.02.tar.gz
tar -zxvf leptonica-1.69.tar.gz
rm -f tesseract-ocr-3.02.02.tar.gz
rm -f leptonica-1.69.tar.gz
mv tesseract-3.02.02 jni/com_googlecode_tesseract_android/src
mv leptonica-1.69 jni/com_googlecode_leptonica_android/src
ndk-build -j8
android update project --target 1 --path .
ant debug (release)

注意:如果在使用NDK r9,編譯的時候會出現錯誤:

format not a string literal and no format arguments [-Werror=format-security]

解決的方法就是在Application.mk中加入一行:

APP_CFLAGS += -Wno-error=format-security

編譯之後會生成class.jar和一些*.so。

閱讀全文

與androidocr開源相關的資料

熱點內容
伺服器換主機需要什麼系統 瀏覽:749
linux監控jvm內存 瀏覽:79
空調壓縮機自製工具 瀏覽:518
命令行控制路由器 瀏覽:957
逆拓撲排序演算法描述 瀏覽:588
如何遠程鏈接到linux伺服器地址 瀏覽:630
抹茶app支付方式怎麼選 瀏覽:556
獵人寶寶攻擊命令 瀏覽:159
操作系統是編譯原理嗎 瀏覽:646
雲伺服器遷移後 瀏覽:260
excel格式轉換pdf 瀏覽:987
登錄器一般存在哪個文件夾 瀏覽:535
中興光貓機器碼演算法 瀏覽:330
android響應時間測試 瀏覽:940
java編程思想第四版答案 瀏覽:888
如何對nbt編程 瀏覽:885
mscpdf 瀏覽:948
文件夾d盤突然0位元組可用 瀏覽:272
吃火腿腸的解壓場面 瀏覽:339
衛星鍋加密教程 瀏覽:792