このトピックでは、Content Moderation SDK for Go を使用して、画像内のリスクのあるコンテンツをモデレートする方法について説明します。
説明
画像モデレーションは、同期と非同期の 2 つの検出モードを提供します。
同期検出はリアルタイムの結果を提供します。パラメーターの詳細については、「同期検出」をご参照ください。
非同期の画像モデレーションを使用する場合、モデレーション結果をポーリングするか、コールバック通知を設定してモデレーション結果を受信する必要があります。関連パラメーターの詳細については、「/green/image/asyncscan および /green/image/results」をご参照ください。
この SDK は画像の URL のみをサポートします。ローカルファイルやバイナリデータはサポートしていません。
サポートされている URL タイプは、長さが 2,048 文字までのインターネット HTTP または HTTPS URL です。
前提条件
(推奨) 同期画像モデレーションタスクの送信
操作 | 説明 | サポートされているリージョン |
ImageSyncScanRequest | ポルノ、テロリストのコンテンツ、広告、QR コード、不適切なシーン、ロゴ検出など、複数のモデレーションシナリオで、リスクのあるコンテンツについて画像をモデレートするための同期リクエストを送信します。 |
|
サンプルコード
package main
import (
"encoding/json"
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/services/green"
"strconv"
)
func main() {
/**
* 注: 検出パフォーマンスを向上させるために、クライアントインスタンスを再利用します。
* これにより、リクエストごとに新しい接続を確立することを回避できます。
* 環境変数を取得するには、次のメソッドを使用できます:
* Resource Access Management (RAM) ユーザーの AccessKey ID を取得するには: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
* RAM ユーザーの AccessKey Secret を取得するには: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
*/
client, _err := green.NewClientWithAccessKey(
"cn-shanghai",
"環境変数から RAM ユーザーの AccessKey ID を取得します。",
"環境変数から RAM ユーザーの AccessKey Secret を取得します。")
if err != nil {
fmt.Println(err.Error())
return
}
task1 := map[string]interface{}{"dataId": "検出するデータの ID", "url": "検出する画像の URL"}
// scenes: 検出シナリオ。複数のシナリオを指定できます。
content, _ := json.Marshal(
map[string]interface{}{
"tasks": task1, "scenes": [...]string{"porn", "terrorism"}, "bizType": "ビジネスシナリオ",
},
)
request := green.CreateImageSyncScanRequest()
request.SetContent(content)
response, _err := client.ImageSyncScan(request)
if _err != nil {
fmt.Println(_err.Error())
return
}
if response.GetHttpStatus() != 200 {
fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
}
fmt.Println(response.GetHttpContentString())
}非同期画像モデレーションタスクの送信
Go SDK を使用して、画像内の脅威を検出できます。非同期タスクを送信し、コールバックまたはポーリングによって結果を取得できます。非同期モデレーションでサポートされる入力コンテンツは、同期モデレーションの場合と同じです。
操作 | 説明 | サポートされているリージョン |
ImageAsyncScanRequest | ポルノ、テロリストのコンテンツ、広告、QR コード、不適切なシーン、ロゴ検出など、複数のモデレーションシナリオで、リスクのあるコンテンツについて画像をモデレートするための非同期リクエストを送信します。 |
|
サンプルコード
package main
import (
"encoding/json"
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/services/green"
"strconv"
)
func main() {
/**
* 注:クライアントインスタンスを再利用して、検出パフォーマンスを向上させます。
* これにより、リクエストごとに新しい接続を確立する必要がなくなります。
* 環境変数を取得するには、次のメソッドを使用します。
* RAM ユーザーの AccessKey ID を取得するには:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
* RAM ユーザーの AccessKey Secret を取得するには:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
*/
client, _err := green.NewClientWithAccessKey(
"cn-shanghai",
"環境変数から RAM ユーザーの AccessKey ID を取得します。",
"環境変数から RAM ユーザーの AccessKey Secret を取得します。")
if err != nil {
fmt.Println(err.Error())
return
}
task1 := map[string]interface{}{"dataId": "検出対象データの ID", "url": "検出対象イメージの URL"}
// scenes: 検出シナリオ。複数のシナリオを指定できます。
content, _ := json.Marshal(
map[string]interface{}{
"tasks": [...]map[string]interface{}{task1},
// callback パラメーターと seed パラメーターは、Webhook 通知に使用されます。これらのパラメーターはオプションです。
"callback": "Webhook アドレス",
"seed": "ランダムな文字列",
"scenes": [...]string{"porn", "terrorism"},
"bizType": "ビジネスシナリオ",
},
)
request := green.CreateImageAsyncScanRequest()
request.SetContent(content)
response, _err := client.ImageAsyncScan(request)
if _err != nil {
fmt.Println(_err.Error())
return
}
if response.GetHttpStatus() != 200 {
fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
}
fmt.Println(response.GetHttpContentString())
}非同期画像モデレーションの結果のクエリ
操作 | 説明 | サポートされているリージョン |
ImageAsyncScanResultsRequest | 非同期画像モデレーションの結果をクエリします。一度に複数の非同期画像モデレーションタスクのモデレーション結果をクエリできます。 |
|
サンプルコード
package main
import (
"encoding/json"
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/services/green"
"strconv"
)
func main() {
/**
* 注: 検出パフォーマンスを向上させるために、クライアントインスタンスを再利用します。
* これにより、リクエストごとに新しい接続を確立することを回避できます。
* 環境変数を取得するには、次のメソッドを使用できます:
* Resource Access Management (RAM) ユーザーの AccessKey ID を取得するには: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
* RAM ユーザーの AccessKey Secret を取得するには: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
*/
client, _err := green.NewClientWithAccessKey(
"cn-shanghai",
"環境変数から RAM ユーザーの AccessKey ID を取得します。",
"環境変数から RAM ユーザーの AccessKey Secret を取得します。")
if err != nil {
fmt.Println(err.Error())
return
}
content, _ := json.Marshal(
[...]string{"非同期画像モデレーションタスクの ID"},
)
request := green.CreateImageAsyncScanResultsRequest()
request.SetContent(content)
response, _err := client.ImageAsyncScanResults(request)
if _err != nil {
fmt.Println(_err.Error())
return
}
if response.GetHttpStatus() != 200 {
fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
}
fmt.Println(response.GetHttpContentString())
}画像モデレーション結果に関するフィードバックの提供
画像モデレーションの結果が期待どおりでない場合は、ImageScanFeedbackRequest 操作を呼び出して結果を修正できます。フィードバックに基づいて、システムは画像を類似画像のブラックリストまたはホワイトリストに追加します。今後、同様のコンテンツをモデレーションのために送信すると、サービスはフィードバックのラベルに基づいて結果を返します。操作の詳細については、「モデレーション結果に関するフィードバックの提供」をご参照ください。
インターフェイス | 説明 | サポートされているリージョン |
ImageScanFeedbackRequest | 画像検出結果に関するフィードバックを送信して、アルゴリズムの改良に役立てます。 |
|
サンプルコード
package main
import (
"encoding/json"
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/services/green"
"strconv"
)
func main() {
/**
* 注: 検出パフォーマンスを向上させるために、クライアントインスタンスを再利用します。
* これにより、リクエストごとに新しい接続を確立することを回避できます。
* 環境変数を取得するには、次のメソッドを使用できます:
* Resource Access Management (RAM) ユーザーの AccessKey ID を取得するには: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
* RAM ユーザーの AccessKey Secret を取得するには: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
*/
client, _err := green.NewClientWithAccessKey(
"cn-shanghai",
"環境変数から RAM ユーザーの AccessKey ID を取得します。",
"環境変数から RAM ユーザーの AccessKey Secret を取得します。")
if err != nil {
fmt.Println(err.Error())
return
}
// scenes: 検出シナリオ。複数のシナリオを指定できます。
// suggestion: 期待されるモデレーション結果。pass: 画像は正常です。block: 画像には違反が含まれています。
content, _ := json.Marshal(
map[string]interface{}{
"suggestion": "block", "scenes": [...]string{"porn", "terrorism"}, "url": "検出する画像の URL",
},
)
request := green.CreateImageScanFeedbackRequest()
request.SetContent(content)
response, err := client.ImageScanFeedback(request)
if err != nil {
fmt.Println(err.Error())
return
}
if response.GetHttpStatus() != 200 {
fmt.Println("response not success. status:" + strconv.Itoa(response.GetHttpStatus()))
}
fmt.Println(response.GetHttpContentString())
}