yusufgundogdu's picture
Update app.py
b9f71d3 verified
raw
history blame
4.08 kB
import os
import sys
import io
import logging
from pathlib import Path
from flask import Flask, request, send_file, jsonify
from PIL import Image
import torch
from database import init_db, close_db, get_db_path
# Proje yolu ayarı
sys.path.insert(0, str(Path(__file__).parent))
# Modül importları
try:
from demo_generate.halftone_method import apply_halftone
from demo_generate.animegan_method import apply_animegan
from demo_generate.rembg_method import remove_background
except ImportError as e:
logging.error(f"Modül import hatası: {e}")
raise
# Ortam ayarları
os.environ['NUMBA_DISABLE_JIT'] = '1'
os.environ['TORCH_HOME'] = '/tmp/torch_cache'
os.environ['U2NET_HOME'] = '/tmp/.u2net'
# Önbellek klasörleri
os.makedirs('/tmp/torch_cache', exist_ok=True)
os.makedirs('/tmp/.u2net', exist_ok=True)
# Log ayarı
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Flask uygulaması
app = Flask(__name__)
init_db(app)
# Ana sayfa
@app.route('/')
def home():
return "Anime İşleme API - Çalışıyor"
# Anime dönüştürme
@app.route('/generate', methods=['POST'])
def generate():
try:
if 'image' not in request.files:
return jsonify({'error': 'Resim yüklenmedi'}), 400
file = request.files['image']
if not file.filename:
return jsonify({'error': 'Geçersiz dosya'}), 400
image = Image.open(io.BytesIO(file.read())).convert("RGB")
processed_img = apply_animegan(image)
img_io = io.BytesIO()
processed_img.save(img_io, 'PNG')
img_io.seek(0)
return send_file(img_io, mimetype='image/png')
except Exception as e:
logger.error(f"Hata: {str(e)}")
return jsonify({'error': 'İşlem sırasında hata oluştu'}), 500
# Arkaplan kaldırma
@app.route('/remove-bg', methods=['POST'])
def bg_remove():
try:
if 'image' not in request.files:
return jsonify({'error': 'Resim yüklenmedi'}), 400
file = request.files['image']
if file.filename == '':
return jsonify({'error': 'Boş dosya'}), 400
output = remove_background(file.read())
img_io = io.BytesIO()
output.save(img_io, 'PNG')
img_io.seek(0)
return send_file(img_io, mimetype='image/png')
except Exception as e:
logger.error(f"Arkaplan kaldırma hatası: {str(e)}")
return jsonify({'error': str(e)}), 500
# Halftone efekti
@app.route('/halftone', methods=['POST'])
def halftone_route():
try:
if 'image' not in request.files:
return jsonify({'error': 'Resim yüklenmedi'}), 400
file = request.files['image']
dot_size = int(request.form.get('dot_size', 10))
dot_size = max(5, min(20, dot_size))
image = Image.open(io.BytesIO(file.read()))
output = apply_halftone(image, dot_size)
img_io = io.BytesIO()
output.save(img_io, 'PNG')
img_io.seek(0)
return send_file(img_io, mimetype='image/png')
except Exception as e:
logger.error(f"Halftone hatası: {str(e)}")
return jsonify({'error': str(e)}), 500
# Veritabanı işlemleri
@app.route('/users', methods=['GET'])
def get_users_route():
from get_methods import get_users
return get_users()
@app.route('/user/<string:udid>', methods=['GET'])
def get_user_route(udid):
from get_methods import get_user
return get_user(udid)
@app.route('/add-user', methods=['POST'])
def add_user_route():
from post_methods import add_user
return add_user()
@app.route('/consume/<string:udid>', methods=['POST'])
def consume_user_route(udid):
from consume_method import consume_user
return consume_user(udid)
# Kapatma
@app.teardown_appcontext
def shutdown_session(exception=None):
close_db()
if __name__ == '__main__':
db_path = get_db_path()
os.makedirs(os.path.dirname(db_path), exist_ok=True)
app.run(host='0.0.0.0', port=7860, debug=True)