こんにちは!
前回こちらの記事を投稿しました。
今回はカメラ制御にCameraX、文字認識にML Kitを使用したアプリの開発過程で遭遇した困難と、その解決策を初心者なりに紹介できたらと思います。
はじめに
今回開発したのは、カメラで電話番号を認識し、即座に検索できるアプリです。固定電話にかかってくる不審な番号を、素早く調べられるようにしたいと考えました。
開発環境のセットアップ
まず、Android Studioのインストールから始めました。
公式サイトからダウンロードし、インストールしましたが、初めて見る画面の数々に戸惑いました。
参考にしたのは、Android Developers公式サイトです:
プロジェクトの作成と初期設定
Android Studioでプロジェクトを作成し、Kotlinを選択しました。
ここで最初の躓きがありました。Gradle、AndroidManifest、drawableなど、見慣れない用語や設定ファイルの山に圧倒されました。
特にGradleの設定は難しく感じました。
必要なライブラリを追加するため、build.gradleファイルを編集する必要がありました。
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ファイルにカメラの使用許可を追加する必要がありました:
<uses-permission android:name="android.permission.CAMERA" />
次に、CameraXの初期化とプレビューの設定を行いました:
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を使用しました。
カメラのプレビューから画像を取得し、それを文字認識にかけるプロセスが特に難しかったです。以下は、文字認識を行う関数の一部です:
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の配置に苦労しました:
<androidx.camera.view.PreviewView
android:id="@+id/viewFinder"
android:layout_width="match_parent"
android:layout_height="match_parent" />
レイアウトの作成には、以下のQiita記事が参考になりました:
完成したアプリの紹介
カメラで電話番号を認識し、即座に検索できる機能を実現できました。さらに、認識した番号の履歴保存や、アプリ内での迷惑電話としての登録機能も追加しています。
固定電話にかかってくる不審な電話番号に悩まされている方、ぜひ一度お試しください!
アプリは以下のリンクからダウンロードできます:
おわりに
最後まで読んでいただき、ありがとうございました。
アプリの改善点や新機能のアイデアがありましたら、ぜひGoogle Playのレビューでお聞かせください。
これからもアプリの改良を続けていきます!