Spaces:
Sleeping
Sleeping
File size: 2,201 Bytes
88e8a9c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 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) |