Google Cloudサービスをフル活用した転倒検知システム

本記事では、クラウドサービス未経験の大学院生2人が、Furious Green合同会社にて1年間インターンを経験し、1年間で学んだことの集大成として、Google Cloudサービスをフル活用した転倒検知システムを開発した際の記録をご紹介します。

Google Cloudサービスをフル活用した転倒検知システム

はじめに

はじめまして!本記事では、クラウドサービス未経験の大学院生2人が、Furious Green合同会社にて1年間インターンを経験し、1年間で学んだことの集大成として、Google Cloudサービスをフル活用した転倒検知システムを開発した際の記録をご紹介します。

なぜ転倒検知システムなのか

私たちが転倒検知システムを選んだ理由は、高齢化が進む社会において、一人暮らしの高齢者の転倒リスクや、医療・介護現場での人手不足といった課題を解決するためです。

高齢者にとって転倒は頻発する事故の一つであり、適切な対応が遅れると重篤な健康被害につながる可能性があります。しかし、介護・医療現場の人手不足に加え、核家族化の進行により、身近に見守る人がいないケースも増えており、迅速な対応が難しくなっています。

そこで、エッジデバイスとクラウドサービスを組み合わせた転倒検知システムを導入することで、リアルタイムに転倒を検知し、迅速な対応を可能にすると考えました。これにより、高齢者の安全を確保するとともに、介護・医療従事者の負担を軽減することが期待されます。

システム構成

転倒検知システムの構成は以下の通りです。まず、エッジデバイスであるESP32で撮影を行い、クラウド上のストレージに保存します。この保存をトリガーとして転倒検知モデルで転倒可否を判断し、転倒していた場合にはSlackに通知する形としました。

完成イメージ

エッジデバイスで撮影された画像が、転倒していると判断された場合Slackに通知がいきます。

開発フロー

開発フローは、転倒検知システムのクラウドサービス上での実装(システム構成のピンク色の領域)とエッジデバイスでの撮影とクラウドとの接続(システム構成の緑色の領域)の2ステップから成っており、各ステップは以下のように細分化されます。

  1. 転倒検知システムのクラウドサービス上での実装
    1. ローカルで転倒検知モデルの作成
    2. Vertex AI Endpointの作成
    3. Cloud StorageをトリガーとしたCloud Functionsの作成
    4. Pub/Subを用いたSlackへの通知
  2. エッジデバイスでの撮影とクラウドとの接続
    1. エッジデバイスで撮影
    2. 画像データの送受信
    3. mTLS認証

転倒検知システムのクラウドサービス上での実装

まず、転倒検知システム全体をクラウドサービス上でデプロイしました。

ローカル環境で転倒検知モデルの作成

転倒検知において、一般的に用いられているモデルを調査し、まずはローカル環境でのモデル構築に取り組みました。

Kaggleでは「Fall Detection Dataset」とよばれる、様々な人の転倒シーンを含むデータセットが公開されています。まずは、このデータセットの内容や、このデータセットを用いてどのようにして転倒検知のモデルが作成されているかを調査しました。

※ Fall Detection Dataset: https://www.kaggle.com/datasets/uttejkumarkandagatla/fall-detection-dataset

そこで、YOLOとCNNを組み合わせる手法が頻繁に用いられていることが確認できたため、下記のサイトを参考にしながら、モデルの構築に取り組みました。https://www.kaggle.com/code/sahiltarlana2601/fall-detection-final

モデルの詳細については、下記の通りです。

  1. YOLO

まず、YOLOで画像内の人物を検出し、その座標を特定します。 具体的には、最新の「yolov11n」を用いました。

  1. CNN 

次に、YOLOで検出された人物の画像領域を切り出し、転倒しているかどうかを判定します。ここで、「vgg16」と呼ばれるImageNetという大量の画像のデータセットを学習した事前学習済みモデルを用いました。また、先述の「Fall Detection Dataset」を用いてファインチューニングをし、転倒検知に特化した画像分類モデルの構築を行いました。

Vertex AI Endpointの作成

ローカル環境で作成した転倒検知モデルを、クラウドサービス上にデプロイしました。当初は、Cloud Functionsで直接モデルを実行することを検討しましたが、Cloud Functionsは関数が呼び出されるたびにモデルを読み込む必要があり、処理に時間がかかるという課題がありました。

