こんにちは。株式会社ビーイング 福岡システム課のS.Konoです。
少し前に課の先輩2名と私で協力し、
「砂漠の水飲み場にシマウマが来たらSlackに通知するシステム」
(以下「シマウマシステム」と略)を作りました。
このユーモア溢れるシステムを気に入っているため、この場を借りて紹介させて頂きます。
早速ですが、Slackに通知している様子をお見せします。
タイトル通り、砂漠の水飲み場にシマウマが来たらSlackに通知します。
Slackに通知している様子(*1)
シマウマは昼だけでなく、夜も水を飲みます。
暗闇であっても抜かりなく、シマウマを検出して通知します。
*1 著作権の都合上、シマウマの画像はイメージです。実際のシステムでは、砂漠の水飲み場にいるシマウマのキャプチャ画像とともに通知します。
開発の経緯
まずこのシステムを作った経緯ですが、私が業務の合間を縫っていたずら心で作ったわけではありません。(それも面白いですが)
ビーイングでは、インフラエンジニア育成のための取り組みを継続的に行っています。
その一環として行われた研修の中で、本システムを作りました。
研修
上述の通り、研修にてシマウマシステムを作りました。
シマウマシステムを紹介する前に、研修について触れさせていただきます。
研修は、対面形式で全6回、2か月に1度のペースで実施されました。
各回は座学とハンズオンの2つのセクションに分かれ、ハンズオンでは毎回様々なお題が出題されます。
例えば、「2台のPCをBluetoothでペアリングで接続してみよう」「VPN環境を作成しよう」といったお題です。
ハンズオンでは詳細な手順は与えらないため、自分で調べつつ行う必要があり苦労しました。
ただし対面形式だったおかげで、実装に詰まっても質問しやすい環境でした。
研修は1回あたり5~6時間、つまり各参加者は1人当たり合計30時間以上費やしたこととなります。
これらは勤務時間内に行われたため、ビーイングがスキルアップに力を入れていることを実感でき、嬉しく思いました。
他にも、ビーイングにはエンジニアのスキルアップを支援する制度が用意されています。
今回の研修は不定期に開催されたものですが、Beingハッカソンやイノベーションタイム(*2)は定期的に開催されています。
*2 イノベーションタイム、Beingハッカソンについて(福岡システム課の募集ページより抜粋)
◇イノベーションタイム
勤務時間中の最大20%を、将来投資としてのスキルアップに利用できます。
実務に直接関係のないテーマでもOK。常に新しい技術探求に貪欲なエンジニアを歓迎します。
毎週開催される部内プレゼン会で、お互いに知識を共有することも。
◇Beingハッカソン
3ヶ月に1度、丸2日をかけて、一からつくった新しいシステムを披露しあいます。
所属・担当製品やスキルレベル等さまざまなエンジニアを、4名程度のチームに編成します。毎回異なるメンバーと組むことで、部内交流を深めつつ、普段やらない開発技法を試したり、アイデアの幅を広げたりする等、楽しみながらスキルアップをはかります。
シマウマシステム
どういうお題に対して、どんな成果物を作ったかについてご紹介します。
研修では、以下のようなお題が出題されました。
お題
砂漠の水飲み場にシマウマが来たら課のSlackへ通知してください。
〈要件〉
- AWS上にシステムを構築すること。
- 通知先はSlackの課のチャンネルとすること。
- メッセージの内容は自由とする。
- 課のメンバーで協力して作成すること。
〈ヒント〉
- シマウマの検出はMediaPipeを使うとよい(他の手法でもOK)
MediaPipe: https://mediapipe-studio.webapps.google.com/demo/image_classifier
成果物
実際に動いている様子は最初にお見せしましたので、使った技術やシステム構成図について紹介します。
長文になるため、コードは割愛させて頂きます。
〈使った技術〉
シマウマの検出は、MediaPipeを利用して実装しました。
MediaPipeとは、Google社が開発しているオープンソースの機械学習ライブラリです。
画像や動画内のオブジェクト検出、手のジェスチャー検出等を実現できます。
詳細については、本記事では省かせて頂きます。下記をご参照ください。
実際にMediaPipeを利用して、オブジェクトを検出している様子をお見せします。
動画や画像内のオブジェクトを認識し、どのようなものであるかを検出できます。
MediaPipeを使ってオブジェクトを検出している様子
今回のお題では、高い精度でシマウマを検出することができました。
砂漠の水飲み場には、ダチョウやサイ、オリックスなど様々な動物が登場しますが、ミスなくシマウマを検出できました。
(目立つ特徴を持つシマウマだから精度が高かった、という可能性はあります)
〈システム構成図〉
おおまかな処理の流れは、以下の通りです。
- EC2インスタンスに配置したプログラムを起動しておく
- MediaPipeを活用してライブ映像をチェックし、シマウマが写っているかを判定する
- シマウマが存在する場合、判定結果に関するファイルをS3に保存する
- S3への保存をトリガーに、LambdaがSlackへメッセージを送信する
補足ですが、今回は時間の都合上最適解を目指すのではなく、短時間で成果を作り上げることを目指しました。
そのため非常に簡潔なシステム構成となっています。
所感
研修の課題ということで業務の一環ではあったものの、楽しみながら取り組むことができました。
楽しめた要因は2つあります。
1. 普段扱わない技術を試せたこと
業務等であまり扱ったことがないお題に取り組み、エンジニアとしての経験値を高めることが
できました。
今回の経験から、経験の浅い分野にトライするメンタルが強くなったと思います。
今後新しい技術にチャレンジするときは、きっと臆せずに取り組めると思います。
2. 今回の実装を応用すれば、身近な悩みごとを解消できると思ったこと
個人的な嗜好も少しあるかもしれませんが、身近な悩みごとを解消するシステムを作ることはとても楽しいです。
そのため、今回のお題に対してもワクワクしながら取り組むことができました。
解消できると考えたのは、次のようなケースです。(*3)
- ライブ映像を活用して日常生活に役立つ情報を通知
- 目的地(博多駅など)のライブ映像を活用し、傘を差している人がいればLINE等に通知
→ 天気予報よりも正確な情報が得られる。 - 高速道路が渋滞していれば通知
→ 交通情報よりもリアルな情報が得られる。
- 監視カメラを設置して、状況に変化があれば通知
- 自宅の庭に監視カメラを設置し、動物が侵入したら通知
→ 定期的に庭を確認する必要がなくなる。
*3 実現可能か、手間や金銭コストに見合った対価があるかは未検討です。また、実際に製品化する際には、著作権上問題ないか等をチェックする必要があります。
終わりに
お読みいただき、ありがとうございました。
今回は研修とシマウマシステムについてご紹介しましたが、いかがでしたか?
少しでもビーイングに興味を持っていただければ幸いです。