การใช้ API การแปลงเสียงพูดเป็นข้อความกับ Python

1. ภาพรวม

9e7124a578332fed.png

Speech-to-Text API ช่วยให้นักพัฒนาซอฟต์แวร์แปลงเสียงเป็นข้อความได้กว่า 125 ภาษาและภาษาต่างๆ ด้วยการนำโมเดลเครือข่ายที่เป็นกลางไปใช้กับ API ที่ใช้งานง่าย

ในบทแนะนำนี้ คุณจะมุ่งเน้นที่การใช้ Speech-to-Text API กับ Python

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตั้งค่าสภาพแวดล้อม
  • วิธีถอดเสียงจากไฟล์เสียงเป็นภาษาอังกฤษ
  • วิธีถอดเสียงจากไฟล์เสียงพร้อมการประทับเวลาของคำ
  • วิธีถอดเสียงจากไฟล์เสียงในภาษาต่างๆ

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud
  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • คุ้นเคยกับการใช้ Python

แบบสำรวจ

คุณจะใช้บทแนะนำนี้อย่างไร

อ่านอย่างเดียว อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนประสบการณ์การใช้งาน Python เท่าใด

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

คุณจะให้คะแนนประสบการณ์การใช้งานบริการของ Google Cloud เท่าไร

ผู้ฝึกหัด ขั้นกลาง ผู้ชำนาญ

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ ซึ่งเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะใช้งาน Google Cloud จากแล็ปท็อประยะไกลได้ แต่ใน Codelab นี้คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์

เปิดใช้งาน Cloud Shell

  1. จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell 853e55310c205094.png

3c1dabeca90e44e5.png

หากคุณเริ่มใช้ Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอระดับกลางที่อธิบายว่า Cloud Shell คืออะไร หากเห็นหน้าจอระดับกลาง ให้คลิกต่อไป

9c92662c6a846a5c.png

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

9f0e51b578fecce5.png

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์และระบบได้ตั้งค่าโปรเจ็กต์เป็นรหัสโปรเจ็กต์ของคุณ

  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list

เอาต์พุตของคำสั่ง

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project

เอาต์พุตของคำสั่ง

[core]
project = <PROJECT_ID>

หากไม่ได้ตั้งค่าไว้ คุณตั้งค่าได้ด้วยคำสั่งนี้

gcloud config set project <PROJECT_ID>

เอาต์พุตของคำสั่ง

Updated property [core/project].

3. การตั้งค่าสภาพแวดล้อม

ก่อนที่จะเริ่มใช้ Speech-to-Text API ได้ ให้เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อเปิดใช้ API

gcloud services enable speech.googleapis.com

คุณควรเห็นข้อความคล้ายกับข้อความต่อไปนี้

Operation "operations/..." finished successfully.

ตอนนี้คุณใช้ Speech-to-Text API ได้แล้ว

ไปที่ไดเรกทอรีหลักโดยใช้คำสั่งต่อไปนี้

cd ~

สร้างสภาพแวดล้อมเสมือนของ Python เพื่อแยกการอ้างอิง

virtualenv venv-speech

เปิดใช้งานสภาพแวดล้อมเสมือน

source venv-speech/bin/activate

ติดตั้ง IPython และไลบรารีของไคลเอ็นต์ Speech-to-Text API โดยทำดังนี้

pip install ipython google-cloud-speech

คุณควรเห็นข้อความคล้ายกับข้อความต่อไปนี้

...
Installing collected packages: ..., ipython, google-cloud-speech
Successfully installed ... google-cloud-speech-2.25.1 ...

ตอนนี้คุณก็พร้อมใช้ไลบรารีของไคลเอ็นต์ Speech-to-Text API แล้ว

ในขั้นตอนถัดไป คุณจะใช้ตัวแปล Python แบบอินเทอร์แอกทีฟที่ชื่อ IPython ซึ่งคุณติดตั้งไว้ในขั้นตอนก่อนหน้า เริ่มเซสชันโดยเรียกใช้ ipython ใน Cloud Shell

ipython

คุณควรเห็นข้อความคล้ายกับข้อความต่อไปนี้

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

คุณพร้อมที่จะส่งคำขอแรกแล้ว...

4. ถอดเสียงจากไฟล์เสียง

ในส่วนนี้ คุณจะถอดเสียงไฟล์เสียงภาษาอังกฤษ

คัดลอกโค้ดต่อไปนี้ลงในเซสชัน IPython

from google.cloud import speech


def speech_to_text(
    config: speech.RecognitionConfig,
    audio: speech.RecognitionAudio,
) -> speech.RecognizeResponse:
    client = speech.SpeechClient()

    # Synchronous speech recognition request
    response = client.recognize(config=config, audio=audio)

    return response


def print_response(response: speech.RecognizeResponse):
    for result in response.results:
        print_result(result)


def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    

ลองใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูวิธีที่โค้ดใช้recognizeเมธอดไลบรารีของไคลเอ็นต์เพื่อถอดเสียงไฟล์เสียง*.* พารามิเตอร์ config จะระบุวิธีประมวลผลคำขอ และพารามิเตอร์ audio จะระบุข้อมูลเสียงที่จะรับรู้

ส่งคำขอ

