Amazon Rekognitionは、画像と動画の中身をAPIひとつで解析するAWSのマネージドサービスです。物体やシーンのラベル付け、顔の検出と本人照合、不適切コンテンツの判定、保護具の着用確認を、学習済みモデルへのリクエストだけで実行できます。この記事では、boto3で動く最小コード、公式ドキュメントに書かれた固定上限と単価、日本語テキストが対象外という制約、2026年4月30日で新規利用が止まる機能、そして自前モデルへ切り替える条件を、実装の順序で並べました。
まとめ:標準APIの守備範囲と日本語非対応を先に確かめる
検討でつまずく箇所は、機能一覧ではなく守備範囲の見誤りです。着手前に確かめる点は4つ、検出対象が標準ラベルで表現できるか、扱うテキストが対応言語に入るか、処理量が月あたり何枚・何分になるか、使いたい機能が新規アカウントでまだ開けるかになります。
標準ラベルで足りる対象なら、S3へ画像を置いてdetect_labelsを呼ぶだけで、その日のうちに動くものができます。自社製品の型番判別やキズの等級判定は標準ラベルの外にあり、Custom Labelsか自前モデルの検討へ進みます。
日本の実装で最初に効く制約はテキスト検出です。AWSのテキスト検出ドキュメントが挙げる対応言語に日本語は入っておらず、看板や帳票を読ませる用途では成立しません。日本語文書はAmazon TextractやAI-OCRへ回し、Rekognitionは物体・顔・不適切表現の判定に絞ってください。
2026年に効く変更が1つあります。機能提供の変更を告知したページによると、ストリーミングビデオとバルク画像分析は2026年4月30日以降、新規のお客様には提供されません。直近12か月に使った実績のあるアカウントは引き続き使えますが、これから常時稼働カメラを組むなら画像APIでフレームを処理する構成へ寄せる判断が要ります。
費用の勘所は動画です。画像1枚が0.001 USD前後なのに対し、保存済み動画のラベル検出は1分0.10 USD、1時間で6 USD相当になります。
Amazon Rekognitionの定義とAPI一覧|学習不要で呼べる画像解析基盤
学習済みモデルをHTTPS APIで呼ぶマネージド推論の位置づけ
Rekognitionは、AWS側が訓練済みのモデルをHTTPS APIとして提供する形態のサービスです。利用者はモデル構造もGPUインスタンスも意識せず、画像のバイト列またはS3上のオブジェクトを指定して呼ぶだけで結果を受け取ります。推論基盤の運用もモデル更新もAWS側の責任範囲です。
提供されないものも明確です。モデルの重みは取り出せず、オンプレミスやエッジ端末での実行もできないため、画像が外部へ出ることを許容できない環境では候補から外れます。技術としての仕組みは画像認識AIの仕組みと開発の進め方で整理しました。
Group 1とGroup 2という料金区分が示す状態を持つAPIの境界
AWSの料金ページでは画像APIがGroup 1とGroup 2に分かれており、この区分は課金単位に見えて機能の性格を表しています。Group 1はIndexFacesやCompareFaces、AssociateFacesといった顔の索引付けと照合の系統、Group 2はDetectLabels、DetectFaces、DetectText、DetectModerationLabelsという検出の系統になります。
設計上の意味は状態の有無です。Group 2は1枚投げて結果が返るだけの処理、Group 1は顔コレクションという永続データを前提にした処理で、後者は誰の顔をいつまで保管するかという運用設計が先に要ります。
ImageとVideoで分かれる同期・非同期の2つの処理モデル
画像側のAPIは同期呼び出しで、その場でJSONが返ります。動画側は非同期で、StartLabelDetectionのような開始APIがジョブIDを返し、完了通知をAmazon SNS経由で受け取ってからGetLabelDetectionで結果を取りに行く二段構えです。
この違いを知らずに動画APIを同期前提のLambdaへ組み込むとタイムアウトで詰まります。動画分析のドキュメントには非同期ジョブとストリーミングの2経路が並んでおり、料金も設計も別物として扱う必要があるでしょう。
できることの一覧|ラベル・顔・テキスト・不適切表現の各APIと出力
画像側のAPIは、返すものと料金グループで整理すると選びやすくなります。boto3のメソッド名はスネークケース、公式ドキュメントのAPI名はパスカルケースで、指すものは同じです。
| API(boto3名) | 返すもの | 料金グループ | 代表的な用途 |
|---|---|---|---|
| detect_labels | 物体・シーンのラベル | Group 2 | 画像の自動タグ付け |
| detect_faces | 顔の属性と位置 | Group 2 | 人数計測・年齢層推定 |
| detect_text | 語と行のテキスト | Group 2 | ナンバープレート読取 |
| detect_moderation_labels | 不適切表現の分類 | Group 2 | 投稿画像の審査 |
| protective_equipment系 | 保護具の着用有無 | Group 2 | 現場の安全確認 |
| index_faces | 顔ベクトルの登録結果 | Group 1 | 本人照合の下準備 |
| search_users_by_image | 一致したユーザー | Group 1 | 入退室の本人確認 |
| compare_faces | 2枚の顔の類似度 | Group 1 | 身分証と自撮りの照合 |
detect_labelsが返す親子ラベルとバウンディングボックス
DetectLabelsは写っている物体、シーン、概念をラベルの配列として返します。APIリファレンスのとおり、Labels配列にはラベル名、信頼度、Parentsという親ラベルの配列、Instancesという位置情報が入る構造です。
親子関係を持つ点が集計で効きます。Sedanという語がCarの下位として返るため、Parentsで正規化しておけば、後からラベル体系が増えても集計側を壊さずに済みました。
顔・不適切表現・保護具を1枚の画像から判定する3つの検出API
DetectModerationLabelsは露骨な描写や暴力表現をカテゴリ階層で返し、UGCサイトの投稿審査に当たります。DetectProtectiveEquipmentはヘルメット・手袋・フェイスカバーの着用有無を人物単位で返す機能で、1枚あたり15人までという上限つきです。
顔照合の経路は2つに分かれます。1枚対1枚で類似度を出すCompareFacesと、登録済みの集合から探す顔コレクション方式です。免許証と自撮りの突き合わせなら前者を選びます。
boto3で動かす手順|環境準備からdetect_labelsの結果を読むまで
IAM権限とS3バケットを同一リージョンへ用意する2つの前提条件
準備は2つです。実行主体へRekognitionの呼び出し権限を与えることと、解析対象の画像を同一リージョンのS3バケットへ置くことになります。検証段階は管理ポリシーで通し、本番で使うAPIだけに絞る流れが扱いやすいでしょう。
リージョンの不一致は初回に踏みやすい落とし穴です。S3オブジェクトを指定する形式では、バケットとRekognitionのエンドポイントが同じリージョンにある必要があります。東京で動かすならバケットもap-northeast-1へ置いてください。
pip install boto3
aws configure set region ap-northeast-1
aws s3 mb s3://my-rekognition-demo --region ap-northeast-1
aws s3 cp sample.jpg s3://my-rekognition-demo/sample.jpg
aws rekognition detect-labels --max-labels 10 --min-confidence 70 --image "S3Object={Bucket=my-rekognition-demo,Name=sample.jpg}"
CLIでラベルが返れば、権限とリージョンの前提は通っています。
detect_labelsを呼ぶ最小コードとCLIでの動作確認
Pythonでの最小構成は、boto3のRekognitionリファレンスにあるとおり、クライアントを生成してImageパラメータにバケット名とオブジェクトキーを渡すだけです。
import boto3
rekognition = boto3.client("rekognition", region_name="ap-northeast-1")
res = rekognition.detect_labels(
Image={"S3Object": {"Bucket": "my-rekognition-demo", "Name": "sample.jpg"}},
MaxLabels=10,
MinConfidence=70,
)
for label in res["Labels"]:
parents = ",".join(p["Name"] for p in label["Parents"])
boxes = len(label.get("Instances", []))
print(label["Name"], round(label["Confidence"], 1), boxes, parents)
出力されるのはラベル名、信頼度、バウンディングボックスの個数、親ラベルの4つです。Instancesが空のラベルは位置を持たない概念なので、枠を描く用途では個数が0のものを除いておきます。
MinConfidenceとParentsでレスポンスを集計しやすく整える
MaxLabelsで返却数の上限を、MinConfidenceで足切りの信頼度を指定します。既定のまま呼ぶと信頼度の低いラベルまで大量に返るため、実務では55から80程度を明示する形が扱いやすい部類でした。
入力形式にも固定の上限があります。ガイドラインとクォータのページによると、S3オブジェクトとして渡す画像は15MBまで、APIパラメータへ生のバイト列で渡す場合は5MBまでで、対応形式はPNGとJPEGに限られます。
顔コレクションを組む手順|index_facesから本人照合までの5段階
create_collectionからassociate_facesまでの登録手順
顔照合は5段階です。コレクションを作り、登録したい人物の画像をindex_facesへ渡して顔ベクトルを追加し、ユーザーを作って顔ベクトルを紐づけ、最後にカメラ画像をsearch_users_by_imageへ渡します。ExternalImageIdへ社員番号などの外部キーを入れておくと、後から自社DBと突き合わせやすくなるでしょう。
COLLECTION = "staff-2026"
BUCKET = "my-rekognition-demo"
rekognition.create_collection(CollectionId=COLLECTION)
idx = rekognition.index_faces(
CollectionId=COLLECTION,
Image={"S3Object": {"Bucket": BUCKET, "Name": "staff_1042_front.jpg"}},
ExternalImageId="1042",
QualityFilter="AUTO",
MaxFaces=1,
)
face_id = idx["FaceRecords"][0]["Face"]["FaceId"]
rekognition.create_user(CollectionId=COLLECTION, UserId="emp-1042")
rekognition.associate_faces(
CollectionId=COLLECTION, UserId="emp-1042", FaceIds=[face_id]
)
hit = rekognition.search_users_by_image(
CollectionId=COLLECTION,
Image={"Bytes": open("gate.jpg", "rb").read()},
UserMatchThreshold=99,
)
print(hit["UserMatches"])
退会や退職の処理では、disassociate_facesで紐づけを外し、delete_facesとdelete_userで実体を消します。
顔ベクトルとユーザーベクトルの精度差、退会時に必要な削除処理
コレクションのドキュメントは、保存されるのが画像そのものではなく顔の特徴量ベクトルだと明記しています。同一人物の複数枚を1つのユーザーへ束ねたユーザーベクトルは、個々の顔ベクトルを検索するより精度が上がるとされ、1ユーザーにつき最大100件の顔ベクトルを紐づけられます。
登録時の注意は2つ。1枚に複数の顔が写っていると全員分が登録されるため、QualityFilterで低品質な顔を弾き、登録用画像は顔1つに切り出しておくこと。もう1つは削除経路で、退職や退会の処理と顔ベクトルの削除を最初から連動させておくことです。
動画を解析する手順|非同期ジョブとSNS通知、新規提供終了の期日
start_label_detectionとNextTokenのページング処理
動画は開始APIを呼んだ時点でジョブIDが返り、処理はバックグラウンドで進みます。完了はSNSトピックへ通知されるので、LambdaやSQSを起動して取得APIを呼ぶ構成が定石でしょう。
job = rekognition.start_label_detection(
Video={"S3Object": {"Bucket": BUCKET, "Name": "line_cam.mp4"}},
NotificationChannel={"SNSTopicArn": SNS_TOPIC_ARN, "RoleArn": ROLE_ARN},
MinConfidence=70,
)
token = None
labels = []
while True:
kw = {"JobId": job["JobId"], "MaxResults": 1000}
if token:
kw["NextToken"] = token
res = rekognition.get_label_detection(**kw)
labels.extend(res["Labels"])
token = res.get("NextToken")
if not token:
break
print(len(labels))
取得側でページングを省くと、短い検証動画では通り、本番の長尺動画で結果が欠けます。NextTokenの有効期間は24時間なので、取得処理を翌日へ持ち越す設計にはできません。
ストリーミングとバルク画像分析が新規利用不可になる期日と代替策
常時稼働カメラをKinesis Video Streams経由で流す構成は、これから始めるアカウントでは取れなくなりました。公式の告知では、ストリーミングビデオとバルク画像分析が2026年4月30日以降、新規のお客様に提供されないと明記されています。直近12か月に利用実績のあるアカウントだけがアクセスを維持する形です。
代替は画像APIへの寄せ替えになります。動体検知で映像が動いた区間だけフレームを切り出し、detect_labelsやdetect_facesへ回す構成なら、1秒1枚で1時間3,600枚、約3.6 USDに収まります。ストリーミングの1分0.00817 USDより高くつく場面もあるため、フレーム間隔を先に決めてから試算してください。
料金を見積もる|画像・動画・Face Livenessの単価と無料枠の実額
単価そのものは安く見えますが、伸び方には型があります。以下は米国東部(バージニア北部)の公開単価です。リージョンで単価が異なるため、見積もる際は自分のリージョンの数値へ置き換えてください。
| 対象 | 課金単位 | 単価の目安 | 12か月無料枠 |
|---|---|---|---|
| 画像API(Group 1) | 1枚 | 0.0010〜0.0004 USD | 月1,000枚 |
| 画像API(Group 2) | 1枚 | 0.0010〜0.00025 USD | 月1,000枚 |
| Image Properties | 1枚 | 0.00075〜0.0006 USD | なし |
| 顔メタデータ保存 | 1件・月 | 0.00001 USD | 各1,000件 |
| 保存済み動画(ラベル) | 1分 | 0.10 USD | 月60分 |
| 保存済み動画(ショット) | 1分 | 0.05 USD | 月60分に含む |
| ストリーミング | 1分 | 0.00817 USD | なし |
| Face Liveness | 1回 | 0.015〜0.010 USD | なし |
| Custom Labels | 1時間 | 訓練1 USD・推論4 USD | 訓練2時間・推論1時間 |
| Custom Moderation | 1時間 | 訓練5 USD | 訓練2時間 |
画像APIの階段単価とGroup 1・Group 2で異なる最下段の差
画像APIは、最初の100万枚が1枚0.0010 USD、次の400万枚が0.0008 USD、次の3,000万枚が0.0006 USDという階段構造です。3,000万枚を超えた先だけGroup 1とGroup 2で差がつき、Group 1は0.0004 USD、Group 2は0.00025 USDまで下がります。
Group 1とGroup 2は別々に集計されるため、顔照合と物体検出を併用するなら両方の枚数を分けて数えてください。月10万枚を検出系だけで処理するなら100 USD程度、100万枚なら1,000 USD程度が目安で、この規模を常時流すなら自前モデルとの損益分岐を一度計算する価値があります。
動画1時間6ドルとFace Livenessの回数課金の見積もり方
保存済み動画のラベル検出とコンテンツモデレーションは1分0.10 USD、ショット検出は1分0.05 USDです。1時間の動画1本にラベル検出をかけると6 USD、月1,000本なら6,000 USDに達します。
Face Livenessは最初の50万回が1回0.015 USD、次の250万回が0.0125 USD、それを超えると0.010 USDという刻みでした。本人確認フローでは再試行の発生率まで含めて回数を見積もってください。
制限値を設計に織り込む|画像サイズ・顔ベクトル上限・動画の長さ
公式ドキュメントは、申請で引き上げられないSet quotasと、申請で変更できるDefault quotasを分けて書いています。前者は設計の前提になります。
| 項目 | 上限・下限の値 |
|---|---|
| S3オブジェクトの画像 | 15MB |
| バイト列で渡す画像 | 5MB(保護具検出は4MB) |
| 画像の最小寸法 | 縦横80ピクセル |
| DetectLabelsの最大寸法 | 縦横10,000ピクセル |
| 顔ベクトル(1コレクション) | 2,000万件 |
| ユーザーベクトル(既定) | 1,000万件 |
| 1ユーザーの顔ベクトル | 100件 |
| DetectTextの検出語数 | 1画像100語 |
| 保存済み動画 | 10GBかつ6時間 |
| 同時実行ジョブ | 1アカウント20件 |
| NextTokenの有効期間 | 24時間 |
画像15MB・顔ベクトル2000万・動画6時間という固定上限
顔検出には寸法の下限もあります。1920×1080の画像なら顔は40×40ピクセル以上でなければ検出されず、それより大きい画像では必要な顔サイズも比例して上がる仕様です。遠景の防犯カメラで顔照合が当たらないときは、しきい値より先にこの条件を疑ってください。
処理が遅いときの見直し順も上限から逆算できます。高解像度のまま送っても精度は比例して上がらないので、長辺1,000から1,500ピクセル程度へ縮小し、S3にある画像は参照渡しへ切り替えると往復が減ります。
Custom LabelsとFace Livenessを追加する判断と課金の落とし穴
Custom Labelsの時間課金が割に合う処理量の分かれ目
Custom Labelsのドキュメントは、標準ラベルに無い自社のロゴや製品を、少量の教師データで学習させる機能だと説明しています。AutoMLの形を取り、ハイパーパラメータ調整やアーキテクチャ選定は不要です。
料金構造が独特なので注意してください。推論は画像枚数ではなく、モデルを起動している時間に対して1時間4 USDが課金されます。24時間起動すると月約2,900 USDとなり、1日数百枚しか処理しない用途では割に合いません。日次バッチで動かして終わり次第モデルを停止できるかが採否の分かれ目になるでしょう。
Face Livenessで写真のなりすましを弾く実装と料金の刻み
Face Livenessのドキュメントによると、この機能はカメラの前にいるのが実在の人物か、印刷写真や画面越しの映像かを判定します。顔照合だけでは他人の顔写真をかざされたときに通過するため、口座開設や本人確認では照合とライブネス判定を組で入れる設計が前提でした。
実装ではフロントエンド側のAmplify UIコンポーネントを使い、短い自撮り動画をセッション単位で送って結果を受け取ります。制度面の位置づけは生体認証の仕組みと導入判断で扱いました。標準のコンテンツモデレーションを自社基準へ寄せるCustom Moderationという拡張もあり、トレーニングは1時間5 USDです。
自前モデル・マルチモーダルLLMへ切り替える判断条件と見送る場面
ここが判断の中心になります。向かない領域では、自前モデルやマルチモーダルLLMへ切り替えたほうが安く速く済みました。
Rekognitionを採用してよい条件は汎用クラスと運用体制
採用が正解になるのは、検出対象が人・車・動物・家具といった汎用クラスに収まり、処理がクラウド上で完結してよく、機械学習の専任者が1名以下で、月間の処理量が数十万枚以下という条件が揃うときです。モデルの訓練・デプロイ・監視という運用を丸ごと省ける効果が単価差を上回ります。
本人確認や不適切コンテンツ審査のように、AWS側がモデルを継続更新している領域も相性が良い部類でしょう。他社サービスとの横並びは画像解析APIの料金と無料枠の比較にまとめました。
エッジ実行と細かい粒度が要るならYOLOなど自前モデルへ寄せる
見送るべき場面は明確です。第1に、カメラ側やライン上の端末で推論する必要があり通信を挟めないとき。第2に、検出対象が自社製品の型番やキズの等級のように標準ラベルへ写像できないとき。第3に、月間数百万枚を常時処理して単価が支配的になるときになります。
この領域ではYOLOv9による物体検出の実行手順のような自前モデルが現実解です。ただしアノテーション、学習環境、推論基盤、精度監視という4つの仕事が発生するため、まず標準APIで試作して精度の不足量を数字にしてから移行を決める順序が安全でしょう。画像認識AIモデル構築の支援では、この見極めを実データで検証しています。
マルチモーダルLLMとは検出と説明という役割で分けて併用する
ClaudeやGPT系のマルチモーダルモデルは、画像の内容を文章で説明したり、条件を自然言語で指定して判定させたりできます。安全上の問題があれば指摘して、といった曖昧な指示を通せる点は、固定ラベルを返すRekognitionには無い性質です。
一方で、座標精度、1枚あたりの単価、レスポンスの安定性ではRekognitionに分があります。一次スクリーニングをRekognitionで行い、引っかかった少数だけをLLMへ回して理由付けを任せる二段構成が、費用と精度の折り合いを付けやすい形でした。言語側のAWSサービスはAmazon Comprehendでできることも確認してください。
運用で詰まる箇所|しきい値・日本語テキスト・顔データの保管期間
信頼度しきい値を業務側の誤りコストから逆算する用途別の設定基準
APIが返す信頼度は確率ではなくモデル内部のスコアです。80以上なら正しいと一律に決めず、業務でどちらの誤りが痛いかから逆算します。不適切投稿の審査は見逃しが致命的なのでしきい値を下げて人手確認を厚くし、自動タグ付けは誤タグが目立つので上げる、という具合に方向が変わるでしょう。
顔照合では、誤って通すことが事故になる用途ならしきい値を高く取り、二要素目を併用してください。公式ドキュメントの社員認証の例でも、99%という類似度スコアが判定の目安として挙げられています。
日本語テキストは対象外なのでTextractやAI-OCRへ回す
テキスト検出のドキュメントが挙げる対象言語は英語・アラビア語・ロシア語・ドイツ語・フランス語・イタリア語・ポルトガル語・スペイン語で、日本語は入っていません。1画像あたり最大100語、水平から±90度以内という制限も同じページに書かれています。
ナンバープレートや英字ラベルには使えても、日本語の看板や帳票には向きません。日本語の文書はAmazon Textractの機能と他OCRとの違いで扱う領域へ回し、物体検出はRekognition、日本語テキストはTextractと役割で分けて並列に呼ぶ構成が素直です。
顔データは個人識別符号として保管期間と削除手順を先に決めておく
顔の特徴量は、日本の個人情報保護法で個人識別符号として扱われます。個人情報保護委員会の法令ページで定義を確認したうえで、取得時の利用目的の明示、保管期間、削除要求への対応手順を実装より前に決めておいてください。
保管料は1件あたり月0.00001 USDと小さいものの、金額そのものより、退会したユーザーの生体データを保持し続けている状態のほうが問題になる場面が多いでしょう。海外展開では生体データを州法で厳しく定める地域もあります。
よくある質問
検討でよく挙がる質問を、実装判断に関わるものに絞ってまとめました。
Amazon Rekognitionは無料で試せますか?
AWSアカウント作成から12か月間の無料利用枠があります。Group 1とGroup 2の画像APIがそれぞれ月1,000枚、動画分析が月60分、顔ベクトルとユーザーベクトルが各1,000件まで無料です。Custom Labelsはトレーニング2時間と推論1時間が含まれます。
Rekognitionで日本語の文字を読み取れますか?
読み取れません。公式ドキュメントが挙げるテキスト検出の対象言語は英語など8言語で、日本語は含まれていないためです。日本語の帳票や看板はAmazon TextractやAI-OCRへ回してください。
Custom Labelsと自前モデルはどちらを選ぶべきですか?
推論の稼働時間で決まります。Custom Labelsは1時間4 USDの時間課金なので、日次バッチのように短時間だけ起動する使い方なら割安です。24時間の常時稼働なら月2,900 USD規模となり、自前モデルと比較する段階に入ります。
顔認証システムをRekognitionだけで作れますか?
照合そのものはindex_facesとsearch_users_by_imageで組めますが、それだけでは写真をかざされたときに通過します。Face Livenessによる実在判定を組み合わせ、解錠や決済では二要素目を併用してください。顔ベクトルの削除経路も同時に設計します。
今から新規アカウントでストリーミングビデオを使えますか?
使えません。ストリーミングビデオとバルク画像分析は2026年4月30日以降、新規のお客様への提供が終了しており、直近12か月に利用実績のあるアカウントだけがアクセスを保持しています。これから常時稼働カメラを組む場合は、フレームを切り出して画像APIへ渡す構成に置き換えてください。
関連記事
- 画像解析APIとは?主要4サービスの料金・無料枠を比較して選ぶ:GoogleやAzureを含む横並び比較です。
- 画像認識AIとは?仕組み・できること・開発の進め方をわかりやすく解説:技術としての仕組みと開発の進め方を扱います。
- Amazon Textractとは?機能・料金・使い方と他OCRとの違いを解説:日本語文書の読み取りを担うAWSサービスです。
- Amazon Comprehendとは?読み方・できること・料金と日本語で使える機能:テキスト側の分析を担う並びのサービスです。
- RT-DETRとは?Baidu製リアルタイム物体検出モデルの仕組みとYOLOとの違い:自前モデル側の候補になります。