File size: 4,036 Bytes
c30f358
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from flask import Blueprint, jsonify, request
import io
from app.utils import OCRModel

main = Blueprint('main', __name__)
ocr_model = OCRModel()

# تحديد امتدادات الملفات المسموح بها
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}

# قائمة الحساسيات المعروفة (يمكن تخصيصها حسب الحاجة)
KNOWN_ALLERGENS = {
    'gluten': ['wheat', 'barley', 'gluten'],
    'dairy': ['milk', 'yogurt', 'cheese', 'lactose'],
    'nuts': ['nuts', 'peanuts', 'almonds', 'walnuts'],
    'eggs': ['eggs'],
    'soy': ['soy'],
    'fish': ['fish'],
    'shellfish': ['oyster', 'shrimp', 'shrimp'],
}

def allowed_file(filename):
    """التحقق من صحة امتداد الملف"""
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

def find_allergens(text, user_allergens):
    """البحث عن الحساسيات في النص"""
    text = text.lower()
    found_allergens = set()
    allergen_details = {}

    for allergen in user_allergens:
        allergen = allergen.strip().lower()
        # البحث في القائمة الرئيسية للحساسيات
        if allergen in KNOWN_ALLERGENS:
            for variant in KNOWN_ALLERGENS[allergen]:
                if variant.lower() in text:
                    found_allergens.add(allergen)
                    allergen_details[allergen] = variant
        # البحث المباشر عن النص المدخل
        elif allergen in text:
            found_allergens.add(allergen)
            allergen_details[allergen] = allergen

    return found_allergens, allergen_details

@main.route('/')
def index():
    return jsonify({
        "message": "Welcome to the Text Recognition and Sensitivity Checking Service",
        "endpoints": {
            "/api/ocr": "POST - Image analysis and sensitivity testing",
        },
        "supported_formats": list(ALLOWED_EXTENSIONS),
        "known_allergens": list(KNOWN_ALLERGENS.keys())
    })

@main.route('/api/ocr', methods=['POST'])
def process_image():
    # التحقق من وجود الملف
    if 'file' not in request.files:
        return jsonify({"error": "No file uploaded"}), 400
    
    # التحقق من وجود قائمة الحساسيات
    if 'allergens' not in request.form:
        return jsonify({"error": "Sensitivities not specified"}), 400
    
    file = request.files['file']
    if file.filename == '':
        return jsonify({"error": "No file selected"}), 400
    
    # التحقق من نوع الملف
    if not allowed_file(file.filename):
        return jsonify({
            "error": "File type not supported",
            "supported_formats": list(ALLOWED_EXTENSIONS)
        }), 400

    # تحضير قائمة الحساسيات
    user_allergens = request.form['allergens'].split(',')
    
    try:
        # قراءة الصورة
        file_bytes = file.read()
        file_stream = io.BytesIO(file_bytes)
        
        # معالجة الصورة
        extracted_text = ocr_model.process_image(file_stream)
        
        # البحث عن الحساسيات
        found_allergens, allergen_details = find_allergens(extracted_text, user_allergens)
        
        # تحضير الرد
        response = {
            "success": True,
            "extracted_text": extracted_text,
            "analysis": {
                "found_allergens": list(found_allergens),
                "allergen_details": allergen_details,
                "has_allergens": len(found_allergens) > 0,
                "warning": "Warning: Allergens found!" if found_allergens else "No allergens found"
            }
        }
        
        return jsonify(response)
        
    except Exception as e:
        return jsonify({
            "error": "An error occurred while processing the image.",
            "details": str(e)
        }), 500

@main.route('/api/allergens', methods=['GET'])
def get_known_allergens():
    return jsonify({
        "allergens": KNOWN_ALLERGENS
    })