Skip to content

ตัวอย่างโปรแกรมรับเสียงแปลงเป็นข้อความแล้วสังเคราะห์เสียงข้อความแบบ GUI ด้วยการประยุกต์ใช้ภาษา Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านนำความรู้ที่ได้มาจากบล็อกที่ผมเขียนมาทั้งหมด มาประยุกต์เป็นโปรแกรมเล็ก ๆ ด้วยภาษา Python แบบ 100 % ครับ

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

ผมว่าง ๆ ไม่รู้ว่าจะทำอะไรดี (นึกบทความที่จะเขียนไม่ออกด้วยครับ -_- ) ผมเลยได้เวลามาไล่อ่านบล็อกของตัวเองบ้าง ผมเลยเกิดความคิดเล็ก ๆ ผมอยากจะลองเขียนโปรแกรมที่รับเสียงพูดของเรา แปลงเป็นข้อความแล้ว สามารถเอาข้อความนั้นไปสังเคราะห์เป็นเสียงพูดได้เลย (แบบว่า พูดไม่ค่อยเก่งครับ) ผมจะสร้างแบบกราฟิก GUI ผมเลยนึกถึงโมดูลคู่หูผม PySide (หากผู้อ่านไม่ชอบ PySide สามารถนำโค้ดไปแปลงเป็น PyQt ได้เหมือนกันครับ) และผมนึกถึงโมดูล SpeechRecognition ที่เป็นโมดูลรับเสียงแล้วแปลงเป็นข้อความ ที่รองรับภาษาไทยด้วย และโมดูล gTTS เป็นโมดูลสังเคราะห์เสียงจากข้อความเป็นเสียงพูด จะได้ไฟล์ mp3 ออกมา และผมก็นึกต่อว่าจะให้อ่านไฟล์ mp3 ได้อย่างไร ผมเลยนึกถึงโมดูล pyglet ครับ

วิเคราะห์โปรแกรม

เริ่มต้น
แสดงปุ่มรับเสียง
รับเสียง
ประมวลผลเสียง
แสดงเป็นข้อความ
แสดงปุ่ม "ฟังข้อความ" ถ้ากดปุ่มให้ประมวลผลข้อความเป็นเสียง แล้วเล่นไฟล์ออกมา
จบ

บทความที่นำมาประยุกต์ใช้

ผมศึกษาจากบทความผมเอง ได้โค้ดประมาณนี้ครับ

__author__ = 'วรรณพงษ์'
import sys
#import โมดูลงาน GUI
from PySide.QtCore import *
from PySide.QtGui import *
####
from gtts import gTTS #โมดูลระบบสังเคราะห์เสียงพูด
import pyglet #โมดูลงานระบบเล่นไฟล์เสียง

import speech_recognition as sr #โมดูลรับเสียง
r = sr.Recognizer() 

def sayHello():
    #ระบบสังเคราะห์เสียงพูด
    def speak():
        tts = gTTS(text=say,lang='th') # text คือ ข้อความ lang คือ รหัสภาษา
        tts.save('hello-thai.mp3')
        #ระบบเล่นไฟล์เสียง
        music = pyglet.resource.media('hello-thai.mp3') #ดึงไฟล์เสียงเข้ามา
        music.play()
    #ระบบรับเสียง
    with sr.Microphone() as source:
        audio = r.listen(source)
    try:
        say = r.recognize_google(audio,language = "th-TH") #กำหนดค่าภาษาเป็นภาษาไทย
        textEdit = QTextEdit(say) #เรียกใช้งาน QTextEdit มีลักษณะเป็น Textarea ครับ
        layout.addWidget(textEdit)
        #ส่วนปุ่มฟังข้อความ
        button2 = QPushButton("ฟังข้อความ") #กำหนดข้อความในปุ่ม
        button2.resize(75, 30) #กำหนดขนาดของปุ่ม
        button2.clicked.connect(speak) #เชื่อมต่อกับ sayHello
        layout.addWidget(button2)
        ###
    except LookupError:                            # ประมวลผลแล้วไม่รู้จักหรือเข้าใจเสียง
        print("Could not understand audio")
#หน้าต่าง GUI
app = QApplication(sys.argv)
widget = QWidget()
widget.setWindowTitle("โปรแกรมรับเสียงแปลงเป็นข้อความแล้วสังเคราะห์เสียงข้อความ") #กำหนดชื่อตรงหัวโปรแกรม

layout = QVBoxLayout()
widget.setLayout(layout)

button = QPushButton("รับเสียง") #กำหนดข้อความในปุ่ม
button.resize(75, 30) #กำหนดขนาดของปุ่ม
button.clicked.connect(sayHello) #เชื่อมต่อกับ sayHello

layout.addWidget(button)
widget.show() #แสดงหน้าต่าง GUI
app.exec_()

ผลลัพธ์

ตัวอย่างโปรแกรมรับเสียงแปลงเป็นข้อความแล้วสังเคราะห์เสียงข้อความแบบ GUI ด้วยภาษา Pythonวิธีใช้โปรแกรม เมื่อรันโค้ดแล้วจะพบกับปุ่ม "รับเสียง" แค่ปุ่มเดียว เมื่อกดแล้วปุ่มจะค้าง ให้พูดข้อความลงไปครับ หากแปลงข้อความสำเร็จ จะปรากฎกล่องข้อความและข้อความที่พูด และจะมีปุ่มเพิ่มมาอีกหนึ่ง นั่นคือ "ฟังข้อความ" เป็นปุ่มไว้ฟังข้อความที่ปรากฎครับ โดยถ้าพูดใหม่โดยกดปุ่ม "รับเสียง"  จะปรากฎผลลัพธ์ดังรูปครับ

การนำไปประยุกต์ใช้