そこで、事前に学習済みモデルを読み込み、API経由で高速に呼び出すことができるVertex AI Endpointsを利用することにしました。

Vertex AI Endpointsへのデプロイは、以下の手順で実施しました。

  1. Flaskアプリケーションの作成:モデルをAPIとして公開するためのWebアプリケーションを作成
  2. コンテナ化:作成したアプリケーションをDockerコンテナにパッケージング
  3. Artifact Registryへのプッシュ:パッケージングしたコンテナイメージを保管
  4. Vertex AI Model Registryへのアップロード:モデルの情報を登録
  5. Vertex AI Endpointへのデプロイ:登録したモデルをエンドポイントとして公開

これらの手順は、それぞれ「アプリケーションの作成」、「設計図の作成」、「設計図の保管」、「設計図の登録」、「アプリケーションの公開」と考えると、イメージしやすいかと思います。

YOLOモデルのデプロイは、”https://medium.com/@oredata-engineering/yolov8-deployment-on-vertex-ai-endpoints-1a79fd1d4ae0” を参考にしました。また、独自に作成したCNNモデルについては、ローカル環境での実装をベースにコードを修正し、デプロイしました。

以上の手順により、転倒検知モデルのクラウド環境へのデプロイが完了しました。

Cloud StorageをトリガーとしたCloud Functionsの作成

Vertex AI EndpointsでモデルをAPIとして公開できたので、このAPIを呼び出す処理を実装する必要がありました。そこで、Cloud Storageへの画像ファイルのアップロードをトリガーとするCloud Functions を作成しました。処理の流れは以下の通りです。

  1. Cloud Storageにアップロードされた画像ファイルをCloud Functionsが取得
  2. 取得した画像データをVertex AI Endpointに送信し、転倒検知の推論を実行
  3. Vertex AI Endpointからの推論結果をCloud Functionsが受信
  4. 推論結果(転倒の有無)をCloud Storageに保存

Cloud Storageの画像データをCloud Functionsで読み書きする方法は以下の記事を参考にしました。

https://qiita.com/bell_at_ds/items/52a56da7c4605e1068e3

また、Cloud FunctionsでVertex AI Endpointの推論結果を取得するためにはgoogle-cloud-aiplatformライブラリのEndpoint関数を使用しました。

https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform.Endpoint

Pub/Subを用いたSlackへの通知

ここまでの実装で、Cloud Storageに追加された画像の転倒検知が可能になったので、転倒が検知された場合にのみ、Slackへ通知する機能を追加します。(下記画像のような機能)

転倒検知有無が判定された画像がCloud Storageに保存されるので、この保存をトリガーとしてPub/Subにパブリッシュします。パブリッシュを受け取ったPub/SubはサブスクライバーであるCloud Run Functionsを起動させ、このCloud Run FunctionsがSlackに通知を送ります。

この構成は下記のサイトを参考に作成しています。

https://techblog.nhn-techorus.com/archives/29845

ここで、私たちがPub/Subを用いた理由としては、今後の拡張性を考慮してSlack以外の通知手段を追加しやすい設計とするためです。

エッジデバイスでの撮影とクラウドとの接続

これまでの実装では、転倒検知を行う画像を手動でCloud Storageにアップロードしていました。毎回手動で画像を追加するのは非効率であり、実用上では問題があります。そこで、エッジデバイスで撮影した画像を自動的にCloud Storageへアップロードする機能を実装します。具体的には、ESP32-WROVERで撮影した画像データをHTTP POSTリクエストをCloud Functionsに送り、Cloud FunctionsからCloud Storageに保存することで、アップロードを実現します。

  1. エッジデバイスで撮影

まず、エッジデバイスで撮影を行えるようにしました。環境は以下の通りです。

デバイス:ESP32-WROVER

IDE: Thonny

使用言語:MicroPython

エッジデバイスには、カメラ機能を容易に実装できるファームウェア が公開されている ESP32-WROVERを選定しました。開発にあたり、FreenoveのGitHubから提供されているフォームウェアを利用しました。

開発環境には、マイクロコンピュータのプログラミングによく利用されている統合開発環境(IDE)であるThonnyを選びました。

エッジデバイス上で動作するプログラミング言語には、軽量でESP32のようなマイクロコンピュータでの動作に適したMicroPythonを採用しました。MicroPythonは、Pythonの構文をほぼそのまま利用できるため、Pythonの知識があれば容易に開発を始められることから今回使用することにしました。

環境構築とカメラの実装はそれぞれ以下の記事を参考にしています。

Thonnyの環境構築

https://www.greenwich.co.jp/blog-archives/p/32960

カメラの実装

https://github.com/Freenove/Freenove_ESP32_WROVER_Board/blob/main/Python/Python_Tutorial.pdf

  1. 画像データの送受信

クライアント側であるESP32からCloud Functionsのサーバーに画像データを送信し、サーバー側でその画像をCloud Storageに保存する処理を行います。

クライアント側

  1. データ形式の変換:画像の取得→画像をbase64にエンコード→JSON形式に変換
  2. リクエストの送信:urequestsライブラリを用いて、HTTP POSTリクエストを送信します

MicroPythonの構文は基本的にPythonと似ていますが、ライブラリ名が異なったり(例:requests → urequests)、一部ライブラリが含まれていないため、適宜置き換える必要があります。データの送受信方法として、最初はurequestsを使用していましたが、後述するmTLS認証の実装に際しては、usslライブラリを使用するように変更しました。

サーバー側

サーバー側では、Flask を使用して HTTPリクエストを受け取る WebサーバーをCloud Functions上で構築します。リクエストで受け取った画像データをCloud Storageに保存する機能を実装するtことで、クライアントから送信された画像データが自動的にCloud Storageに保存されるようにします。

  1. mTLS認証

現在の実装では、Cloud FunctionsのURLを知っているだけで、誰でも画像を保存できてしまいます。これを防ぐために、mTLS認証を導入し、認可されたクライアントのみが接続できるようにします。

まず、以下の記事を参考に、opensslを用いてクライアントとサーバーの各種証明書および秘密鍵を準備します。

https://tex2e.github.io/blog/python/mtls

クライアント側

クライアント証明書とクライアント秘密鍵をインストールします。MicroPythonのrequestライブラリではmTLS認証を実装できないので、usslライブラリで実装を行います。実装は、Pythonでのクライアント側処理とMicroPythonのSSLのドキュメントを参考に開発しました。

MicroPythonのドキュメントでは、sslという名前で記載されていますが、実際にはusslライブラリとして使用できます。ただし、MicroPythonのusslライブラリではサーバー証明書の検証が行えないという制約がある点に注意が必要です。サーバー側サーバー証明書とサーバー秘密鍵をインストールします。その後、Flask を使用してmTLS認証用のWeb サーバーをCloud Functions上に構築します。参考記事: https://tex2e.github.io/blog/python/mtls

まとめ

プロジェクトを通して得られた学び

機械学習モデルのクラウドデプロイについて

ローカル環境でのモデル構築は経験があったものの、それをどのようにしてシステムに組み込むのか、具体的な方法については知識がありませんでした。Vertex AI Endpointsを利用することで、モデルをAPIとして公開し、他のシステムから利用できる形にすることができました。この過程で、Flaskアプリケーションの作成、Dockerコンテナ化、そしてVertex AIへのデプロイという一連の作業を経験し、機械学習モデルをクラウド上で運用するための実践的なスキルを習得できました。

セキュリティを考慮した設計の重要性

カメラデバイスからCloud Functionsへ画像を送信する際の認証方式を検討する中で、セキュリティの重要性を改めて認識しました。当初は認証なしで実装していましたが、これでは誰でも画像をアップロードできてしまうため、mTLS認証を実装することにしました。mTLS認証の仕組みや、クライアント証明書とサーバー証明書の違い、そしてMicroPythonでの実装方法などを学習し、セキュアなシステムを構築するための知識を深めることができました。この経験を通して、単にシステムを構築するだけでなく、セキュリティを考慮した設計の重要性を痛感しました。

Pythonの標準ライブラリのありがたみ

MicroPythonでの開発を通して、Pythonの標準ライブラリのありがたみを実感しました。ESP32ではMicroPythonを使用しましたが、標準ライブラリの数が限られているため、Pythonでは当たり前に使えていたライブラリが使えませんでした。例えば、base64エンコードやJSONの操作など、Pythonでは標準ライブラリで簡単にできたことが、MicroPythonでは追加のライブラリを探したり、自作したりする必要がありました。この経験を通して、標準ライブラリの存在がいかに開発効率を高めているかを実感するとともに、組み込み環境での開発においては、リソースの制約の中で最適なライブラリを選択する能力が重要であることを学びました。

Google Cloudサービスを使った感想

ドキュメンテーションが充実していることを実感

今回のプロジェクトを通じて、Google Cloudサービスのドキュメンテーションが非常に充実していることを実感しました。開発を進めるにあたり、過去に同様の開発を行った方のブログ記事を参考にすることが多くありました。しかし、クラウドサービスの進化は早く、記事によっては過去のバージョンのサービスを使用しており、そのままでは同じコードで実装できないケースが多々ありました。そのような場面で、Google Cloudの公式ドキュメントは非常に役立ちました。各サービスの機能やAPIについて詳細かつ最新の情報が提供されており、ブログ記事との差異を容易に埋め合わせることができました。特に、バージョン間の変更点や非推奨となった機能に関する情報は、迅速な問題解決に繋がりました。

コーディングに集中しやすい

例えば、転倒検知モデルの構築の際にCloud Functionsのようなサーバーレスサービスを利用することで、インフラの管理やサーバーの設定に煩わされることなく、コードの記述と実行に専念できました。このように、Google Cloudサービスは、開発者がそれぞれの専門分野に集中し、効率的にシステムを構築できるよう支援してくれると感じました。

今後の展望

実際に、医療・介護現場へ導入するためには、下記の課題を克服する必要があると考えました。

  1. 転倒検知の精度向上

現在のモデルは、特定の条件下では誤検知や検知漏れが発生する可能性があります。医療・介護現場では、高い精度が求められるため、①より多くの学習データを用いてファインチューニングを行うことや、②最新の論文をサーベイしながら最良の深層学習モデルを選択することで、精度改善が見込めます。

  1. プライバシーへの配慮

カメラ画像には個人情報が含まれるため、画像の匿名化や暗号化などの対策が必要です。また、システム利用者の同意を得るプロセスや、データ管理に関する規約を整備する必要があります。これらの対策により、システム利用者からの信頼を得ることが、医療・介護現場への導入には不可欠だと考えました。

  1. システムのリアルタイム性の向上

現在のシステムでは、転倒発生から通知までに数秒の遅延が生じる可能性があります。医療現場では、迅速な対応が求められるため、この遅延を最小限に抑える必要があります。そのためには、エッジデバイス側で推論処理を行い、クラウドへの依存度を下げることでリアルタイム性を向上させることができます。しかし、この方法では更に高スペックなエッジデバイスを導入する必要があり、コストが大きいため慎重に検討する必要があります。


著者プロフィール

大岩
慶應義塾大学卒業後、同大学院にて統計学を専攻。2023年より Furious Green でインターンを開始し、Google Cloud を用いたサービス開発を一から学ぶ。クラウド技術とデータ分析を活用し、DXの推進に貢献することを目指している。

山本
慶應義塾大学大学院を卒業。2023年よりFurious Greenにてインターンを開始し、現在は業務委託として勤務。「自然言語処理」×「マーケティング」に関心がある。

Read more

Googleの最新オープンソースモデル「Gemma 3」技術紹介

Googleの最新オープンソースモデル「Gemma 3」技術紹介

本日は、Googleが新たにリリースした最新のオープンモデル「Gemma 3」についてご紹介いたします。Gemmaは、多様な生成AIタスクに対応する強力なモデルファミリーであり、質問応答、要約、推論など、幅広い用途で活用可能です。今回のGemma 3は前バージョンから大幅に進化し、より高性能かつ使いやすくなっております。 Gemma 3の主な特長 マルチモーダル入力対応 Gemma 3の最大の特長の一つは、画像とテキストの両方を入力として扱えるようになったことです。これにより、画像の解釈、オブジェクトの識別、画像内のテキスト抽出など、より複雑な分析や生成タスクが可能となりました。 128Kトークンのコンテキストウィンドウ 従来のGemmaモデルと比較して16倍となる128,000トークンの長大なコンテキストウィンドウをサポートしています。これにより、複数の記事、長文のドキュメント、あるいは多数の画像を一度に処理し、より複雑な問題解決に貢献します。 広範な言語サポート 140以上の言語をサポートしており、グローバルな展開を視野に入れたAIアプリケーションの開発を強力

