Spaces:
Sleeping
Sleeping
Update app/routes.py
Browse files- app/routes.py +12 -14
app/routes.py
CHANGED
@@ -18,14 +18,12 @@ allergy_analyzer = None
|
|
18 |
|
19 |
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}
|
20 |
|
21 |
-
def init_allergy_analyzer():
|
|
|
22 |
global allergy_analyzer
|
23 |
if allergy_analyzer is None:
|
24 |
-
|
25 |
-
|
26 |
-
@main.before_app_first_request
|
27 |
-
def before_first_request():
|
28 |
-
init_allergy_analyzer()
|
29 |
|
30 |
def allowed_file(filename):
|
31 |
"""Validate file extension"""
|
@@ -49,13 +47,12 @@ def index():
|
|
49 |
|
50 |
@main.route('/api/ocr', methods=['POST'])
|
51 |
def process_image():
|
|
|
52 |
try:
|
53 |
-
# التحقق من وجود الملف
|
54 |
if 'file' not in request.files:
|
55 |
logger.warning("No file uploaded")
|
56 |
return jsonify({"error": "No file uploaded"}), 400
|
57 |
|
58 |
-
# التحقق من وجود قائمة الحساسيات
|
59 |
if 'allergens' not in request.form:
|
60 |
logger.warning("Allergens not specified")
|
61 |
return jsonify({"error": "Allergens not specified"}), 400
|
@@ -65,7 +62,6 @@ def process_image():
|
|
65 |
logger.warning("No file selected")
|
66 |
return jsonify({"error": "No file selected"}), 400
|
67 |
|
68 |
-
# التحقق من نوع الملف
|
69 |
if not allowed_file(file.filename):
|
70 |
logger.warning(f"Invalid file type: {file.filename}")
|
71 |
return jsonify({
|
@@ -73,23 +69,22 @@ def process_image():
|
|
73 |
"supported_formats": list(ALLOWED_EXTENSIONS)
|
74 |
}), 400
|
75 |
|
76 |
-
# تحضير قائمة الحساسيات
|
77 |
user_allergens = [a.strip().lower() for a in request.form['allergens'].split(',')]
|
78 |
logger.info(f"Processing image for allergens: {user_allergens}")
|
79 |
|
80 |
-
# قراءة الصورة
|
81 |
file_bytes = file.read()
|
82 |
file_stream = io.BytesIO(file_bytes)
|
83 |
image = Image.open(file_stream)
|
84 |
|
85 |
-
# معالجة الصورة واستخراج النص
|
86 |
extracted_text = ocr_model.process_image(image)
|
87 |
logger.info(f"Extracted text: {extracted_text}")
|
88 |
|
89 |
-
#
|
|
|
|
|
|
|
90 |
analysis_results = allergy_analyzer.analyze_text(extracted_text, user_allergens)
|
91 |
|
92 |
-
# إعداد الرد
|
93 |
response = {
|
94 |
"success": True,
|
95 |
"extracted_text": extracted_text,
|
@@ -113,6 +108,9 @@ def process_image():
|
|
113 |
|
114 |
@main.route('/api/allergens', methods=['GET'])
|
115 |
def get_known_allergens():
|
|
|
|
|
|
|
116 |
allergens = allergy_analyzer.get_allergen_list()
|
117 |
return jsonify({
|
118 |
"allergens": allergens,
|
|
|
18 |
|
19 |
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}
|
20 |
|
21 |
+
def init_allergy_analyzer(app):
|
22 |
+
"""تهيئة محلل الحساسيات باستخدام سياق التطبيق"""
|
23 |
global allergy_analyzer
|
24 |
if allergy_analyzer is None:
|
25 |
+
with app.app_context():
|
26 |
+
allergy_analyzer = AllergyAnalyzer(current_app.config['ALLERGY_DATASET_PATH'])
|
|
|
|
|
|
|
27 |
|
28 |
def allowed_file(filename):
|
29 |
"""Validate file extension"""
|
|
|
47 |
|
48 |
@main.route('/api/ocr', methods=['POST'])
|
49 |
def process_image():
|
50 |
+
global allergy_analyzer
|
51 |
try:
|
|
|
52 |
if 'file' not in request.files:
|
53 |
logger.warning("No file uploaded")
|
54 |
return jsonify({"error": "No file uploaded"}), 400
|
55 |
|
|
|
56 |
if 'allergens' not in request.form:
|
57 |
logger.warning("Allergens not specified")
|
58 |
return jsonify({"error": "Allergens not specified"}), 400
|
|
|
62 |
logger.warning("No file selected")
|
63 |
return jsonify({"error": "No file selected"}), 400
|
64 |
|
|
|
65 |
if not allowed_file(file.filename):
|
66 |
logger.warning(f"Invalid file type: {file.filename}")
|
67 |
return jsonify({
|
|
|
69 |
"supported_formats": list(ALLOWED_EXTENSIONS)
|
70 |
}), 400
|
71 |
|
|
|
72 |
user_allergens = [a.strip().lower() for a in request.form['allergens'].split(',')]
|
73 |
logger.info(f"Processing image for allergens: {user_allergens}")
|
74 |
|
|
|
75 |
file_bytes = file.read()
|
76 |
file_stream = io.BytesIO(file_bytes)
|
77 |
image = Image.open(file_stream)
|
78 |
|
|
|
79 |
extracted_text = ocr_model.process_image(image)
|
80 |
logger.info(f"Extracted text: {extracted_text}")
|
81 |
|
82 |
+
# تأكد من تهيئة محلل الحساسيات
|
83 |
+
if allergy_analyzer is None:
|
84 |
+
init_allergy_analyzer(current_app._get_current_object())
|
85 |
+
|
86 |
analysis_results = allergy_analyzer.analyze_text(extracted_text, user_allergens)
|
87 |
|
|
|
88 |
response = {
|
89 |
"success": True,
|
90 |
"extracted_text": extracted_text,
|
|
|
108 |
|
109 |
@main.route('/api/allergens', methods=['GET'])
|
110 |
def get_known_allergens():
|
111 |
+
global allergy_analyzer
|
112 |
+
if allergy_analyzer is None:
|
113 |
+
init_allergy_analyzer(current_app._get_current_object())
|
114 |
allergens = allergy_analyzer.get_allergen_list()
|
115 |
return jsonify({
|
116 |
"allergens": allergens,
|