はじめに
AWS は様々な AI サービスを提供しています
そして、それらのサービスはブラウザから簡単に試せるようになっています
サービス | 機能 | お試し記事 | Elixir 実装例 |
---|---|---|---|
Transcribe | 音声の文字起こし(音声認識) | 参照 | 参照 |
Polly | 文書の読み上げ(音声合成) | 参照 | 参照 |
Lex | チャットボット | 参照 | Coming Soon... |
Translate | 翻訳 | 参照 | 参照 |
Rekognition | 画像認識 顔認識 |
参照 参照 |
参照 |
Textract | 画像からの表データ読込 | 参照 | 参照 |
Bedrock | 生成AIによるチャット、画像生成 | 参照 | 参照 |
本記事では AWS の AI 画像処理サービス Amazon Rekognition の物体検出、テキスト検出をブラウザから試してみます
なお、顔検出、顔識別機能については以下の記事にまとめています
Amazon Rekognition とは
Amazon Rekognition は AI モデルによって画像から物体や人物の顔を検出し、それが何であるか識別するサービスです
Amazon Rekognition の使い途(ユースケース)
Amazon Rekognition は画像に何が写っているかだけでなく、それがどこにあるのかを返してくれます
Amazon Rekognition は以下のような用途に使用可能です
- 監視カメラ映像からの不審人物検出
- ドライブレコーダー映像からの車両検出
- 写真からのテキスト抽出
- 動画から特定人物が写った箇所だけを抽出
Amazon Rekognition の料金
AWS の料金は基本的に従量課金制です
また、リージョン(サービス提供するサーバーが存在する地域)によって料金が異なります
Amazon Rekognition を東京リージョンで使う場合、静止画からの物体検出なら $0.0013 / 枚
の料金になります
150 ¥/$
の場合、 ¥0.195 / 枚
= ¥195 / 千枚
となります
例えば 1 万枚の写真からの物体検出を実行した場合、 ¥1,950 請求されます
ただし、 AWS のサービスの多くには無料利用枠が存在します
無料利用枠
AWS の無料利用枠の一環として、Amazon Rekognition Image を無料で開始していただけます。無料利用枠は 12 か月ご利用になれます。
画像分析: 無料利用枠期間中は、グループ 1 およびグループ 2 の API で、それぞれ 1 か月に 5,000 枚の画像を無料で分析することができます。 Image Properties は無料利用枠ではありません。
グループ 1 は顔識別等に使う API で、グループ 2 がそれ以外です
無料利用期間中の場合、物体検出なら 5,000 枚まで無料利用可能なため、本記事で実行する程度の処理であれば無料範囲内に収まります
アカウント作成
Amazon Rekognition を使うためには、 AWS のアカウント作成が必要です
以下の公式手順に従って、アカウントを作成してください
クレジットカードと電話番号が必要になります
予めご用意ください
ブラウザからの物体検出実行
Amazon Rekognition への移動
AWS のマネジメントコンソールにログインすると、以下のような画面が表示されます
この画面から最近使ったサービスなどにアクセスできるようになっています
上メニューにある検索ボックスに rek
と入力してみましょう
サービスの候補として Amazon Rekognition が表示されます
Amazon Rekognition をクリックして、サービスページに移動しましょう
以下のような画面が表示されます
ラベル検出の実行
ブラウザから物体検出(ラベル検出 = 何が写っているか)を実行してみましょう
左メニューから「デモ」の「ラベル検出」をクリックします
ラベル検出のデモ画面が表示され、サンプル画像での実行結果が表示されます
左側の画像に対して、右側に検出された物体の名前が列挙されています
- Neighborhood(近所) 99.9 %
- City(街) 99.9 %
- Road(道路) 99.9 %
- Street(通り) 99.9 %
- Urban(都会) 99.9 %
- Person(人) 98.7 %
数値は確信度で、 AI がどれだけ自信を持って答えているか、という意味です
99.9 % なら「ほぼ間違いない」回答として AI は答えていますが、 30 % 程度なら「もしかしたら」程度の回答です
多くの場合、確信度が一定の値(閾値)以上の場合のみ画面に表示する、というような制御を行います
また、画像内の四角形の内側にカーソルを合わせると、その中に写っているものの名前が表示されます
この四角形が AI によって検出した物体の位置を示しています
また、右側の「レスポンス」をクリックすると、以下のようなテキストが表示されます
{
"Labels": [
{
"Name": "Neighborhood",
"Confidence": 99.99998474121094,
"Instances": [],
"Parents": [],
"Aliases": [],
"Categories": [
{
"Name": "Buildings and Architecture"
}
]
},
{
"Name": "City",
"Confidence": 99.98468017578125,
"Instances": [],
"Parents": [],
"Aliases": [
{
"Name": "Town"
}
],
"Categories": [
{
"Name": "Buildings and Architecture"
}
]
},
{
"Name": "Road",
"Confidence": 99.98146057128906,
"Instances": [],
"Parents": [],
"Aliases": [],
"Categories": [
{
"Name": "Transport and Logistics"
}
]
},
{
"Name": "Street",
"Confidence": 99.98146057128906,
"Instances": [],
"Parents": [
{
"Name": "City"
},
{
"Name": "Road"
},
{
"Name": "Urban"
}
],
"Aliases": [],
"Categories": [
{
"Name": "Buildings and Architecture"
}
]
},
{
"Name": "Urban",
"Confidence": 99.98146057128906,
"Instances": [],
"Parents": [],
"Aliases": [],
"Categories": [
{
"Name": "Colors and Visual Composition"
}
]
},
{
"Name": "Person",
"Confidence": 98.77580261230469,
"Instances": [
{
"BoundingBox": {
"Width": 0.20574712753295898,
"Height": 0.2853928506374359,
"Left": 0.4315406382083893,
"Top": 0.3422974646091461
},
"Confidence": 98.77580261230469
},
{
"BoundingBox": {
"Width": 0.009459801018238068,
"Height": 0.016445089131593704,
"Left": 0.218057319521904,
"Top": 0.535713255405426
},
"Confidence": 96.38606262207031
},
...
これは JSON という形式で物体検出結果を表したものです
Neighborhood
や City
のような画像全体に対するラベルと、 Person
や Car
のような画像に写っている物に対するラベルが含まれています
画像に写っている物の場合、 BoundingBox
の中に位置情報も入っています
幅、高さ、左位置、上位置を画像全体に対する比で示しています
プログラムから Rekognition を呼び出す場合、この JSON を読み込んで利用することになります
「アップロード またはドラッグアンドドロップ」のところから、自前の画像をアップロードしてみましょう
別府の鬼山地獄の写真をアップロードしたところ、 Crocodile = ワニ と Lizard = トカゲ が返ってきました
Crocodile の方が確信度が高いので、まあ正解と言えるのではないでしょうか
返答されるラベルはあくまでも Rekognition が標準的に学習しているラベルなので、例えば「畳」のような日本独自のものは答えられません
そういったものに対応する場合、カスタムラベルをトレーニングする必要があります
画像のプロパティ
左メニューから「画像のプロパティ」をクリックすると、画像の色や品質に関する情報を取得するデモが表示されます
左側に表示されている画像に対して、右側に以下の情報を表示しています
- ドミナントカラー = メインとして使われている色
- Brightness = 明るさ
- Sharpness = 輪郭の鮮明さ
- Contrast = 明暗の明確さ
また、前景と背景に分けた場合のそれぞれの値(Contrast 除く)も取得可能です
画像のモデレーション(不適切画像の検出)
左メニューから「画像のモデレーション」をクリックすると、不適切画像を検出するデモが表示されます
左下サンプル画像のうち、左側の画像に対しては「結果」欄に「もでレーションは検出されませんでした」と表示されています
サンプル画像のうち、右側の画像(ビキニの女性)をクリックしてみましょう
「結果」欄には以下のように表示されました
- Suggestive = 挑発的
- Female Swimwear Or Underwear = 女性の水着、下着
- Revealing Clothes = 露出度の高い服
例えば写真共有サービスで不適切画像のアップロードを規制するなどの用途に使えます
イメージ内のテキスト
左メニューから「イメージ内のテキスト」をクリックすると、画像からのテキスト検出デモが表示されます
左側の画像に対して、右側に検出したテキストが表示されます
「レスポンス」をクリックすると、以下のように表示されます
{
"TextDetections": [
{
"DetectedText": "IT'S",
"Type": "LINE",
"Id": 0,
"Confidence": 100,
"Geometry": {
"BoundingBox": {
"Width": 0.14000000059604645,
"Height": 0.09833335876464844,
"Left": 0.6722222566604614,
"Top": 0.1850000023841858
},
"Polygon": [
{
"X": 0.6722222566604614,
"Y": 0.1850000023841858
},
{
"X": 0.8122222423553467,
"Y": 0.1850000023841858
},
{
"X": 0.8122222423553467,
"Y": 0.28333336114883423
},
{
"X": 0.6722222566604614,
"Y": 0.28333336114883423
}
]
}
},
...
幅、高さ、左位置、上位置で表す BoundingBox
とは別に、 Polygon
でテキストを含む多角形の頂点も取得しています
これはテキストが斜めになっている場合への対応です
この機能を使うことで、ナンバープレートの文字検出などが可能になります
ただし、日本語には対応していないことに注意しましょう
Amazon Rekognition is designed to detect words in English, Arabic, Russian, German, French, Italian, Portuguese and Spanish.
PPE 検出
ヘルメットやゴーグル、マスクなどの個人用防護具 = PPE 検出も可能です
この機能により、作業者が正しい装備をしているか、といったチェックが可能です
まとめ
Amazon Rekognition を使うことで、画像から物体やテキストなどが検出できます
画像の色検出や不適切な画像の検出なども可能なので、組み合わせることで様々な応用が可能です
まずはデモで色々検出してみて、自分の用途に合うのか確認してみましょう