shengyudong 97dcff8c8b feat: 添加封面图压字花功能和启动脚本
- 新增封面图本地化压字花处理(深褐色文字+白色描边,居中显示)
- 支持Linux/Windows跨平台字体加载
- 新增启动脚本 start_article_auto_image_matching.sh
- 优化图片生成策略(0张图/1张图/多张图不同处理)
- 绕过网络接口IncompleteRead问题,本地化处理更稳定
- 更新README文档,完善使用说明
2026-02-05 20:25:23 +08:00

文章图片智能匹配系统

AI驱动的文章与图片智能匹配系统支持自动匹配现有图片、Gemini生成新图片、封面图压字花处理并批量发布文章。

项目概述

本项目实现了以下核心功能:

  • 从数据库读取待处理的文章数据status='pending_review' 且 review_user_id=152
  • 基于文章标签和科室智能匹配现有图片库(优先实拍图,后模板图)
  • 使用通义千问大模型评估文章与图片的匹配度阈值0.6
  • 匹配失败时自动调用Gemini API生成图片0张图1封面+2详情1张图补充缺失类型
  • 封面图压字花处理:本地化图片文字融合(深褐色文字+白色描边,居中显示)
  • 将图片信息插入数据库并上传到服务器
  • 所有图片生成完成后统一调用RPA审核接口

技术栈

  • Python 3.12
  • 运行平台: Linux 服务器不支持Windows
  • 数据库: MySQL (PyMySQL)
  • AI服务:
    • Google Gemini API (图片生成模型gemini-3-pro-image-preview)
    • 通义千问 API (文章图片匹配评估模型qwen-max)
  • 核心依赖库:
    • requests==2.31.0 - HTTP请求
    • google-genai==0.1.0 - Gemini API调用
    • pymysql - MySQL数据库连接
    • Pillow==10.0.0 - 图片处理和文字融合

项目结构

文字匹配图片/
├── article_auto_image_matching.py    # 主程序:文章图片智能匹配
├── start_article_auto_image_matching.sh  # 启动脚本
├── database_config.py                # 数据库配置管理
├── log_config.py                    # 日志配置
├── export_approved_articles.py      # 导出审核通过的文章
├── export_image_tags.py             # 导出图片标签数据
├── push_article_published.py        # 文章发布监控脚本
├── requirements.txt                 # 项目依赖
├── setup_env.bat                    # Windows环境初始化脚本
├── setup_env.sh                     # Linux/macOS环境初始化脚本
├── db/                             # 数据库表结构
│   ├── split_tables/              # 按表拆分的SQL文件24个表
│   └── ai_articles.sql            # 完整数据库结构
└── logs/                           # 日志目录
    ├── article_image_matching.log       # 匹配日志
    ├── article_image_matching_error.log # 错误日志
    └── start_*.log                      # 启动日志

环境配置

1. Linux 中文字体安装(必需)

封面图压字花功能需要中文字体支持,请先安装:

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install fonts-wqy-zenhei fonts-wqy-microhei

CentOS/RHEL:

sudo yum install wqy-zenhei-fonts wqy-microhei-fonts
# 或安装 Google Noto 字体
sudo yum install google-noto-sans-cjk-fonts

验证字体安装:

fc-list :lang=zh

2. Python 虚拟环境

本项目使用共享虚拟环境:/home/work/keyword_crawl/venv

如需创建新环境:

python3 -m venv /home/work/keyword_crawl/venv
source /home/work/keyword_crawl/venv/bin/activate
pip install -r requirements.txt

3. 数据库配置

编辑 database_config.py 中的数据库连接信息:

DB_CONFIG = {
    'host': 'your_host',
    'user': 'your_user',
    'password': 'your_password',
    'database': 'ai_articles',
    'charset': 'utf8mb4'
}

使用方法

快速启动(推荐)

1. 赋予执行权限:

chmod +x start_article_auto_image_matching.sh

2. 前台运行(查看实时输出):

./start_article_auto_image_matching.sh

3. 后台运行:

nohup ./start_article_auto_image_matching.sh > /dev/null 2>&1 &

4. 查看运行状态:

# 查看进程
ps aux | grep article_auto_image_matching

# 查看最新日志
ls -lt logs/start_*.log | head -1
tail -f logs/start_*.log

手动运行

source /home/work/keyword_crawl/venv/bin/activate
python article_auto_image_matching.py

导出数据

导出审核通过的文章:

python export_approved_articles.py

导出图片标签数据:

python export_image_tags.py

核心功能说明

1. 文章图片匹配流程

  1. 查询待匹配文章status='pending_review' 且 review_user_id=152无图片关联
  2. 获取可用图片根据文章科室ID查询可用图片image_attached_article_count < 5 且 status='generate'
  3. 图片优先级排序实拍图image_source=2> 模板图image_source=1按挂载次数升序
  4. 通义千问评估调用API评估匹配度阈值0.6
  5. 匹配成功插入关联记录更新图片状态为published
  6. 匹配失败:根据当前图片数量采用不同策略生成图片

