File size: 4,036 Bytes
4579532 71c8ab5 4579532 9db4439 4579532 9db4439 4579532 9db4439 4579532 9db4439 4579532 9db4439 4579532 9db4439 4579532 9db4439 4579532 9db4439 4579532 71c8ab5 4579532 71c8ab5 9db4439 4579532 9db4439 4579532 71c8ab5 4579532 71c8ab5 9db4439 4579532 71c8ab5 4579532 71c8ab5 4579532 71c8ab5 4579532 |
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
}) |