from flask import Blueprint, request, jsonify, send_file import os import subprocess import json import uuid import re ocr = Blueprint("ocr", __name__) # 目录配置 upload_dir = "./inference_pic" output_dir = "./inference_json" det_model_dir = "./inference_model/det_v4" rec_model_dir = "./inference_model/rec_v4" cls_model_dir = "./inference_model/ch_ppstructure_mobile_v2.0_SLANet_infer" result_dir = "./inference_results/v4" # 创建目录 os.makedirs(upload_dir, exist_ok=True) os.makedirs(output_dir, exist_ok=True) os.makedirs(result_dir, exist_ok=True) @ocr.route("/process", methods=["POST"]) def ocr_inference(): if "file" not in request.files: return jsonify({"error": "No file provided"}), 400 file = request.files["file"] if file.filename == "": return jsonify({"error": "No selected file"}), 400 # 生成唯一文件名 uuid_str = str(uuid.uuid4()) filename = f"{uuid_str}.jpg" image_path = os.path.join(upload_dir, filename) file.save(image_path) try: # 调用 OCR 模型并捕获 stdout command = [ "python", "tools/infer/predict_system.py", "--image_dir", image_path, "--det_model_dir", det_model_dir, "--rec_model_dir", rec_model_dir, "--cls_model_dir", cls_model_dir, "--draw_img_save_dir", result_dir, ] result = s|u|b|p|r|o|c|e|s|s.run(command, check=True, capture_output=True, text=True, encoding="utf-8") # 提取调试信息 debug_lines = result.stdout.splitlines() pattern = re.compile(r"\[.*\] ppocr DEBUG: (.*?), (\d+\.\d+)") results = []