|
|
|
|
@ -9,7 +9,7 @@ local_path = os.path.join(os.getcwd(), FILESAPTH)
|
|
|
|
|
class Loader(): |
|
|
|
|
def __init__(self): |
|
|
|
|
self.call_types = ['in'] |
|
|
|
|
pass |
|
|
|
|
self.loaded_files = [] # Список загруженных файлов |
|
|
|
|
|
|
|
|
|
def filter_call(self, filename: str): |
|
|
|
|
if filename.split("-")[0] in self.call_types: |
|
|
|
|
@ -30,6 +30,61 @@ class Loader():
|
|
|
|
|
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
def send_to_recognition(self, limit: int = None): |
|
|
|
|
""" |
|
|
|
|
Отправляет загруженные файлы на распознавание |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
limit: Максимальное количество файлов для отправки |
|
|
|
|
""" |
|
|
|
|
if not self.loaded_files: |
|
|
|
|
print("⏭️ Нет файлов для отправки на распознавание") |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
from autoLoader.loader import RecognitionChecker |
|
|
|
|
|
|
|
|
|
print(f"\n🎤 Отправка {len(self.loaded_files)} файлов на распознавание...") |
|
|
|
|
|
|
|
|
|
checker = RecognitionChecker() |
|
|
|
|
|
|
|
|
|
# Проверяем доступность API |
|
|
|
|
if not checker.check_api_availability(): |
|
|
|
|
print("❌ GigaAM API недоступен. Пропускаем распознавание.") |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
# Проверяем БД |
|
|
|
|
if not checker.check_database(): |
|
|
|
|
print("❌ База данных не готова. Пропускаем распознавание.") |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
# Получаем файлы без заключения |
|
|
|
|
files_without_conclusion = checker.get_files_without_conclusion(limit=limit) |
|
|
|
|
|
|
|
|
|
if not files_without_conclusion: |
|
|
|
|
print("✅ Все файлы уже имеют заключения") |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
# Отправляем только что загруженные файлы |
|
|
|
|
sent_count = 0 |
|
|
|
|
for audio in self.loaded_files: |
|
|
|
|
# Проверяем, есть ли у файла заключение |
|
|
|
|
with get_db_session() as db: |
|
|
|
|
from autoLoader.database import AiConclusion |
|
|
|
|
existing_conclusion = db.query(AiConclusion).filter( |
|
|
|
|
AiConclusion.audio_id == audio.id |
|
|
|
|
).first() |
|
|
|
|
|
|
|
|
|
if existing_conclusion: |
|
|
|
|
print(f"⏭️ Файл {audio.filename} уже имеет заключение") |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
# Отправляем на распознавание |
|
|
|
|
success = checker.send_to_recognition(audio) |
|
|
|
|
if success: |
|
|
|
|
sent_count += 1 |
|
|
|
|
|
|
|
|
|
print(f"✅ Отправлено {sent_count} из {len(self.loaded_files)} файлов на распознавание") |
|
|
|
|
|
|
|
|
|
def load(self): |
|
|
|
|
# Проверяем БД перед началом работы |
|
|
|
|
if not self.check_database(): |
|
|
|
|
@ -85,7 +140,10 @@ class Loader():
|
|
|
|
|
audio.file_size = file_size |
|
|
|
|
|
|
|
|
|
db.add(audio) |
|
|
|
|
# commit произойдёт автоматически при выходе из контекста |
|
|
|
|
db.flush() # Чтобы получить audio.id |
|
|
|
|
|
|
|
|
|
# Сохраняем в список для последующей отправки |
|
|
|
|
self.loaded_files.append(audio) |
|
|
|
|
|
|
|
|
|
print(f"✅ Файл {file} сохранён в БД") |
|
|
|
|
|
|
|
|
|
@ -104,3 +162,7 @@ class Loader():
|
|
|
|
|
sftp_client.close() |
|
|
|
|
ssh_client.close() |
|
|
|
|
|
|
|
|
|
# После загрузки всех файлов отправляем на распознавание |
|
|
|
|
print(f"\n📊 Загружено файлов: {len(self.loaded_files)}") |
|
|
|
|
self.send_to_recognition() |
|
|
|
|
|
|
|
|
|
|