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

1. ภาพรวม

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

ใน Codelab นี้ คุณจะมุ่งเน้นที่การใช้ API การแปลงเสียงพูดเป็นข้อความด้วย C# คุณจะได้เรียนรู้วิธีส่งไฟล์เสียงเป็นภาษาอังกฤษและภาษาอื่นๆ ไปยัง Cloud Speech-to-Text API เพื่อถอดเสียงเป็นคำ

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

  • วิธีใช้ Cloud Shell
  • วิธีเปิดใช้ Speech-to-Text API
  • วิธีตรวจสอบสิทธิ์คำขอ API
  • วิธีติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ C#
  • วิธีถอดเสียงไฟล์เสียงเป็นภาษาอังกฤษ
  • วิธีถอดเสียงไฟล์เสียงที่มีการประทับเวลาของคำ
  • วิธีถอดเสียงไฟล์เสียงในภาษาต่างๆ

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

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

แบบสำรวจ

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

อ่านเท่านั้น อ่านและทำแบบฝึกหัด

คุณจะให้คะแนนความพึงพอใจสำหรับประสบการณ์การใช้งาน C# อย่างไร

มือใหม่ ระดับกลาง ผู้ชำนาญ

คุณจะให้คะแนนความพึงพอใจสำหรับประสบการณ์การใช้บริการ Google Cloud Platform อย่างไร

มือใหม่ ระดับกลาง ผู้ชำนาญ

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

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

เริ่มต้น Cloud Shell

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

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

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

cb81e7c8e34bc8d.png

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

d95252b003979716.png

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

7833d5e1c5d18f54.png

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

เมื่อเชื่อมต่อกับ 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. เปิดใช้ API การแปลงเสียงพูดเป็นข้อความ

คุณต้องเปิดใช้ API ก่อนจึงจะเริ่มใช้ Speech-to-Text API ได้ คุณเปิดใช้ API ได้โดยใช้คำสั่งต่อไปนี้ใน Cloud Shell

gcloud services enable speech.googleapis.com

4. ติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud Speech-to-Text API สำหรับ C#

ขั้นแรก ให้สร้างแอปพลิเคชันคอนโซล C# แบบง่ายที่คุณจะใช้เพื่อเรียกใช้ตัวอย่าง API การแปลงเสียงพูดเป็นข้อความ ดังนี้

dotnet new console -n SpeechToTextApiDemo

คุณควรเห็นการสร้างแอปพลิเคชันและการแก้ไขทรัพยากร Dependency แล้ว

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

จากนั้นไปที่โฟลเดอร์ SpeechToTextApiDemo

cd SpeechToTextApiDemo/

และเพิ่มแพ็กเกจ NuGet Google.Cloud.Speech.V1 ลงในโปรเจ็กต์ด้วย

dotnet add package Google.Cloud.Speech.V1
info : Adding PackageReference for package 'Google.Cloud.Speech.V1' into project '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Speech.V1' version '1.0.1' added to file '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.

ตอนนี้คุณพร้อมใช้งาน Speech-to-Text API แล้ว

5. ถอดเสียงไฟล์เสียง

ในส่วนนี้ คุณจะได้ถอดเสียงไฟล์เสียงที่อัดไว้ล่วงหน้าเป็นภาษาอังกฤษ ไฟล์เสียงมีอยู่ใน Google Cloud Storage

หากต้องการถอดเสียงไฟล์เสียง ให้เปิดตัวแก้ไขโค้ดจากด้านขวาบนของ Cloud Shell ดังนี้

fd3fc1303e63572.png

ไปที่ไฟล์ Program.cs ภายในโฟลเดอร์ SpeechToTextApiDemo และแทนที่โค้ดด้วยข้อมูลต่อไปนี้

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");         
            
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

โปรดใช้เวลาสัก 1-2 นาทีศึกษาโค้ดและดูว่ามีการใช้โค้ดเพื่อถอดเสียงไฟล์เสียง**

พารามิเตอร์ Encoding จะบอก API ว่าคุณใช้การเข้ารหัสเสียงประเภทใดกับไฟล์เสียง Flac เป็นประเภทการเข้ารหัสสำหรับไฟล์ .raw (ดูรายละเอียดเพิ่มเติมได้ที่เอกสารสำหรับประเภทการเข้ารหัส)

