Spaces:
Running
Running
File size: 4,189 Bytes
97132db af5935b fad436e 97132db fad436e 97132db fad436e 97132db fad436e c676e89 fad436e 1acf205 fad436e d2b54c3 97132db d2b54c3 97132db 135b203 97132db fad436e 97132db fad436e 97132db d2b54c3 97132db fad436e 97132db fad436e 97132db f8f385d d2b54c3 fad436e 97132db d2b54c3 b2d1824 97132db fad436e 57952eb fad436e 230d404 fad436e 57952eb 230d404 57952eb fad436e 824f4e9 fad436e 57952eb fad436e 57952eb fad436e 57952eb fad436e 97132db fad436e 97132db fad436e 97132db fad436e | 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 118 119 | import os
import logging
from flask import Flask, render_template, request, redirect, url_for, flash, session, send_from_directory
from utility.utils import process_image_pipeline
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Configure logging
logging.basicConfig(level=logging.INFO, handlers=[logging.StreamHandler()])
app = Flask(__name__)
app.secret_key = os.getenv('SECRET_KEY', 'default_secret_key')
app.config['UPLOAD_FOLDER'] = 'static/uploads/'
app.config['RESULT_FOLDER'] = 'static/results/'
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
os.makedirs(app.config['RESULT_FOLDER'], exist_ok=True)
@app.template_filter('basename')
def basename_filter(path):
return os.path.basename(path)
@app.route('/')
def index():
uploaded_files = session.get('uploaded_files', [])
return render_template('index.html', uploaded_files=uploaded_files)
@app.route('/upload', methods=['POST'])
def upload_file():
logging.info("Request: /upload received")
if 'files' not in request.files:
logging.warning("Upload: No file part in request")
flash('No file part')
return redirect(request.url)
files = request.files.getlist('files')
if not files or all(file.filename == '' for file in files):
logging.warning("Upload: No files selected")
flash('No selected files')
return redirect(request.url)
uploaded_files = []
for file in files:
if file:
filename = file.filename
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(file_path)
uploaded_files.append(filename)
logging.info(f"Upload: Successfully saved {filename}")
session['uploaded_files'] = uploaded_files
return process_file()
@app.route('/process', methods=['GET', 'POST'])
def process_file():
logging.info("Request: /process started")
uploaded_files = session.get('uploaded_files', [])
if not uploaded_files:
logging.warning("Process: No files in session")
flash('No files selected for processing')
return redirect(url_for('index'))
file_paths = [os.path.join(app.config['UPLOAD_FOLDER'], f) for f in uploaded_files]
try:
logging.info(f"Process: Sending {len(file_paths)} files to pipeline")
processed_data = process_image_pipeline(file_paths)
# Format images for result.html
processed_Img = {f: os.path.join(app.config['UPLOAD_FOLDER'], f) for f in uploaded_files}
session['processed_data'] = processed_data
session['processed_Img'] = processed_Img
logging.info("Process: Pipeline completed successfully")
flash('Data processed successfully')
return redirect(url_for('result'))
except Exception as e:
logging.exception(f"Process: Critical failure: {e}")
flash(f'Processing error: {str(e)}')
return redirect(url_for('index'))
@app.route('/result')
def result():
data = session.get('processed_data', {})
Img = session.get('processed_Img', {})
if not data:
return redirect(url_for('index'))
return render_template('result.html', data=data, Img=Img)
@app.route('/reset_upload')
def reset_upload():
uploaded_files = session.get('uploaded_files', [])
for f in uploaded_files:
path = os.path.join(app.config['UPLOAD_FOLDER'], f)
if os.path.exists(path):
os.remove(path)
session.pop('uploaded_files', None)
session.pop('processed_data', None)
session.pop('processed_Img', None)
flash('System reset successful.')
return redirect(url_for('index'))
if __name__ == '__main__':
from utility.utils import get_ocr, get_ner
logging.info("Core: Pre-initializing engines (this may take a minute)...")
# Trigger lazy load at startup to avoid reloader issues and request timeouts
try:
get_ocr()
get_ner()
logging.info("Core: Engines pre-initialized successfully.")
except Exception as e:
logging.error(f"Core: Failed to pre-initialize engines: {e}")
app.run(debug=True, use_reloader=False, port=int(os.getenv('PORT', 5000)))
|