Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การประมวลผลเสียงโดยใช้ Pydub และ Google Speech Recognition API ใน Python


ในบทช่วยสอนนี้ เราจะทำงานกับไฟล์เสียง เราจะแบ่งเสียงเป็นส่วนๆ เพื่อจดจำเนื้อหาในนั้น เราจะเก็บเนื้อหาของไฟล์เสียงไว้ในไฟล์ข้อความเช่นกัน ติดตั้งโมดูลต่อไปนี้โดยใช้คำสั่งด้านล่าง

pip ติดตั้ง pydub

หากคุณเรียกใช้คำสั่งข้างต้น คุณจะได้รับข้อความแสดงความสำเร็จดังต่อไปนี้

กำลังรวบรวม pydub กำลังดาวน์โหลด https://files.pythonhosted.org/packages/79/db/eaf620b73a1eec3c8c6f8f5b0b236a50f9da88ad57802154b7ba7664d0b8/pydub-0.23.1-py2.py3-none-any.whlInspyd แพ็คเกจที่รวบรวมไว้

ก่อน>
pip ติดตั้งไฟล์เสียงอ่าน

หากคุณเรียกใช้คำสั่งข้างต้น คุณจะได้รับข้อความแสดงความสำเร็จดังต่อไปนี้

การรวบรวมไฟล์เสียงอ่านการดาวน์โหลด https://files.pythonhosted.org/packages/2e/0b/940ea7861e0e9049f09dcfd72a90c9ae55f697c17c299a323f0148f913d2/audioread-2.1.8.tar.gzการสร้างวงล้อสำหรับแพ็คเกจที่รวบรวม:อ่านเสียงการสร้างวงล้อสำหรับเสียง audioread (setup.py):เสร็จสิ้นด้วยสถานะ 'done' สร้างวงล้อสำหรับการอ่านเสียงแล้ว:filename=audioread-2.1.8-cp37-none-any.whl size=23098 sha256=92b6f46d6b4726e7a13233dc9d84744ba74e23187123e67f663650f24390dc9dStored in \Local\pip\Cache\wheels\b9\64\09\0b6417df9d8ba8bc61a7d2553c5cebd714ec169644c88fc012สร้างไฟล์เสียงได้สำเร็จอ่านการติดตั้งแพ็คเกจที่รวบรวม:audioread ติดตั้งเรียบร้อยแล้ว audioread-2.1.8
pip ติดตั้ง SpeechRecognition

หากคุณเรียกใช้คำสั่งข้างต้น คุณจะได้รับข้อความแสดงความสำเร็จดังต่อไปนี้

กำลังรวบรวม SpeechRecognition การดาวน์โหลด https://files.pythonhosted.org/packages/26/e1/7f5678cd94ec1234269d23756dbdaa4c8cfaed973412f88ae8adf7893a50/SpeechRecognition-3.8.1-py2.py3-none-MBA4c8cfaed973412f88ae8adf7893a50/SpeechRecognition-3.8.1-py2.py3-none-MBS ที่รวบรวมแล้ว:ติดตั้ง SpeechRecognition-3.8.1-py2.py3-none-any.hn.whls 3.8.1

เรามีสองขั้นตอนในกระบวนการนี้

  • แบ่งเสียงออกเป็นชิ้นๆ

  • เราต้องแยกเนื้อหาโดยใช้ การรู้จำเสียง .

นำไฟล์เสียงหนึ่งไฟล์จากห้องสมุดของคุณ มาเริ่มโค้ดกันเลย

ตัวอย่าง

