Ai_GirlFriend/check_outfit_images.py

206 lines
6.6 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
检查换装图片文件
"""
from pathlib import Path
import hashlib
# 图片源目录
SOURCE_DIR = Path('开发/2026年2月4日/Image')
# 期望的文件列表
EXPECTED_FILES = {
# 上装 - 女性
"女性上衣白色T桖.png": "白色T恤",
"女性-上装-粉丝短袖.png": "粉色短袖",
"女性-上装-蓝色衬衫.png": "蓝色衬衫",
"女性-上装-灰色卫衣.png": "灰色卫衣",
"女性-上装-收费-蕾丝吊带上衣.png": "蕾丝吊带上衣",
"女性-上装-收费-一字领露肩上衣.png": "一字领露肩上衣",
"女性-上装-收费-露脐短袖.png": "露脐短袖",
"女性-上装-收费-针织开衫.png": "针织开衫",
"女性-上装-收费-小香风外套.png": "小香风外套",
"女性-上装-vlp专属-真丝衬衫.png": "真丝衬衫",
# 下装 - 女性
"女性-下衣-蓝色牛仔裤.png": "蓝色牛仔裤",
"女性-下衣-黑色短裙.png": "黑色短裙",
"女性-下衣-白色短裙.png": "白色短裤",
"女性-下衣-灰色运动裤.png": "灰色运动裤",
"女性-下衣-A字半身裙.png": "A字半身裙",
"女性-下衣-高腰阔腿裤.png": "高腰阔腿裤",
"女性-下衣-收费-百褶短裙.png": "百褶短裙",
"女性-下衣-收费-破洞牛仔裤.png": "破洞牛仔裤",
"女性-下衣-收费-西装裤.png": "西装裤",
# 连衣裙 - 女性
"女性-连衣裙-白色连衣裙.png": "白色连衣裙",
"女性-连衣裙-碎花连衣裙.png": "碎花连衣裙",
"女性-连衣裙-黑色小礼服.png": "黑色小礼服",
"女性-连衣裙-优雅长裙.png": "优雅长裙",
"女性-连衣裙-吊带连衣裙.png": "吊带连衣裙",
"女性-连衣裙-JK制服.png": "JK制服",
"女性-连衣裙-汉服.png": "汉服",
"女性-连衣裙-洛丽塔.png": "洛丽塔",
"女性-连衣裙-圣诞服装.png": "圣诞装",
"女性-连衣裙-高级定制婚纱.png": "高级定制婚纱",
}
def get_file_hash(file_path):
"""计算文件 MD5 哈希值"""
md5 = hashlib.md5()
with open(file_path, 'rb') as f:
for chunk in iter(lambda: f.read(4096), b""):
md5.update(chunk)
return md5.hexdigest()
def check_images():
"""检查图片文件"""
print("=" * 70)
print(" 换装图片文件检查")
print("=" * 70)
print()
if not SOURCE_DIR.exists():
print(f"❌ 错误:源目录不存在: {SOURCE_DIR}")
return
# 获取所有 PNG 文件
all_files = list(SOURCE_DIR.glob("*.png"))
print(f"📁 源目录: {SOURCE_DIR}")
print(f"📊 找到 {len(all_files)} 个 PNG 文件")
print()
# 检查期望的文件
print("=" * 70)
print(" 检查期望的文件")
print("=" * 70)
print()
missing_files = []
existing_files = []
file_sizes = {}
for filename, description in EXPECTED_FILES.items():
file_path = SOURCE_DIR / filename
if file_path.exists():
size = file_path.stat().st_size
size_kb = size / 1024
file_sizes[filename] = size
existing_files.append(filename)
if size < 10000: # 小于 10KB 可能是空白或损坏
print(f"⚠️ {description}")
print(f" 文件: {filename}")
print(f" 大小: {size_kb:.1f} KB (可能是空白图片)")
print()
else:
print(f"{description}")
print(f" 文件: {filename}")
print(f" 大小: {size_kb:.1f} KB")
print()
else:
missing_files.append((filename, description))
print(f"{description}")
print(f" 文件: {filename}")
print(f" 状态: 缺失")
print()
# 检查重复的图片(相同内容)
print("=" * 70)
print(" 检查重复的图片")
print("=" * 70)
print()
hash_map = {}
duplicates = []
for filename in existing_files:
file_path = SOURCE_DIR / filename
file_hash = get_file_hash(file_path)
if file_hash in hash_map:
duplicates.append((filename, hash_map[file_hash]))
print(f"⚠️ 发现重复图片:")
print(f" 文件1: {hash_map[file_hash]}")
print(f" 文件2: {filename}")
print(f" 哈希: {file_hash}")
print()
else:
hash_map[file_hash] = filename
if not duplicates:
print("✓ 没有发现重复的图片")
print()
# 检查额外的文件
print("=" * 70)
print(" 检查额外的文件")
print("=" * 70)
print()
expected_filenames = set(EXPECTED_FILES.keys())
actual_filenames = set(f.name for f in all_files)
extra_files = actual_filenames - expected_filenames
if extra_files:
for filename in extra_files:
file_path = SOURCE_DIR / filename
size = file_path.stat().st_size
size_kb = size / 1024
print(f"⚠️ 额外的文件: {filename}")
print(f" 大小: {size_kb:.1f} KB")
print()
else:
print("✓ 没有额外的文件")
print()
# 统计结果
print("=" * 70)
print(" 统计结果")
print("=" * 70)
print()
print(f"期望文件数: {len(EXPECTED_FILES)}")
print(f"存在文件数: {len(existing_files)}")
print(f"缺失文件数: {len(missing_files)}")
print(f"重复图片数: {len(duplicates)}")
print(f"额外文件数: {len(extra_files)}")
print()
# 建议
print("=" * 70)
print(" 建议")
print("=" * 70)
print()
if missing_files:
print("⚠️ 缺失的文件需要补充:")
for filename, description in missing_files:
print(f" - {description} ({filename})")
print()
if duplicates:
print("⚠️ 重复的图片需要替换为不同的图片:")
for file1, file2 in duplicates:
print(f" - {file1}{file2} 内容相同")
print()
# 检查小文件(可能是空白)
small_files = [(f, s) for f, s in file_sizes.items() if s < 10000]
if small_files:
print("⚠️ 以下文件可能是空白或损坏(小于 10KB:")
for filename, size in small_files:
print(f" - {filename} ({size / 1024:.1f} KB)")
print()
if not missing_files and not duplicates and not small_files:
print("✓ 所有图片文件正常!")
print()
if __name__ == "__main__":
check_images()