Сценарий распознавания речи Python работает с одним файлом WAV, но не с другим - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь расшифровать телефонные звонки CSR.Мой скрипт Python делает это успешно с 30-секундным файлом Harvard Sentences, но не с 10-минутным телефонным звонком.Мне сказали проверить кодировку файлов, но я не могу найти способ сделать это.

Я скачал libav и установил в папку bin переменную среды Path.

# Import necessary libraries 
from pydub import AudioSegment 
import speech_recognition as sr 
import os
import pydub


chunk_count = 0
directory = os.fsencode(r'C:\Users\zach.blair\Downloads\speechRecognition\New folder')
# Text file to write the recognized audio 
fh = open("recognized.txt", "w+")
for file in os.listdir(directory):
     filename = os.fsdecode(file)
     if filename.endswith(".wav"):
        chunk_count += 1
             # Input audio file to be sliced 
        audio = AudioSegment.from_wav(filename) 

        ''' 
        Step #1 - Slicing the audio file into smaller chunks. 
        '''
        # Length of the audiofile in milliseconds 
        n = len(audio) 

        # Variable to count the number of sliced chunks 
        counter = 1



        # Interval length at which to slice the audio file. 
        interval = 20 * 1000

        # Length of audio to overlap.  
        overlap = 1 * 1000

        # Initialize start and end seconds to 0 
        start = 0
        end = 0

        # Flag to keep track of end of file. 
        # When audio reaches its end, flag is set to 1 and we break 
        flag = 0

        # Iterate from 0 to end of the file, 
        # with increment = interval 
        for i in range(0, 2 * n, interval): 

            # During first iteration, 
            # start is 0, end is the interval 
            if i == 0: 
                start = 0
                end = interval 

            # All other iterations, 
            # start is the previous end - overlap 
            # end becomes end + interval 
            else: 
                start = end - overlap 
                end = start + interval  

            # When end becomes greater than the file length, 
            # end is set to the file length 
            # flag is set to 1 to indicate break. 
            if end >= n: 
                end = n 
                flag = 1

            # Storing audio file from the defined start to end 
            chunk = audio[start:end] 

            # Filename / Path to store the sliced audio 
            filename = str(chunk_count)+'chunk'+str(counter)+'.wav'

            # Store the sliced audio file to the defined path 
            chunk.export(filename, format ="wav") 
            # Print information about the current chunk 
            print(str(chunk_count)+str(counter)+". Start = "
                                +str(start)+" end = "+str(end)) 

            # Increment counter for the next chunk 
            counter = counter + 1


            AUDIO_FILE = filename 

            # Initialize the recognizer 
            r = sr.Recognizer() 

            # Traverse the audio file and listen to the audio 
            with sr.AudioFile(AUDIO_FILE) as source: 
                audio_listened = r.listen(source) 

            # Try to recognize the listened audio 
            # And catch expections. 
            try:     
                rec = r.recognize_google(audio_listened) 

                # If recognized, write into the file. 
                fh.write(rec+" ") 

            # If google could not understand the audio 
            except sr.UnknownValueError: 
                    print("Empty Value") 

            # If the results cannot be requested from Google. 
            # Probably an internet connection error. 
            except sr.RequestError as e: 
                print("Could not request results.") 

            # Check for flag. 
            # If flag is 1, end of the whole audio reached. 
            # Close the file and break.                  
fh.close()    

Предупреждение (из модуля предупреждений):

Файл "C": \ Users \ zach.blair \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pydub \ utils.py ", строка 165 warn (" Не удалось найти ffmpeg или avconv - по умолчанию ffmpeg,но может не работать ", RuntimeWarning) RuntimeWarning: Не удалось найти ffmpeg или avconv - по умолчанию ffmpeg, но может не работать

Предупреждение (из модуля предупреждений):

Файл "C: \ Users \ zach.blair \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pydub \ utils.py", строка 193, предупреждает ("Не удалось найти ffprobe или avprobe -по умолчанию ffprobe, но может не работать ", RuntimeWarning) RuntimeWarning: не удалось найти ffprobe или avprobe - по умолчанию ffprobe, но может не работать Traceback (последний вызов был последним): файл" C: \ Users \ zach.blair \ Downloads\ speechRecognition \ New folder \ speechRecognition3.py ", строка 17, в audio = AudioSegment.from_wav (файлname) Файл "C: \ Users \ zach.blair \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pydub \ audio_segment.py", строка 728, в from_wav, вернуть cls.from_file (файл,'wav', параметры = параметры) Файл "C: \ Users \ zach.blair \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pydub \ audio_segment.py", строка 665, в файле from_file= mediainfo_json (orig_file) Файл "C: \ Users \ zach.blair \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ pydub \ utils.py", строка 263, в mediainfo_json res = Popen (команда, stdin = stdin_parameter, stdout = PIPE, stderr = PIPE) Файл "C: \ Users \ zach.blair \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ subprocess.py", строка 769, в init restore_signals, start_new_session) Файл "C: \ Users \ zach.blair \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ subprocess.py", строка 1172, в _execute_child startupinfo) FileNotFoundError: [WinError2] Система не может найти указанный файл

...