日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android对接华为AI - 文本识别

發(fā)布時(shí)間:2024/1/8 Android 40 coder
生活随笔 收集整理的這篇文章主要介紹了 Android对接华为AI - 文本识别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

準(zhǔn)備工作

在開(kāi)發(fā)應(yīng)用前:
1、需要在AppGallery Connect中配置相關(guān)信息,包括:注冊(cè)成為開(kāi)發(fā)者和創(chuàng)建應(yīng)用。
2、使用ML Kit云側(cè)服務(wù)(端側(cè)服務(wù)可不開(kāi)通)需要開(kāi)發(fā)者在AppGallery Connect上打開(kāi)ML Kit服務(wù)開(kāi)關(guān)。

集成HMS Core SDK

工程根目錄build.gradle文件

buildscript {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
        // 配置HMS Core SDK的Maven倉(cāng)地址。
        maven {url 'https://developer.huawei.com/repo/'}
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.4'
        classpath 'com.huawei.agconnect:agcp:1.6.2.300'
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
        // 配置HMS Core SDK的Maven倉(cāng)地址。
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app module下的build.gradle依賴(lài)華為基礎(chǔ)SDK包與語(yǔ)言識(shí)別模型包:

// 引入基礎(chǔ)SDK
implementation 'com.huawei.hms:ml-computer-vision-ocr:3.11.0.301'
// 引入拉丁語(yǔ)文字識(shí)別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:3.11.0.301'
// 引入日韓語(yǔ)文字識(shí)別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:3.11.0.301'
// 引入中英文文字識(shí)別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:3.11.0.301'

配置混淆腳本

-dontwarn com.huawei.**
-keep class com.huawei.** {*;}
-dontwarn org.slf4j.**
-keep class org.slf4j.** {*;}
-dontwarn org.springframework.**
-keep class org.springframework.** {*;}
-dontwarn com.fasterxml.jackson.**
-keep class com.fasterxml.jackson.** {*;}
-keep class com.huawei.noah.bolttranslator.**{*;}
-dontwarn com.huawei.hisi.**
-keep class com.huawei.hisi.** {*;}

添加權(quán)限

    <!--相機(jī)權(quán)限-->
    <uses-permission android:name="android.permission.CAMERA" />
    <!--使用網(wǎng)絡(luò)權(quán)限-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--寫(xiě)權(quán)限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--讀權(quán)限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!--錄音權(quán)限-->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!--獲取網(wǎng)絡(luò)狀態(tài)權(quán)限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--獲取wifi狀態(tài)權(quán)限-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

端側(cè)識(shí)別

    /**
     * 端側(cè)文本識(shí)別
     */
    private void textAnalyzer() {
        long startTime =  (new Date()).getTime();
        Log.d("textAnalyzer", "start: " + startTime);
        MLLocalTextSetting setting = new MLLocalTextSetting.Factory()
                .setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
                // 設(shè)置識(shí)別語(yǔ)種。
                .setLanguage("zh")
                .create();
        MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test2);
        // 通過(guò)bitmap創(chuàng)建MLFrame,bitmap為輸入的Bitmap格式圖片數(shù)據(jù)。
        MLFrame frame = MLFrame.fromBitmap(bitmap);
        Task<MLText> task = analyzer.asyncAnalyseFrame(frame);
        task.addOnSuccessListener(new OnSuccessListener<MLText>() {
            @Override
            public void onSuccess(MLText text) {
                List<MLText.Block> blocks = text.getBlocks();
                StringBuilder sb = new StringBuilder();
                for (MLText.Block block : blocks) {
                    sb.append(block.getStringValue());
                }
                // 識(shí)別成功處理。
                tv.setText("識(shí)別成功: " + sb.toString());
                Log.d("textAnalyzer", "識(shí)別成功:\n " + sb.toString());
                long endTime =  (new Date()).getTime();
                Log.d("textAnalyzer", "end: " + endTime);
                Log.d("textAnalyzer", "耗時(shí): " + (endTime-startTime));
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                // 識(shí)別失敗處理。
                tv.setText("識(shí)別失敗");
            }
        });
    }

端側(cè)識(shí)別測(cè)試

原圖:test2.png

識(shí)別結(jié)果:

云側(cè)文本識(shí)別

注意:此功能收費(fèi),但是精確度更高。

配置應(yīng)用的鑒權(quán)信息

先申請(qǐng)apikey:
https://developer.huawei.com/consumer/cn/console/api/credentials/dev388421841221889538
然后配置apikey

