Notnith commited on
Commit
88e8a9c
·
verified ·
1 Parent(s): 4729367

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -0
app.py CHANGED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import io
2
+ from flask import Flask, request, jsonify
3
+ from flask_cors import CORS
4
+ from ultralytics import YOLO
5
+ from PIL import Image
6
+
7
+
8
+ app = Flask(__name__)
9
+ CORS(app)
10
+
11
+
12
+ MODEL_PATH = 'best.pt'
13
+
14
+ print("Mencoba memuat model YOLO...")
15
+ try:
16
+ model_yolo = YOLO(MODEL_PATH)
17
+ print(f"Model YOLO berhasil dimuat. Kelas: {model_yolo.names}")
18
+ except Exception as e:
19
+ print(f"Error saat memuat model YOLO: {e}")
20
+ model_yolo = None
21
+
22
+
23
+ @app.route('/', methods=['GET'])
24
+ def health_check():
25
+ return jsonify({
26
+ "status": "ok",
27
+ "message": "Selamat! Server Flask v2 sedang berjalan!",
28
+ "version": "2.0"
29
+ })
30
+
31
+
32
+ @app.route('/predict', methods=['POST'])
33
+ def predict():
34
+ if model_yolo is None:
35
+ return jsonify({'status': 'error', 'message': 'Model tidak tersedia atau gagal dimuat.'}), 500
36
+
37
+ if 'image' not in request.files:
38
+ return jsonify({'status': 'error', 'message': 'File gambar tidak ditemukan dalam request.'}), 400
39
+
40
+ file = request.files['image']
41
+
42
+ try:
43
+ img = Image.open(file.stream).convert("RGB")
44
+ results = model_yolo.predict(source=img, conf=0.25, verbose=False)
45
+
46
+ detected_objects_list = []
47
+ if results and results[0].boxes.shape[0] > 0:
48
+ print(f"Objek terdeteksi: {len(results[0].boxes)}")
49
+ for box in results[0].boxes:
50
+ cls_id = int(box.cls[0])
51
+ confidence = float(box.conf[0])
52
+ class_name = model_yolo.names.get(cls_id, f"ID_Kelas:{cls_id}")
53
+
54
+ detected_objects_list.append({
55
+ "jenis_sampah": class_name,
56
+ "confidence": round(confidence, 2),
57
+ "bounding_box (xyxy)": [round(coord, 2) for coord in box.xyxy[0].tolist()]
58
+ })
59
+ else:
60
+ print("Tidak ada objek yang terdeteksi.")
61
+
62
+ return jsonify({
63
+ 'status': 'success',
64
+ 'detections': detected_objects_list
65
+ })
66
+
67
+ except Exception as e:
68
+ print(f"Error saat prediksi: {e}")
69
+ return jsonify({'status': 'error', 'message': f'Terjadi kesalahan saat pemrosesan: {e}'}), 500
70
+
71
+ if __name__ == '__main__':
72
+ app.run(debug=True, port=5000)