天天看點

Ocr 圖文識别技術——基于百度雲OCR技術學習與總結

                                                           Ocr 圖文識别技術——基于百度雲OCR技術學習與總結

1.百度智能雲 控制台  https://console.bce.baidu.com/ai/?fromai=1#/ai/ocr/overview/index  建立應用,生成API Key,Secret Key

Ocr 圖文識别技術——基于百度雲OCR技術學習與總結

2.在應用詳情頁面下載下傳對應應用的授權檔案

Ocr 圖文識别技術——基于百度雲OCR技術學習與總結
Ocr 圖文識别技術——基于百度雲OCR技術學習與總結

3.百度智能雲   Android-SDK文檔連結:https://cloud.baidu.com/doc/OCR/s/fjwvxzeiy

4.SDK下載下傳位址:http://ai.baidu.com/sdk/#ocr

Ocr 圖文識别技術——基于百度雲OCR技術學習與總結
Ocr 圖文識别技術——基于百度雲OCR技術學習與總結

下面我跟大家講一下開發步驟。

1.下載下傳sdk

2.依賴sdk以及armeabi到lib目錄下

Ocr 圖文識别技術——基于百度雲OCR技術學習與總結

3.下載下傳的sdk裡面有一個ocr-ui model,如果需要的話,可以作為model到項目中

4.清單檔案添權重限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
           

5.Proguard配置:app——proguard-rules.pro

Ocr 圖文識别技術——基于百度雲OCR技術學習與總結
-keep class com.baidu.ocr.sdk.**{*;}
-dontwarn com.baidu.ocr.**
           

6.代碼中:初始化OCR單例:

Ocr 圖文識别技術——基于百度雲OCR技術學習與總結
OCR.getInstance().initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
    @Override
    public void onResult(AccessToken result) {
        // 調用成功,傳回AccessToken對象
        String token = result.getAccessToken();
    }
    @Override
    public void onError(OCRError error) {
        // 調用失敗,傳回OCRError子類SDKError對象
    }
}, getApplicationContext(), "您的應用AK", "您的應用SK");
           

