170 lines
4.9 KiB
Python
170 lines
4.9 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
测试字幕封面生成器的核心功能
|
|
Test core functionality of subtitle and cover generator
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import json
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
def test_video_frame_extraction():
|
|
"""测试视频帧提取功能"""
|
|
try:
|
|
import cv2
|
|
print("✓ OpenCV loaded successfully")
|
|
|
|
# 创建一个假的视频文件路径来测试
|
|
# (实际上不会提取帧,只是测试cv2.VideoCapture是否能初始化)
|
|
cap = cv2.VideoCapture()
|
|
print("✓ VideoCapture initialized successfully")
|
|
cap.release()
|
|
|
|
return True
|
|
except Exception as e:
|
|
print(f"✗ Video frame extraction failed: {e}")
|
|
return False
|
|
|
|
def test_image_processing():
|
|
"""测试图像处理功能"""
|
|
try:
|
|
import numpy as np
|
|
from PIL import Image, ImageDraw
|
|
print("✓ PIL and NumPy loaded successfully")
|
|
|
|
# 创建一个测试图像
|
|
img = Image.new('RGB', (100, 100), color='red')
|
|
draw = ImageDraw.Draw(img)
|
|
draw.text((10, 10), "Test", fill='white')
|
|
|
|
# 转换为numpy数组
|
|
img_np = np.array(img)
|
|
print(f"✓ Image processing works: shape {img_np.shape}")
|
|
|
|
return True
|
|
except Exception as e:
|
|
print(f"✗ Image processing failed: {e}")
|
|
return False
|
|
|
|
def test_nlp_processing():
|
|
"""测试NLP处理功能"""
|
|
try:
|
|
import jieba
|
|
print("✓ Jieba loaded successfully")
|
|
|
|
# 测试关键词提取
|
|
text = "这是一个测试句子,用于验证中文分词功能"
|
|
words = jieba.cut(text)
|
|
keywords = jieba.analyse.extract_tags(text, topK=5)
|
|
print(f"✓ NLP processing works: keywords {keywords}")
|
|
|
|
return True
|
|
except Exception as e:
|
|
print(f"✗ NLP processing failed: {e}")
|
|
return False
|
|
|
|
def test_background_removal():
|
|
"""测试背景移除功能"""
|
|
try:
|
|
from rembg import remove
|
|
print("✓ RMBG loaded successfully")
|
|
|
|
# 创建一个简单的测试图像
|
|
from PIL import Image
|
|
test_img = Image.new('RGB', (50, 50), color='blue')
|
|
# 测试是否能调用remove函数(不实际处理)
|
|
print("✓ Background removal library available")
|
|
|
|
return True
|
|
except Exception as e:
|
|
print(f"✗ Background removal failed: {e}")
|
|
return False
|
|
|
|
def test_transformers():
|
|
"""测试Transformers功能"""
|
|
try:
|
|
from transformers import pipeline
|
|
import torch
|
|
print("✓ Transformers loaded successfully")
|
|
print(f"✓ PyTorch available: CUDA={torch.cuda.is_available()}")
|
|
|
|
# 不实际加载模型,只测试导入
|
|
return True
|
|
except Exception as e:
|
|
print(f"✗ Transformers failed: {e}")
|
|
return False
|
|
|
|
def test_funasr():
|
|
"""测试FUNASR功能"""
|
|
try:
|
|
from funasr import AutoModel
|
|
print("✓ FUNASR loaded successfully")
|
|
|
|
# 测试是否能导入AutoModel
|
|
return True
|
|
except Exception as e:
|
|
print(f"✗ FUNASR failed: {e}")
|
|
return False
|
|
|
|
def test_ffmpeg():
|
|
"""测试FFmpeg功能"""
|
|
try:
|
|
import subprocess
|
|
result = subprocess.run(['ffmpeg', '-version'],
|
|
capture_output=True, text=True, timeout=10)
|
|
if result.returncode == 0:
|
|
version_line = result.stdout.split('\n')[0]
|
|
print(f"✓ FFmpeg available: {version_line}")
|
|
return True
|
|
else:
|
|
print("✗ FFmpeg not working properly")
|
|
return False
|
|
except Exception as e:
|
|
print(f"✗ FFmpeg test failed: {e}")
|
|
return False
|
|
|
|
def main():
|
|
"""主测试函数"""
|
|
print("=" * 60)
|
|
print("字幕封面生成器功能测试")
|
|
print("Subtitle & Cover Generator Feature Test")
|
|
print("=" * 60)
|
|
|
|
tests = [
|
|
("视频帧提取", test_video_frame_extraction),
|
|
("图像处理", test_image_processing),
|
|
("NLP处理", test_nlp_processing),
|
|
("背景移除", test_background_removal),
|
|
("Transformers", test_transformers),
|
|
("FUNASR语音识别", test_funasr),
|
|
("FFmpeg", test_ffmpeg),
|
|
]
|
|
|
|
passed = 0
|
|
total = len(tests)
|
|
|
|
for test_name, test_func in tests:
|
|
print(f"\n测试: {test_name}")
|
|
print("-" * 30)
|
|
if test_func():
|
|
passed += 1
|
|
print()
|
|
|
|
print("=" * 60)
|
|
print(f"测试结果: {passed}/{total} 通过")
|
|
print(f"Test Results: {passed}/{total} passed")
|
|
|
|
if passed == total:
|
|
print("🎉 所有功能正常!可以开始使用字幕封面生成功能了")
|
|
print("All features working! Ready to use subtitle and cover generation.")
|
|
return 0
|
|
else:
|
|
print("⚠️ 某些功能不可用,请检查依赖库安装")
|
|
print("Some features not available, please check dependencies.")
|
|
return 1
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main()) |