ในออบเจ็กต์ RecognitionAudio คุณจะส่ง API ได้ทั้ง URI ของไฟล์เสียงใน Cloud Storage หรือเส้นทางไฟล์ในเครื่องสำหรับไฟล์เสียง เราใช้ URI ของ Cloud Storage

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

dotnet run

คุณควรจะเห็นผลลัพธ์ต่อไปนี้

how old is the Brooklyn Bridge

สรุป

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

6. ถอดเสียงด้วยการประทับเวลาของคำ

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

หากต้องการถอดเสียงไฟล์เสียงที่มีการชดเชยเวลา ให้ไปที่ไฟล์ Program.cs ในโฟลเดอร์ SpeechToTextApiDemo แล้วแทนที่โค้ดด้วยโค้ดต่อไปนี้

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates,
                EnableWordTimeOffsets = true
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");
     
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine($"Transcript: { alternative.Transcript}");
                    Console.WriteLine("Word details:");
                    Console.WriteLine($" Word count:{alternative.Words.Count}");
                    foreach (var item in alternative.Words)
                    {
                        Console.WriteLine($"  {item.Word}");
                        Console.WriteLine($"    WordStartTime: {item.StartTime}");
                        Console.WriteLine($"    WordEndTime: {item.EndTime}");
                    }
                }
            }
        }
    }
}

ใช้เวลาสัก 1-2 นาทีศึกษาโค้ดและดูว่ามีการใช้โค้ดเพื่อถอดเสียงไฟล์เสียงที่มีการประทับเวลาของคำ** พารามิเตอร์ EnableWordTimeOffsets จะบอกให้ API เปิดใช้การชดเชยเวลา (ดูรายละเอียดเพิ่มเติมในเอกสาร)

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

dotnet run

คุณควรจะเห็นผลลัพธ์ต่อไปนี้

dotnet run

Transcript: how old is the Brooklyn Bridge
Word details:
 Word count:6
  how
    WordStartTime: "0s"
    WordEndTime: "0.300s"
  old
    WordStartTime: "0.300s"
    WordEndTime: "0.600s"
  is
    WordStartTime: "0.600s"
    WordEndTime: "0.800s"
  the
    WordStartTime: "0.800s"
    WordEndTime: "0.900s"
  Brooklyn
    WordStartTime: "0.900s"
    WordEndTime: "1.100s"
  Bridge
    WordStartTime: "1.100s"
    WordEndTime: "1.500s"

สรุป

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

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

Speech-to-Text API รองรับการถอดเสียงเป็นคำในกว่า 100 ภาษา คุณดูรายการภาษาที่รองรับได้ที่นี่

ในส่วนนี้ คุณจะได้ถอดเสียงไฟล์เสียงที่อัดไว้ล่วงหน้าเป็นภาษาฝรั่งเศส ไฟล์เสียงมีอยู่ใน Google Cloud Storage

หากต้องการถอดเสียงภาษาฝรั่งเศส ให้ไปที่ไฟล์ Program.cs ในโฟลเดอร์ SpeechToTextApiDemo และแทนที่โค้ดด้วยโค้ดต่อไปนี้

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                LanguageCode = LanguageCodes.French.France
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-data/speech/corbeau_renard.flac");

            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

ใช้เวลา 1-2 นาทีศึกษาโค้ดและดูว่าระบบใช้ในการถอดเสียงไฟล์เสียงอย่างไร* พารามิเตอร์ LanguageCode จะบอก API ว่าการบันทึกเสียงดังกล่าวเป็นภาษาอะไร

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

dotnet run

คุณควรจะเห็นผลลัพธ์ต่อไปนี้

maître corbeau sur un arbre perché tenait en son bec un fromage

นี่คือประโยคจากนิทานเด็กฝรั่งเศสยอดนิยม

สรุป

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

8. ยินดีด้วย

คุณได้เรียนรู้วิธีใช้ API การแปลงเสียงพูดเป็นข้อความโดยใช้ C# เพื่อถอดเสียงเป็นคำในไฟล์เสียงแบบต่างๆ แล้ว

ล้างข้อมูล

เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ในการเริ่มต้นอย่างรวดเร็วนี้ ควรทำดังนี้

  • ไปที่คอนโซล Cloud Platform
  • เลือกโครงการที่คุณต้องการปิดการทำงาน แล้วคลิก "ลบ" ที่ด้านบน: การดำเนินการนี้จะกำหนดเวลาการลบโปรเจ็กต์

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0