mirror of
https://github.com/kemalersin/nsfw-api.git
synced 2026-04-26 18:15:57 +03:00
No description
| controllers | ||
| db | ||
| middleware | ||
| public | ||
| routes | ||
| views | ||
| .env.sample | ||
| .gitignore | ||
| package.json | ||
| README.md | ||
| server.js | ||
NSFW Görsel Analiz API
Bu proje, NSFW (Not Safe For Work) görüntüleri sınıflandırmak için TensorFlow.js ve NSFWJS kütüphanesini kullanan bir Node.js Express API'sidir. API, token bazlı bir yetkilendirme sistemi ve admin paneline sahiptir.
Özellikler
- URL'den görsel sınıflandırma
- Dosya yükleme ile görsel sınıflandırma
- Toplu URL işleme özelliği
- Farklı model türleri desteği (MobileNetV2, MobileNetV2Mid, InceptionV3)
- API anahtarı yönetimi
- Token bazlı kullanım sınırlaması (her görsel 1 token)
- IP bazlı hız sınırlaması (15dk'da 15 istek)
- Admin paneli
- Ayrıntılı kullanım istatistikleri
Kurulum
- Repoyu klonlayın:
git clone https://github.com/kullanici/nsfw-model.git
cd nsfw-model
- Bağımlılıkları yükleyin:
npm install
.envdosyasını ayarlayın:
# Uygulama Ayarları
PORT=3000
NODE_ENV=development
# Veritabanı Bilgileri
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=
DB_NAME=nsfw_api
# JWT ve Oturum Bilgileri
JWT_SECRET=gizli_anahtar_buraya_yazin
SESSION_SECRET=oturum_gizli_anahtari_buraya_yazin
# Admin Şifresi
ADMIN_PASSWORD=admin123
- MySQL veritabanını oluşturun:
mysql -u root -p < db/schema.sql
- Sunucuyu başlatın:
npm start
Sunucu varsayılan olarak 3000 portunda çalışacaktır.
API Kullanımı
URL ile Sınıflandırma
GET isteği ile:
https://nsfw.apimapi.com/predict?url=https://example.com/image.jpg&model=MobileNetV2
Dosya Yükleme ile Sınıflandırma
curl -X POST "https://nsfw.apimapi.com/predict?model=MobileNetV2" \
-H "X-API-Key: YOUR_API_KEY" \
-F "image=@/path/to/your/image.jpg"
Toplu URL İşleme (Batch Predict)
POST isteği ile birden çok URL'i işleyebilirsiniz:
curl -X POST "https://nsfw.apimapi.com/batch_predict" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"urls": [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg",
"https://example.com/image3.jpg"
],
"model": "MobileNetV2"
}'
Kullanım Bilgisi
Kalan token miktarınızı görüntülemek için:
curl "https://nsfw.apimapi.com/usage_info" \
-H "X-API-Key: YOUR_API_KEY"
Admin Paneli
Admin paneline erişmek için şu URL'i kullanın:
https://nsfw.apimapi.com/admin
Admin panelinde şunları yapabilirsiniz:
- API anahtarı oluşturma ve yönetme
- Kullanım istatistiklerini görüntüleme
- IP limitleri yönetimi
- Genel sistem istatistiklerini inceleme
Token Sistemi
Her görsel analizi 1 token kullanır.
- API anahtarınız olmadan sınırlı sayıda istek yapabilirsiniz (IP başına aylık 100 token)
- Kayıtlı API anahtarları ile aylık belirlenmiş token limitine kadar istek yapabilirsiniz (varsayılan: 1000 token)
- Sınırsız olarak işaretlenen API anahtarları için token limiti yoktur
Model Tipleri
API şu model tiplerini destekler:
MobileNetV2(varsayılan): Hızlı, hafif modelMobileNetV2Mid: Orta seviyede doğruluk/performans dengesiInceptionV3: Daha yüksek doğruluk ancak daha yavaş işlem
Sistem Gereksinimleri
- Node.js (v14+)
- MySQL (v5.7+)
- Yeterli disk alanı (model dosyaları için ~100MB)
Çıktı Örnekleri
Tekli Sınıflandırma Yanıtı
{
"model": "MobileNetV2",
"predictions": [
{
"className": "Drawing",
"probability": 0.01
},
{
"className": "Hentai",
"probability": 0.02
},
{
"className": "Neutral",
"probability": 0.95
},
{
"className": "Porn",
"probability": 0.01
},
{
"className": "Sexy",
"probability": 0.01
}
]
}
Toplu Sınıflandırma Yanıtı
{
"model": "MobileNetV2",
"results": [
{
"url": "https://example.com/image1.jpg",
"predictions": [
{"className": "Drawing", "probability": 0.01},
{"className": "Hentai", "probability": 0.02},
{"className": "Neutral", "probability": 0.95},
{"className": "Porn", "probability": 0.01},
{"className": "Sexy", "probability": 0.01}
],
"error": null
},
{
"url": "https://example.com/image2.jpg",
"predictions": [
{"className": "Drawing", "probability": 0.02},
{"className": "Hentai", "probability": 0.01},
{"className": "Neutral", "probability": 0.94},
{"className": "Porn", "probability": 0.02},
{"className": "Sexy", "probability": 0.01}
],
"error": null
},
{
"url": "https://invalid-url.com/image.jpg",
"predictions": null,
"error": "Request failed with status code 404"
}
]
}