LoginSignup
0
0

More than 1 year has passed since last update.

テキスト認識とは文字画像(イメージ型)を文字列(String型)に変換する技術です。
たとえば、次の写真があるとします。

IMG_20210903_153231.jpg

上記の写真をテキスト認識で変換すると、次の結果が得られます。

Screenshot_20210903_154009_com.sample.hmssample.ml.textrecognitiondemo.jpg

AndroidアプリにHMSのテキスト認識を導入する方法

AppGallery Connectの作業

  1. AppGallery Connectに入って、[My projects]を選びます。
  2. リストから対象アプリに切り替えます。
  3. [Project settings] -> [Manage APIs]に入って、ML Kitを有効にします。(デフォルトではすでに有効になっているはずです)

こちらもご参照ください。

HMS SDKの導入

  1. agconnect-services.jsonをプロジェクト内に配置します。
  2. プロジェクトのbuild.gradleにSDKを追加します。
  3. モジュールのbuild.gradleにSDKを追加します。

テキスト認識のライブラリはこちらです。

build.gradle
implementation 'com.huawei.hms:ml-computer-vision-ocr:2.0.5.301'
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:2.0.5.301'
implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:2.0.5.301'
implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:2.0.5.301'

こちらもご参照ください。

AndroidManifest.xml

HMS ML Kitのテキスト認識の定義をAndroidManifest.xmlに追加します。

AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx">
    ...
    <meta-data
        android:name="com.huawei.hms.ml.DEPENDENCY"
        android:value= "ocr"/>
    ...
</manifest>

テキスト認識の流れ

1.MLTextAnalyzerを生成します。

val textAnalyzer = MLTextAnalyzer.Factory(context)
    .setLocalOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
    .setLanguage("ja")
    .create()
}

動画の場合
2-1.setTransactor()でMLTextAnalyzerに認識結果のコールバックを設定します。

textAnalyzer?.setTransactor((object : MLAnalyzer.MLTransactor<MLText.Block> {
        override fun transactResult(results: MLAnalyzer.Result<MLText.Block>?) {
            binding.overlayView.setResults(results)
        }

        override fun destroy() {
        }
    }))

2-2.カメラを設定します。

val lensEngine = LensEngine.Creator(applicationContext, textAnalyzer)
         .setLensType(LensEngine.BACK_LENS)
         .applyDisplayDimension(1440, 1080)
         .applyFps(30.0f)
         .enableAutomaticFocus(true)
         .create()

try {
    lensEngine.run({SurfaceViewのオブジェクト}.holder)
} catch (e: IOException) {
}

静止画の場合
2-1.静止画をMLTextAnalyzerに渡し、認識結果をコールバックで受け取ります。

val frame = MLFrame.fromBitmap(bitmap)

val task = textAnalyzer.asyncAnalyseFrame(frame)
task.addOnSuccessListener {
}.addOnFailureListener {
}

3.リソースを解放します。

textAnalyzer?.let {
    try {
        it.stop()
    } catch (ioException: IOException) {
        ioException.printStackTrace()
    }
    textAnalyzer = null
}
lensEngine?.let {
    it.release()
    lensEngine = null
}

テキスト認識結果オブジェクトについて

認識結果はMLAnalyzer.Result型のanalyseListにあります。

val mlList: SparseArray<MLText.Block> = {MLAnalyzer.Result<MLText.Block>のオブジェクト}.analyseList

mlList.forEach { key, value ->
    value.contents.forEach { content ->
        // content.border : 判断対象の範囲
        // content.stringValue : 判断したテキスト
        // content.possibility : 判断の正確さ
        // content.languageList : 判断した言語
    }
}

実装は以上になります。

GitHub

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0