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

315 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 文章图片智能匹配系统
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**:
```bash
sudo apt-get update
sudo apt-get install fonts-wqy-zenhei fonts-wqy-microhei
```
**CentOS/RHEL**:
```bash
sudo yum install wqy-zenhei-fonts wqy-microhei-fonts
# 或安装 Google Noto 字体
sudo yum install google-noto-sans-cjk-fonts
```
**验证字体安装**:
```bash
fc-list :lang=zh
```
### 2. Python 虚拟环境
本项目使用共享虚拟环境:`/home/work/keyword_crawl/venv`
如需创建新环境:
```bash
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` 中的数据库连接信息:
```python
DB_CONFIG = {
'host': 'your_host',
'user': 'your_user',
'password': 'your_password',
'database': 'ai_articles',
'charset': 'utf8mb4'
}
```
## 使用方法
### 快速启动(推荐)
**1. 赋予执行权限**:
```bash
chmod +x start_article_auto_image_matching.sh
```
**2. 前台运行**(查看实时输出):
```bash
./start_article_auto_image_matching.sh
```
**3. 后台运行**:
```bash
nohup ./start_article_auto_image_matching.sh > /dev/null 2>&1 &
```
**4. 查看运行状态**:
```bash
# 查看进程
ps aux | grep article_auto_image_matching
# 查看最新日志
ls -lt logs/start_*.log | head -1
tail -f logs/start_*.log
```
### 手动运行
```bash
source /home/work/keyword_crawl/venv/bin/activate
python article_auto_image_matching.py
```
### 导出数据
导出审核通过的文章:
```bash
python export_approved_articles.py
```
导出图片标签数据:
```bash
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_tags`image_source=3表示AI生成
5. 上传图片到服务器获取真实URL
6. 更新数据库中的图片URL
7. 插入 `ai_article_images`sort_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**: 部门表
## 配置参数
### 核心常量
```python
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. 字体加载失败
**错误**`无法加载任何中文字体`
**解决**
```bash
# 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密钥配置
## 许可证
内部项目,保密使用。