add english transcriptions tests
This commit is contained in:
parent
88a17d528b
commit
4764b4cb6e
4 changed files with 323 additions and 10 deletions
128
tests/english-tester.py
Normal file
128
tests/english-tester.py
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
#!/usr/bin/env python3
|
||||
import subprocess
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def transcribe_file(
|
||||
file_path: Path, script_path: Path, timeout_seconds: int = 60
|
||||
) -> str:
|
||||
"""
|
||||
Вызывает recognition.py для одного файла, возвращает транскрипцию.
|
||||
"""
|
||||
cmd = ["python3", str(script_path), "--output", "transcript", str(file_path)]
|
||||
|
||||
try:
|
||||
result = subprocess.run(
|
||||
cmd,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True,
|
||||
encoding="utf-8",
|
||||
timeout=timeout_seconds, # Добавлен таймаут
|
||||
)
|
||||
# Предполагаем, что скрипт выводит транскрипцию в stdout
|
||||
transcript = result.stdout.strip()
|
||||
if not transcript:
|
||||
print(f"Предупреждение: пустая транскрипция для {file_path}")
|
||||
return transcript
|
||||
except subprocess.TimeoutExpired:
|
||||
error_msg = f"TIMEOUT: превышен лимит в {timeout_seconds} секунд"
|
||||
print(f"Ошибка: {error_msg} для {file_path}")
|
||||
return f"ERROR: {error_msg}"
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"Ошибка при обработке {file_path}: {e}")
|
||||
print(f"stderr: {e.stderr}")
|
||||
return f"ERROR: {e.stderr}"
|
||||
|
||||
|
||||
def main():
|
||||
# Пути
|
||||
base_dir = Path(
|
||||
r"/mnt/c/proga/projects/ege-skill-dev/.scans/Сложные работы_Английский_язык_УЧ_часть_1/"
|
||||
)
|
||||
regions = ["1-Республика_Адыгея", "2-Республика_Башкортостан"]
|
||||
recognizer_script = Path.home() / "zeroclaw-bot" / "recognition.py"
|
||||
|
||||
# Таймаут на транскрипцию одного файла (в секундах)
|
||||
TIMEOUT_PER_FILE = 120
|
||||
|
||||
# Проверки
|
||||
if not base_dir.exists():
|
||||
print(f"Ошибка: директория {base_dir} не найдена")
|
||||
sys.exit(1)
|
||||
|
||||
if not recognizer_script.exists():
|
||||
print(f"Ошибка: скрипт {recognizer_script} не найден")
|
||||
sys.exit(1)
|
||||
|
||||
# Собираем все .ogg файлы, кроме тех, где озвузичвается код участника
|
||||
ogg_files = []
|
||||
for region in regions:
|
||||
ogg_files.extend(
|
||||
[
|
||||
file
|
||||
for i, file in enumerate(list(Path(f"{base_dir}/{region}/").rglob("*.ogg")))
|
||||
if i % 5 != 0
|
||||
]
|
||||
)
|
||||
|
||||
print(f"Найдено {len(ogg_files)} .ogg файлов")
|
||||
|
||||
results = []
|
||||
|
||||
for idx, ogg_path in enumerate(ogg_files, 1):
|
||||
print(f"\n[{idx}/{len(ogg_files)}] Обработка: {ogg_path}")
|
||||
|
||||
# Структура: .../{region}/{fio}/{file}
|
||||
region = ogg_path.parent.parent.name
|
||||
fio = ogg_path.parent.name
|
||||
|
||||
print(f" Регион: {region}")
|
||||
print(f" ФИО: {fio}")
|
||||
print(
|
||||
f" Транскрибирование (таймаут: {TIMEOUT_PER_FILE} сек)...",
|
||||
end=" ",
|
||||
flush=True,
|
||||
)
|
||||
|
||||
transcript = transcribe_file(ogg_path, recognizer_script, TIMEOUT_PER_FILE)
|
||||
|
||||
print("готово")
|
||||
# Показываем первые 100 символов транскрипции, если она есть
|
||||
preview = transcript[:100].replace("\n", " ")
|
||||
if preview and not transcript.startswith("ERROR:"):
|
||||
print(f" Транскрипция (начало): {preview}...")
|
||||
elif transcript.startswith("ERROR:"):
|
||||
print(f" {transcript}")
|
||||
|
||||
results.append(
|
||||
{
|
||||
"region": region,
|
||||
"fio": fio,
|
||||
"transcript": transcript,
|
||||
"file_path": str(ogg_path),
|
||||
}
|
||||
)
|
||||
|
||||
# Сохраняем JSON
|
||||
output_file = Path.cwd() / "transcriptions.json"
|
||||
with open(output_file, "w", encoding="utf-8") as f:
|
||||
json.dump(results, f, ensure_ascii=False, indent=2)
|
||||
|
||||
# Статистика
|
||||
total_files = len(results)
|
||||
error_files = sum(1 for r in results if r["transcript"].startswith("ERROR:"))
|
||||
timeout_files = sum(1 for r in results if "TIMEOUT" in r["transcript"])
|
||||
success_files = total_files - error_files
|
||||
|
||||
print(f"\n✅ Готово! Результаты сохранены в {output_file}")
|
||||
print(f"Всего обработано файлов: {total_files}")
|
||||
print(f" - Успешно: {success_files}")
|
||||
print(f" - Ошибок: {error_files} (из них timeout: {timeout_files})")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue