Closed sugizakikun closed 2 months ago
管理コスト、運用コストを加味した結果こっちに決定。
ローカルで春画検出APIを使えるようにする。 コンテナの利便性をここで享受する。
docker run -it -p 127.0.0.1:5000:5000/tcp --env PORT=5000 eugencepoi/nsfw_api:latest
春画のURLをリクエストパラメータとした場合
普通の画像のURLをリクエストパラメータとした場合(猫ちゃんの画像だよ)
で、これをAWSのECSにアップしてEC2からもアクセスできるようにする
ECRにログインする
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 211125705600.dkr.ecr.us-east-1.amazonaws.com
引っ張ってきたdocker-image(eugencepoi/nsfw_api:lates
)にECRのURIをタグ付けする.
docker tag eugencepoi/nsfw_api:latest xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/detect-noodie-image:latest
docker push xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/detect-noodie-image:latest
basic認証が必要と言われた・・・ぴえん
GPT先生に聞いてみたらECR単体じゃ動かないみたい・・・ ECSかFargateとの連携が必要らしい。
AWS ECR にコンテナイメージをプッシュした後、そのイメージを実際に使えるようにするためには、コンテナを実行するための環境が必要です。AWS では、そのために以下のサービスを使用します:
と言うことでFargateの設定をする。 ECRリポジトリにプッシュしたイメージをECS Fargateで起動する
期限付きだけどS3に保存されている画像についても解析は可能。
APIレスポンスの異常系を考慮せねばばば
APIロジック
/**
* @param $s3Path
* @return float
*/
public function calculateNsfwScore($s3Path) :float
{
$prefix = 'http://'.config('fargate.task_ip_address').':5000';
$suffix = '/?url='. urlencode($s3Path);
$endPoint = $prefix.$suffix;
$jsonString = $this->httpClient->get($endPoint);
$jsonArray = json_decode($jsonString, true);
return $jsonArray['score'];
}
エラー時のAPIレスポンス
array:3 [▼ // app/Http/Services/Profile/UpdateProfileImage.php:75
"error_code" => 500
"error_reason" => "cannot identify image file <StringIO.StringIO instance at 0x7fb9d1869248>"
"url" => "https://pictures-local.s3.amazonaws.com/zhgvyzc622skskgo80gggg8c.png"
]
やっぱNSFWを使うのなら出力用のドメインクラスを作って出力形式を揃えた方が良さげ。 プロフィール画像に限らずカテゴリにも画像を設定することがあるから!
NsfwOutputDomain
クラスでも新しく作るかぁ
Case1: nsfwが0.8未満の場合
Profile image uploaded successfully.
Case2: nsfwが0.8以上の場合
# 「不適切な画像のアップロードが検知されました。」という意味だよ〜
'Inappropriate image upload detected.
エラーコードによらず$jsonArray['error_reason']
の値を表示する。
いや・・・やっぱ正常系と異常系で出力形式は分けるべきかなぁ・・・? Controllerのreturnの段階でinstance ofによる場合分けをするだけで良さそうだし・・・。
Case1: nsfwが0.3未満の場合
画像のアップロードが完了しました。
Case2: nsfwが0.3以上でかつ0.8未満の場合
画像のアップロードが完了しました。
(※ただしサムネイルにぼかし処理が入ります。)
Case3: nsfwが0.8以上の場合
不適切な画像のアップロードが検知されました。
実現できたのでこのissueはcloseします!🐱 Fargate最高!
目的
使うもの(候補)