yusufgundogdu's picture
Update app.py
d119adc verified
raw
history blame
4.22 kB
from flask import Flask, request, send_file, jsonify
import os
import sys
import io
import logging
from database import init_db, close_db, get_db_path
# Import yollarını kontrol et
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
# Environment setup
os.environ['NUMBA_DISABLE_JIT'] = '1'
os.environ['TORCH_HOME'] = '/tmp/torch_cache'
os.environ['U2NET_HOME'] = '/tmp/.u2net'
# Create cache directories if they don't exist
os.makedirs('/tmp/torch_cache', exist_ok=True)
os.makedirs('/tmp/.u2net', exist_ok=True)
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Import methods
try:
from get_methods import get_users, get_user
from post_methods import add_user
from consume_method import consume_user
from animegan_method import generate_anime
from rembg_method import remove_background
from halftone_method import apply_halftone
except ImportError as e:
logger.error(f"Import hatası: {e}")
raise
app = Flask(__name__)
init_db(app)
@app.route('/')
def home():
return "StableDiffusionAPI Türkçe"
# Existing routes
app.route('/users', methods=['GET'])(get_users)
app.route('/user/<string:udid>', methods=['GET'])(get_user)
app.route('/add-user', methods=['POST'])(add_user)
app.route('/consume/<string:udid>', methods=['POST'])(consume_user)
# New image processing routes
@app.route('/generate', methods=['POST'])
def generate():
try:
if 'image' not in request.files:
logger.error("No file provided")
return jsonify({'error': 'No image provided'}), 400
file = request.files['image']
if file.filename == '':
logger.error("Empty file provided")
return jsonify({'error': 'No selected file'}), 400
img_io = generate_anime(file.read())
return send_file(img_io, mimetype='image/png')
except Exception as e:
logger.error(f"Unexpected error: {str(e)}", exc_info=True)
return jsonify({'error': str(e)}), 500
@app.route('/remove-bg', methods=['POST'])
def remove_bg():
try:
if 'image' not in request.files:
logger.error("No file provided")
return jsonify({'error': 'No image provided'}), 400
file = request.files['image']
if file.filename == '':
logger.error("Empty file provided")
return jsonify({'error': 'No selected file'}), 400
max_size = 10 * 1024 * 1024 # 10MB
file_data = file.read()
if len(file_data) > max_size:
logger.error(f"File too large: {len(file_data)} bytes")
return jsonify({'error': 'File too large (max 10MB)'}), 400
img_io = remove_background(file_data)
return send_file(img_io, mimetype='image/png')
except Exception as e:
logger.error(f"Unexpected error: {str(e)}", exc_info=True)
return jsonify({'error': str(e)}), 500
@app.route('/halftone', methods=['POST'])
def halftone():
try:
if 'image' not in request.files:
logger.error("No file provided")
return jsonify({'error': 'No image provided'}), 400
file = request.files['image']
if file.filename == '':
logger.error("Empty file provided")
return jsonify({'error': 'No selected file'}), 400
max_size = 10 * 1024 * 1024 # 10MB
file_data = file.read()
if len(file_data) > max_size:
logger.error(f"File too large: {len(file_data)} bytes")
return jsonify({'error': 'File too large (max 10MB)'}), 400
dot_size = int(request.form.get('dot_size', 10))
img_io = apply_halftone(file_data, dot_size)
return send_file(img_io, mimetype='image/png')
except Exception as e:
logger.error(f"Unexpected error: {str(e)}", exc_info=True)
return jsonify({'error': str(e)}), 500
@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)