اجرای CPU با ONNX
بدون وابستگی به GPU؛ مناسب سرورهای معمولی و هزینهٔ پایینتر نسبت به استقرار GPU.
مخزن باز · Python · FastAPI

میکروسرویس stateless برای اجرای مدل NudeNet با ONNX روی CPU؛ هر کلاینتی میتواند تصویر بفرستد و لیست detectionها (کلاس، امتیاز، محدوده) را دریافت کند.
Basir NSFW API یک سرویس REST ساده است که روی تشخیص محتوای نامناسب در تصویر تمرکز دارد. در زمان راهاندازی یک session ONNX بارگذاری میشود و برای هر درخواست POST /infer دوباره استفاده میشود — بدون نیاز به GPU.
ورودی: یک یا چند فایل تصویر (JPEG/PNG و مشابه) در قالب multipart با نام فیلدهای f1، f2، f3 و … خروجی: آرایهای از detectionها برای هر تصویر — شامل نام کلاس، امتیاز اطمینان (۰ تا ۱) و مختصات جعبه (box).
سرویس خودش «مجاز / غیرمجاز» اعلام نمیکند؛ شما در اپلیکیشن خودتان (بات، پنل moderation، pipeline آپلود) امتیاز را با آستانهٔ دلخواه مقایسه میکنید. معمولاً روی کلاسهای حساس (مثل FEMALE_BREAST_EXPOSED و موارد مشابه) حداکثر score محاسبه میشود.
مناسب استقرار در VPS، Docker یا شبکهٔ داخلی کنار سرویسهای دیگر.
بدون وابستگی به GPU؛ مناسب سرورهای معمولی و هزینهٔ پایینتر نسبت به استقرار GPU.
320n (سریعتر) و 640m (دقت بهتر روی تصاویر کوچک). با متغیر محیطی BASIR_NSFW_MODEL بدون rebuild عوض میشود.
POST /infer برای inference؛ GET /health و GET /ready برای مانیتورینگ و orchestration (Kubernetes، Compose).
تا وقتی مدل لود و یک inference آزمایشی موفق نشود، /ready مقدار 503 برمیگرداند — برای healthcheck قبل از ترافیک واقعی.
وزنهای ONNX داخل image قابل بستهبندی است؛ برای محیطهای بدون اینترنت با docker save/load قابل انتقال است.
احراز هویت داخلی ندارد — سرویس را در شبکهٔ خصوصی یا پشت reverse proxy با کنترل دسترسی قرار دهید.
از نصب تا اولین درخواست موفق
مخزن GitHub را کلون کنید، Python 3.11 و venv آماده کنید، pip install -r requirements.txt. فایلهای 320n.onnx و 640m.onnx را در app/model/ قرار دهید (راهنمای مخزن).
BASIR_NSFW_MODEL=320n (یا 640m) تنظیم کنید و uvicorn app.main:app --host 0.0.0.0 --port 8000 را اجرا کنید. GET /ready باید {ready:true} برگرداند.
با curl یا هر HTTP client: curl -F "f1=@photo.jpg" http://localhost:8000/infer — در پاسخ، prediction[0] لیست detectionهای تصویر اول است.
روی کلاسهای موردنظر (مثلاً کلاسهای ناامن بالا) max(score) بگیرید و با threshold خودتان مقایسه کنید. سرویس فقط detection خام برمیگرداند.
سرویس را در Docker یا Compose بالا بیاورید؛ از /health و /ready در healthcheck استفاده کنید. timeout و retry را در کلاینت HTTP خود تنظیم کنید.
endpointها و نمونهٔ پاسخ
پورت پیشفرض 8000 — base URL را در کلاینت خود جایگزین کنید.
GET /healthGET /readyPOST /inferساختار JSON — هر عنصر داخلی prediction مربوط به یک تصویر است.
{ "success": true, "prediction": [[...]] }success: falseاز ریشهٔ پوشهٔ پروژه
docker build -t basir-nsfw-api:latest .docker run -p 8000:8000 -e BASIR_NSFW_MODEL=640m basir-nsfw-api:latestتنظیمات runtime
BASIR_NSFW_MODELBASIR_NSFW_MODELS_DIRBASIR_NSFW_MIN_SCOREمخزن و مستندات تکمیلی
سورس کامل، Dockerfile، requirements و README فنی (انگلیسی).
https://github.com/mbasirmajd/rmshub-nsfw