hot_video_analyse/code/test_professional_tools.py

173 lines
4.7 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
专业提取工具测试脚本
演示如何使用SenseVoice和OCR工具
"""
import os
import time
from pathlib import Path
def test_sensevoice():
"""测试SenseVoice语音识别"""
print("🎤 测试SenseVoice语音识别...")
# 检查音频文件
audio_dir = Path("../video2audio")
audio_files = list(audio_dir.glob("*.wav"))
if not audio_files:
print("❌ 未找到音频文件请先运行video2audio.py提取音频")
return
# 选择第一个音频文件测试
test_audio = audio_files[0]
print(f"📁 测试文件: {test_audio}")
# 构建命令
cmd = f"""python sensevoice_transcribe.py "{test_audio}" \
--language zh \
--output sensevoice_test_results \
--format json"""
print(f"🚀 执行命令: {cmd}")
try:
os.system(cmd)
print("✅ SenseVoice测试完成")
except Exception as e:
print(f"❌ SenseVoice测试失败: {e}")
def test_ocr_extractor():
"""测试OCR字幕提取"""
print("\n📝 测试OCR字幕提取...")
# 检查视频文件
video_dir = Path("../video2audio")
video_files = list(video_dir.glob("*.mp4"))
if not video_files:
print("❌ 未找到视频文件")
return
# 选择第一个视频文件测试
test_video = video_files[0]
print(f"📁 测试文件: {test_video}")
# 构建命令
cmd = f"""python ocr_subtitle_extractor.py "{test_video}" \
--engine paddleocr \
--language ch \
--confidence 0.5 \
--output ocr_test_results \
--format json"""
print(f"🚀 执行命令: {cmd}")
try:
os.system(cmd)
print("✅ OCR测试完成")
except Exception as e:
print(f"❌ OCR测试失败: {e}")
def test_whisper_comparison():
"""测试Whisper对比"""
print("\n🎯 测试Whisper对比...")
audio_dir = Path("../video2audio")
audio_files = list(audio_dir.glob("*.wav"))
if not audio_files:
print("❌ 未找到音频文件")
return
test_audio = audio_files[0]
# 使用Whisper
cmd = f"""python whisper_audio_transcribe.py "{audio_dir}" \
--model base \
--output whisper_test_results"""
print(f"🚀 执行Whisper命令: {cmd}")
try:
os.system(cmd)
print("✅ Whisper测试完成")
except Exception as e:
print(f"❌ Whisper测试失败: {e}")
def compare_results():
"""对比结果"""
print("\n📊 对比测试结果...")
# 检查输出目录
sensevoice_dir = Path("sensevoice_test_results")
ocr_dir = Path("ocr_test_results")
whisper_dir = Path("whisper_test_results")
print("📂 输出目录检查:")
print(f" SenseVoice: {'' if sensevoice_dir.exists() else ''} {sensevoice_dir}")
print(f" OCR提取器: {'' if ocr_dir.exists() else ''} {ocr_dir}")
print(f" Whisper: {'' if whisper_dir.exists() else ''} {whisper_dir}")
# 显示文件列表
for name, dir_path in [("SenseVoice", sensevoice_dir), ("OCR", ocr_dir), ("Whisper", whisper_dir)]:
if dir_path.exists():
files = list(dir_path.glob("*"))
print(f"\n{name} 输出文件 ({len(files)}个):")
for file in files[:3]: # 只显示前3个
file_size = file.stat().st_size if file.is_file() else 0
print(f" 📄 {file.name} ({file_size} bytes)")
def main():
"""主函数"""
print("🔧 专业提取工具测试套件")
print("=" * 50)
start_time = time.time()
# 检查依赖
print("\n📋 检查依赖安装...")
dependencies = [
("funasr", "SenseVoice语音识别"),
("paddleocr", "PaddleOCR字幕识别"),
("cv2", "OpenCV图像处理"),
("whisper", "Whisper语音识别")
]
for module, desc in dependencies:
try:
__import__(module)
print(f"{desc} - 已安装")
except ImportError:
print(f"{desc} - 未安装")
print("\n" + "=" * 50)
# 运行测试
try:
# 测试语音识别
test_sensevoice()
# 测试OCR提取
test_ocr_extractor()
# 测试Whisper对比
test_whisper_comparison()
# 对比结果
compare_results()
except KeyboardInterrupt:
print("\n⏹️ 测试被用户中断")
except Exception as e:
print(f"\n❌ 测试过程中出错: {e}")
total_time = time.time() - start_time
print(f"\n⏱️ 总测试时间: {total_time:.2f}")
print("🎉 测试完成!")
if __name__ == "__main__":
main()