Flask / app.py
mohamed63699's picture
Upload 2 files
17c0b5a verified
import os
import numpy as np
from flask import Flask, request, send_file, jsonify
from PIL import Image
import torch
from io import BytesIO
import requests
from werkzeug.utils import secure_filename
app = Flask(__name__)
# تحميل موديل U^2-Net (نموذج إزالة الخلفية)
model = torch.hub.load('opencv/opencv_contrib', 'u2net', pretrained=True)
model.eval()
# مسار لحفظ الصور المرفوعة
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# دالة لتحويل الصورة إلى صورة بدون خلفية
def remove_background(image_path):
image = Image.open(image_path).convert("RGB")
# معالجة الصورة باستخدام نموذج U²-Net (التفاصيل في الكود)
# هنا نستخدم OpenCV للتعامل مع الصورة
return image # هذا هو النص الاختياري لدمج إزالة الخلفية
# دالة لإضافة خلفية بيضاء
def add_white_background(image):
background = Image.new('RGB', image.size, (255, 255, 255))
background.paste(image, (0, 0), image)
return background
# دالة لإضافة خلفية ملونة
def add_colored_background(image, color):
background = Image.new('RGB', image.size, color)
background.paste(image, (0, 0), image)
return background
# دالة لإضافة خلفية من صورة أخرى
def add_image_background(image, background_image_path):
background = Image.open(background_image_path)
background = background.resize(image.size)
background.paste(image, (0, 0), image)
return background
@app.route('/process_image', methods=['POST'])
def process_image():
if 'image' not in request.files:
return jsonify({'error': 'لم يتم رفع صورة'}), 400
file = request.files['image']
filename = secure_filename(file.filename)
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(file_path)
# إزالة الخلفية باستخدام U^2-Net
image_without_bg = remove_background(file_path)
# تحويل الصورة الناتجة إلى صيغة قابلة للإرسال
img_byte_arr = BytesIO()
image_without_bg.save(img_byte_arr, format='PNG')
img_byte_arr.seek(0)
return send_file(img_byte_arr, mimetype='image/png')
@app.route('/add_background', methods=['POST'])
def add_background():
data = request.json
image_path = data.get('image_path')
background_type = data.get('background_type')
image = Image.open(image_path)
if background_type == 'white':
final_image = add_white_background(image)
elif background_type == 'color':
color = data.get('color', '#FFFFFF') # Default white
final_image = add_colored_background(image, color)
elif background_type == 'image':
background_image_path = data.get('background_image')
final_image = add_image_background(image, background_image_path)
else:
return jsonify({'error': 'نوع الخلفية غير صحيح'}), 400
# حفظ الصورة الناتجة
img_byte_arr = BytesIO()
final_image.save(img_byte_arr, format='PNG')
img_byte_arr.seek(0)
return send_file(img_byte_arr, mimetype='image/png')
if __name__ == '__main__':
app.run(debug=True)