config = speech.RecognitionConfig(
    language_code="en",
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

คุณควรเห็นเอาต์พุตต่อไปนี้

--------------------------------------------------------------------------------
language_code: en-us
transcript:    how old is the Brooklyn Bridge
confidence:    98%

อัปเดตการกำหนดค่าเพื่อเปิดใช้การเว้นวรรคอัตโนมัติและส่งคำขอใหม่

config.enable_automatic_punctuation = True

response = speech_to_text(config, audio)
print_response(response)

คุณควรเห็นเอาต์พุตต่อไปนี้

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%

สรุป

ในขั้นตอนนี้ คุณสามารถถอดเสียงไฟล์เสียงเป็นภาษาอังกฤษโดยใช้พารามิเตอร์ต่างๆ และพิมพ์ผลลัพธ์ออกมาได้ อ่านเพิ่มเติมเกี่ยวกับการถอดเสียงจากไฟล์เสียง

5. รับการประทับเวลาของคำ

Speech-to-Text สามารถตรวจหาออฟเซ็ตเวลา (การประทับเวลา) สำหรับเสียงที่ถอดเสียงเป็นคำได้ ออฟเซ็ตเวลาจะแสดงจุดเริ่มต้นและจุดสิ้นสุดของคำที่พูดแต่ละคำในเสียงที่ระบุ ค่าออฟเซ็ตเวลาแสดงถึงระยะเวลาที่ผ่านไปตั้งแต่ต้นเสียง โดยเพิ่มขึ้นครั้งละ 100 มิลลิวินาที

หากต้องการถอดเสียงไฟล์เสียงพร้อมการประทับเวลาของคำ ให้อัปเดตโค้ดโดยคัดลอกข้อมูลต่อไปนี้ลงในเซสชัน IPython

def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    print("-" * 80)
    for word in best_alternative.words:
        start_s = word.start_time.total_seconds()
        end_s = word.end_time.total_seconds()
        print(f"{start_s:>7.3f} | {end_s:>7.3f} | {word.word}")
        

ลองดูโค้ดสักครู่เพื่อดูวิธีถอดเสียงไฟล์เสียงพร้อมการประทับเวลาของคำ* พารามิเตอร์ enable_word_time_offsets จะบอกให้ API แสดงออฟเซ็ตเวลาสำหรับแต่ละคำ (ดูรายละเอียดเพิ่มเติมได้ที่เอกสาร)

ส่งคำขอ

config = speech.RecognitionConfig(
    language_code="en",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

คุณควรเห็นเอาต์พุตต่อไปนี้

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%
--------------------------------------------------------------------------------
  0.000 |   0.300 | How
  0.300 |   0.600 | old
  0.600 |   0.800 | is
  0.800 |   0.900 | the
  0.900 |   1.100 | Brooklyn
  1.100 |   1.400 | Bridge?

สรุป

ในขั้นตอนนี้ คุณสามารถถอดเสียงไฟล์เสียงภาษาอังกฤษพร้อมการประทับเวลาของคำและพิมพ์ผลลัพธ์ได้ อ่านเพิ่มเติมเกี่ยวกับการประทับเวลาคำ

6. ถอดเสียงภาษาต่างๆ

Speech-to-Text API รู้จักภาษาและภาษาถิ่นมากกว่า 125 ภาษา ดูรายการภาษาที่รองรับได้ที่นี่

ในส่วนนี้ คุณจะถอดเสียงไฟล์เสียงภาษาฝรั่งเศส

หากต้องการถอดเสียงไฟล์เสียงภาษาฝรั่งเศส ให้อัปเดตโค้ดโดยคัดลอกข้อมูลต่อไปนี้ลงในเซสชัน IPython

config = speech.RecognitionConfig(
    language_code="fr-FR",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/corbeau_renard.flac",
)

response = speech_to_text(config, audio)
print_response(response)

คุณควรเห็นเอาต์พุตต่อไปนี้

--------------------------------------------------------------------------------
language_code: fr-fr
transcript:    Maître corbeau sur un arbre perché Tenait dans son bec un fromage maître Renard par l'odeur alléché lui tint à peu près ce langage et bonjour monsieur du corbeau.
confidence:    94%
--------------------------------------------------------------------------------
  0.000 |   0.700 | Maître
  0.700 |   1.100 | corbeau
  1.100 |   1.300 | sur
  1.300 |   1.600 | un
  1.600 |   1.700 | arbre
  1.700 |   2.000 | perché
  2.000 |   3.000 | Tenait
  3.000 |   3.000 | dans
  3.000 |   3.200 | son
  3.200 |   3.500 | bec
  3.500 |   3.700 | un
  3.700 |   3.800 | fromage
...
 10.800 |  11.800 | monsieur
 11.800 |  11.900 | du
 11.900 |  12.100 | corbeau.

สรุป

ในขั้นตอนนี้ คุณสามารถถอดเสียงไฟล์เสียงภาษาฝรั่งเศสและพิมพ์ผลลัพธ์ได้ อ่านเพิ่มเติมเกี่ยวกับภาษาที่รองรับ

7. ยินดีด้วย

9e7124a578332fed.png

คุณได้เรียนรู้วิธีใช้ Speech-to-Text API โดยใช้ Python เพื่อถอดเสียงประเภทต่างๆ ในไฟล์เสียงแล้ว

ล้างข้อมูล

หากต้องการล้างข้อมูลสภาพแวดล้อมในการพัฒนา ให้ทำดังนี้จาก Cloud Shell

  • หากยังอยู่ในเซสชัน IPython ให้กลับไปที่เชลล์โดยทำดังนี้ exit
  • หยุดใช้สภาพแวดล้อมเสมือนของ Python: deactivate
  • ลบโฟลเดอร์สภาพแวดล้อมเสมือน cd ~ ; rm -rf ./venv-speech

หากต้องการลบโปรเจ็กต์ Google Cloud ให้ทำดังนี้จาก Cloud Shell

  • ดึงรหัสโปรเจ็กต์ปัจจุบัน: PROJECT_ID=$(gcloud config get-value core/project)
  • โปรดตรวจสอบว่าโปรเจ็กต์ที่คุณต้องการลบคือ echo $PROJECT_ID
  • ลบโปรเจ็กต์: gcloud projects delete $PROJECT_ID

ดูข้อมูลเพิ่มเติม

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป