Lotzi commited on
Commit
bb22c21
·
verified ·
1 Parent(s): d469059

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -78
app.py CHANGED
@@ -1,78 +1,74 @@
1
- # --- 1. ייבוא הספריות הנדרשות ---
2
- from flask import Flask, request, send_file, jsonify
3
- from flask_cors import CORS
4
- from rembg import remove
5
- from PIL import Image
6
- import io
7
- import os
8
-
9
- # --- 2. יצירת אפליקציית Flask ---
10
- # זוהי היצירה של אובייקט השרת המרכזי שלנו.
11
- app = Flask(__name__)
12
-
13
- # --- 3. הגדרת CORS ---
14
- # זהו החלק הקריטי המאפשר לאתר ה-Front-End שלנו (שיושב בדומיין אחר)
15
- # לתקשר עם השרת הזה. בלעדיו, הדפדפן יחסום את הבקשות מטעמי אבטחה.
16
- # הגדרת "origins='*'" היא פחות מאובטחת ומתאימה לפיתוח.
17
- # בסביבת ייצור אמיתית, כדאי להחליף את '*' בכתובת המדויקת של אתר ה-Front-End.
18
- CORS(app, resources={r"/api/*": {"origins": "*"}})
19
-
20
- # --- 4. הגדרת "נקודת קצה" (Endpoint) לבדיקת תקינות ---
21
- # זוהי נקודת קצה פשוטה שנוכל לגשת אליה מהדפדפן כדי לוודא שהשרת פועל.
22
- # לדוגמה: https://your-backend-url.com/
23
- @app.route('/')
24
- def index():
25
- # מחזיר הודעת JSON פשוטה
26
- return jsonify({"message": "Background removal server is running!"})
27
-
28
- # --- 5. הגדרת נקודת הקצה המרכזית להסרת רקע ---
29
- # כתובת זו תקבל את בקשות ה-POST עם קבצי התמונה.
30
- @app.route('/api/remove-background', methods=['POST'])
31
- def remove_background_api():
32
- # --- 5.1. בדיקה שהקובץ אכן נשלח בבקשה ---
33
- if 'file' not in request.files:
34
- # אם המפתח 'file' לא קיים, החזר שגיאה ברורה.
35
- return jsonify({"error": "No file part in the request"}), 400
36
-
37
- file = request.files['file']
38
-
39
- # --- 5.2. בדיקה שהמשתמש אכן בחר קובץ ---
40
- if file.filename == '':
41
- # אם נשלח מפתח 'file' אבל הוא ריק, החזר שגיאה.
42
- return jsonify({"error": "No file selected for uploading"}), 400
43
-
44
- # --- 5.3. קריאת הבייטים של הקובץ מהבקשה ---
45
- # `file.read()` קורא את כל תוכן הקובץ לתוך משתנה בזיכרון.
46
- input_bytes = file.read()
47
-
48
- try:
49
- # --- 5.4. שימוש ב-rembg להסרת הרקע ---
50
- # זוהי שורת הקסם. הפונקציה `remove` מקבלת את הבייטים של התמונה המקורית
51
- # ומחזירה את הבייטים של תמונת ה-PNG החדשה, ללא רקע.
52
- output_bytes = remove(input_bytes)
53
-
54
- # --- 5.5. שליחת התמונה המעובדת בחזרה למשתמש ---
55
- # אנו אורזים את הבייטים של התוצאה באובייקט BytesIO, שמתנהג כמו קובץ בזיכרון.
56
- # `send_file` היא פונקציית עזר של Flask שיודעת לשלוח קבצים בצורה נכונה,
57
- # עם ההגדרות (Headers) המתאימות כדי שהדפדפן יבין שזהו קובץ תמונה.
58
- return send_file(
59
- io.BytesIO(output_bytes),
60
- mimetype='image/png', # חשוב להגדיר את סוג התוכן כתמונת PNG
61
- as_attachment=False, # כדי שהדפדפן יציג אותה ולא ינסה להוריד ישר
62
- download_name='processed.png' # שם ברירת מחדל אם המשתמש ירצה לשמור
63
- )
64
-
65
- except Exception as e:
66
- # --- 5.6. טיפול בשגיאות אפשריות במהלך העיבוד ---
67
- # למשל, אם rembg לא הצליח לעבד קובץ פגום.
68
- print(f"Error processing image: {e}") # הדפסת השגיאה ללוג של השרת
69
- return jsonify({"error": f"Failed to process image: {str(e)}"}), 500
70
-
71
- # --- 6. הרצת השרת (רלוונטי רק לפיתוח מקומי) ---
72
- # החלק הזה מאפשר לנו להריץ את השרת על המחשב שלנו לצורך בדיקות.
73
- # פלטפורמות האחסון (כמו Hugging Face) לא משתמשות בחלק הזה,
74
- # אלא מריצות את האפליקציה באמצעות שרת ייעודי כמו Gunicorn.
75
- if __name__ == '__main__':
76
- # מאזין בכל הכתובות (0.0.0.0) על פורט שמוגדר על ידי סביבת העבודה, או 8080.
77
- port = int(os.environ.get('PORT', 8080))
78
- app.run(host='0.0.0.0', port=port)
 
