動画モデレーションは、動画内のリスクのあるコンテンツやコンプライアンス違反コンテンツを検出する機能で、ポルノの検出、テロリストのコンテンツの検出、広告違反の検出、不適切なシーンの検出、ロゴの検出、音声スパム対策をサポートしています。このトピックでは、API を使用して動画のコンテンツを非同期で検出する方法について説明します。
動画の非同期モデレーション
/green/video/asyncscan API を使用して、動画の非同期モデレーションを実行します。
この操作を呼び出して、非同期動画モデレーションタスクを作成できます。HTTP リクエストの構築方法については、「リクエスト構文」をご参照ください。または、「SDK 概要」で提供されている事前構築済みリクエストを使用することもできます。
課金
これは有料の API オペレーションです。課金の詳細については、「Content Moderation 料金」をご参照ください。
複数のシナリオでコンテンツをモデレートする場合、すべてのシナリオの合計料金が請求されます。各シナリオの料金は、モデレートされたビデオフレーム数にそのシナリオの単位価格を掛けたものです。音声スパム対策機能を使用する場合は、追加料金が発生します。この料金は、動画の持続時間に音声スパム対策機能の単位価格を掛けたものです。
モデレーション対象
この操作を呼び出して、動画ファイルまたは動画ストリームをモデレートできます。動画ファイルは、キャプチャされたフレームのシーケンスを送信するか、動画の URL を指定することで指定できます。
Return Results
非同期検出タスクはリアルタイムで結果を返しません。コールバックまたはポーリングを使用して結果を取得する必要があります。結果は最大 1 時間保存されます。
コールバックを使用して結果を取得する:非同期モデレーションタスクを送信する際に、リクエストに callback パラメーターを含めることで、モデレーション結果を自動的に受信できます。詳細については、「リクエストパラメーター」をご参照ください。
ポーリングを使用する:callback パラメーターを含めずに非同期モデレーションタスクを送信します。その後、結果クエリ操作を呼び出してモデレーション結果を取得します。詳細については、「/green/video/results 操作の説明」をご参照ください。
動画要件
-
動画ファイルの URL は HTTP または HTTPS プロトコルを使用する必要があります。
-
サポートされる動画ファイル形式:AVI、FLV、MP4、MPG、ASF、WMV、MOV、WMA、RMVB、RM、FLASH、および TS。
-
動画サイズ制限:単一の動画ファイルのデフォルトの最大サイズは 200 MB です。
200 MB を超える動画を処理する必要がある場合は、より小さなセグメントに分割する必要があります。または、DingTalk グループ (ID: 35573806) に参加してテクニカルサポートに連絡し、制限の引き上げを依頼してください。
-
サポートされる動画ストリームプロトコル:RTMP、HLS、HTTP-FLV、および RTSP。
-
動画ストリームの持続時間制限:単一の動画ストリーム検出タスクは最大 24 時間実行されます。この制限を超えると、タスクは自動的に終了します。
-
動画の検出時間は、動画のダウンロード時間に依存します。動画ファイルが保存されているストレージサービスが安定かつ信頼性が高いことを確認してください。動画ファイルの保存には Alibaba Cloud OSS の使用を推奨します。
表 1.ユースケースの説明
ユースケース
説明
検出結果の分類
動画ポルノ検出
動画にポルノコンテンツが含まれているかどうかを検出します。
正常、ポルノ
動画の暴力・テロ・政治的センシティブコンテンツ検出
動画に暴力的、テロリスト、または政治的にセンシティブなコンテンツが含まれているかどうかを検出します。
正常、暴力/テロ/政治的センシティブ
動画の不適切なシーン検出
動画に不適切なシーンが含まれているかどうかを検出します。
正常、不適切なシーン (例:ブラックスクリーン、ホワイトスクリーン)
動画ロゴ
動画に特定のロゴが含まれているかどうかを検出します。
正常、ロゴ
動画のテキストおよび画像違反検出
動画に広告または禁止されたテキストコンテンツが含まれているかどうかを検出します。
正常、広告またはテキスト違反
動画の音声違反検出
説明このシナリオは、非同期動画検出 API のみでサポートされています。詳細については、「非同期検出」をご参照ください。
動画の音声に禁止情報が含まれているかどうかを検出します。
説明デフォルトの認識言語は中国語です。英語コンテンツを認識するには、アカウントマネージャーに連絡してください。
正常、スパム、広告、政治的センシティブ、暴力/テロ、侮辱的言語、ポルノ、フラッディング、禁止コンテンツ、カスタム (例:カスタムキーワードにヒット)
-
秒間クエリ数 (QPS) 制限
この API の秒間クエリ数 (QPS) 制限は、ユーザーあたり 50 で、同時ストリーム数の上限は 20 です。つまり、同時に最大 20 個のタスクを処理できます。同時実行数の上限を引き上げるには、ビジネスマネージャーに連絡してください。これらの制限を超えると速度制限がトリガーされ、ビジネスに影響を与える可能性があります。呼び出しを適切に計画してください。
リアルタイム処理が優先されない場合は、オフライン検出モードを有効にすることを推奨します。このモードでは、検出タスクは送信後 24 時間以内に開始されます。
リクエストパラメーター
パラメーター | タイプ | 必須 | 例 | 説明 |
bizType | String | いいえ | default | このフィールドは、ご利用のビジネスシナリオを識別します。Content Moderation コンソールでビジネスシナリオを作成できます。詳細については、「モデレーションルールのカスタマイズ」をご参照ください。 |
live | ブール値 | いいえ | false | ライブストリームをモデレートするかどうかを指定します。有効な値:
|
offline | ブール値 | いいえ | false | オフラインモデレーションモードを有効にします。有効な値:
説明 このパラメーターはビデオオンデマンドのモデレーションにのみ適用されます。ライブストリームのモデレーションでは不要です。 |
scenes | StringArray | はい | ["porn"] | 動画モデレーションのシナリオを指定します。有効な値:
|
audioScenes | StringArray | いいえ | ["antispam"] | 音声モデレーションのシナリオ。有効な値は音声スパム対策の antispam のみです。 このパラメーターを省略すると、サービスは動画コンテンツのみをモデレートします。指定した場合、サービスは音声トラックもモデレートします。 説明 動画の音声をモデレートするには、task オブジェクト内の url パラメーターを使用して動画の URL を指定する必要があります。task オブジェクト内の frames パラメーターを使用してフレームキャプチャのシーケンスとして動画コンテンツを送信する場合、音声モデレーションはサポートされません。 |
callback | String | いいえ | http://www.aliyundoc.com | 検出結果のコールバック通知を受信する URL です。URL は HTTP または HTTPS プロトコルを使用する必要があります。このパラメーターを空のままにした場合、検出結果を定期的にポーリングする必要があります。
説明
ご利用のコールバックサーバーが結果通知を受信した後、成功を示すために HTTP ステータスコード 200 を返す必要があります。それ以外のステータスコードは失敗と見なされます。通知が失敗した場合、Content Moderation は最大 16 回再試行し、成功するまで続けます。16 回の再試行後も失敗した場合は、それ以上試行されません。ご利用のコールバックエンドポイントのステータスを確認することを推奨します。 |
seed | String | いいえ | abc**** | コールバック通知リクエストの署名に使用されるランダム文字列です。 この文字列には英数字およびアンダースコア (_) を使用でき、64 文字以内である必要があります。コールバックリクエストの送信元を検証するために、この文字列をカスタマイズできます。 説明
このパラメーターは callback を使用する場合に必須です。 |
cryptType | String | いいえ | SHA256 | コールバック通知を使用する場合、このパラメーターはコールバック署名 (チェックサム) のハッシュ化アルゴリズムを指定します。Content Moderation は、指定されたアルゴリズムを使用して ( Alibaba Cloud アカウント ID + seed + content から連結された文字列) のハッシュを生成し、それをご利用のコールバック URL に送信します。有効な値:
|
tasks | JSONArray | はい | モデレーションオブジェクトを指定するタスクオブジェクトの JSON 配列です。単一のリクエストで最大 100 個のタスクを送信できますが、タスクの同時実行数が 100 以上である必要があります。タスクオブジェクトの構造の詳細については、「task」をご参照ください。 |
表 1. task
パラメーター | タイプ | 必須 | 例 | 説明 |
clientInfo | JSONObject | いいえ | {"userId":"12023****","userNick":"Mike","userType":"others"} | クライアント情報です。詳細については、「共通パラメーター」の共通クエリパラメーターをご参照ください。 サーバーは、グローバルな clientInfo とリクエストごとに指定された個別の clientInfo をマージします。 説明
個別の clientInfo の方が優先度が高くなります。 |
dataId | String | いいえ | videoId**** | 検出オブジェクトのデータ ID です。 この ID には大文字、小文字、数字、アンダースコア (_)、ハイフン (-)、ピリオド (.) を使用でき、128 文字以内である必要があります。ご利用のビジネスデータを一意に識別するために使用します。 |
liveId | String | いいえ | liveId**** | ライブ動画ストリームの ID です。 このパラメーターは、動画ライブストリームの重複検出タスクを防ぐために使用されます。このパラメーターを渡すと、システムは |
url | String | いいえ | http://www.aliyundoc.com/a.flv | 公開された HTTP または HTTPS URL です。URL の長さは 2,048 文字を超えてはなりません。 説明 frames または url のいずれか一方を指定してください。url パラメーターを指定した場合、動画 URL の送信に基づく課金方法が適用されます。 |
frames | JSONArray | いいえ | 検出対象の動画のフレーム情報です。frames の各要素は構造体です。各要素の構造の詳細については、「frame」をご参照ください。 説明 frames または url のいずれか一方を指定してください。url パラメーターを渡した場合、動画 URL の送信に対して課金されます。 | |
framePrefix | String | いいえ | http://www.aliyundoc.com/video/ | フレーム URL のプレフィックスです。このプレフィックスは |
interval | Integer | いいえ | 1 | 動画フレームのキャプチャ間隔です。単位:秒。有効な値:1 ~ 600。デフォルト値は 1 です。 |
maxFrames | Integer | いいえ | 200 | 動画からキャプチャするフレームの最大数です。有効な値:5 ~ 3,600。デフォルト値は 200 です。上限を引き上げるには、サポートとサービスを通じてお問い合わせください。 説明
|
表 2. frame
パラメーター | タイプ | 必須 | 例 | 説明 |
url | String | いいえ | http://www.aliyundoc.com/0B860000586C0A0300038A0460000 | 動画フレームの URL は |
offset | Integer | いいえ | 10 | 動画の開始時刻からのフレームの時間オフセットです。単位:秒。 |
応答パラメーター
パラメーター | タイプ | 例 | 説明 |
taskId | String | taskId**** | モデレーションタスクの ID です。 |
dataId | String | videoId**** | 検出オブジェクトのデータ ID です。 説明
検出リクエストで dataId が渡された場合、同じ dataId がここに返されます。 |
例
サンプルリクエスト
動画フレームを送信
http(s)://[Endpoint]/green/video/asyncscan &<共通リクエストパラメーター> { "scenes": [ "porn" ], "tasks": [ { "dataId": "videoId****", "frames": [ { "offset": 10, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460000" }, { "offset": 20, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460001" }, { "offset": 30, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460002" }, { "offset": 40, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460003" }, { "offset": 50, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A0460003" }, { "offset": 60, "url": "http://www.aliyundoc.com/0B860000586C0A0300038A046000x" } ] } ] }動画ファイルを送信
http(s)://[Endpoint]/green/video/asyncscan &<共通リクエストパラメーター> { "scenes": [ "porn" ], "audioScenes": [ "antispam" ], "tasks": [ { "dataId": "videoId****", "url": "http://www.aliyundoc.com/a.mp4", "interval": 1, "maxFrames": 200 } ] }ライブストリームを送信
http(s)://[Endpoint]/green/video/asyncscan &<共通リクエストパラメーター> { "scenes": [ "porn" ], "live": true, "tasks": [ { "dataId": "videoId****", "url": "http://www.aliyundoc.com/a.flv", "interval": 1, "maxFrames": 200 } ] }
成功時の応答
{
"code": 200,
"msg": "OK",
"requestId": "requestID****",
"data": [
{
"dataId": "videoId****",
"taskId": "taskId****"
}
]
}非同期モデレーション結果のクエリ
API:/green/video/results
この操作を使用して、非同期モデレーションタスクの結果をクエリします。HTTP リクエストの構築方法については、「リクエスト構文」をご参照ください。または、「SDK 概要」で説明されている SDK を使用して事前構築済みリクエストを使用することもできます。
課金
この API オペレーションは無料です。
結果の可用性
ポーリング間隔を 30 秒に設定します。つまり、非同期検出タスクを送信してから 30 秒後に結果をクエリします。結果は最大 1 時間保存され、その間に取得されなかった場合は破棄されます。
秒間クエリ数 (QPS) 制限
この API の秒間クエリ数 (QPS) 制限は、ユーザーあたり 50 です。この制限を超えると速度制限がトリガーされ、ビジネスに影響を与える可能性があります。呼び出しを適切に計画してください。
リクエストパラメーター
パラメーター | タイプ | 必須 | 例 | 説明 |
body | JSONArray | はい | ["taskId****","taskId****"] | クエリ対象の検出タスクの taskId 値のリストです。配列には最大 100 個の要素を含めることができます。 taskId は、検出タスクを送信した後の応答から取得できます。 |
応答パラメーター
パラメーター | タイプ | 例 | 説明 |
code | Integer | 200 | エラーコードです。HTTP ステータスコードと同じです。 詳細については、「共通エラーコード」をご参照ください。 |
msg | String | OK | 応答メッセージです。 |
dataId | String | videoId**** | 検出オブジェクトのデータ ID です。 説明
検出リクエストで dataId が渡された場合、同じ dataId がここに返されます。 |
taskId | String | taskId**** | モデレーションタスクの ID です。 |
results | JSONArray | 要求された各モデレーションシナリオごとの結果オブジェクトの配列です。 説明 ライブストリームモデレーションシナリオでは、 | |
audioScanResults | JSONArray | 音声モデレーションの結果です。構造の詳細については、「audioScanResult」をご参照ください。 |
表 3. result
パラメーター | タイプ | 例 | 説明 |
scene | String | porn | リクエストで指定されたモデレーションシナリオです。有効な値:
|
label | String | porn | モデレーション結果のラベルです。有効な値はモデレーションシナリオによって異なります:
|
sublabel | String | porn | 検出シナリオにポルノ (porn) およびテロ/政治 (terrorism) が含まれる場合、このフィールドは検出結果の詳細ラベルを返すことができます。 このフィールドはデフォルトでは返されません。 |
suggestion | String | block | 推奨アクションです。有効な値:
|
rate | Float | 99.2 | 信頼スコアです。有効な値:0 (最低の信頼度) ~ 100 (最高の信頼度)。 suggestion が pass の場合、信頼スコアが高いほどコンテンツがコンプライアンスに準拠している可能性が高くなります。suggestion が review または block の場合、信頼スコアが高いほどコンテンツがコンプライアンス違反である可能性が高くなります。 重要
コンテンツが違反しているかどうかを判断するには、suggestion および label (一部の API オペレーションでは sublabel) フィールドを使用することを推奨します。 |
frames | JSONArray | コンプライアンス違反のコンテンツを含む動画フレームの配列です。構造の詳細については、「frame」をご参照ください。 | |
hintWordsInfo | JSONArray | 動画に広告またはテキスト違反が含まれている場合、このパラメーターはテキスト内で検出されたリスクキーワードに関する情報を返します。構造の詳細については、「hintWordsInfo」をご参照ください。 説明 このパラメーターは広告およびテキスト違反検出 (ad) シナリオでのみ利用可能です。 | |
logoData | JSONArray | 動画にロゴが含まれている場合、このパラメーターは検出されたロゴに関する情報を返します。構造の詳細については、「logoData」をご参照ください。 説明 このパラメーターはロゴ検出 (logo) シナリオでのみ利用可能です。 | |
sfaceData | JSONArray | 動画にテロリストまたは政治的コンテンツが含まれている場合、このパラメーターは検出された顔に関する情報を返します。構造の詳細については、「sfaceData」をご参照ください。 説明 このパラメーターはテロリストコンテンツ検出 (terrorism) シナリオでのみ利用可能です。 |
表 4. frame
パラメーター | タイプ | 例 | 説明 |
url | String | http://www.aliyundoc.com/0B860000586C0A0 | 動画フレームの URL です。 |
offset | Integer | 50 | 動画の開始時刻からの動画フレームの時間オフセットです。単位:秒。 |
label | String | porn | 動画フレームのモデレーション結果ラベルです。有効な値はモデレーションシナリオによって異なります:
|
rate | Float | 99.1 | 信頼スコアです。有効な値:0 ~ 100。信頼スコアが高いほど、検出結果が正確である確率が高くなります。ビジネスロジックでこのスコアを使用しないでください。 |
表 5. audioScanResult
パラメーター | タイプ | 例 | 説明 |
scene | String | antispam | 音声モデレーションシナリオです。有効な値は音声スパム対策を示す antispam のみです。 |
label | String | customized | 音声モデレーション結果のカテゴリです。有効な値:
|
suggestion | String | block | 推奨アクションです。有効な値:
|
rate | Float | 99.91 | 信頼スコアです。有効な値:0 (最低の信頼度) ~ 100 (最高の信頼度)。 suggestion が pass の場合、信頼スコアが高いほどコンテンツがコンプライアンスに準拠している可能性が高くなります。suggestion が review または block の場合、信頼スコアが高いほどコンテンツがコンプライアンス違反である可能性が高くなります。 重要
コンテンツが違反しているかどうかを判断するには、suggestion および label (一部の API オペレーションでは sublabel) フィールドを使用することを推奨します。 |
details | JSONArray | 音声トランスクリプトの詳細です。この配列には 1 つ以上の文オブジェクトが含まれます。構造の詳細については、「detail」をご参照ください。 |
表 6. detail
パラメーター | タイプ | 例 | 説明 |
startTime | Integer | 24 | 文の開始時刻です。単位:秒。 |
endTime | Integer | 60 | 文の終了時刻です。単位:秒。 |
text | String | computer | 音声のトランスクリプトテキストです。 |
label | String | normal | 文のモデレーション結果カテゴリです。有効な値:
|
keyword | String | enable | 一致したカスタムキーワード (該当する場合)。 |
libName | String | manual | カスタムキーワードが一致した場合、このパラメーターはキーワードを含むテキストライブラリの名前を返します。 |
表 7. logoData
パラメーター | タイプ | 例 | 説明 |
type | String | TV | 検出されたロゴのタイプです。 |
name | String | ***TV | 検出されたロゴの名前です。 |
x | Float | 140 | ロゴのバウンディングボックスの左上隅の x 座標です。原点は画像の左上隅です。単位:ピクセル。 |
y | Float | 68 | ロゴのバウンディングボックスの左上隅の y 座標です。原点は画像の左上隅です。単位:ピクセル。 |
w | Float | 106 | ロゴのバウンディングボックスの幅です。単位:ピクセル。 |
h | Float | 106 | ロゴのバウンディングボックスの高さです。単位:ピクセル。 |
表 5. sfaceData
パラメーター | タイプ | 例 | 説明 |
x | Float | 444 | 画像の左上隅を基準とした顔のバウンディングボックスの x 座標です。 |
y | Float | 174 | 画像の左上隅を基準とした顔のバウンディングボックスの y 座標です。 |
w | Float | 467 | 顔のバウンディングボックスの幅です。 |
h | Float | 467 | 顔のバウンディングボックスの高さです。 |
smileRate | Float | 0 | 笑顔の確率です。 |
glasses | ブール値 | false | 人物が眼鏡をかけているかどうかを示します。 |
faces | Array | 認識された顔オブジェクトの配列です。各オブジェクトの構造については、表 6 をご参照ください。 |
表 8. face
パラメーター | タイプ | 例 | 説明 |
name | String | xxxx | 類似人物の名前です。 |
rate | Float | 97.03 | 類似度の確率です。 |
id | String | AliFace_001**** | 顔 ID です。 |
表 8. hitLibInfo
パラメーター | タイプ | 例 | 説明 |
context | String | xxxx | カスタムテキストライブラリから一致したコンテンツです。 |
libCode | String | 69751 | カスタムテキストライブラリのコードです。 |
libName | String | manual | カスタムテキストライブラリの名前です。 |
表 9. hintWordsInfo
パラメーター | タイプ | 例 | 説明 |
context | String | xxxx | 一致したリスクキーワードです。 |
例
サンプルリクエスト
http(s)://[Endpoint]/green/video/results
&<共通リクエストパラメーター>
[
"taskId****",
"taskId****"
]サンプル応答
画像のみをモデレート
{ "code": 200, "msg": "OK", "requestId": "requestID****", "data": [ { "code": 200, "msg": "OK", "dataId": "videoId****", "taskId": "taskId****", "results": [ { "label": "porn", "rate": 99.2, "scene": "porn", "suggestion": "block" } ] } ] }画像と音声の両方をモデレート
{ "code": 200, "msg": "OK", "requestId": "requestID****", "data": [ { "code": 200, "msg": "OK", "dataId": "videoId****", "taskId": "taskId****", "results": [ { "label": "porn", "rate": 99.2, "scene": "porn", "suggestion": "block" } ], "audioScanResults": [ { "scene": "antispam", "label": "customized", "suggestion": "block", "rate": 99.91, "details": [ { "startTime": 0, "endTime": 24, "text": "computer", "label": "customized" }, { "startTime": 24, "endTime": 60, "text": "computer", "label": "normal" } ] } ] } ] }