2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Rekognitionの画像分類でサイネージ画面の障害確認を自動化した

Last updated at Posted at 2026-01-17

はじめに

弊社では20年以上前から医療機関向けにデジタルサイネージというサービスを提供しています。
病院やクリニックの天井からぶら下がっているテレビを見た事がある方もいると思います。
季節性のコンテンツ(インフルエンザ予防接種や花粉症の治療等)や、診療内容の紹介、呼び出し番号が表示されるアレです。
Fire TV Stickのようなスティック型デバイスがテレビの裏側に接続されておりコンテンツを放映しています。

2026年現在で2300以上の施設に設置されており、CSチームでは毎朝以下のような集中管理システムを通じて、サイネージ画面で障害が発生していないかを目視にてチェックする作業を行っておりました。

Image from Gyazo

画面上にシステムダイアログが表示されていたり、エラー画面になっているものは障害対応が必要な状態。

これをAmazon Rekognition Custom Labels を利用して、毎朝自動で障害が発生している端末をリストアップしてSlackに通知するようにしました。

Amazon Rekognition Custom Labelsとは

言葉の通り 画像をラベリング してくれる超すごマネージドサービスです。

Amazon Rekognition Image のラベル検出機能を使用すると、機械学習モデルを作成しなくても、イメージや動画の一般的なラベルを大規模に識別、分類、検索できます。例えば、車やトラック、トマト、バスケットボール、サッカーボールなど、何千もの一般的なオブジェクトを簡単に検出できます。

但し今回は、サイネージ画面という特殊な画像のエラー判定する という、弊社業務に特化した用途になるので、Custom Labels機能を利用して弊社用にモデルをトレーニングしました。

カスタムラベルプロジェクトを作成する

今回は物体検知ではなくエラー判定をしたい用途なので、画像に対してsuccessfailedのラベルを検出するようにトレーニングします。

1. AWSコンソ-ル上のAmazon Rekognition カスタムラベルメニューから「プロジェクトを作成」します

Image from Gyazo

2. トレーニングデータを配置します

バケットポリシー等の都合上、次のステップの「データセットを作成」の画面からアクセスできる 自動生成されたバケットに保存する事をお勧めします。
但しこのバケットはawsアカウント(リージョン内)で共有されるようです( プロジェクト間で共有されます )。なのでプロジェクト名を付けて利用するなどして、間違ってもバケットを削除しないよう ご注意ください。

s3://custom-labels-console-ap-northeast-1-ab08c43adc
  + assets
    +  success
      + image1.png
      + image2.png
    + failed
      + image10.png
      + image11.png

3. 作成したプロジェクトで「データセットを作成」します

Image from Gyazo

4. モデルをトレーニングします

トレーニングには多少時間がかかります

Image from Gyazo
Image from Gyazo

モデルのステータスがTRAINING_COMPLETEDになれば利用可能です

Image from Gyazo

アプリからRekognition APIを利用して画像をラベリングする

S3のパスを渡すとsuccessfailedかを判定する事ができます。

def self.detect_failed_label(path)
    rekognition = Aws::Rekognition::Client.new(
      access_key_id: '*********',
      secret_access_key: '*********',
      region: 'ap-northeast-1',
    )

    # detect_custom_labels を実行
    resp = rekognition.detect_custom_labels(
      project_version_arn: MODEL_ARN,
      image: {
        s3_object: {
          bucket: S3Service::BUCKET_VIEWER,
          name:   path
        }
      }
    )

    resp.custom_labels.each do |label|
      # エラー画像を検出
      if label.name == 'failed'
        return [true, label.confidence]
      else
        return [false, label.confidence]
      end
    end

    # labelが無い場合(起き得ないはず)
    [false, 0]
  end

実務で利用する場合の注意事項

Amazon Rekognition、まぁまぁ高いです(笑)
何の機能を利用するかで料金が違いますので、productionで利用する場合はしっかり料金シミュレーションして設計する事をお勧めします。

今回は 毎朝のチェック作業の自動化 だったので、バッチ処理でチェック作業開始前にモデルをスタートして、バッチ終了時にモデルも停止するようにしました。
実稼働1日10分程度なので、月間およそ5時間の稼働で月額$20程度になります。

終わりに

ここ数年で機械学習周りの精度が急速に上がってきて、実務に耐えうるようになりました。

弊社でも画像認識、音声認識、生成AIを利用していますが、実務で利用すると必ず速度や料金などの制約事項が出てきて、かなり工夫が必要になります。

しっかりと知恵を絞って技術を運用に乗せ、少子高齢化時代をDXで支えていけたらなぁと思います。

お知らせ

2026/1/28(水)に博多でエンジニア向けのLT会開催します。
お食事&ドリンクでワイワイする会です。
是非お気軽にオフィスを見に来てください。
https://layered.connpass.com/event/378115/

若手エンジニア募集しています。
自社サービス開発、フルスタックエンジニア、要件定義・設計等に興味のある方は是非。
https://www.wantedly.com/projects/2297977

参考文献

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?