1
+ # --- 1. ייבוא הספריות הנדרשות ---
2
+ from flask import Flask, request, send_file, jsonify
3
+ from flask_cors import CORS
4
+ from rembg import remove
5
+ from PIL import Image
6
+ import io
7
+ import os
8
+
9
+ # --- 2. יצירת אפליקציית Flask ---
10
+ # זוהי היצירה של אובייקט השרת המרכזי שלנו.
11
+ app = Flask(__name__)
12
+
13
+ # --- 3. הגדרת CORS ---
14
+ # זהו החלק הקריטי המאפשר לאתר ה-Front-End שלנו (שיושב בדומיין אחר)
15
+ # לתקשר עם השרת הזה. בלעדיו, הדפדפן יחסום את הבקשות מטעמי אבטחה.
16
+ # הגדרת "origins='*'" היא פחות מאובטחת ומתאימה לפיתוח.
17
+ # בסביבת ייצור אמיתית, כדאי להחליף את '*' בכתובת המדויקת של אתר ה-Front-End.
18
+ CORS(app, resources={r"/api/*": {"origins": "*"}})
19
+
20
+ # --- 4. הגדרת "נקודת קצה" (Endpoint) לבדיקת תקינות ---
21
+ # זוהי נקודת קצה פשוטה שנוכל לגשת אליה מהדפדפן כדי לוודא שהשרת פועל.
22
+ # לדוגמה: https://your-backend-url.com/
23
+ @app.route('/')
24
+ def index():
25
+ # מחזיר הודעת JSON פשוטה
26
+ return jsonify({"message": "Background removal server is running!"})
27
+
28
+ # --- 5. הגדרת נקודת הקצה המרכזית להסרת רקע ---
29
+ # כתובת זו תקבל את בקשות ה-POST עם קבצי התמונה.
30
+ @app.route('/api/remove-background', methods=['POST'])
31
+ def remove_background_api():
32
+ # --- 5.1. בדיקה שהקובץ אכן נשלח בבקשה ---
33
+ if 'file' not in request.files:
34
+ # אם המפתח 'file' לא קיים, החזר שגיאה ברורה.
35
+ return jsonify({"error": "No file part in the request"}), 400
36
+
37
+ file = request.files['file']
38
+
39
+ # --- 5.2. בדיקה שהמשתמש אכן בחר קובץ ---
40
+ if file.filename == '':
41
+ # אם נשלח מפתח 'file' אבל הוא ריק, החזר שגיאה.
42
+ return jsonify({"error": "No file selected for uploading"}), 400
43
+
44
+ # --- 5.3. קריאת הבייטים של הקובץ מהבקשה ---
45
+ # `file.read()` קורא את כל תוכן הקובץ לתוך משתנה בזיכרון.
46
+ input_bytes = file.read()
47
+
48
+ try:
49
+ # --- 5.4. שימוש ב-rembg להסרת הרקע ---
50
+ # זוהי שורת הקסם. הפונקציה `remove` מקבלת את הבייטים של התמונה המקורית
51
+ # ומחזירה את הבייטים של תמונת ה-PNG החדשה, ללא רקע.
52
+ output_bytes = remove(input_bytes)
53
+
54
+ # --- 5.5. שליחת התמונה המעובדת בחזרה למשתמש ---
55
+ # אנו אורזים את הבייטים של התוצאה באובייקט BytesIO, שמתנהג כמו קובץ בזיכרון.
56
+ # `send_file` היא פונקציית עזר של Flask שיודעת לשלוח קבצים בצורה נכונה,
57
+ # עם ההגדרות (Headers) המתאימות כדי שהדפדפן יבין שזהו קובץ תמונה.
58
+ return send_file(
59
+ io.BytesIO(output_bytes),
60
+ mimetype='image/png', # חשוב להגדיר את סוג התוכן כתמונת PNG
61
+ as_attachment=False, # כדי שהדפדפן יציג אותה ולא ינסה להוריד ישר
62
+ download_name='processed.png' # שם ברירת מחדל אם המשתמש ירצה לשמור
63
+ )
64
+
65
+ except Exception as e:
66
+ # --- 5.6. טיפול בשגיאות אפשריות במהלך העיבוד ---
67
+ # למשל, אם rembg לא הצליח לעבד קובץ פגום.
68
+ print(f"Error processing image: {e}") # הדפסת השגיאה ללוג של השרת
69
+ return jsonify({"error": f"Failed to process image: {str(e)}"}), 500
70
+
71
+ # --- 6. הרצת השרת (רלוונטי רק לפיתוח מקומי) ---
72
+ # החלק הזה מאפשר לנו להריץ את השרת על המחשב שלנו לצורך בדיקות.
73
+ # פלטפורמות האחסון (כמו Hugging Face) לא משתמשות בחלק הזה,
74
+ # אלא מריצות את האפליקציה באמצעות שרת ייעודי כמו Gunicorn.