SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2021夏】セッションレポート(AD)

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

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

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

デバイスとクラウドをつなぐ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」グループを参照するといいだろう。「ぜひフォローしてください」と舟木氏はセッションを締めた。

関連リンク

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
【デブサミ2021夏】セッションレポート連載記事一覧

もっと読む

この記事の著者

加山 恵美(カヤマ エミ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/14680 2021/09/09 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング