LoginSignup
0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

開発未経験がKotlinでAndroidアプリを作ってみた!〜カメラ制御と文字認識の実装奮闘記〜

Last updated at Posted at 2024-06-27

こんにちは!

前回こちらの記事を投稿しました。

今回はカメラ制御にCameraX、文字認識にML Kitを使用したアプリの開発過程で遭遇した困難と、その解決策を初心者なりに紹介できたらと思います。

はじめに

今回開発したのは、カメラで電話番号を認識し、即座に検索できるアプリです。固定電話にかかってくる不審な番号を、素早く調べられるようにしたいと考えました。

開発環境のセットアップ

まず、Android Studioのインストールから始めました。
公式サイトからダウンロードし、インストールしましたが、初めて見る画面の数々に戸惑いました。
参考にしたのは、Android Developers公式サイトです:

プロジェクトの作成と初期設定

Android Studioでプロジェクトを作成し、Kotlinを選択しました。
ここで最初の躓きがありました。Gradle、AndroidManifest、drawableなど、見慣れない用語や設定ファイルの山に圧倒されました。
特にGradleの設定は難しく感じました。
必要なライブラリを追加するため、build.gradleファイルを編集する必要がありました。

AndroidManifest.xml
dependencies {
    implementation ("androidx.camera:camera-camera2:1.3.3")
    implementation ("androidx.camera:camera-lifecycle:1.3.3")
    implementation ("androidx.camera:camera-view:1.3.3")
    implementation ("com.google.mlkit:text-recognition:16.0.0")
}

カメラ機能の実装

カメラ機能の実装には、CameraXを使用しました。しかし、カメラのプレビューを表示するだけでも一苦労でした。まず、AndroidManifestファイルにカメラの使用許可を追加する必要がありました:

AndroidManifest.xml
<uses-permission android:name="android.permission.CAMERA" />

次に、CameraXの初期化とプレビューの設定を行いました:

CameraPreview.kt
private fun startCamera() {
    val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
    cameraProviderFuture.addListener({
        val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
        val preview = Preview.Builder()
            .build()
            .also {
                it.setSurfaceProvider(viewFinder.surfaceProvider)
            }

        try {
            cameraProvider.unbindAll()
            cameraProvider.bindToLifecycle(
                this, CameraSelector.DEFAULT_BACK_CAMERA, preview)
        } catch(exc: Exception) {
            Log.e(TAG, "カメラのバインドに失敗しました", exc)
        }
    }, ContextCompat.getMainExecutor(this))
}

このコードを理解し、正しく実装するまでに何度も試行錯誤しました。
参考にしたのは、Android Developers公式のCameraXのガイドです:

文字認識機能の実装

文字認識にはML Kitを使用しました。
カメラのプレビューから画像を取得し、それを文字認識にかけるプロセスが特に難しかったです。以下は、文字認識を行う関数の一部です:

TextRecognition.kt
private fun recognizeText(image: InputImage) {
    val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
    recognizer.process(image)
        .addOnSuccessListener { visionText ->
            processTextRecognitionResult(visionText)
        }
        .addOnFailureListener { e ->
            Log.e(TAG, "文字認識に失敗しました: $e")
        }
}

この実装には、ML Kitの公式ドキュメントが非常に役立ちました:

レイアウトファイルの作成

XMLでのレイアウト作成も初心者には難しいものでした。
特に、カメラのプレビューを表示するためのViewFinderの配置に苦労しました:

activity_camera.xml
<androidx.camera.view.PreviewView
    android:id="@+id/viewFinder"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

レイアウトの作成には、以下のQiita記事が参考になりました:

完成したアプリの紹介

カメラで電話番号を認識し、即座に検索できる機能を実現できました。さらに、認識した番号の履歴保存や、アプリ内での迷惑電話としての登録機能も追加しています。

固定電話にかかってくる不審な電話番号に悩まされている方、ぜひ一度お試しください!
アプリは以下のリンクからダウンロードできます:

おわりに

最後まで読んでいただき、ありがとうございました。
アプリの改善点や新機能のアイデアがありましたら、ぜひGoogle Playのレビューでお聞かせください。
これからもアプリの改良を続けていきます!

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