GPT-4.5:OpenAIの最新モデルリリースと技術概要

GPT-4.5:OpenAIの最新モデルリリースと技術概要

OpenAIは大規模言語モデルの最新版「GPT-4.5」を発表しました。現在利用可能なGPTシリーズの中で最大かつ最強の性能を誇るこのモデルは、現在研究プレビュー版として提供されています。 主な特徴 GPT-4.5は以下の点において大幅な進化を遂げています: * 深い知識とユーザー意図理解の向上:より広範な知識ベースを持ち、ユーザーの意図をより正確に把握する能力を獲得 * 創造性と高いEQの実現:ライティング、コーチング、ブレインストーミングなど、創造性や共感性を必要とするタスクにおいて卓越した性能を発揮 * エージェント的計画・実行能力:複雑なタスクを計画し実行する能力が大幅に向上 * 事実の正確性向上:従来モデルと比較して、事実に基づいた正確さが向上し、ハルシネーション(誤情報生成)が減少 * 自然な会話の実現:より自然な対話が可能となり、微妙なニュアンスや暗黙の期待を理解する能力が向上 技術詳細 GPT-4.5の主要な技術仕様は以下の通りです: * 大規模教師なし学習の採用:教師なし学習をスケールアップすることで、パターン認識、関連性抽出、創造的洞察の

AI時代における競争力と専門性:ビジネス環境の変革

AI時代における競争力と専門性:ビジネス環境の変革

大規模言語モデルがもたらす業界の平準化 大規模言語モデル(LLM)技術は、ビジネス環境における能力の平準化をもたらす重要な転換点となっています。この技術革新により、従来の個人間のスキルギャップが縮小し、多くの業務領域において基本的な実行能力が向上するという構造変化が進行しています。 専門性の再定義 従来のビジネス環境では、各職種における専門性のばらつきが大きく、特定分野において高い能力(8-10レベル)を持つ人材と基礎的な知識しか持たない人材(1-2レベル)の差が明確でした。LLM技術の導入により、基礎レベルが全体的に引き上げられ(3-5レベル)、市場における標準的な期待値が上昇しています。 検索エンジン普及から得られる教訓 この変化は、検索エンジンが情報アクセスを民主化した際の変革に類似しています。当時、検索技術を深い学習のための足がかりとして活用したグループと、単純な情報収集ツールとしてのみ利用したグループに二極化しました。現在のLLM技術においても同様の分岐が見られます。 実際のビジネスリスク 多くの企業が懸念するのはAIによる雇用の代替ですが、

マイクロソフト最新AIモデル「Phi-4」シリーズ徹底解説:マルチモーダルとミニの技術的特徴と活用シーン

マイクロソフト最新AIモデル「Phi-4」シリーズ徹底解説:マルチモーダルとミニの技術的特徴と活用シーン

はじめに マイクロソフトが発表した最新のPhiファミリーモデル「Phi-4-multimodal」および「Phi-4-mini」は、エッジデバイスを含む様々な環境での高度なAI機能の実現を目指して開発されました。今回は、これらの革新的なモデルの技術的特徴と実用的な活用事例について詳しく解説します。 Phi-4-multimodal:マイクロソフト初のマルチモーダルモデル 技術的特徴 Phi-4-multimodalは、マイクロソフトが初めて提供するマルチモーダル言語モデルであり、56億のパラメータという比較的コンパクトなサイズながら、音声、視覚、テキストを統合的に処理する能力を持っています。 このモデルの最大の特徴は、単一のモデル内で複数のモダリティを同時に処理できる点です。従来のAIシステムでは、異なる種類の入力(音声、画像、テキスト)に対して個別のモデルや複雑なパイプラインが必要でしたが、Phi-4-multimodalはこれらを一つのモデルで統合的に処理することが可能です。 また、効率性とスケーラビリティを向上させる新しいアーキテクチャを採用しており、より大きな語