6 เมษายน 2561

Published เมษายน 06, 2561 by with 0 comment

สร้าง Text to Speech ด้วยมือใน Python

Siri บน Apple Watch เป็นตัวอย่างหนึ่งของระบบที่นำ Text to Speech มาสร้างเสียงโต้ตอบผู้ใช้งาน
Siri บน Apple Watch เป็นตัวอย่างหนึ่งของระบบที่นำ Text to Speech มาสร้างเสียงโต้ตอบผู้ใช้งาน
ภาพประกอบ : https://unsplash.com/photos/gNGeNSo428g

Text to Speech หรือ Speech synthesis เป็นเทคโนโลยีสังเคราะห์เสียงพูด โดยแปลงจากตัวอักษรให้กลายเป็นเสียงพูด

โดย Text to Speech เป็นส่วนหนึ่งของสาขาการประมวลผลภาษาธรรมชาติ (Natural Language Processing)


สำหรับ Text to Speech ภาษาไทย ปัจจุบันนี้ที่ยังมีให้บริการ API ตอนนี้มีเฉพาะของ Google Text to Speech (ต้องเสียค่าใช้จ่าย)

หากคุณสนใจที่จะทดลองหรือสร้าง Text to Speech ด้วยตัวเองสำหรับใช้งานเฉพาะกรณี ตัวอย่างเช่น ใช้กับโปรแกรมเรียกคิว เป็นต้น มาลองสร้าง Text to Speech ด้วยมือในภาษา Python กัน

หลักการ Text to Speech แบบเบื้องต้น
นำข้อความมาตัดคำแล้วเอาคำนั้นไปค้นกับข้อมูลเสียง ดึงไฟล์เสียงมารวมเป็นไฟล์เดียวกันแล้ว เล่นเสียงออกมา

ก่อนที่จะไปลงมือสร้าง  Text to Speech สิ่งที่คุณจะต้องทำมีดังนี้
  • ข้อมูลเสียงที่ต้องการ แนะนำให้หาผู้พูดมาอัดเสียงทีละคำเป็นไฟล์เสียงนามสกุล wav โดยใช้น้ำเสียงที่สม่ำเสมอกัน
  • ข้อมูลคำประกอบไฟล์เสียงหรือพจานุกรมเสียง เพื่อบ่งบอกว่า ไฟล์เสียงนี้พูดคำว่าอะไร
ตัวอย่าง
ทำการอัดเสียงคำว่า "น้ำ" และ "ฟ้า"



บันทึกไฟล์เสียงคำว่า "น้ำ" เป็นไฟล์ "num.wav" และ บันทึกไฟล์เสียงคำว่า "ฟ้า" เป็นไฟล์ "fa.wav" แล้วนำไฟล์ทั้งสองไปเก็บไว้ในโฟลเดอร์ชื่อ data
แล้วทำการสร้างไฟล์ data.txt โดยมีข้อมูลดังนี้
น้ำ,num
ฟ้า,fa

โดยข้อมูลคอลัมน์แรก คือ คำ ส่วนคอลัมน์ที่สอง คือ ชื่อไฟล์

ต่อไปลงมือเขียนโปรแกรมสำหรับ  Text to Speech ก่อนอื่น ให้ทำการติดตั้ง pydub , pyaudio และ marisa_trie ด้วยคำสั่ง
pip install pydub pyaudio marisa_trie
และให้ทำลบ PyThaiNLP ด้วยคำสั่ง
pip uninstall pythainlp
แล้วทำการติดตั้ง PyThaiNLP ที่อยู่ใน GitHub ล่าสุดด้วยคำสั่ง
pip install https://github.com/PyThaiNLP/pythainlp/archive/dev.zip
เนื่องจากบน GitHub ของ PyThaiNLP ได้มีการปรับปรุง dict_word_tokenize แล้ว แต่ใน PyPI ยังไม่ได้ปล่อยเวชั่นใหม่ที่รวมการปรับปรุงนี้

ลงมือโค้ดกัน

แล้วทำการบันทึกไฟล์โค้ด python นี้ ไว้กับโฟลเดอร์เดียวกันกับไฟล์ data.txt แล้วลองรัน
TTS พัฒนาโดย นาย วรรณพงษ์ ภัททิยไพบูลย์
Text : น้ำฟ้า
ผลลัพธ์
สามารถดูตัวอย่างไฟล์เสียงได้ที่ https://github.com/wannaphong/python-thai-tts-simple

การสร้าง Text to Speech ด้วยวิธีข้างบนถือว่าสามารถทำได้ง่ายและรวดเร็ว แต่มีข้อเสียที่ เสียงออกเหมือนหุ่นยนต์ และ ไม่สามารถสังเคราะห์เสียงคำอื่น  ๆ ที่ไม่มีในพจานุกรมเสียงได้

การนำไปพัฒนาต่อ อาจนำหลักการทางภาษาศาสตร์เข้ามาช่วยพัฒนาเครื่องมือสังเคราะห์เสียง เช่น   Grapheme-to-Phoneme เป็นต้น หรือ อาจลองพวก Deep learning อย่าง Tacotron หรือ Deep Voice เป็นต้น แต่สิ่งที่สำคัญยิ่งกว่าเครื่องมือ นั้นคือ คลังข้อมูลเสียง คลังข้อมูลเสียงจะต้องเพียงพอสำหรับนำไปใช้งาน

เป็นเรื่องที่น่าเศร้าที่ภาษาไทยไม่มีคลังข้อมูลเสียงภาษาไทย ที่สามารถนำไปพัฒนาเป็นโอเพนซอร์ซ (open source) ได้เลย อันเนื่องจากปัญหาด้านลิขสิทธิ์ , กฎหมาย และอื่น ๆ การที่จะทำ Text to Speech ภาษาไทยที่เป็นโอเพนซอร์ซที่สามารถใช้งานได้ทั้งภาษาจะต้องอาศัยข้อมูลเสียงหลายสิบชั่วโมงแถมจะต้องใช้ความรู้และงบประมาณพอสมควร

เขียนโดย นาย วรรณพงษ์  ภัททิยไพบูลย์
นักศึกษาชั้นปีที่ 1
สาขาวิทยาการคอมพิวเตอร์และสารสนเทศ
คณะวิทยาศาสตร์ประยุกต์และวิศวกรรมศาสตร์
มหาวิทยาลัยขอนแก่น วิทยาเขตหนองคาย

อีเมล [email protected]

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)