ลองนำโมดูล goslate มาประยุกต์ใช้ ทำเป็นโปรแกรมที่พูดเข้าไปแล้วเช่น คนต่างชาติพูดภาษาอังกฤษแล้วฟังออกมาเป็นภาษาไทยดูครับ อ่านเพิ่มเติมได้จากบทความ แปลภาษาด้วย Python  จะเขียนการวิเคราะห์โปรแกรมได้ประมาณนี้

เริ่มต้น
แสดงปุ่มรับเสียง
รับเสียง
ประมวลผลเสียง
แปลข้อความเป็นภาษาที่ต้องการ
แสดงเป็นข้อความ
แสดงปุ่ม "ฟังข้อความ" ถ้ากดปุ่มให้ประมวลผลข้อความเป็นเสียง แล้วเล่นไฟล์ออกมา
จบ

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

ลองนำไปประยุกต์ใช้กันนะครับ

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

14 thoughts on “ตัวอย่างโปรแกรมรับเสียงแปลงเป็นข้อความแล้วสังเคราะห์เสียงข้อความแบบ GUI ด้วยการประยุกต์ใช้ภาษา Python

  1. Assanee

    รัน แล้วขึ้น error แบบนี้ครับ
    Traceback (most recent call last):
    File "C:/Users/Assanee/Downloads/Python 3/hello.py", line 4, in
    from PySide.QtCore import *
    ImportError: No module named 'PySide'

    Reply
    1. wannaphong

      เหมือนไม่ได้ติดตั้ง PySide ไว้ครับ หา PySide ไม่เจอครับ วิธีติดตั้ง PySide ตามนี้ครับ https://python3.wannaphong.com/2014/08/%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-gui-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-pyside-%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-1-%E0%B9%80%E0%B8%A3%E0%B8%B4%E0%B9%88%E0%B8%A1.html

      Reply
  2. ไฟต์ติ้ง

    คือว่า... ใช้อะไรรันให้แสดงผลเป็นหน้าต่างแบบนั้นหรือคะ
    พอดีไม่รู้เรื่อง Python เลย
    แต่ต้องทำโปรเจคเกี่ยวกับเรื่องนี้อ่ะค่ะ
    ทำได้แค่ให้โค้ดไม่มี error แล้ว แต่ไม่รู้ว่าต้องทำไงให้แสดงผลอ่ะค่ะ
    ช่วยบอกด้วยนะคะ ขอบคุณค่ะ T^T

    Reply
  3. ไฟต์ติ้ง

    ขอบคุณค่ะ จะลองศึกษาดูนะคะ
    แต่ขอถามอีกอย่างนะคะ
    คือว่าถ้าใช้ sublime เป็นตัวเขียนโค้ดได้ใช่มั้ยคะ
    หรือพอจะมีตัวไหนแนะนำแทนมั้ยคะ

    Reply
    1. wannaphong

      ใช้ text editor ตัวไหนก็ได้เขียน Python ได้เหมือนกันครับ ผมขอแนะนำ PyCharm ครับ เป็นโปรแกรม IDE ที่ใช้เขียน Python ได้สะดวกโปรแกรมหนึ่งครับ

      Reply
  4. ไฟต์ติ้ง

    คือว่ามันขึ้นหน้าจอแสดงผล
    แค่ปุ่มรับเสียงอ่ะค่ะ
    พอกดปุ่มดูมันก็ขึ้นแบบนี้อ่ะค่ะ
    C:\Python34\python.exe C:/Python34/sys.py
    Traceback (most recent call last):
    File "C:/Python34/sys.py", line 20, in sayHello
    with sr.Microphone() as source:
    AttributeError: 'module' object has no attribute 'Microphone'

    Reply
  5. ไฟต์ติ้ง

    ลองติดดูแล้ว โดยใช้คำสั่ง pip แต่มันเป็นประโยคภาษาอังกฤษสีแดงประมาณว่า Could not find any downloads that satisfy the
    requirement Pyaudio
    แระก็มีอีกยาวๆเลยค่ะ

    ก็เลยโหลดไฟล์ .xhl มาไว้ใน site-package ค่ะ
    แต่ก็เป็นตามข้างบนที่คอมเม้นท์ถามค่ะ

    ไม่เข้าใจเลยT^T ช่วยหน่อยนะคะ ขอบคุณค่ะ

    Reply
    1. wannaphong

      ลองโหลดไฟล์ .whl มาติดตั้งครับ โหลดจาก http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio ครับ
      ถ้า Python เป็น 32 บิตเลือก PyAudio‑0.2.8‑cp34‑none‑win32.whl
      ถ้า Python เป็น 64 บิตเลือก PyAudio‑0.2.8‑cp34‑none‑win_amd64.whl ครับ
      โหลดมาแล้ว เปิด cmd เข้าไปยังโฟลเลอร์ที่เก็บไฟล์ที่โหลดแล้วใช้คำสั่ง
      pip install PyAudio‑0.2.8‑cp34‑none‑win32.whl ครับ

      Reply
  6. ่jessada

    File "c:\users\jessada-pc\documents\visual studio 2013\Projects\Jasper\Jasper\Jasper.py", line 25, in sayHello
    say = r.recognize_google(audio,language = "th-TH") #กำหนดค่าภาษาเป็นภาษาไทย
    File "C:\Python34\lib\site-packages\speech_recognition\__init__.py", line 672, in recognize_google
    if "alternative" not in actual_result: raise UnknownValueError()
    speech_recognition.UnknownValueError
    ไม่ได้ครับ ช่วยที

    Reply
    1. ่jessada

      อันนี้ได้แล้วครับ
      แต่ว่า เปิดฟังข้อความไม่ได้ AVbin is required to decode compressed media

      Reply

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *