# image_processor **Repository Path**: alenzhai/image_processor ## Basic Information - **Project Name**: image_processor - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-22 - **Last Updated**: 2026-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 电商图片生成器(增强版) > 将商品图片自动处理成俄语电商推广图的自动化工具 ## 功能概述 将商品图片自动处理成俄语电商推广图: 1. **AI 文字识别** - 使用 easyocr(深度学习)精准检测图片中的中文/英文文字 2. **文字擦除** - 使用 OpenCV 图像修复技术擦除原文字 3. **翻译** - 自动翻译文字到俄语 4. **图片合成** - 生成 3:4 比例电商图,右上角添加 logo,渐变背景 ## 目录结构 ``` image_processor/ ├── image_processor.py # 主程序(核心处理逻辑) ├── app.py # Web 管理界面(推荐) ├── requirements.txt # Python 依赖包 ├── README.md # 本文档 ├── templates/ # Web 界面模板 │ └── index.html # 管理界面首页 ├── logos/ # logo 文件夹 │ └── logo2-comp.jpg # 当前使用的 logo ├── input/ # 放入待处理的图片 ├── output/ # 输出的电商图片 ├── uploads/ # Web 上传的临时文件 └── venv/ # Python 虚拟环境 ``` ## 系统要求 - Python 3.8+ - Linux / macOS / Windows - 首次运行需要网络下载 OCR 模型(约 200MB) - Web 服务需要 Flask(已包含在 requirements.txt 中) - 反向代理(可选):Nginx / Apache(用于生产环境部署) ### 环境变量(可选) | 变量名 | 说明 | 默认值 | |--------|------|--------| | `URL_PREFIX` | URL 前缀(用于反向代理) | 空 | | `PORT` | 服务端口 | 5000 | 示例: ```bash # 设置 URL 前缀(用于 Nginx 反向代理) export URL_PREFIX=/image-processor # 设置端口 export PORT=8080 python3 app.py ``` ## 安装 ### 1. 创建虚拟环境(推荐) ```bash cd image_processor python3 -m venv venv source venv/bin/activate # Linux/macOS # 或 venv\Scripts\activate # Windows ``` ### 2. 安装依赖 ```bash # 使用清华镜像源加速安装 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ### 3. 安装中文字体(可选,用于输出图片中的中文显示) ```bash # Ubuntu/Debian sudo apt install fonts-wqy-zenhei # macOS brew install --cask font-noto-cjk # Windows # 系统自带中文字体,无需安装 ``` ### requirements.txt 内容 ``` # 图片处理 Pillow>=9.0.0 opencv-python>=4.5.0 numpy>=1.20.0 # OCR(可选) easyocr>=1.7.0 # Web API Flask>=2.0.0 Werkzeug>=2.0.0 # 翻译 googletrans==4.0.0-rc1 ``` ### 依赖包说明 | 包名 | 用途 | 必需 | |------|------|------| | Pillow | 图片处理和合成 | 是 | | opencv-python | 图像修复(擦除文字) | 是 | | numpy | 数值计算 | 是 | | easyocr | AI 文字检测 | 是 | | Flask | Web 服务 | 否(仅 Web 模式需要) | | googletrans | Google 翻译接口 | 是 | ## 使用方法 ### 快速开始 只需三步即可生成图片: ```bash # 1. 将商品图片放入 input/ 文件夹 cp your-product-image.jpg input/ # 2. 运行程序 source venv/bin/activate python3 image_processor.py # 3. 在 output/ 文件夹查看结果 ls output/ ``` ### Web 管理界面(推荐) 项目提供基于 Flask 的 Web 管理界面,支持上传图片、查看进度、下载结果。 #### 启动 Web 服务 ```bash source venv/bin/activate python3 app.py ``` 启动后访问:**http://localhost:5000** #### Web 界面功能 | 功能 | 说明 | |------|------| | 图片上传 | 支持单张/批量上传图片 | | 处理队列 | 查看待处理、处理中、已完成的任务 | | 图片预览 | 实时预览上传、处理中、输出的图片 | | 进度跟踪 | 显示处理进度(0-100%) | | 结果下载 | 下载处理后的电商图片 | | 配置管理 | 在线查看和修改配置参数 | #### API 接口 | 接口 | 方法 | 说明 | |------|------|------| | `/api/upload` | POST | 上传单张图片到队列 | | `/api/upload/batch` | POST | 批量上传图片 | | `/api/process` | POST | 触发处理队列中的所有图片 | | `/api/process/` | POST | 处理指定文件 | | `/api/task/` | GET | 查询任务状态 | | `/api/queue` | GET | 查看队列状态 | | `/api/files/uploads` | GET | 列出已上传的文件 | | `/api/files/outputs` | GET | 列出已处理的文件 | | `/api/files/input` | GET | 列出输入文件夹的文件 | | `/api/view//` | GET | 预览图片 | | `/api/download/` | GET | 下载处理后的图片 | | `/api/delete/` | DELETE | 删除文件 | | `/api/stats` | GET | 获取统计信息 | ### 基本使用(命令行) 1. **准备 logo** - 将 logo 图片放入 `logos/` 目录,默认为 `logo2-comp.jpg` - 支持格式:JPG, PNG(支持透明背景) - 建议尺寸:宽度 240px 以上(程序会自动缩放到 120px) 2. **放入商品图片** - 将待处理的图片放入 `input/` 文件夹 - 支持格式:JPG, JPEG, PNG, BMP, WEBP - 建议尺寸:800x800px 以上 3. **运行程序** ```bash source venv/bin/activate python3 image_processor.py ``` 4. **查看结果** - 处理后的图片在 `output/` 文件夹 - 输出格式:JPG(质量 95%) - 输出尺寸:900x1200px(3:4 比例) - 文件名:`ru_原文件名.jpg` ### 命令行参数(可选) 程序支持直接指定单个图片进行处理: ```bash # 处理单个图片 python3 image_processor.py path/to/your/image.jpg # 处理多个图片 python3 image_processor.py image1.jpg image2.jpg image3.jpg ``` ### 处理流程 ``` 输入图片 → AI 检测文字 → OCR 识别 → 擦除文字 → 翻译俄语 → 合成输出 ↓ 渐变背景 + logo ``` 输出图片结构: ``` ┌────────────────────────────┐ │ [LOGO] │ <- 右上角 logo │ │ │ 俄文翻译文字 │ <- 翻译后的商品描述 │ Russian text here │ │ │ │ ┌──────────────────────┐ │ │ │ │ │ │ │ 处理后的商品图片 │ │ <- 文字已擦除 │ │ (居中显示) │ │ │ │ │ │ │ └──────────────────────┘ │ │ │ └────────────────────────────┘ ``` ## 配置说明 编辑 `image_processor.py` 文件顶部的 `CONFIG` 字典: ```python CONFIG = { # 输入输出路径 'input_folder': 'input', 'output_folder': 'output', 'logo_folder': 'logos', # logo 文件夹 'logo_file': 'logo2-comp.jpg', # logo 文件名 # 输出图片设置 'output_width': 900, # 输出宽度 'output_height': 1200, # 输出高度 (3:4 比例) # Logo 设置 'logo_width': 120, # logo 宽度 'logo_margin': 30, # logo 边距 # 渐变背景颜色 (RGB) 'gradient_colors': [ (66, 88, 166), # 深蓝紫 (134, 66, 166), # 紫色 (166, 66, 128), # 玫红 ], # 字体设置 'font_size_title': 42, 'font_color': (255, 255, 255), # 白色文字 # 文字处理设置 'enable_text_removal': True, # 是否擦除原文字 'use_ai_detection': True, # 使用 AI 检测文字区域 'inpaint_radius': 10, # 文字修复半径 # 备用文字(当 OCR 无法识别时使用) 'manual_text': '优质商品 限时优惠', } ``` ### 配置项说明 | 配置项 | 默认值 | 说明 | |--------|--------|------| | `input_folder` | `'input'` | 输入图片文件夹路径 | | `output_folder` | `'output'` | 输出图片文件夹路径 | | `logo_file` | `'logo2-comp.jpg'` | 要使用的 logo 文件名 | | `output_width` | `900` | 输出图片宽度(像素) | | `output_height` | `1200` | 输出图片高度(像素) | | `logo_width` | `120` | logo 显示宽度(像素) | | `logo_margin` | `30` | logo 距离边缘的距离(像素) | | `gradient_colors` | `[...]` | 渐变背景颜色列表 (RGB 元组) | | `font_size_title` | `42` | 俄文翻译字体大小 | | `font_color` | `(255,255,255)` | 文字颜色 (RGB) | | `enable_text_removal` | `True` | 是否启用文字擦除功能 | | `use_ai_detection` | `True` | 是否使用 AI 进行文字检测 | | `inpaint_radius` | `10` | 文字擦除修复半径,值越大修复范围越大 | | `manual_text` | `'优质商品 限时优惠'` | OCR 失败时的备用文字 | ### 自定义渐变背景 修改 `gradient_colors` 来自定义背景颜色: ```python # 示例:蓝色系渐变 'gradient_colors': [ (0, 102, 204), # 蓝色 (0, 153, 255), # 浅蓝 (102, 204, 255), # 天蓝 ], # 示例:暖色系渐变 'gradient_colors': [ (255, 102, 51), # 橙色 (255, 153, 51), # 橘黄 (255, 204, 51), # 金黄 ], ``` ## 功能开关 ### 关闭文字擦除 如果图片文字擦除效果不理想,可以关闭擦除功能: ```python 'enable_text_removal': False, # 保留原图,只添加翻译和 logo ``` ### 切换检测方法 ```python 'use_ai_detection': True, # 使用 AI (easyocr) - 推荐,更精确 # 或 'use_ai_detection': False, # 使用 OpenCV - 更快,但可能误检 ``` ## 输出示例 ### main-1.jpg(简单背景) - AI 检测到 1-2 个文字区域 - 文字完全擦除,商品保持完整 - 效果:**完美** ### main-2.jpg(复杂拼接图) - AI 检测到 2 个主要文字区域 - 主要文字擦除,小图标文字保留 - 效果:**良好** ## 常见问题 ### Q: OCR 识别不准确? **A:** 确保图片中文字清晰,对比度高。复杂图片可手动修改 `manual_text` 配置。 ### Q: 文字擦除后有痕迹? **A:** 调整 `inpaint_radius` 参数(5-20): - 值越小:修复范围小,可能残留文字 - 值越大:修复范围大,但可能模糊 ### Q: 翻译不准确? **A:** 程序使用 mymemory 免费 API,如需更准确可更换翻译服务。 ### Q: 中文字体无法显示? **A:** 程序会自动检测系统字体,支持: - Linux: `wqy-zenhei.ttc`, `NotoSansCJK` - macOS: `PingFang.ttc` - Windows: `simhei.ttf`, `msyh.ttc` ### Q: 如何添加自己的 logo? **A:** 1. 准备 PNG 或 JPG 格式的 logo 图片 2. 放入 `logos/` 文件夹 3. 修改配置中的 `logo_file` 为你的 logo 文件名 ### Q: 如何处理不同尺寸比例的图片? **A:** 程序会自动缩放商品图片以适应输出框架,无需手动调整。 ### Q: 运行时提示缺少字体? **A:** 安装开源中文字体: ```bash # Ubuntu/Debian sudo apt install fonts-wqy-zenhei # macOS brew install --cask font-noto-cjk # Windows # 系统自带中文字体,无需安装 ``` ## 生产环境部署 ### 使用 Gunicorn 运行(推荐) ```bash # 安装 gunicorn pip install gunicorn # 启动服务(4 个工作进程) gunicorn -w 4 -b 0.0.0.0:5000 app:app # 后台运行 nohup gunicorn -w 4 -b 0.0.0.0:5000 app:app > app.log 2>&1 & ``` ### 使用 Nginx 反向代理 ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 文件上传大小限制 client_max_body_size 50M; } # 静态文件(可选) location /static { alias /path/to/image_processor/static; } } ``` ### 使用 systemd 管理服务 ```ini # /etc/systemd/system/image-processor.service [Unit] Description=Image Processor Web Service After=network.target [Service] Type=notify User=www-data Group=www-data WorkingDirectory=/path/to/image_processor Environment="PATH=/path/to/image_processor/venv/bin" ExecStart=/path/to/image_processor/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app Restart=on-failure [Install] WantedBy=multi-user.target ``` ```bash # 启用并启动服务 sudo systemctl enable image-processor sudo systemctl start image-processor sudo systemctl status image-processor ``` ### Docker 部署(可选) ```dockerfile FROM python:3.12-slim # 安装系统依赖 RUN apt-get update && apt-get install -y \ libgl1-mesa-glx \ libglib2.0-0 \ fonts-wqy-zenhei \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 5000 CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"] ``` ```bash # 构建和运行 docker build -t image-processor . docker run -p 5000:5000 -v $(pwd)/input:/app/input -v $(pwd)/output:/app/output image-processor ``` ## 性能参考 | 图片尺寸 | AI 检测时间 | OpenCV 检测时间 | |----------|-------------|-----------------| | 800x600 | ~2-3 秒 | ~0.5 秒 | | 1920x1080| ~5-8 秒 | ~1 秒 | | 3000x2000| ~10-15 秒 | ~2 秒 | > 注:测试环境 Intel i7, 16GB RAM。AI 检测首次运行需下载模型。 ## 技术细节 ### AI 文字检测 使用 easyocr 的 CRAFT 算法检测文字区域,比传统 OpenCV 更精确: - 支持多语言(中文、英文) - 适应复杂背景 - 自动合并相邻文字 - 首次运行自动下载模型(约 200MB) ### 文字擦除 使用 OpenCV 的 Telea 算法进行图像修复(inpainting): - 创建文字区域掩码 - 从周围像素推断填充 - 平滑过渡边缘 ### 翻译服务 程序支持两种翻译 API: | API | 说明 | 限制 | |-----|------|------| | Google Translate | 首选 API,速度快 | 需联网 | | mymemory | 备用 API | 每日 5000 词免费 | ### 处理流程图 ``` ┌─────────────────┐ │ 输入图片 │ └────────┬────────┘ │ ┌────────▼────────┐ │ OCR 文字识别 │ │ (easyocr) │ └────────┬────────┘ │ ┌──────────────┴──────────────┐ │ │ ┌────────▼────────┐ ┌────────▼────────┐ │ AI 检测文字区域 │ │ OpenCV 检测 │ │ (推荐) │ │ (备用) │ └────────┬────────┘ └────────┬────────┘ │ │ └──────────────┬──────────────┘ │ ┌──────────▼───────────┐ │ 创建掩码并擦除文字 │ │ (inpainting) │ └──────────┬───────────┘ │ ┌──────────▼───────────┐ │ 翻译文字到俄语 │ │ (Google/mymemory) │ └──────────┬───────────┘ │ ┌──────────▼───────────┐ │ 创建渐变背景 │ │ 添加俄文文字 │ │ 添加 logo │ │ 添加商品图片 │ └──────────┬───────────┘ │ ┌──────────▼───────────┐ │ 输出最终图片 │ │ (900x1200px) │ └──────────────────────┘ ``` ## 更新日志 ### v2.3 (当前版本) - 修复 `/api/ocr` 接口竖版票据模式 OCR 参数问题 - 移除 `paragraph=True` 参数(导致识别结果大幅减少) - 移除 `refine='synergy'` 参数(当前 easyocr 版本不支持) - 竖版票据 OCR 识别效果提升:0 → 26 个有效区域 ### v2.2 - 新增竖版图片自动旋转校正功能,支持处理纵向图片(如票据、清单等) - 优化 OCR 图像预处理,移除锐化操作以提升文字识别效果 - 修复 OpenCV `cv2.threshold` 返回值解包错误 - 移除不支持的 `text_merge_type` 参数 ### v2.1 - 新增倾斜检测与自动校正功能(`detect_and_correct_skew`) - 优化竖版票据图片的 OCR 识别效果 - 改进图像增强算法,提升文字识别准确率 ### v2.0 - 添加 AI 文字检测 (easyocr) - 优化文字擦除效果 - 支持 logo 文件夹管理 - 改进翻译功能 - 新增配置项说明表格 ### v1.0 - 基础 OCR 识别 - 简单图片处理 ## 依赖说明 ### 核心依赖 | 包名 | 用途 | 必需 | |------|------|------| | Pillow | 图片处理 | 是 | | opencv-python-headless | 图像修复 | 是 | | easyocr | AI 文字检测 | 是 | | requests | HTTP 请求(翻译) | 是 | | numpy | 数值计算 | 是 | ### 可选依赖 | 包名 | 用途 | 说明 | |------|------|------| | pytesseract | 备用 OCR | 当 easyocr 不可用时使用 | ## 致谢 - [easyocr](https://github.com/JaidedAI/EasyOCR) - AI 文字识别 - [OpenCV](https://opencv.org/) - 图像处理和修复 - [Pillow](https://python-pillow.org/) - 图片合成 ## 许可证 MIT License