久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

?百度Ocr文字識(shí)別

 hncdman 2020-02-27



newbiea

簡(jiǎn)書作者

2019-02-28 16:46打開App

簡(jiǎn)述


最近開發(fā)一個(gè)項(xiàng)目需要用到Ocr文字識(shí)別技術(shù)來識(shí)別手寫文字,,在評(píng)估過程中體驗(yàn)了百度的文字識(shí)別和騰訊的文字識(shí)別。查找官方開發(fā)文檔,,發(fā)現(xiàn)它們都有印刷體和手寫體兩種符合項(xiàng)目需求的識(shí)別模式,,但是騰訊的手寫體模式并沒找到sdk,只能直接根據(jù)文檔手動(dòng)post請(qǐng)求并返回結(jié)果,,但網(wǎng)上卻找不到具體的例子,,導(dǎo)致進(jìn)行過程中出現(xiàn)了一些小困難,。這篇文章主要記錄一下在Android Studio中百度Ocr的用法(主要參考官方文檔)。下篇文章記錄騰訊Ocr的用法,。


通用識(shí)別模式(高精度版)


1.首先需要下載百度文字識(shí)別的sdk,。SDK下載頁(yè)面

2.解壓縮下載的包,然后進(jìn)入libs目錄,,找到ocr-sdk.jar,復(fù)制到工程的libs目錄下,,然后點(diǎn)擊Android Studio的Build->Edit Libralies and Dependencies...,點(diǎn)擊+號(hào),,再點(diǎn)擊jar dependency,找到ocr-sdk.jar并添加即可,。

3.查看下載的包的libs目錄下,,發(fā)現(xiàn)有armeabi,arm64-v8a,,armeabi-v7a,,x86這幾個(gè)文件夾,選擇自己設(shè)備對(duì)應(yīng)的文件夾,,復(fù)制到android studio工程src/main/jniLibs目錄中,,如果不知道設(shè)備的arm架構(gòu),可以用Android Studio連接設(shè)備,,然后在Android Studio的控制臺(tái)中輸入:

adb shell getprop ro.product.cpu.abi

即可查看當(dāng)前設(shè)備的arm架構(gòu),。

4.添加必要的權(quán)限:


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

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

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

注意:android6.0以上需要申請(qǐng)動(dòng)態(tài)權(quán)限。

5.如果在自己的工程中集成SDK,,為了防止release發(fā)布時(shí)打包報(bào)錯(cuò),,需要在Proguard配置文件中增加:


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

-dontwarn com.baidu.ocr.**

6.在代碼中初始化sdk:


    /**

     * 用明文ak,sk初始化

     */

    private void initAccessTokenWithAkSk() {

        OCR.getInstance(mContext).initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {

            @Override

            public void onResult(AccessToken result) {

                String token = result.getAccessToken();

                hasGotToken = true;   //用來判斷是否成功獲取授權(quán)

                ocrNormal();                 //開始文字識(shí)別(為了簡(jiǎn)單起見,,直接在這里進(jìn)行文字識(shí)別,,實(shí)際上使用看項(xiàng)目需要進(jìn)行判斷token)

            }


            @Override

            public void onError(OCRError error) {

                error.printStackTrace();

            }

        }, mContext.getApplicationContext(), "替換成你的Api Key", "替換成你的Secret Key");

    }

Api Key和Secret Key需要去百度開放平臺(tái)注冊(cè)獲取(百度ai開放平臺(tái))。還有一種安全模式授權(quán)這里不詳說了,。

7.開始文字識(shí)別:


   private void ocrNormal() {

        // 通用文字識(shí)別參數(shù)設(shè)置

        GeneralBasicParams param = new GeneralBasicParams();

        param.setDetectDirection(true);

        //這里調(diào)用的是本地文件,,使用時(shí)替換成你的本地文件

        File file=getBitmapFile(mBitmap);

        param.setImageFile(file);

      // 調(diào)用通用文字識(shí)別服務(wù)

        OCR.getInstance(mContext).recognizeAccurateBasic(param, new OnResultListener<GeneralResult>() {

            @Override

            public void onResult(GeneralResult result) {

                StringBuilder sb = new StringBuilder();

                // 調(diào)用成功,返回GeneralResult對(duì)象

                for (WordSimple wordSimple : result.getWordList()) {

                    // wordSimple不包含位置信息

                    WordSimple word = wordSimple;

                    sb.append(word.getWords());

                    //sb.append("\n");

                }

                //file.delete();

                  //String返回

                ocrResult = sb.toString();

                // json格式返回字符串result.getJsonRes())

            }


            @Override

            public void onError(OCRError error) {

                // 調(diào)用失敗,,返回OCRError對(duì)象

            }

        });

    }

手寫體文字識(shí)別


手寫體文字識(shí)別只需要把上述調(diào)用的方法ocrNormal()修改為ocrHandwrite(),,然后第7步修改為以下即可:


 private void orcHandwrite() {

        // 通用文字識(shí)別參數(shù)設(shè)置

        OcrRequestParams param = new OcrRequestParams();

        File file=getBitmapFile(mBitmap);

        param.setImageFile(file);

      // 調(diào)用通用文字識(shí)別服務(wù)

        OCR.getInstance(mContext).recognizeHandwriting(param, new OnResultListener<OcrResponseResult>() {

            @Override

            public void onResult(OcrResponseResult ocrResponseResult) {

                //file.delete();

                // json格式返回字符串

               ocrResult = ocrResponseResult.getJsonRes();

            }

            @Override

            public void onError(OCRError ocrError) {


            }

        });

    }

其中ocrResult返回的是json格式的字符串,,需要自己去轉(zhuǎn)換成jsonObject然后讀取需要的數(shù)據(jù),。


兩種模式比較


為了比較他們的準(zhǔn)確度,我測(cè)試了印刷體和手寫體兩種文字的多個(gè)樣例,,發(fā)現(xiàn)一般情況下,,都是高精度的普通印刷體模式識(shí)別準(zhǔn)確率比較高,,但是在比較潦草的情況下,手寫體識(shí)別率比較高(這只是相對(duì)而言,,實(shí)際上潦草字在很多情況下兩種模式都未識(shí)別成功),,所以得出結(jié)論,大部分情況下用高精度印刷體文字識(shí)別模式即可,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多