2. 图片生成策略

  • 0张图生成1张封面图image_source=12+ 2张详情图image_source=13
  • 1张图
    • 缺少实拍图生成1张封面图image_source=12
    • 缺少AI生成图补充详情图至2张image_source=13
  • ≥2张图:检查并补充缺失类型图片

3. 封面图压字花处理(本地化)

核心特性

  • 文字居中显示:自动计算居中坐标
  • 深褐色文字RGB(180, 60, 50)
  • 白色描边效果3像素宽度
  • 自适应字体大小基础120px根据图片尺寸调整40-150px
  • 自动换行每行最多12个字符
  • 跨平台支持:自动检测操作系统并加载对应字体

处理流程

  1. Gemini生成封面图片
  2. 本地压字花处理(添加文章标题)
  3. 上传到通用图片接口
  4. 插入数据库关联记录image_source=12

技术优势

  • 绕过网络接口的 IncompleteRead 问题
  • 本地处理更快更稳定
  • 完全符合视觉规范

4. Gemini图片生成流程

  1. 根据文章标题和标签生成提示词
  2. 调用Gemini API生成图片模型gemini-3-pro-image-preview
  3. 插入 ai_images
  4. 插入 ai_image_tagsimage_source=3表示AI生成
  5. 上传图片到服务器获取真实URL
  6. 更新数据库中的图片URL
  7. 插入 ai_article_imagessort_order自动递增

5. RPA审核接口

所有图片1封面+2详情生成完成后统一调用RPA审核接口

  • 端点:POST /api/articles/rpa/review
  • 参数:article_ids文章ID列表image_source(图片来源类型)

数据库表结构

主要表说明

  • ai_articles: 文章主表
  • ai_images: 图片信息表
  • ai_image_tags: 图片标签关联表
  • ai_article_images: 文章图片关联表
  • ai_tags: 标签表
  • ai_keywords: 关键词表
  • ai_departments: 部门表

配置参数

核心常量

WORKER_COUNT = 4           # 并行处理worker数量
BATCH_SIZE = 50           # 每批处理的文章数量
MATCH_THRESHOLD = 0.6     # 匹配分数阈值0-1

API配置

Gemini API:

  • 端点:https://work.poloapi.com
  • 模型:gemini-3-pro-image-preview
  • API Key配置在代码中

通义千问 API:

  • 端点:https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
  • 模型:qwen-max
  • API Key配置在代码中

后端服务 API:

  • 登录:http://47.99.184.230:8324/api/auth/login
  • 图片上传:http://47.99.184.230:8324/api/images/upload
  • RPA审核http://47.99.184.230:8324/api/articles/rpa/review

日志说明

日志文件位置

日志文件存储在 logs/ 目录下:

  • article_image_matching.log - 文章匹配主日志
  • article_image_matching_error.log - 错误日志
  • start_YYYYMMDD_HHMMSS.log - 启动脚本日志

日志级别

  • INFO:正常流程信息
  • WARNING:警告信息(如字体加载失败)
  • ERROR:错误信息(如图片生成失败)

数据库日志

系统会将关键操作记录到 ai_logs 表:

  • 启动/停止服务
  • 文章匹配成功/失败
  • 图片生成成功/失败
  • API调用结果

注意事项

  1. 运行平台仅支持Linux服务器不支持Windows
  2. 中文字体:封面图压字花功能必须安装中文字体(文泉驿正黑/微米黑)
  3. 虚拟环境:使用共享虚拟环境 /home/work/keyword_crawl/venv
  4. API密钥妥善保管Gemini和通义千问的API密钥
  5. 数据库密码:生产环境建议使用环境变量管理敏感信息
  6. 并发控制默认4个worker并行处理可根据服务器性能调整
  7. 图片生成策略所有图片生成完成后才调用RPA审核接口
  8. 网络稳定性:封面图上传已本地化处理,避免 IncompleteRead 错误

常见问题

1. 字体加载失败

错误无法加载任何中文字体

解决

# Ubuntu/Debian
sudo apt-get install fonts-wqy-zenhei fonts-wqy-microhei

# CentOS/RHEL
sudo yum install wqy-zenhei-fonts

# 验证安装
fc-list :lang=zh

2. 虚拟环境未找到

错误[警告] 未找到虚拟环境

解决检查虚拟环境路径是否正确或使用系统Python

3. 图片上传失败

原因:网络不稳定导致的 IncompleteRead 错误

解决:已通过本地化处理解决,封面图使用本地压字花+通用上传接口

4. Gemini生成超时

解决检查网络连接和API密钥配置

许可证

内部项目,保密使用。

Description
百家号文生图
Readme 220 MiB
Languages
Python 98.1%
Shell 1.8%
Batchfile 0.1%