# กำลังนำเข้า moduleimport pydubimport speech_recognition# รับไฟล์เสียงaudio =pydub.AudioSegment.from_wav('audio.wav')# ความยาวของเสียงในหน่วยมิลลิวินาทีsaudio_length =len(audio)print(f'Audio Length:{audio_length}' ) # chunk counterchunk_counter =1audio_text =open('audio_text.txt', 'w+')# การตั้งค่าที่จะแบ่งจุดเสียง =60000# ทับซ้อนกัน - เสียงที่เหลือหลังจาก slicingrem =8000# ตัวแปรเริ่มต้นเพื่อติดตามส่วนและ endingflag =0start =0end =0# วนซ้ำผ่านเสียงด้วยการเพิ่ม remfor i ในช่วง (0, 2 * audio_length, point):# ในการวนซ้ำครั้งแรก end =rem if i ==0:start =0 end =point else:# การวนซ้ำอื่น ๆ start =end - rem end =start + point # ถ้า end มากกว่า audio_length ถ้า end>=audio_length:end =audio_length # เพื่อระบุ stop flag =1 # รับอันจากเสียงอัน =audio[start:end] # chunk name chunk_name =f'chunk_{chunk_counter}' # เก็บ c ก้อนใหญ่ไปยังที่เก็บข้อมูลในเครื่อง chunk.export (chunk_name, format ='wav') # การพิมพ์ก้อนพิมพ์ (f'{chunk_name} start:{start} end:{end}') # การเพิ่มจำนวนตัวนับ chunk_counter +=1 # การรับรู้ข้อความ จากเสียง # การเริ่มต้นตัวจำแนกลายมือ =speech_recognition.Recognition() # การสร้างเสียงที่ฟังด้วย speech_recognition.AudioFile(chunk_name) เป็น chunk_audio:chunk_listened =รู้จำ.listen(chunk_audio) # รับรู้เนื้อหาจากการลองเสียง:# รับเนื้อหาจาก เนื้อหาก้อน =recognizer.recognize_google (chunk_listened) # กำลังเขียนไปยังไฟล์ audio_text.write (เนื้อหา + '\n') # หากไม่รู้จักยกเว้น speech_recognition.UnknownValueError:พิมพ์ ('ไม่รู้จักเสียง') # ข้อผิดพลาดทางอินเทอร์เน็ตยกเว้น speech_recognition.RequestError เป็นข้อผิดพลาด:print('Can't connect to the internet') # check the flag if flag ==1:audio_text.close() break

ผลลัพธ์

หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้

ความยาวเสียง:480052chunk_1 start:0 end:60000chunk_2 start:52000 end:112000chunk_3 start:104000 end:164000chunk_4 start:156000 end:216000chunk_5 start:208000 end:268000chunk_6 start:260000 end:320000chunk_7 start:312000 end:372000chunk_8 start :364000 สิ้นสุด:424000chunk_9 เริ่ม:416000 สิ้นสุด:476000chunk_10 เริ่ม:468000 สิ้นสุด:480052

กำลังตรวจสอบเนื้อหาไฟล์

# การเปิดไฟล์ในโหมดอ่านด้วย open('audio_text.txt', 'r') เป็นไฟล์:print(file.read())

หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้

ภาษาอังกฤษ และฉันอยู่ที่ซานฟรานซิสโก ฉันกลับมาที่ซานฟรานซิสโกเมื่อสัปดาห์ที่แล้ว เราอยู่ที่เท็กซัสในประเทศที่สอน และ The Reader of the Teaching conference ก็อยู่บนเครื่องบิน ปรับปรุงการสอนใหม่ด้วยเหตุที่คุณเป็นไฟล์สำรองที่มีข้อบกพร่อง มีบางภาษาอังกฤษ กำลังมา วันหนึ่งเท่านั้น เวลา 12.00 น. ทุกอย่างเกี่ยวกับภาษาอังกฤษของเธอตอนนี้หรือเปิดรายการอีเมลของฉัน กีฬาในเมืองของคุณ ตรวจสอบอีเมลของคุณ 

บทสรุป

หากคุณมีข้อสงสัยเกี่ยวกับบทช่วยสอน โปรดระบุในส่วนความคิดเห็น