リアルタイム画像処理で画面真っ暗!地獄の原因探しを経て得た教訓。

どうもー!22卒新入社員の山村です。

今回は、私が高専時代に遭遇したエラーの中で、一番解決するまでに時間がかかったエラーをご紹介して、そのエラーを解決した経験から得た教訓をお話ししたいと思います。

1. エラーとの出会い

私はプログラミングコンテストで発表するアプリ(Android)をチームで作成していました。

そのアプリは「口の動かし方から英語の発音を評価する」というアプリでした。そのため、口の動きを撮影するためにカメラを動作させることと口の動きを評価するAIの実装が必須でした。

そこで、これらの機能の実装を任されたのがこの私、山村でした。

発音評価処理の流れは、

①発音中の口を撮影する→②撮影した動画をAIで判定して点数をつける

だったのですが、横着な私は、「リアルタイムで発音を評価すればいいんじゃね?」と考え、

発音評価処理の流れを、

①発音中の口を撮影しながらAIで口の動きを判定して点数をつける

にグレードアップさせました。

※ この時すでにAIは作り上げていたので、あとはカメラを動作させるだけでした。

リアルタイム処理というなんだかかっこいいことをすることになった私はウキウキでコードを書き始めました。

そして、何百行に及ぶコードと環境設定を終えた私はルンルンで撮影ボタンを押しましたポチー。

その瞬間、ブチーっと画面が消え真っ暗になってしまいました、タノシー。

2. 地獄の1週間

それから、地獄のエラー原因調査が始まりました。

画像処理を行うためのOpenCVのバージョンが適切かどうかや、設定の仕方に問題がないか。

アプリの基本情報を記述するマニフェストファイルを正しく記述しているか。

AndroidとOpenCV連携するために設定したSDKは適切かどうか。

など、1週間色々試しましたが、エラーを解決することは叶いませんでした。

アプリの提出が1か月後に迫っている中、重要な機能のエラーが1週間直せなかったのは精神的にきつかったです。

3. 解決は突然に

結論から申し上げますと、撮影を始めると画面が消えてしまうエラーの原因は「Android端末のリソース不足による処理落ち」でした…。なぜエラーの原因が処理落ちとわかったかと言うと、リアルタイム処理にこだわるのをやめて、動画を撮った後に、AIで評価を行ったところ、すんなりいけたからです。やはり、開発にお金の出し惜しみはいけませんね。

4. 教訓

このエラーは初めからいいものを作ろうとした結果起きたエラーです。まずは、動くものを作り、それから少しずつバージョンアップを繰り返していいものを作ることが大切なことだという教訓を得ました。これからは変なプライドは捨てて、簡単なものから実装していこうと思います(泣)。

FIXER Inc. 山村 悠馬
  • FIXER Inc. 山村 悠馬
  • 4月から入社する山村悠馬です!たくさんアウトプットしていきたいと思います!