| | |
| | """ |
| | 调试上色效果差异的脚本 |
| | """ |
| |
|
| | import sys |
| | import os |
| | import cv2 |
| | import numpy as np |
| |
|
| | |
| | sys.path.insert(0, os.path.dirname(__file__)) |
| |
|
| | from ddcolor_colorizer import DDColorColorizer |
| | from gfpgan_restorer import GFPGANRestorer |
| | import logging |
| |
|
| | |
| | logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(message)s') |
| |
|
| | def simulate_api_processing(image_path): |
| | """ |
| | 模拟API接口的完整处理流程 |
| | """ |
| | print("\n=== 模拟API接口处理流程 ===") |
| | |
| | |
| | print("初始化GFPGAN修复器...") |
| | try: |
| | gfpgan_restorer = GFPGANRestorer() |
| | if not gfpgan_restorer.is_available(): |
| | print("❌ GFPGAN不可用") |
| | return None |
| | print("✅ GFPGAN初始化成功") |
| | except Exception as e: |
| | print(f"❌ GFPGAN初始化失败: {e}") |
| | return None |
| | |
| | print("初始化DDColor上色器...") |
| | try: |
| | ddcolor_colorizer = DDColorColorizer() |
| | if not ddcolor_colorizer.is_available(): |
| | print("❌ DDColor不可用") |
| | return None |
| | print("✅ DDColor初始化成功") |
| | except Exception as e: |
| | print(f"❌ DDColor初始化失败: {e}") |
| | return None |
| | |
| | |
| | print(f"读取图像: {image_path}") |
| | image = cv2.imread(image_path) |
| | if image is None: |
| | print(f"❌ 无法读取图像: {image_path}") |
| | return None |
| | |
| | print(f"原图尺寸: {image.shape}") |
| | |
| | |
| | ddcolor_colorizer.save_debug_image(image, "api_original") |
| | |
| | |
| | original_is_grayscale = ddcolor_colorizer.is_grayscale(image) |
| | print(f"原图灰度检测: {original_is_grayscale}") |
| | |
| | |
| | |
| | print("\n步骤1: 上色处理...") |
| | if original_is_grayscale: |
| | print("策略: 对原图进行上色") |
| | colorized_image = ddcolor_colorizer.colorize_image_direct(image) |
| | ddcolor_colorizer.save_debug_image(colorized_image, "api_colorized") |
| | strategy = "先上色" |
| | current_image = colorized_image |
| | else: |
| | print("策略: 图像已经是彩色的,跳过上色") |
| | strategy = "跳过上色" |
| | current_image = image |
| | |
| | |
| | print("\n步骤2: GFPGAN修复...") |
| | final_image = gfpgan_restorer.restore_image(current_image) |
| | print(f"修复后图像尺寸: {final_image.shape}") |
| | |
| | |
| | result_path = ddcolor_colorizer.save_debug_image(final_image, "api_final") |
| | |
| | strategy += " -> 再修复" |
| | |
| | print(f"\n✅ API模拟完成") |
| | print(f" - 处理策略: {strategy}") |
| | print(f" - 最终结果: {result_path}") |
| | |
| | return { |
| | 'original': image, |
| | 'colorized': colorized_image if original_is_grayscale else None, |
| | 'final': final_image, |
| | 'strategy': strategy |
| | } |
| |
|
| | def test_direct_colorization(image_path): |
| | """ |
| | 测试直接上色(类似test_ddcolor.py的方式) |
| | """ |
| | print("\n=== 测试直接上色 ===") |
| | |
| | colorizer = DDColorColorizer() |
| | if not colorizer.is_available(): |
| | print("❌ DDColor不可用") |
| | return None |
| | |
| | |
| | print("使用官方示例URL上色...") |
| | success, message = colorizer.test_colorization() |
| | |
| | if success: |
| | print(f"✅ URL上色成功: {message}") |
| | else: |
| | print(f"❌ URL上色失败: {message}") |
| | |
| | |
| | print(f"对本地图像直接上色: {image_path}") |
| | success, message = colorizer.test_local_image(image_path) |
| | |
| | if success: |
| | print(f"✅ 本地图像上色成功: {message}") |
| | else: |
| | print(f"❌ 本地图像上色失败: {message}") |
| |
|
| | def compare_results(): |
| | """ |
| | 对比分析结果 |
| | """ |
| | print("\n=== 结果对比分析 ===") |
| | |
| | |
| | debug_files = [] |
| | for f in os.listdir("."): |
| | if f.endswith("_debug.webp"): |
| | debug_files.append(f) |
| | |
| | if debug_files: |
| | print("生成的调试文件:") |
| | for f in sorted(debug_files): |
| | print(f" - {f}") |
| | |
| | print("\n对比建议:") |
| | print("1. 比较 original_debug.webp 和 api_original_debug.webp") |
| | print("2. 比较 local_colorized_debug.webp 和 api_final_debug.webp") |
| | print("3. 检查 api_restored_debug.webp 的修复效果") |
| | print("4. 观察 ddcolor_test_result.webp 的官方示例效果") |
| | else: |
| | print("未找到调试文件") |
| |
|
| | def analyze_image_quality(image_path): |
| | """ |
| | 分析图像质量指标 |
| | """ |
| | print(f"\n=== 分析图像质量: {image_path} ===") |
| | |
| | if not os.path.exists(image_path): |
| | print(f"文件不存在: {image_path}") |
| | return |
| | |
| | image = cv2.imread(image_path) |
| | if image is None: |
| | print(f"无法读取图像: {image_path}") |
| | return |
| | |
| | |
| | h, w, c = image.shape |
| | print(f"尺寸: {w}x{h}, 通道数: {c}") |
| | |
| | |
| | gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
| | mean_brightness = np.mean(gray) |
| | print(f"平均亮度: {mean_brightness:.2f}") |
| | |
| | |
| | contrast = np.std(gray) |
| | print(f"对比度(标准差): {contrast:.2f}") |
| | |
| | |
| | hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) |
| | mean_saturation = np.mean(hsv[:, :, 1]) |
| | print(f"平均饱和度: {mean_saturation:.2f}") |
| | |
| | |
| | laplacian = cv2.Laplacian(gray, cv2.CV_64F) |
| | sharpness = np.var(laplacian) |
| | print(f"锐度: {sharpness:.2f}") |
| |
|
| | def main(): |
| | """主函数""" |
| | print("DDColor 上色效果调试工具") |
| | print("=" * 60) |
| | |
| | |
| | test_image_path = "/path/to/your/test/image.jpg" |
| | |
| | if len(sys.argv) > 1: |
| | test_image_path = sys.argv[1] |
| | |
| | print(f"测试图像路径: {test_image_path}") |
| | |
| | if not os.path.exists(test_image_path): |
| | print("⚠️ 测试图像不存在,将只运行URL测试") |
| | |
| | |
| | test_direct_colorization(None) |
| | |
| | else: |
| | |
| | analyze_image_quality(test_image_path) |
| | |
| | |
| | test_direct_colorization(test_image_path) |
| | |
| | |
| | api_result = simulate_api_processing(test_image_path) |
| | |
| | |
| | if os.path.exists("api_final_debug.webp"): |
| | print("\n--- API处理结果质量分析 ---") |
| | analyze_image_quality("api_final_debug.webp") |
| | |
| | if os.path.exists("local_colorized_debug.webp"): |
| | print("\n--- 直接上色结果质量分析 ---") |
| | analyze_image_quality("local_colorized_debug.webp") |
| | |
| | |
| | compare_results() |
| | |
| | print("\n调试完成!") |
| | print("请检查生成的调试图像来识别问题所在。") |
| |
|
| | if __name__ == "__main__": |
| | main() |