医療用リアルタイム動画検知アプリ開発プロジェクト[2022/08/22]

概要

2022年2月、ユーワークスは某国立大学からの依頼を受けて開発していた、医療機器用リアルタイム動画検知システムを無事納品いたしました。この医療機器は、特定の疾患をもつ患者の就寝中の画像をスマートフォンのカメラ機能(暗所対応の外付けカメラを使用)でリアルタイム監視するものであり、発作が起きたときにはその動作を検出して、その前後の静動画を自動的にスマートデバイス内に保存する機能を備えています。発作検知用のアルゴリズムは国立大学にて開発されましたが、これをベースとして、処理性能に制限のあるスマートフォンで稼働できるアプリを開発したのが当社です。開発は2021年8月から2022年2月にかけておこなわれ、当社はスマートフォンアプリの企画、要件定義、設計、実装、テストのすべてを実施いたしました。

スケジュール概要

2018年10月
医工連携コーディネーターの紹介により、某国立大学からシステム開発の打診を受け、企画書を作成・提出する。
2021年08月
本格的に開発がスタート。
2021年10月
大学側から提供された画像処理アルゴリズム(Matlabにより記述されたもの)による発作検知が可能であることを確認するため、アルゴリズムをPythonに書き換えてPC用のアプリケーションを開発し、テストを実施する。
2021年10月
Androidアプリケーションの開発をスタート(KotlinおよびC++で記述)。
2022年02月
テストまで完了し、国立大学へ納品。2022年8月現在、国立大学にて製品化に向けた開発が進行中。

本プロジェクトの主な課題と解決方法

課題高速アルゴリズムをAndroidで実行する技術的困難さ

本プロジェクトで使用するアルゴリズムは、リアルタイムで動画を監視し、人体の特定の運動パターンを検出するものであり、ハードウェアに対して相当の負荷がかかります。スペックの十分なPC用のアプリケーションで実行することは比較的容易でしたが、性能がかなり制限されるスマートフォンで十分なパフォーマンスを出すことは困難でした。開発途中で、一般的なプログラミング手法では要件を満たすことが不可能であると判明しました。

解決Android NDKを駆使したプログラムの最適化

Androidアプリを実装する際には、通常JavaやKotlinといったプログラミング言語が使われます。これらの言語はプログラマにとって実装がしやすい反面、CPUやメモリに対する直接の指示ができず、ハードウェアのスペックを限界まで引き出すことができません。本プロジェクトでは当初Kotlinを使って実装を進めましたが、高速処理が必要な部分でこの課題に直面しました。
こうした場合に備えて用意されているのが「Android NDK」であり、この開発キット上ではCやC++などのプログラミング言語を使用して実装することができます。これらの言語はCPUやメモリを直接制御できるため、最小限のハードウェア要件で最大のパフォーマンスを発揮させることができる一方、そのためには表層的なソフトウェアの知識だけではなく、ハードウェアの構造を含むコンピュータサイエンスに対する総合的かつ高度な知識が必要となります。ユーワークスには大学・大学院でコンピュータサイエンスや情報工学を修めた、経験豊富な技術者が多数在籍しています。それゆえに、リアルタイム動画検知という難易度の高いアルゴリズムを、Androidアプリで実現することができました。

【開発後の反響】

開発期間は約半年間と比較的短期でしたが、完成したAndroidアプリは期日通りに依頼元である国立大学の開発チームに納品することができました。納品後、依頼元で精査がおこなわれた結果、想定通りの性能・品質が確認され、納品完了となりました。現在、このAndroidアプリは国立大学の開発チームにて製品化に向けた取り組みが進行しており、近日中にリリースされる予定です。製品化の暁には、これまで人力でおこなっていた特定疾患の患者の見守りをスマートフォンで自動化することで、家族や医療関係者の負担を大幅に軽減すると同時に、患者の生命をより確実に守れるようになる、と期待されています。

【本プロジェクトで活かされた当社の技術・知見】

(1)情報工学に対するハイレベルな知識と経験

本プロジェクトでは国立大学が開発した画像処理アルゴリズムをベースにアプリケーション開発をおこないましたが、元のアルゴリズムはMatlabという数値解析に特化したプログラミング言語で記述されていました。Matlabはその特性上、工学、理学、経済学などの専門的な分野で多く用いられており、これを解析するためには行列計算、ベクトル演算といった数学的な知識も必要となります。ユーワークスには情報工学に精通した研究者・開発者が多数在籍しており、大学や研究機関からの依頼を受けたシステム開発の実績も豊富にあります。そのため、Matlabで記述されたアルゴリズムを正確に解析し、Python、Kotlin、C++への書き換えをスムーズにおこなうことができました。

(2)Androidアプリの高度な開発技術

本プロジェクトでは、性能に制限のあるAndroidアプリで高速アルゴリズムを実行するために、プログラムの一部をC++で実装しました。C++はメモリやCPUの性能を最大限引き出せるメリットがある一方、使いこなすにはプログラミングスキルだけではなくコンピュータサイエンスの深い理解が不可欠。さらにはAndroidアプリ特有の性質も知悉している必要があります。ユーワークスにはC++を使ったAndroidアプリ開発の実績が豊富な技術者がそろっているため、この課題をクリアすることができました。

(3)画像処理アルゴリズムに対する知見

Matlabで記述された画像処理アルゴリズムを解析するためには、プログラミング言語や数式だけではなく、画像処理アルゴリズムを理解する必要がありました。ユーワークスはこれまで数多くの大学・研究機関からの依頼を受け、画像処理を伴うシステム開発に携わってきた実績があります。そのため、わずか半年という短い納期にもかかわらず、アルゴリズム解析からアプリ実装までスムーズに進めることができました。

【本プロジェクトの技術を応用できる分野】

Androidによるリアルタイム画像処理システム(人体、無機物両方に対応可)

「スマートフォンで被写体をリアルタイム撮影し、何らかの画像処理をおこなうアプリケーション」に対して、本プロジェクトの技術を応用することが可能です。特に人体の運動・変化を検知するシステムは得意分野ですが、無機物にも対応可能です。無機物を撮影するシステムとしては、たとえば工業製品の品質チェックシステムなど。人体を撮影する場合であれば、患者の遠隔監視システムやテレワークで働く社員の管理システム、その他エンターテイメント系のアプリなど、様々な応用が考えられます。

高速処理が必要なAndroidアプリ全般

本プロジェクトで取り組んだリアルタイム画像処理システムは、スマートフォンアプリとしては相当の高速処理を必要とするものであり、Android NDKを使用した高度なプログラミング技術がなければ実装できません。アプリの種類を問わず、「高速処理を要するスマートフォンアプリを開発したいが、実装できる企業・技術者が見つからない」という方は、ぜひ当社にご相談ください。