7 มีนาคม 2558

Published มีนาคม 07, 2558 by with 0 comment

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

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


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

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

สำหรับการติดตั้ง GUI ให้ลง QtPy ด้วยคำสั่ง pip install qtpy

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

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

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

import sys
#import โมดูลงาน GUI
from qtpy.QtCore import *
from qtpy.QtGui import *
from qtpy.QtWidgets 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  จะเขียนการวิเคราะห์โปรแกรมได้ประมาณนี้
เริ่มต้น
แสดงปุ่มรับเสียง
รับเสียง
ประมวลผลเสียง
แปลข้อความเป็นภาษาที่ต้องการ
แสดงเป็นข้อความ
แสดงปุ่ม "ฟังข้อความ" ถ้ากดปุ่มให้ประมวลผลข้อความเป็นเสียง แล้วเล่นไฟล์ออกมา
จบ

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

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

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

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

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

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