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?

More than 1 year has passed since last update.

DatabricksにおけるAmazon Rekognitionの活用

Last updated at Posted at 2023-02-24

こちらを試してみました。

こちらの記事を参考にさせていただきました。

準備

  • 判別する画像をアップロードするS3バケットを作成します。判別する画像をアップロードしておきます。
  • AWSのサービスにアクセスするのでアクセスキーを取得しておきます。セキュリティ上、IAMロールなどを使う方がいいのですが今回は動作確認なのでAWSアクセスキーを使用します。

ライブラリのインポート

ライブラリをインポートします。boto3はDatabricksランタイムに同梱されているのでpip installは不要です。

Python
# AWSを使用するためのライブラリを読み込む
import boto3

# 認識結果を表示するためのライブラリを読み込む
from matplotlib import pyplot as plt
from PIL import Image
import random
import io

# 使用するバケットを指定する
bucket = "<S3バケット名>"
# 使用するリージョンを指定する
region = "ap-northeast-1"
# 認識させるファイルを指定する(あらかじめ上のバケットに配置しておきます)
filename = "target.png"

# アクセスキー
access_key = "<AWSアクセスキー>"
secret_key = "<AWSシークレットキー>"

AWSサービスへの接続

Python
# サービスへの接続情報を取得する
session = boto3.Session(
    aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=region
)

# S3サービスに接続する
s3 = session.client("s3")
# Rekognitionサービスに接続する
rekognition = session.client("rekognition")

判定画像の読み込み

Python
# オブジェクトデータを取得
s3_object = s3.get_object(
  Bucket=bucket, Key=filename)

# バイトデータを読み込み
image_data = io.BytesIO(s3_object['Body'].read())

# 画像に変換
img = Image.open(image_data)

# 画像のサイズを取得する
img_width = img.size[0]
img_height = img.size[1]

Rekognitionによる認識

ちなみに指定している画像はこちらです。自分の写真です。
IMG_3525.png

Python
# S3に置いたファイルをRekognitionに認識させる
res = rekognition.detect_labels(
  Image={"S3Object": {"Bucket": bucket, "Name": filename}})

# Rekognitionの認識結果を表示する
print("Detected labels for " + filename)
print()
for label in res["Labels"]:
  print("Label: " + label["Name"])
  print("Confidence: " + str(label["Confidence"]))
  print("Instances:")
  for instance in label["Instances"]:
      print("  Bounding box")
      print("    Top: " + str(instance["BoundingBox"]["Top"]))
      print("    Left: " + str(instance["BoundingBox"]["Left"]))
      print("    Width: " + str(instance["BoundingBox"]["Width"]))
      print("    Height: " + str(instance["BoundingBox"]["Height"]))
      print("  Confidence: " + str(instance["Confidence"]))
      print()

      print("Parents:")
      for parent in label["Parents"]:
          print("   " + parent["Name"])
      print("----------")
      print()

認識結果が表示されます。
Screenshot 2023-02-24 at 20.24.42.png

認識結果の可視化

これだと判別しにくいので画像に認識結果をオーバーレイさせます。

Python
# 画像と枠を表示させる
colors = {}
for label in res["Labels"]:
  label_name = label["Name"]
  if label_name not in colors:
      colors[label_name] = (random.random(), random.random(), random.random())
      for instance in label["Instances"]:
          bb = instance["BoundingBox"]

          rect = plt.Rectangle(
              (bb["Left"] * img_width, bb["Top"] * img_height),
              bb["Width"] * img_width,
              bb["Height"] * img_height,
              fill=False,
              edgecolor=colors[label_name],
          )
          plt.gca().add_patch(rect)

plt.imshow(img)
plt.show()

人間も鳥も認識されていることがわかります。

download.png

なお、類似のサービスにLabelboxというものがあります。こちらもDatabricksと連携することが可能です。

PrivateLink環境での利用

追加の設定が必要となります。こちらをご覧ください。

Databricks 無料トライアル

Databricks 無料トライアル

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?