Files
baijiahao_text_to_image/README.md

315 lines
9.3 KiB
Markdown
Raw Permalink Normal View History

# 文章图片智能匹配系统
2026-01-30 18:12:32 +08:00
AI驱动的文章与图片智能匹配系统支持自动匹配现有图片、Gemini生成新图片、封面图压字花处理并批量发布文章。
2026-01-30 18:12:32 +08:00
## 项目概述
本项目实现了以下核心功能:
- 从数据库读取待处理的文章数据status='pending_review' 且 review_user_id=152
- 基于文章标签和科室智能匹配现有图片库(优先实拍图,后模板图)
- 使用通义千问大模型评估文章与图片的匹配度阈值0.6
- 匹配失败时自动调用Gemini API生成图片0张图1封面+2详情1张图补充缺失类型
- **封面图压字花处理**:本地化图片文字融合(深褐色文字+白色描边,居中显示)
- 将图片信息插入数据库并上传到服务器
- 所有图片生成完成后统一调用RPA审核接口
2026-01-30 18:12:32 +08:00
## 技术栈
- **Python 3.12**
- **运行平台**: Linux 服务器不支持Windows
2026-01-30 18:12:32 +08:00
- **数据库**: MySQL (PyMySQL)
- **AI服务**:
- Google Gemini API (图片生成模型gemini-3-pro-image-preview)
- 通义千问 API (文章图片匹配评估模型qwen-max)
- **核心依赖库**:
2026-01-30 18:12:32 +08:00
- `requests==2.31.0` - HTTP请求
- `google-genai==0.1.0` - Gemini API调用
- `pymysql` - MySQL数据库连接
- `Pillow==10.0.0` - 图片处理和文字融合
2026-01-30 18:12:32 +08:00
## 项目结构
```
文字匹配图片/
├── 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 # 启动日志
2026-01-30 18:12:32 +08:00
```
## 环境配置
### 1. Linux 中文字体安装(必需)
2026-01-30 18:12:32 +08:00
封面图压字花功能需要中文字体支持,请先安装:
**Ubuntu/Debian**:
```bash
sudo apt-get update
sudo apt-get install fonts-wqy-zenhei fonts-wqy-microhei
```
**CentOS/RHEL**:
2026-01-30 18:12:32 +08:00
```bash
sudo yum install wqy-zenhei-fonts wqy-microhei-fonts
# 或安装 Google Noto 字体
sudo yum install google-noto-sans-cjk-fonts
2026-01-30 18:12:32 +08:00
```
**验证字体安装**:
2026-01-30 18:12:32 +08:00
```bash
fc-list :lang=zh
2026-01-30 18:12:32 +08:00
```
### 2. Python 虚拟环境
2026-01-30 18:12:32 +08:00
本项目使用共享虚拟环境:`/home/work/keyword_crawl/venv`
如需创建新环境:
2026-01-30 18:12:32 +08:00
```bash
python3 -m venv /home/work/keyword_crawl/venv
source /home/work/keyword_crawl/venv/bin/activate
2026-01-30 18:12:32 +08:00
pip install -r requirements.txt
```
### 3. 数据库配置
编辑 `database_config.py` 中的数据库连接信息:
```python
DB_CONFIG = {
'host': 'your_host',
'user': 'your_user',
'password': 'your_password',
'database': 'ai_articles',
2026-01-30 18:12:32 +08:00
'charset': 'utf8mb4'
}
```
## 使用方法
### 快速启动(推荐)
2026-01-30 18:12:32 +08:00
**1. 赋予执行权限**:
2026-01-30 18:12:32 +08:00
```bash
chmod +x start_article_auto_image_matching.sh
2026-01-30 18:12:32 +08:00
```
**2. 前台运行**(查看实时输出):
2026-01-30 18:12:32 +08:00
```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
2026-01-30 18:12:32 +08:00
```
### 导出数据
导出审核通过的文章:
```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. 封面图压字花处理(本地化)
2026-01-30 18:12:32 +08:00
**核心特性**
- ✅ 文字居中显示:自动计算居中坐标
- ✅ 深褐色文字RGB(180, 60, 50)
- ✅ 白色描边效果3像素宽度
- ✅ 自适应字体大小基础120px根据图片尺寸调整40-150px
- ✅ 自动换行每行最多12个字符
- ✅ 跨平台支持:自动检测操作系统并加载对应字体
**处理流程**
1. Gemini生成封面图片
2. 本地压字花处理(添加文章标题)
3. 上传到通用图片接口
4. 插入数据库关联记录image_source=12
**技术优势**
- 绕过网络接口的 IncompleteRead 问题
- 本地处理更快更稳定
- 完全符合视觉规范
### 4. Gemini图片生成流程
2026-01-30 18:12:32 +08:00
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自动递增
2026-01-30 18:12:32 +08:00
### 5. RPA审核接口
2026-01-30 18:12:32 +08:00
所有图片1封面+2详情生成完成后统一调用RPA审核接口
- 端点:`POST /api/articles/rpa/review`
- 参数:`article_ids`文章ID列表`image_source`(图片来源类型)
2026-01-30 18:12:32 +08:00
## 数据库表结构
### 主要表说明
- **ai_articles**: 文章主表
- **ai_images**: 图片信息表
- **ai_image_tags**: 图片标签关联表
- **ai_article_images**: 文章图片关联表
- **ai_tags**: 标签表
- **ai_keywords**: 关键词表
- **ai_departments**: 部门表
## 配置参数
2026-01-30 18:12:32 +08:00
### 核心常量
```python
WORKER_COUNT = 4 # 并行处理worker数量
BATCH_SIZE = 50 # 每批处理的文章数量
MATCH_THRESHOLD = 0.6 # 匹配分数阈值0-1
```
2026-01-30 18:12:32 +08:00
### API配置
2026-01-30 18:12:32 +08:00
**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`
## 日志说明
### 日志文件位置
2026-01-30 18:12:32 +08:00
日志文件存储在 `logs/` 目录下:
- `article_image_matching.log` - 文章匹配主日志
- `article_image_matching_error.log` - 错误日志
- `start_YYYYMMDD_HHMMSS.log` - 启动脚本日志
### 日志级别
- **INFO**:正常流程信息
- **WARNING**:警告信息(如字体加载失败)
- **ERROR**:错误信息(如图片生成失败)
### 数据库日志
系统会将关键操作记录到 `ai_logs` 表:
- 启动/停止服务
- 文章匹配成功/失败
- 图片生成成功/失败
- API调用结果
2026-01-30 18:12:32 +08:00
## 注意事项
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密钥配置
2026-01-30 18:12:32 +08:00
## 许可证
内部项目,保密使用。