ScrewTrue, yapay zeka destekli bir vida başlığı tanıma ve sınıflandırma sistemidir. Mobil uygulama ve REST API ile çalışan bu sistem, Roboflow'un cascade model mimarisi kullanarak 10 farklı vida tipini yüksek doğrulukla tespit edebilir.
- Özellikler
- Teknoloji Stack
- Proje Yapısı
- Kurulum
- Çalıştırma
- API Dokümantasyonu
- Cascade Model Sistemi
- Deployment
- Geliştirme
- 10 Farklı Vida Tipi Tanıma: Phillips, Pozidriv, Torx, Hex/Allen, Slotted, Security Torx, Pentalobe, Tri-wing, Spanner, Triangle
- Cascade Model Sistemi: İki aşamalı model yapısı ile optimize edilmiş doğruluk
- Cross-Platform Mobil Uygulama: iOS ve Android desteği
- Gerçek Zamanlı Tespit: Canlı kamera akışında anlık tespit
- Galeri Desteği: Mevcut fotoğraflardan tespit yapma
- Renk Kodlu Sınıflandırma: Her vida tipi için özel renk gösterimi
- Güven Skoru Gösterimi: Tespit doğruluğunu görselleştirme
- RESTful API: Kolay entegrasyon için standart API yapısı
- Framework: FastAPI 0.104.1
- Python: 3.11+
- ML/AI: Roboflow API (Cascade Models)
- Image Processing: OpenCV, NumPy, Pillow
- Server: Uvicorn
- Framework: React Native (Expo)
- Camera: expo-camera
- Image Picker: expo-image-picker
- UI: React Native Components + Linear Gradient
ScrewTrue-main/
├── backend/ # FastAPI backend servisi
│ ├── main.py # Ana API dosyası
│ ├── requirements.txt # Python bağımlılıkları
│ ├── Procfile # Heroku deployment config
│ ├── runtime.txt # Python versiyonu
│ └── README.md # Backend dokümantasyonu
│
├── mobile/ # React Native mobil uygulama
│ ├── App.js # Ana uygulama bileşeni
│ ├── index.js # Entry point
│ ├── package.json # Node.js bağımlılıkları
│ ├── app.json # Expo konfigürasyonu
│ ├── eas.json # EAS Build konfigürasyonu
│ └── README.md # Mobile dokümantasyonu
│
└── README.md # Bu dosya
- Python 3.11 veya üzeri
- pip (Python paket yöneticisi)
cd backend# Windows
python -m venv venv
venv\Scripts\activate
# macOS/Linux
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txtYüklenecek paketler:
fastapi==0.104.1- Web frameworkuvicorn[standard]==0.24.0- ASGI serverpython-multipart==0.0.6- File upload desteğinumpy==1.26.2- Numerik işlemleropencv-python-headless==4.8.1.78- Görüntü işlemepillow==10.1.0- Görüntü manipülasyonurequests==2.31.0- HTTP istekleri
Backend zaten yapılandırılmış durumda. main.py dosyasında şu ayarlar mevcut:
# Model 1: Phillips/Pozidriv
MODEL_1_URL = "https://serverless.roboflow.com/dataminingproject-avr2o/2"
MODEL_1_API_KEY = "rSNcCctYlXx2bkMecwZk"
MODEL_1_THRESHOLD = 0.65
# Model 2: Diğer vida tipleri
MODEL_2_URL = "https://serverless.roboflow.com/dataminingproject-avr2o/5"
MODEL_2_API_KEY = "rSNcCctYlXx2bkMecwZk"
MODEL_2_THRESHOLD = 0.55- Node.js 18+ ve npm
- Expo CLI (global olarak kurulacak)
- Android Studio (Android geliştirme için)
- Xcode (iOS geliştirme için, sadece macOS)
npm install -g expo-clicd mobilenpm installapp.json dosyasını açın ve API URL'ini yapılandırın:
{
"expo": {
"extra": {
"apiUrl": "http://localhost:8000", // Development için
"apiUrlLocal": "http://localhost:8000"
}
}
}Not: Development modunda uygulama otomatik olarak localhost:8000 kullanır. Production için gerçek API URL'inizi ekleyin.
cd backend
uvicorn main:app --host 0.0.0.0 --port 8000 --reload--reload parametresi development modunda kod değişikliklerini otomatik yükler.
cd backend
python main.pycd backend
start_backend.batcd backend
.\start_backend.ps1Backend başarıyla çalıştığında şu mesajları göreceksiniz:
[OK] Model 1 hazir: https://serverless.roboflow.com/...
[OK] Model 2 hazir: https://serverless.roboflow.com/...
[OK] Cascade sistem aktif
INFO: Uvicorn running on http://0.0.0.0:8000
Tarayıcınızda şu URL'leri ziyaret ederek API'nin çalıştığını doğrulayın:
http://localhost:8000- API durumuhttp://localhost:8000/docs- Swagger UI (interaktif API dokümantasyonu)http://localhost:8000/health- Sağlık kontrolü
- Android: Google Play Store
- iOS: App Store
cd mobile
npm startBu komut Expo Development Server'ı başlatır ve QR kod gösterir.
Android:
- Expo Go uygulamasını açın
- QR kodu tarayın veya "Enter URL manually" ile
exp://localhost:8081girin
iOS:
- Kamera uygulamasını açın
- QR kodu tarayın
- Açılan bildirime tıklayın
Web:
npm run web# Sadece Android
npm run android
# Sadece iOS (macOS gerekli)
npm run ios
# Web tarayıcısında
npm run webhttp://localhost:8000
GET /Response:
{
"status": "active",
"message": "ScrewTrue Roboflow API calisiyor",
"version": "3.0.0",
"runtime": "Roboflow API"
}GET /healthResponse:
{
"status": "healthy",
"api_configured": true,
"api_type": "Roboflow Cascade",
"model_1_url": "https://serverless.roboflow.com/...",
"model_2_url": "https://serverless.roboflow.com/...",
"model_1_allowed": ["Phillips", "Pozidriv"],
"model_1_threshold": 0.65,
"model_2_allowed": ["Torx", "Hex/Allen", ...],
"model_2_threshold": 0.55,
"classes": ["phillips", "pozidriv", ...]
}GET /classesResponse:
{
"classes": [
{
"id": 0,
"name": "phillips",
"label": "Phillips",
"color": "#E74C3C"
},
...
]
}POST /detect
Content-Type: multipart/form-dataRequest:
file: Görüntü dosyası (form-data)confidence: (opsiyonel) Güven eşiği (varsayılan: 0.25)
cURL Örneği:
curl -X POST "http://localhost:8000/detect" \
-F "file=@screw_image.jpg" \
-F "confidence=0.25"Response:
{
"success": true,
"image_size": {
"width": 1920,
"height": 1080
},
"detections_count": 1,
"detections": [
{
"class_id": 0,
"class_name": "phillips",
"class_label": "Phillips",
"confidence": 0.85,
"bbox": {
"x1": 100,
"y1": 150,
"x2": 300,
"y2": 350
},
"color": "#E74C3C",
"model": 1
}
]
}POST /detect/base64
Content-Type: application/jsonRequest:
{
"image": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
"confidence": 0.25
}cURL Örneği:
curl -X POST "http://localhost:8000/detect/base64" \
-H "Content-Type: application/json" \
-d '{
"image": "data:image/jpeg;base64,...",
"confidence": 0.25
}'Response: (Yukarıdaki ile aynı format)
Interaktif API dokümantasyonu için:
http://localhost:8000/docs
ScrewTrue, iki aşamalı bir cascade model sistemi kullanır:
- URL:
https://serverless.roboflow.com/dataminingproject-avr2o/2 - Sınıflar: Phillips, Pozidriv
- Threshold: 0.65 (65% güven eşiği)
- Öncelik: İlk kontrol edilen model
- URL:
https://serverless.roboflow.com/dataminingproject-avr2o/5 - Sınıflar: Torx, Hex/Allen, Slotted, Security Torx, Pentalobe, Tri-wing, Spanner, Triangle
- Threshold: 0.55 (55% güven eşiği)
- Öncelik: Model 1'de sonuç bulunamazsa çalışır
1. Görüntü alınır
↓
2. Model 1 çağrılır (Phillips/Pozidriv)
↓
3. Sonuç filtrelenir (threshold: 0.65)
├─→ Başarılı → Sonuç döndürülür
└─→ Başarısız → Model 2'ye geç
↓
4. Model 2 çağrılır (Diğer tipler)
↓
5. Sonuç filtrelenir (threshold: 0.55)
├─→ Başarılı → Sonuç döndürülür
└─→ Başarısız → null döndürülür
- Hızlı Tespit: Yaygın vida tipleri (Phillips/Pozidriv) için optimize edilmiş
- Yüksek Doğruluk: Her model kendi uzmanlık alanında optimize edilmiş
- Maliyet Optimizasyonu: Gerekli durumlarda sadece Model 2 çağrılır
- Güvenilirlik: İki model katmanı ile daha güvenilir sonuçlar
- Railway hesabına giriş yapın
- "New Project" > "Deploy from GitHub repo" seçin
- Repository'yi seçin
- Root Directory:
backendolarak ayarlayın - Build Command:
pip install -r requirements.txt - Start Command:
uvicorn main:app --host 0.0.0.0 --port $PORT
- Render hesabına giriş yapın
- "New Web Service" oluşturun
- GitHub repository'yi bağlayın
- Ayarlar:
- Root Directory:
backend - Build Command:
pip install -r requirements.txt - Start Command:
uvicorn main:app --host 0.0.0.0 --port $PORT - Python Version: 3.11
- Root Directory:
# Heroku CLI kurulumu gerekli
heroku login
heroku create screwtrue-api
# Backend'i deploy et
cd backend
git subtree push --prefix backend heroku mainnpm install -g eas-cli
eas logincd mobile
# Preview build (test için)
npm run build:android
# Production build
npm run build:android:prodcd mobile
eas build --platform ios --profile productionBuild tamamlandıktan sonra EAS dashboard'dan APK/IPA dosyalarını indirebilirsiniz.
Backend'de debug logları aktif:
[DEBUG] Calling Model 1 (Phillips/Pozidriv)...
[DEBUG] Model 1 - class: Phillips, conf: 0.85
[DEBUG] Model 1 ACCEPTED - class: Phillips, conf: 0.85call_roboflow_api(): Roboflow API çağrısı yaparhandle_model1_response(): Model 1 sonuçlarını filtrelerhandle_model2_response(): Model 2 sonuçlarını filtrelerdetect_screw_cascade(): Cascade akışını yönetirrun_inference(): Ana inference fonksiyonu
- Gerçek zamanlı kamera tespiti
- Galeri'den görüntü seçme
- API entegrasyonu
- Sonuç görselleştirme
# API test
curl http://localhost:8000/health
# Görüntü testi
curl -X POST "http://localhost:8000/detect" \
-F "file=@test_image.jpg"- Expo Go ile development test
- EAS Build ile production test
- Backend default olarak
localhost:8000portunda çalışır - Mobil uygulama development modunda otomatik olarak localhost'u bulur
- Production deployment'ta API URL'ini
app.json'da güncelleyin - Cascade sistem sayesinde aynı frame'de iki sonuç asla gösterilmez
- Model threshold'ları
main.pyiçinde ayarlanabilir
- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Commit yapın (
git commit -m 'Add amazing feature') - Push yapın (
git push origin feature/amazing-feature) - Pull Request açın
Bu proje özel bir lisans altındadır.
Sorularınız için issue açabilir veya repository'yi inceleyebilirsiniz.
ScrewTrue - Akıllı Vida Tanıma Sistemi