Почему счетчик в цикле for языка Python не добавляет единицу за итерацию?
Я строю скрипт попарного сравнения эмбедингов голосов, чтобы посчитать метрику: как часто ошибается система, когда не может распознать 2 записи одного и того же человека.
В левой части рисунка ниже представлена структура папок: в каждой папке spk1, spk2 и т.д. лежит по 4 файла с голосами одного человека (в каждой директории - разные люди). Сравниваем голоса внутри папки друг с другом.
У меня 2 ошибки:
- то и дело ловлю исключение, которое будто бы свидетельствует об ошибке чтения файла:
RuntimeError: Error loading audio file: failed to open file spk_12_track_4.wav
Фактически это может говорить, что неверно записан путь к нему. Однако в моем цикле путь описан шаблонно для прохода по папкам, и что там некорректного, не понимаю!
- счетчик num_total при обходе цикла единицу не прибавляет, в результате ловлю исключение деления на ноль. Почему?
Код:
!pip install speechbrain
from speechbrain.pretrained import SpeakerRecognition
from sklearn.metrics import accuracy_score
import os
from itertools import combinations
num_true=0
num_total=0
for root, dirs, files in os.walk('/content/drive/MyDrive/speakers'):
res = list(combinations(files, 2)) # получаем списки кортежей: [(файл 1, файл 2), (файл 1, файл 3)...(файл 3, файл 4)]
for tuples in res: # идем по каждому картежу в списке
verification = SpeakerRecognition.from_hparams(source="speechbrain/spkrec-ecapa-voxceleb", savedir="pretrained_models/spkrec-ecapa-voxceleb")
score, prediction = verification.verify_files(f'{tuples[0]}', f'{tuples[1]}')
num_total+=1
if prediction == tensor([True]):
num_true+=1
if num_total !=0:
accuracy = num_true/num_total
print(accuracy)
else:
print('На ноль делить нельзя')
