Spaces:
Sleeping
Sleeping
""" | |
批量处理贴纸图片的工具模块 | |
功能: | |
1. 批量处理指定目录下的图片文件 | |
2. 使用MD5哈希进行图片去重 | |
3. 生成图片嵌入向量并存储到数据库 | |
4. 可选地将处理后的图片移动到输出目录 | |
""" | |
import os | |
from typing import List | |
from pathlib import Path | |
from app.services import sticker_service | |
def batch_process_stickers(image_dir: str = 'images.tmp', output_dir: str = 'processed.tmp') -> None: | |
""" | |
批量处理目录中的贴纸图片 | |
参数: | |
image_dir: 包含贴纸图片的目录路径 | |
output_dir: 存储处理后图片的输出目录(默认为'processed') | |
功能: | |
1. 遍历目录中的所有图片文件 | |
2. 使用MD5哈希进行去重 | |
3. 为每张图片生成嵌入向量并存储到数据库 | |
4. 可选地将处理后的图片移动到输出目录 | |
""" | |
# 创建输出目录(如果不存在) | |
os.makedirs(output_dir, exist_ok=True) | |
# 用于存储已处理图片的哈希集合 | |
# 遍历目录中的所有文件 | |
# 打印图片数量和列表 | |
print('>>> 待处理图片数量', len(os.listdir(image_dir))) | |
for img_path in Path(image_dir).glob('*.*'): | |
# 只处理jpg/jpeg/png格式的图片 | |
print('>>>> 正在处理图片', img_path) | |
if img_path.suffix.lower() not in ['.jpg', '.jpeg', '.png']: | |
continue | |
try: | |
# 加载图片并准备元数据 | |
from PIL import Image | |
img = Image.open(img_path) | |
title = img_path.stem # 使用文件名作为标题 | |
# 调用上传服务 | |
sticker_service.upload_sticker(img, title, "", "") | |
# 可选操作: 将处理后的图片移动到输出目录 | |
output_path = os.path.join(output_dir, img_path.name) | |
os.rename(str(img_path), output_path) | |
print(f"已处理: {img_path}") | |
except Exception as e: | |
print(f"处理异常 {img_path}: {str(e)}") | |
if __name__ == '__main__': | |
""" | |
命令行入口 | |
用法: python batch_upload.py <图片目录> [--output 输出目录] | |
""" | |
import argparse | |
# 设置命令行参数解析 | |
parser = argparse.ArgumentParser(description='批量处理贴纸图片(带去重功能)') | |
parser.add_argument('image_dir', help='包含贴纸图片的目录') | |
parser.add_argument('--output', '-o', default='processed.tmp', | |
help='处理后图片的输出目录(默认为processed)') | |
# 解析参数并执行批量处理 | |
args = parser.parse_args() | |
batch_process_stickers(args.image_dir, args.output) |