购物网站建设机构网站优化怎么操作
#初始化复制配置#创建数据目录
sudo mkdir -p /app/paddle
sudo chmod -R 777 /app/paddle
#生成dockerfile
sudo cat > /app/paddle/dockerfile <<EOF
FROM python:3.9-slim# 设置环境变量:限制线程数,避免线程冲突导致 Paddle 崩溃
ENV OMP_NUM_THREADS=1
ENV MKL_NUM_THREADS=1
ENV FLAGS_allocator_strategy=naive_best_fit# 安装 PaddleOCR 和 OpenCV 所需的系统库
RUN apt-get update && apt-get install -y \libgl1 \libglib2.0-0 \libgomp1 \&& rm -rf /var/lib/apt/lists/*# 安装 Python 依赖(OCR 和 Flask Web 服务)
RUN pip install --no-cache-dir \paddleocr \flask \paddlepaddle -f https://paddlepaddle.org.cn/whl/cpu.html# ✅ 可选:提前拉模型用于缓存,也可删除这行以加快构建速度
RUN python -c "from paddleocr import PaddleOCR; PaddleOCR(use_angle_cls=False, lang='en')"# 拷贝应用
COPY app.py /app.py# 启动 Flask 服务
CMD ["python", "/app.py"]EOF
#生成app.py(示例用于提取英语单词)
sudo cat > /app/paddle/app.py <<EOF
from flask import Flask, request, jsonify
import requests, io, re
import numpy as np
from PIL import Image
import threading
from concurrent.futures import ThreadPoolExecutor
from paddleocr import PaddleOCRapp = Flask(__name__)
executor = ThreadPoolExecutor(max_workers=2)
thread_local = threading.local()def get_ocr():if not hasattr(thread_local, "ocr"):thread_local.ocr = PaddleOCR(use_textline_orientation=False,lang='en')return thread_local.ocrdef process_image(bytes_data):try:img = Image.open(io.BytesIO(bytes_data)).convert("RGB")img_np = np.array(img)ocr = get_ocr()result = ocr.ocr(img_np)texts = result[0].get('rec_texts', [])words = [m.group(1) for t in texts if (m := re.match(r'^[0-9]*([A-Za-z]+)$', t))]return {"words": words}except Exception as e:return {"error": str(e)}@app.route('/ocr', methods=['POST'])
def ocr_route():data = request.get_json()if not data or 'image_url' not in data:return jsonify({"error": "Missing 'image_url'"}), 400try:resp = requests.get(data['image_url']); resp.raise_for_status()except Exception as e:return jsonify({"error": f"Failed download image: {e}"}), 400future = executor.submit(process_image, resp.content)result = future.result()if "error" in result:return jsonify({"error": "OCR failed: " + result["error"]}), 500return jsonify(result)if __name__ == "__main__":app.run(host="0.0.0.0", port=8866)EOF
#创建docker镜像
cd /app/paddle
docker build -t paddleocr-flask-en .
#启动docker容器
docker run -p 8866:8866 -d -v /app/paddle/paddle_data:/root/.paddlex --rm --name paddleocr paddleocr-flask-en
#请求示例
curl -X POST http://your.domain:8866/ocr -H "Content-Type: application/json" -d '{"image_url": "http://your.image.domain/demo.jpg"}'