تشخیص تصاویر NSFW
Discuse برای تعدیل تصاویر، به تصاویر ارسالی کاربران از نظر محتوای صریح امتیاز میدهد. URL تصاویر را با فعال بودن check_images به POST https://api.discuse.com/api/v2/check ارسال کنید؛ API احتمالهای porn، sexual و neutral را همراه با یک پرچم hit مطابق شیء results.images برمیگرداند.
تشخیص NSFW چگونه کار میکند؟
مدل بینایی کامپیوتری Discuse برای هر تصویر سه احتمال برمیگرداند که مجموع آنها به 1.0 نزدیک میشود:
porn: احتمال پورنوگرافیک بودن تصویر.sexual: احتمال داشتن محتوای جنسیِ القایی در تصویر.neutral: احتمال ایمن بودن تصویر.
پرچم hit نشان میدهد که تصویر از آستانههای NSFW پروژه شما عبور کرده است. از امتیازهای خام استفاده کنید تا یک تصویر کاملاً صریح را از یک مورد مرزی جدا کنید؛ اولی را خودکار مسدود کنید و دومی را برای بازبینی انسانی بفرستید.
چگونه یک تصویر را بررسی کنم؟
یک یا چند URL تصویر را ارسال کنید و بررسی تصویر را با check_images فعال کنید:
curl -X POST https://api.discuse.com/api/v2/check \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"content": {
"image_urls": ["https://example.com/user-upload.jpg"]
},
"settings": {
"check_images": true
}
}'
هر درخواست تکی تا 10 URL تصویر را میپذیرد.
قالب پاسخ
{
"has_violations": true,
"cached": false,
"message": "NSFW content detected",
"results": {
"hits": true,
"images": {
"status": "ok",
"porn": 0.95,
"sexual": 0.85,
"neutral": 0.02,
"hit": true
}
},
"usage": {
"api_requests_used": 12,
"api_requests_limit": 2000,
"api_requests_remaining": 1988
}
}
نتیجه تصویر زیر results.images قرار دارد. processing_time_ms فقط زمانی وجود دارد که زمانسنجی در تنظیمات پروژه شما فعال باشد.
بررسی چند تصویر
{
"content": {
"image_urls": [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg",
"https://example.com/image3.jpg"
]
},
"settings": {
"check_images": true
}
}
هر تصویر اسکنشده بهصورت جداگانه از سهمیه اسکن تصویر شما کسر میشود.
چگونه امتیازها را تفسیر کنم؟
porn، sexual و neutral احتمالهایی از 0.0 تا 1.0 هستند. برای یک تصویر صریح، porn بالا و neutral پایین است؛ برای یک تصویر ایمن، neutral غالب است.
function interpretImageResult(result) {
const img = result.results.images;
if (img.porn > 0.8) {
return 'block'; // automatically reject
} else if (img.porn > 0.5 || img.sexual > 0.7) {
return 'review'; // queue for human review
} else if (img.sexual > 0.5) {
return 'warn'; // allow with a content-warning label
} else {
return 'allow';
}
}
همچنین میتوانید بر اساس پرچم hit محدودسازی انجام دهید؛ این پرچم از قبل تنظیمات threshold_images_porn و threshold_images_sexual پروژه شما را اعمال میکند.
موارد استفاده
پلتفرمهای اجتماعی
تصاویر پروفایل و تصاویر پستها را پیش از انتشار بررسی کنید:
async function handleImageUpload(imageUrl) {
const result = await checkImage(imageUrl);
const img = result.results.images;
if (img.porn > 0.7) {
throw new Error('This image violates our community guidelines');
}
if (img.sexual > 0.7) {
return { url: imageUrl, hasContentWarning: true };
}
return { url: imageUrl, hasContentWarning: false };
}
بازارگاهها
برای تصاویر محصولات، حد آستانه سختگیرانهتری اعمال کنید:
def validate_product_image(image_url):
result = check_image(image_url)
img = result['results']['images']
if img['porn'] > 0.3 or img['sexual'] > 0.3:
return {'approved': False, 'reason': 'Image contains inappropriate content'}
return {'approved': True}
بهترین روشها
پیش از ذخیرهسازی دائمی اسکن کنید
async function processUpload(file) {
const tempUrl = await uploadToTemp(file);
const result = await checkImage(tempUrl);
if (result.has_violations) {
await deleteTempFile(tempUrl);
throw new Error('Image rejected');
}
return await moveToPermanent(tempUrl);
}
با تعدیل متن ترکیب کنید
یک درخواست واحد میتواند تصویر و کپشن آن را با هم اسکن کند:
{
"content": {
"text": "Check out this photo from my vacation!",
"image_urls": ["https://example.com/vacation.jpg"]
},
"settings": {
"check_sentiment": true,
"check_spam": true,
"check_images": true
}
}
از نتایج کششده استفاده کنید
پاسخهای کششده از سهمیه شما کسر نمیشوند؛ بنابراین نمایش دوباره یا اعتبارسنجی مجدد تصویری که قبلاً اسکن شده رایگان است. پرچم cached در پاسخ به شما میگوید چه زمانی نتیجه از کش آمده است.
محدودیتهای استفاده
| طرح | اسکن تصویر ماهانه | نرخ مازاد |
|---|---|---|
| Basic | 500 | در دسترس نیست |
| Gold | 2,000 | $0.00075/اسکن |
| Platinum | 5,000 | $0.00064/اسکن (15% تخفیف) |
| Ultimate | 10,000 | $0.00056/اسکن (25% تخفیف) |
نمونههای یکپارچهسازی
Node.js
const checkImage = async (imageUrl) => {
const response = await fetch('https://api.discuse.com/api/v2/check', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.DISCUSE_API_KEY
},
body: JSON.stringify({
content: { image_urls: [imageUrl] },
settings: { check_images: true }
})
});
return response.json();
};
Python
import os
import requests
def check_image(image_url):
response = requests.post(
'https://api.discuse.com/api/v2/check',
headers={
'Content-Type': 'application/json',
'X-API-Key': os.environ['DISCUSE_API_KEY']
},
json={
'content': {'image_urls': [image_url]},
'settings': {'check_images': True}
}
)
return response.json()
گامهای بعدی
- تحلیل متن - افزودن امتیازدهی احساسات و هرزنامه به همان درخواست
- تشخیص زبان - تشخیص زبان محتوا و اعمال الزام بر آن
- اسکن آنتیویروس فایل - اسکن اسناد برای یافتن بدافزار