云側(cè)文本識(shí)別實(shí)現(xiàn)

    MLApplicationInit.init();

    /**
     * 云側(cè)文本識(shí)別
     */
    private void textAnalyzerNet() {
        long startTime =  (new Date()).getTime();
        Log.d("textAnalyzerNet", "start: " + startTime);
        // 方式一:使用自定義參數(shù)配置。
        // 創(chuàng)建語(yǔ)言集合。
        List<String> languageList = new ArrayList();
        languageList.add("zh");
        languageList.add("en");
        // 設(shè)置參數(shù)。
        MLRemoteTextSetting setting = new MLRemoteTextSetting.Factory()
                // 設(shè)置云側(cè)文本字體模式:
                // 若選擇手寫(xiě)體格式,文本檢測(cè)模式僅支持稀疏文本,語(yǔ)言列表僅支持中文(zh),邊界框格式僅支持NGON四頂點(diǎn)坐標(biāo)。
                // setTextDensityScene、setLnaguageList、setBorderType等方法設(shè)置均不生效。
                // 若選擇印刷體格式,則需要手動(dòng)設(shè)置語(yǔ)言列表,檢測(cè)模式和邊框樣式,或采取默認(rèn)配置。
                // MLRemoteTextSetting.OCR_HANDWRITTENFONT_SCENE:手寫(xiě)體。
                // MLRemoteTextSetting.OCR_PRINTFONT_SCENE:印刷體。
                .setTextFontScene(MLRemoteTextSetting.OCR_HANDWRITTENFONT_SCENE)
                // 設(shè)置云側(cè)文本檢測(cè)模式:
                // MLRemoteTextSetting.OCR_COMPACT_SCENE:文本密集場(chǎng)景的文本識(shí)別。
                // MLRemoteTextSetting.OCR_LOOSE_SCENE:文本稀疏場(chǎng)景的文本識(shí)別。
                .setTextDensityScene(MLRemoteTextSetting.OCR_LOOSE_SCENE)
                // 設(shè)置識(shí)別語(yǔ)言列表,使用ISO 639-1標(biāo)準(zhǔn)。
                .setLanguageList(languageList)
                // 設(shè)置文本邊界框返回格式。
                // MLRemoteTextSetting.NGON:返回四邊形的四個(gè)頂點(diǎn)坐標(biāo)。
                // MLRemoteTextSetting.ARC:返回文本排列為弧形的多邊形邊界的頂點(diǎn),最多可返回多達(dá)72個(gè)頂點(diǎn)的坐標(biāo)。
                .setBorderType(MLRemoteTextSetting.ARC)
                .create();
        MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(setting);
        // 方式二:使用默認(rèn)參數(shù)配置,自動(dòng)檢測(cè)語(yǔ)種進(jìn)行識(shí)別,適用于文本稀疏場(chǎng)景,文本框返回格式為:MLRemoteTextSetting.NGON。
        //MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer();
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test2);
        // 通過(guò)bitmap創(chuàng)建MLFrame,bitmap為輸入的Bitmap格式圖片數(shù)據(jù)。
        MLFrame frame = MLFrame.fromBitmap(bitmap);
        Task<MLText> task = analyzer.asyncAnalyseFrame(frame);
        task.addOnSuccessListener(new OnSuccessListener<MLText>() {
            @Override
            public void onSuccess(MLText text) {
                // 識(shí)別成功。
                List<MLText.Block> blocks = text.getBlocks();
                StringBuilder sb = new StringBuilder();
                for (MLText.Block block : blocks) {
                    sb.append(block.getStringValue());
                    sb.append("\n");
                }
                // 識(shí)別成功處理。
                tv.setText("識(shí)別成功: " + sb.toString());
                Log.d("textAnalyzerNet", "識(shí)別成功:\n " + sb.toString());
                long endTime =  (new Date()).getTime();
                Log.d("textAnalyzerNet", "end: " +endTime);
                Log.d("textAnalyzerNet", "耗時(shí): " + (endTime-startTime));
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                // 識(shí)別失敗,獲取相關(guān)異常信息。
                try {
                    MLException mlException = (MLException) e;
                    // 獲取錯(cuò)誤碼,開(kāi)發(fā)者可以對(duì)錯(cuò)誤碼進(jìn)行處理,根據(jù)錯(cuò)誤碼進(jìn)行差異化的頁(yè)面提示。
                    int errorCode = mlException.getErrCode();
                    // 獲取報(bào)錯(cuò)信息,開(kāi)發(fā)者可以結(jié)合錯(cuò)誤碼,快速定位問(wèn)題。
                    String errorMessage = mlException.getMessage();
                } catch (Exception error) {
                    // 轉(zhuǎn)換錯(cuò)誤處理。
                }
            }
        });
    }

云側(cè)文本識(shí)別測(cè)試

原圖:test2.png

識(shí)別結(jié)果:

官網(wǎng)參考

更多內(nèi)容,請(qǐng)參考官網(wǎng):
https://developer.huawei.com/consumer/cn/doc/hiai-Guides/text-recognition-0000001050040053

總結(jié)

以上是生活随笔為你收集整理的Android对接华为AI - 文本识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。