コード例 #1
0
def recognize(temp, wav):
    wav_scp = str(Path(temp) / 'wav.scp')
    make_wav_scp(wav, wav_scp)
    segm = segmenter.Segmenter(wav_scp, '../model/final.raw', '../model/conf/post_output.vec', '../model/conf/mfcc_hires.conf', temp)
    segments = segm.segment()
    wav_segments_scp, utt2spk, spk2utt = segm.extract_segments(segments)
    rec = recognizer.Recognizer(wav_segments_scp, '../model/final.mdl', '../model/HCLG.fst', '../model/words.txt', 
                                '../model/conf/mfcc.conf', '../model/conf/ivector_extractor.conf', spk2utt, temp)
    transcriptions = rec.recognize(Path(wav).stem)
    ass = str(Path(temp) / 'wav.ass')
    make_ass(Path(wav).name, segments, transcriptions, utt2spk, ass)
    pars = transcriptions_parser.TranscriptionsParser('', '', '', 0, 0, 'wav.csv')
    transcriptions_df = pars.process_file(ass)
    return transcriptions_df
コード例 #2
0
def start_pipeline(wav):
    """
    Запуск пайплайна распознавания речи
    
    Аргументы:
        wav: путь к .WAV файлу аудио
    """  
    wav_name = Path(wav).name
    wav_stem = Path(wav).stem
    temp = str(Path(TEMP_DIR) / wav_stem)
    os.makedirs(temp, exist_ok=True)
    wav_scp = str(Path(temp) / 'wav.scp')
    make_wav_scp(wav, wav_scp)
    
    def terminate_pipeline(is_error, message):
        if is_error:
            LOGGER.error(message)
            os.rename(wav, str(ERROR_DIR / wav_name))
        try:
            delete_folder(temp)
        except:
            LOGGER.error("Не удалось удалить временные файлы для '{}'".format(wav_name))

    try:
        LOGGER.info("Запуск сегментации файла'{}'".format(wav_name))
        segm = segmenter.Segmenter(wav_scp, SEGM_MODEL, SEGM_POST, SEGM_CONF, temp)
        segments = segm.segment()
        LOGGER.info("Завершение сегментации файла'{}'".format(wav_name))
    except:
        terminate_pipeline(True, "Не удалось выполнить сегментацию файла '{}'".format(wav_name))
        return
    if os.stat(segments).st_size == 0:
        terminate_pipeline(True, "В файле '{}' отсутствуют сегменты".format(wav_name))
        return

    try:
        LOGGER.info("Запуск извлечения сегментов из файла'{}'".format(wav_name))
        wav_segments_scp, utt2spk, spk2utt = segm.extract_segments(segments)
        LOGGER.info("Завершение извлечения сегментов из файла'{}'".format(wav_name))
    except:
        terminate_pipeline(True, "Не удалось извлечь сегменты из файла '{}'".format(wav_name))
        return            
    try:
        LOGGER.info("Запуск распознавания файла'{}'".format(wav_name))
        rec = recognizer.Recognizer(wav_segments_scp, REC_MODEL, REC_GRAPH, REC_WORDS, REC_CONF, REC_ICONF, spk2utt, temp)
        transcriptions = rec.recognize(wav_stem)
        LOGGER.info("Завершение распознавания файла'{}'".format(wav_name))
    except:
        terminate_pipeline(True, "Не удалось выполнить распознавание файла '{}'".format(wav_name))
        return
    try:
        LOGGER.info("Запуск формирования субтитров для файла'{}'".format(wav_name))
        ass = str(OUTPUT_DIR / str('ass/' + wav_stem + '.ass'))
        make_ass(wav_name, segments, transcriptions, utt2spk, ass)
        LOGGER.info("Завершение формирования субтитров для файла'{}'".format(wav_name))
    except:
        terminate_pipeline(True, "Не удалось сформировать субтитры для файла '{}'".format(wav_name))
        return
    try:
        LOGGER.info("Запуск парсинга транскрибации для файла'{}'".format(wav_name))
        pars = transcriptions_parser.TranscriptionsParser(str(OUTPUT_DIR / 'ass'), OUTPUT_DIR, LOGGER if IS_LOG else '', 1, 1, CSV)
        pars.process_batch_files([ass])
        LOGGER.info("Завершение парсинга транскрибации для файла'{}'".format(wav_name))
    except:
        terminate_pipeline(True, "Не удалось распарсить транскрибацию файла '{}'".format(wav_name))
        return
        
    if IS_DELETE_WAV or SLEEP_TIME:
        LOGGER.info("Запуск удаления файла '{}'".format(wav_name))
        try:
            os.remove(wav)
        except:
            LOGGER.error("Не удалось удалить файл '{}'".format(wav_name))
        LOGGER.info("Завершение удаления файла '{}'".format(wav_name))

    terminate_pipeline(False, None)