albert828

Speech recognition

Jul 3rd, 2021
1,404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.51 KB | None | 0 0
  1. from io import BytesIO
  2. from pathlib import Path
  3. from pydub import AudioSegment
  4. from pydub.silence import split_on_silence
  5. import speech_recognition as sr
  6. from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
  7.  
  8.  
  9. def save_in_buffer(chunk):
  10.     buffer = BytesIO()
  11.     chunk.export(buffer, 'wav')
  12.     buffer.seek(0)
  13.     return buffer
  14.  
  15.  
  16. def process_chapter(counter):
  17.     chapter_nr = str(counter).zfill(2)
  18.     chapter = AudioSegment.from_mp3(Path(rf'D:\Windows\Pulpit\Big data\{chapter_nr}_Big data.mp3'))
  19.     chunks = split_on_silence(chapter, keep_silence=500, silence_thresh=-40)
  20.  
  21.     r = sr.Recognizer()
  22.  
  23.     def load_audio(buffer):
  24.         with sr.AudioFile(buffer) as source:
  25.             audio = r.record(source)
  26.         return audio
  27.  
  28.     def recognize_text(audio):
  29.         try:
  30.             return r.recognize_google(audio, language='pl-PL')
  31.         except sr.UnknownValueError:
  32.             return '!-NotRecognized-!'
  33.         except sr.RequestError as e:
  34.             return '!-RequestError-!'
  35.  
  36.     audio_chunks = map(load_audio, map(save_in_buffer, chunks))
  37.  
  38.     with ThreadPoolExecutor(10) as pool:
  39.         recognized_texts = pool.map(recognize_text, audio_chunks)
  40.  
  41.     recognized_texts = ' '.join(recognized_texts)
  42.  
  43.     with open(Path(f'results_{chapter_nr}.txt'), mode='w', encoding='utf-8') as file:
  44.         file.write(recognized_texts)
  45.  
  46.  
  47. if __name__ == '__main__':
  48.     with ProcessPoolExecutor(4) as p:
  49.         for i in range(2, 11):
  50.             p.submit(process_chapter, i)
  51.  
Advertisement
Add Comment
Please, Sign In to add comment