Spaces:
Sleeping
Sleeping
| 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 | |
| def health_check(): | |
| return jsonify({ | |
| "status": "ok", | |
| "message": "Selamat! Server Flask v2 sedang berjalan!", | |
| "version": "2.0" | |
| }) | |
| 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) |