CodeZine(コードジン)

特集ページ一覧

動くシステムをみんなで囲んで「DevみんなOps」を実現しよう! ラズパイ×CircleCIの2つの開発レシピを紹介【デブサミ2021夏】

【B-3】ビジネスと開発、運用を結ぶ、クラウドとデバイスを結ぶ~ラズパイをターゲットにCI/CD

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2021/09/09 12:00

目次

デバイスとクラウドをつなぐ2つの開発レシピのポイント

 さてここからは概念的な話から実践的な話に移ろう。舟木氏はクラウドとデバイスをつないだシステムのレシピを2種類紹介した。1つ目はデバイスのセンサーで温度と湿度を計測するもの、2つ目はマスク装着の有無を画像認識するものだ。

(1)温度・湿度計測機器をクラウド(CircleCI)で管理する

 ここではラズパイ(Raspberry Pi)と温度と湿度のセンサーを組み合わせて環境情報を取得する。用意するのはRaspberry Pi 4、GrovePi+、デジタル温度・湿度センサー。あとは必要に応じてディスプレイ。ラズパイはよく使われるRaspberry Pi OS(旧称 Raspbian)ではなく、ARM64+Ubuntu環境で使用する。またGrovePi+はGrove互換の電子部品であればGroveケーブルでつなげることができるので、ブレッドボードやはんだ付の必要がないのもいいところだ。

CircleCIランナーが稼働する
CircleCIランナーが稼働する

 システムはラズパイでCircleCIのジョブを実行するため、事前準備として、デバイス(Ubuntu on Raspberry Pi)にCircleCIランナーをインストールしておく必要がある。

 実際の流れはこうだ。ユーザーがGitHubにコミットするとクラウドのCircleCIにジョブが渡る。ラズパイでは、ローンチエージェントが常にクラウドのCircleCIに御用聞きのようにジョブがないかモニターしている。もしクラウドのCircleCIにジョブがあれば作業指示を受け取り、タスクエージェントにジョブを渡す(ローンチエージェントはroot権限があり、権限として高すぎるのでタスクエージェントに下請けに出すようにしている)。

 実行されたジョブ(センサーの測定結果)はラズパイのローカルストレージ(SDカード)に出力しておけば、CircleCI側(クラウドストレージ)に同期可能だ。したがって実機が設置してある場所に出向いてデータを回収する必要がなくなる。

 こうしたIoT機器だと全国各地にデバイスを配布することが考えられる。どのデバイスに対して実行を指示するかは、デバイスのランナー名で指定する。ここではデバイスが御用聞きのようにクラウドにジョブがないか確認しているため、デバイス側はCircleCIやAWSなどクラウドへのアウトバンド接続さえできればよい。インバウンドのためにポートを開けなくてもいいということだ。

 またCircleCIランナーはラズパイなどのデバイスであれば、Ubuntu 18.04以降でx86_64またはARM64が対象となる。このシステムについてはCircleCIにある舟木氏の記事に詳細が記載されている。

詳細記事

(2)ラズパイ上で動作する画像(マスク)認識のトレーニングをクラウドGPUで実行、実機でテスト

 コロナ禍でマスク着用が不可欠になった。店舗やオフィス入り口でマスク着用チェックが行われることもある。今ではマスク着用を画像認識できるので、うまく活用すればマスクを着用していない人にはデジタルサイネージなどを通じて自動でメッセージを伝えることができそうだ。

 ここでは物体認識でメジャーなYOLO v5を用いて、画像にいる人物のマスク着用の有無を判定する。画像認識には事前のトレーニングも必要だ。ここではトレーニング用に提供されているRoboflowのデータセットを用いてトレーニングも行う。

 トレーニングはGPUをサポートするクラウドでYOLO v5環境を構築し、トレーニングを実施する。同時にYOLO v5環境をラズパイに配信して、実機で得られる画像と実機の性能をテストする。テスト結果はクラウドで評価する。

 ジョブの実行環境を(ランナーが動作するラズパイではなく)クラウドのGPU環境にするには、マシンのリソースクラスでクラウドのGPU環境を指定する。環境は、YOLO v5環境、マスク装着のデータセット環境、GPU環境を構築する。それぞれワークスペースとして保持しておくことで、GPU環境でもラズパイ環境でもアタッチすれば使い回せるようになる。なおマスク装着のトレーニングに使うデータ(画像)セットは有料だ(学生やホビーユーザーは無料)。購入して渡されるキーを設定しておく必要がある。

 舟木氏によると、トレーニングにかかる時間はどのGPUリソースにしても、おおよそ30分弱くらい。ここまでできたら、いよいよ画像認識だ。ラズパイ環境でジョブを実行し、画像認識を行う。

ジョブ実行結果
ジョブ実行結果

 実行結果を見ると、マスク着用の画像はスコアが0.9前後になっている。一方、着用してない画像はスコアが0.77。この後はしきい値で調整するか、あるいはデータを増やしてさらにトレーニングを重ねるのもいいだろう。

 最後に舟木氏は「継続的にインテグレーションし(Continuous Integration)、インテグレーションしたものを中心に会話しよう」と呼びかけた。今回のデモが示したように、今ではソフトウェアもハードウェアもいろいろな道具がそろっている。ラズパイで使えるセンサーやディスプレイ、画像認識のためのツールやトレーニング用画像まで探せば見つかる。

 つまりアイデアがあればすぐに形にできるということだ。冒頭に述べたように、これからはビジネス部門や各種専門家とも早い段階から関わっていくことで、よりいいものを作り、より成功に近づけることができる。開発者以外の人たちとの会話では、構想やアイデアだけではなく実際に動く実物を見てもらうほうが分かりやすい。実物が分からないと「空中戦になってしまう」と舟木氏は危惧する。だからこそ実物を囲んでアイデアを出し合うことが重要だ。

 舟木氏は「社会やビジネスが継続する限り、プロジェクトは続きます。変化と安定の両輪がそろってこそ、継続的に価値提供や変革を続けられるようになります」と述べた。

 なおCircleCIはブログ記事のほかにもTwitterのオフィシャルアカウント、YouTubeではCircleCIチャンネルに日本語の動画リスト「CircleCI Japanese」もある。セミナーや勉強会などのイベント予告はconnpassから「CircleCI」グループを参照するといいだろう。「ぜひフォローしてください」と舟木氏はセッションを締めた。

関連リンク



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:【デブサミ2021夏】セッションレポート

もっと読む

著者プロフィール

  • 加山 恵美(カヤマ エミ)

    フリーランスライター。茨城大学理学部卒。金融機関のシステム子会社でシステムエンジニアを経験した後にIT系のライターとして独立。エンジニア視点で記事を提供していきたい。EnterpriseZine/DB Onlineの取材・記事や、EnterpriseZine/Security Onlineキュレータ...

あなたにオススメ

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5