🍻

AmazonRekognitionをSDK(Ruby)から使う方法

2022/07/19に公開

はじめに

今回のゴール

この3枚の画像の中で一番「これぞビール!!」な画像はどれなのかをAmazonRekognitionに判定してもらいます。

beer1.jpg

beer2.jpg

beer3.jpg

前提

  • AWSにアカウントがあること
  • ruby 2.7.1
  • macOS BigSurバージョン11.6.5

ハンズオン

S3にBucketを作成し、画像をアップロード

今回は「test-rekognition0718」というBucketを作成し、「beer1.jpg」「beer2.jpg」「beer3.jpg」の画像をアップロード

AWSCLIを設定

参考記事
https://qiita.com/reflet/items/e4225435fe692663b705

設定が終わったあとのconfigとcredentialsは以下のような形です
~/.aws/config

[default]
region = ap-northeast-1
output = json

~/.aws/credentials

[default]
aws_access_key_id = AWS_ACCESS_KEY_ID
aws_secret_access_key = AWS_SECRET_ACCESS_KEY

プロジェクト作成

今回は雑にrekognition0718ディレクトを作成

mkdir rekognition0718 && cd rekognition0718

SDKをインストール

bundlerをインストール

$ gem install bundler

Gemfileを作成

$ vim Gemfile

source 'https://rubygems.org'
gem 'aws-sdk'

インストール

$ bundle install

SDKでAmazonRekognitionを使う

実行

AmazonRekognitionを使うファイルを作成

$ vim rekognition.rb

require "aws-sdk"

rekognition = Aws::Rekognition::Client.new(region: "ap-northeast-1")

BUCKET_NAME = "test-rekognition0718"
BEER1_IMAGE_NAME = "beer1.jpg"
BEER2_IMAGE_NAME = "beer2.jpg"
BEER3_IMAGE_NAME = "beer3.jpg"

# S3 URI
# s3://test-rekognition0718/beer1.jpg
result_beer1 = rekognition.detect_labels({
  image: {
    s3_object: {
      bucket: BUCKET_NAME,
      name: BEER1_IMAGE_NAME
    },
  }
})
result_beer1.labels.each do |label|
  puts("#{label.name} #{label.confidence} %")
end
puts ""

# S3 URI
# s3://test-rekognition0718/beer2.jpg
result_beer2 = rekognition.detect_labels({
  image: {
    s3_object: {
      bucket: BUCKET_NAME,
      name: BEER2_IMAGE_NAME
    },
  }
})
result_beer2.labels.each do |label|
  puts("#{label.name} #{label.confidence} %")
end
puts ""

# S3 URI
# s3://test-rekognition0718/beer3.jpg
result_beer3 = rekognition.detect_labels({
  image: {
    s3_object: {
      bucket: BUCKET_NAME,
      name: BEER3_IMAGE_NAME
    },
  }
})
result_beer3.labels.each do |label|
  puts("#{label.name} #{label.confidence} %")
end



実行

$ ruby rekognition.rb

結果

Person 97.69644927978516 %
Human 97.69644927978516 %
Glass 96.4124526977539 %
Beverage 94.60195922851562 %
Drink 94.60195922851562 %
Beer Glass 87.98907470703125 %
Alcohol 87.98907470703125 %
Beer 87.98907470703125 %
Coffee Cup 77.27938079833984 %
Cup 77.27938079833984 %
Sink Faucet 76.57266235351562 %
Computer Keyboard 68.21126556396484 %
Electronics 68.21126556396484 %
Computer 68.21126556396484 %
Hardware 68.21126556396484 %
Keyboard 68.21126556396484 %
Computer Hardware 68.21126556396484 %
Worker 62.57150650024414 %
Bartender 55.46221923828125 %

Stein 98.33676147460938 %
Jug 98.33676147460938 %
Alcohol 93.84426879882812 %
Beverage 93.84426879882812 %
Drink 93.84426879882812 %
Beer 92.31675720214844 %
Glass 91.3091049194336 %
Lager 75.81610107421875 %
Beer Glass 69.35620880126953 %
Lamp 61.064876556396484 %

Beer Glass 99.35428619384766 %
Glass 99.35428619384766 %
Beer 99.35428619384766 %
Alcohol 99.35428619384766 %
Beverage 99.35428619384766 %
Drink 99.35428619384766 %
Person 93.45838928222656 %
Human 93.45838928222656 %
Finger 79.82481384277344 %
Lager 75.76312255859375 %
Thumbs Up 57.1778564453125 %
Goblet 56.57130432128906 %

必要なところを抽出

beer3.jpg beer2.jpg beer3.jpg
Beer 87.98907470703125 92.31675720214844 99.35428619384766

ということで、一番「これぞビール!!」な画像はこれでした。

beer3.jpg

おわり

ビールが飲みたくなりました。
今回は、初歩的な実験だったので、今度は実際にアプリに組み込んでみると楽しいかも!

Discussion