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

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

 

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

2.在應用詳情頁面下載對應應用的授權文件

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

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

  

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

1.下載sdk

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

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

-keep class com.baidu.ocr.sdk.**{*;}
-dontwarn com.baidu.ocr.**

6.代碼中:初始化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次一天的免費,之後要收費的,我 還以爲 良心了額,開源了,小失落啊

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章