Sortify_Api_2 / app.py
Notnith's picture
Update app.py
88e8a9c verified
Raw
History Blame Contribute Delete
2.2 kB
import io
from flask import Flask, request, jsonify
from flask_cors import CORS
from ultralytics import YOLO
from PIL import Image
app = Flask(__name__)
CORS(app)
MODEL_PATH = 'best.pt'
print("Mencoba memuat model YOLO...")
try:
model_yolo = YOLO(MODEL_PATH)
print(f"Model YOLO berhasil dimuat. Kelas: {model_yolo.names}")
except Exception as e:
print(f"Error saat memuat model YOLO: {e}")
model_yolo = None
@app.route('/', methods=['GET'])
def health_check():
return jsonify({
"status": "ok",
"message": "Selamat! Server Flask v2 sedang berjalan!",
"version": "2.0"
})
@app.route('/predict', methods=['POST'])
def predict():
if model_yolo is None:
return jsonify({'status': 'error', 'message': 'Model tidak tersedia atau gagal dimuat.'}), 500
if 'image' not in request.files:
return jsonify({'status': 'error', 'message': 'File gambar tidak ditemukan dalam request.'}), 400
file = request.files['image']
try:
img = Image.open(file.stream).convert("RGB")
results = model_yolo.predict(source=img, conf=0.25, verbose=False)
detected_objects_list = []
if results and results[0].boxes.shape[0] > 0:
print(f"Objek terdeteksi: {len(results[0].boxes)}")
for box in results[0].boxes:
cls_id = int(box.cls[0])
confidence = float(box.conf[0])
class_name = model_yolo.names.get(cls_id, f"ID_Kelas:{cls_id}")
detected_objects_list.append({
"jenis_sampah": class_name,
"confidence": round(confidence, 2),
"bounding_box (xyxy)": [round(coord, 2) for coord in box.xyxy[0].tolist()]
})
else:
print("Tidak ada objek yang terdeteksi.")
return jsonify({
'status': 'success',
'detections': detected_objects_list
})
except Exception as e:
print(f"Error saat prediksi: {e}")
return jsonify({'status': 'error', 'message': f'Terjadi kesalahan saat pemrosesan: {e}'}), 500
if __name__ == '__main__':
app.run(debug=True, port=5000)