7.功能調用以及回調事件:

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.tv_car://車牌識别
            Intent intent = new Intent(MainActivity.this, CameraActivity.class);
            intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intent.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intent, REQUEST_CODE_LICENSE_PLATE);
            break;
        case R.id.tv_company://營業執照識别
            Intent intentCompany = new Intent(MainActivity.this, CameraActivity.class);
            intentCompany.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentCompany.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentCompany, REQUEST_CODE_BUSINESS_LICENSE);
            break;
        case R.id.general_basic://通用文字識别
            Intent intentGener = new Intent(MainActivity.this, CameraActivity.class);
            intentGener.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentGener.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentGener, REQUEST_CODE_GENERAL_BASIC);
            break;
        case R.id.accurate_basic://通用文字識别(高精度版)
            Intent intentAccur = new Intent(MainActivity.this, CameraActivity.class);
            intentAccur.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentAccur.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentAccur, REQUEST_CODE_GENERAL_ENHANCED);
            break;
        case R.id.general_location://通用文字識别(含位置資訊版)
            Intent intentGenLoca = new Intent(MainActivity.this, CameraActivity.class);
            intentGenLoca.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentGenLoca.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentGenLoca, REQUEST_CODE_GENERAL);
            break;
        case R.id.accurate_location://通用文字識别(高精度含位置資訊版)
            Intent intentAccuLoca = new Intent(MainActivity.this, CameraActivity.class);
            intentAccuLoca.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentAccuLoca.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentAccuLoca, REQUEST_CODE_ACCURATE);
            break;
        case R.id.general_enhance://通用文字識别(含生僻字版)
            Intent intentEnhance = new Intent(MainActivity.this, CameraActivity.class);
            intentEnhance.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentEnhance.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentEnhance, REQUEST_CODE_GENERAL_ENHANCED);
            break;
        case R.id.general_webimage://網絡圖檔文字識别
            Intent intentWeb = new Intent(MainActivity.this, CameraActivity.class);
            intentWeb.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentWeb.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentWeb, REQUEST_CODE_GENERAL_WEBIMAGE);
            break;
        case R.id.idcard://身份證識别
            Intent intentIdCard = new Intent(MainActivity.this, IDCardActivity.class);
            startActivity(intentIdCard);
            break;
        case R.id.bankcard://銀行卡識别
            Intent intentBank = new Intent(MainActivity.this, CameraActivity.class);
            intentBank.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentBank.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_BANK_CARD);
            startActivityForResult(intentBank, REQUEST_CODE_BANKCARD);
            break;
        case R.id.driving_license://駕駛證識别
            Intent intentDirver = new Intent(MainActivity.this, CameraActivity.class);
            intentDirver.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentDirver.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentDirver, REQUEST_CODE_VEHICLE_LICENSE);
            break;
        case R.id.vehicle_license://行駛證識别
            Intent intentVehicle = new Intent(MainActivity.this, CameraActivity.class);
            intentVehicle.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentVehicle.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentVehicle, REQUEST_CODE_DRIVING_LICENSE);
            break;
        case R.id.receipt://通用票據識别
            Intent intentReceipt = new Intent(MainActivity.this, CameraActivity.class);
            intentReceipt.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentReceipt.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentReceipt, REQUEST_CODE_RECEIPT);
            break;
        case R.id.passport://護照識别
            Intent intentPassport = new Intent(MainActivity.this, CameraActivity.class);
            intentPassport.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentPassport.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_PASSPORT);
            startActivityForResult(intentPassport, REQUEST_CODE_PASSPORT);
            break;
        case R.id.numbers://數字識别
            Intent intentNum = new Intent(MainActivity.this, CameraActivity.class);
            intentNum.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentNum.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentNum, REQUEST_CODE_NUMBERS);
            break;
        case R.id.qrcode://二維碼識别
            Intent intentCode = new Intent(MainActivity.this, CameraActivity.class);
            intentCode.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentCode.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentCode, REQUEST_CODE_QRCODE);
            break;
        case R.id.business_card://名片識别
            Intent intentBusiness = new Intent(MainActivity.this, CameraActivity.class);
            intentBusiness.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentBusiness.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentBusiness, REQUEST_CODE_BUSINESSCARD);
            break;
        case R.id.handwritting://手寫識别
            Intent intentHandwrite = new Intent(MainActivity.this, CameraActivity.class);
            intentHandwrite.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentHandwrite.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentHandwrite, REQUEST_CODE_HANDWRITING);
            break;
        case R.id.lottery://彩票識别
            Intent intentLottery = new Intent(MainActivity.this, CameraActivity.class);
            intentLottery.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentLottery.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentLottery, REQUEST_CODE_LOTTERY);
            break;
        case R.id.vat_invoice://增值稅發票識别
            Intent intentVat = new Intent(MainActivity.this, CameraActivity.class);
            intentVat.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentVat.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentVat, REQUEST_CODE_VATINVOICE);
            break;
        case R.id.custom://自定義模闆識别
            Intent intentCustom = new Intent(MainActivity.this, CameraActivity.class);
            intentCustom.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
                    FileUtils.getSaveFile(getApplication()).getAbsolutePath());
            intentCustom.putExtra(CameraActivity.KEY_CONTENT_TYPE,
                    CameraActivity.CONTENT_TYPE_GENERAL);
            startActivityForResult(intentCustom, REQUEST_CODE_CUSTOM);
            break;
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // 識别成功回調,通用文字識别(含位置資訊)
    if (requestCode == REQUEST_CODE_GENERAL && resultCode == Activity.RESULT_OK) {
        RecognizeService.recGeneral(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,通用文字識别(含位置資訊高精度版)
    if (requestCode == REQUEST_CODE_ACCURATE && resultCode == Activity.RESULT_OK) {
        RecognizeService.recAccurate(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,通用文字識别
    if (requestCode == REQUEST_CODE_GENERAL_BASIC && resultCode == Activity.RESULT_OK) {
        RecognizeService.recGeneralBasic(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,通用文字識别(高精度版)
    if (requestCode == REQUEST_CODE_ACCURATE_BASIC && resultCode == Activity.RESULT_OK) {
        RecognizeService.recAccurateBasic(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,通用文字識别(含生僻字版)
    if (requestCode == REQUEST_CODE_GENERAL_ENHANCED && resultCode == Activity.RESULT_OK) {
        RecognizeService.recGeneralEnhanced(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,網絡圖檔文字識别
    if (requestCode == REQUEST_CODE_GENERAL_WEBIMAGE && resultCode == Activity.RESULT_OK) {
        RecognizeService.recWebimage(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,銀行卡識别
    if (requestCode == REQUEST_CODE_BANKCARD && resultCode == Activity.RESULT_OK) {
        RecognizeService.recBankCard(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,行駛證識别
    if (requestCode == REQUEST_CODE_VEHICLE_LICENSE && resultCode == Activity.RESULT_OK) {
        RecognizeService.recVehicleLicense(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,駕駛證識别
    if (requestCode == REQUEST_CODE_DRIVING_LICENSE && resultCode == Activity.RESULT_OK) {
        RecognizeService.recDrivingLicense(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,車牌識别
    if (requestCode == REQUEST_CODE_LICENSE_PLATE && resultCode == Activity.RESULT_OK) {
        RecognizeService.recLicensePlate(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,營業執照識别
    if (requestCode == REQUEST_CODE_BUSINESS_LICENSE && resultCode == Activity.RESULT_OK) {
        RecognizeService.recBusinessLicense(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,通用票據識别
    if (requestCode == REQUEST_CODE_RECEIPT && resultCode == Activity.RESULT_OK) {
        RecognizeService.recReceipt(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,護照
    if (requestCode == REQUEST_CODE_PASSPORT && resultCode == Activity.RESULT_OK) {
        RecognizeService.recPassport(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,二維碼
    if (requestCode == REQUEST_CODE_QRCODE && resultCode == Activity.RESULT_OK) {
        RecognizeService.recQrcode(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,彩票
    if (requestCode == REQUEST_CODE_LOTTERY && resultCode == Activity.RESULT_OK) {
        RecognizeService.recLottery(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,增值稅發票
    if (requestCode == REQUEST_CODE_VATINVOICE && resultCode == Activity.RESULT_OK) {
        RecognizeService.recVatInvoice(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,數字
    if (requestCode == REQUEST_CODE_NUMBERS && resultCode == Activity.RESULT_OK) {
        RecognizeService.recNumbers(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,手寫
    if (requestCode == REQUEST_CODE_HANDWRITING && resultCode == Activity.RESULT_OK) {
        RecognizeService.recHandwriting(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,名片
    if (requestCode == REQUEST_CODE_BUSINESSCARD && resultCode == Activity.RESULT_OK) {
        RecognizeService.recBusinessCard(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }

    // 識别成功回調,自定義模闆
    if (requestCode == REQUEST_CODE_CUSTOM && resultCode == Activity.RESULT_OK) {
        RecognizeService.recCustom(this, FileUtils.getSaveFile(getApplicationContext()).getAbsolutePath(),
                new RecognizeService.ServiceListener() {
                    @Override
                    public void onResult(String result) {
                        alertText(result);
                    }
                });
    }
}
           

8.釋放記憶體資源

@Override
protected void onDestroy() {
    super.onDestroy();
    // 釋放記憶體資源
    OCR.getInstance(this).release();
}
           

9.demo連結:https://download.csdn.net/download/qq_36692282/11709460

10百度雲這次不是全部免費的,隻有200次一天的免費,之後要收費的,我 還以為 良心了額,開源了,小失落啊