رونوشت جلسات کاری خود را با استفاده از Google Docs و amp; یادگیری ماشینی

1. بررسی اجمالی

در این لبه کد، یاد خواهید گرفت که چگونه یک فایل صوتی را از طریق Google Cloud Speech به Text API ارسال کنید، سپس رونوشت را به یک سند Google خروجی دهید. استفاده از Speech to Text API آسان است و از شبکه های عصبی قدرتمندی استفاده می کند تا توسعه دهندگان را قادر سازد صدا را به متن تبدیل کنند! به‌علاوه، از یادگیری ماشینی پشتیبانی می‌کند.

شما از Google Docs API برای ایجاد و نوشتن یک سند جدید استفاده خواهید کرد. شما یک برنامه خط فرمان جاوا ایجاد می کنید و کد خود را با استفاده از سیستم ساخت gradle اجرا می کنید و سپس از Docs API برای مشاهده نتایج خود استفاده می کنید.

چیزی که یاد خواهید گرفت

  • نحوه استفاده از Google Cloud Speech to Text API
  • نحوه استفاده از Google Docs API برای ایجاد یک سند جدید
  • نحوه استفاده از Docs API برای نوشتن روی یک سند

آنچه شما نیاز دارید

  • جاوا نصب شده (نسخه 7 یا بالاتر)
  • Gradle نصب شده (نسخه 5 یا بالاتر)
  • دسترسی به اینترنت و مرورگر وب
  • یک اکانت گوگل
  • یک پروژه Google Cloud Platform

2. پروژه خود را تنظیم کنید

پروژه ابری خود را ایجاد کنید

  1. به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا Workspace ندارید، باید یک حساب ایجاد کنید .)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJHHXieCvXw5 Zw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8CXUF

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID نامیده خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در Cloud Console فعال کنید .

اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعمل‌های موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه می‌کند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورت‌حساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

یک کلید حساب سرویس برای Cloud Speech-to-Text API دریافت کنید

60f112dedc208681.png

  1. به کنسول GCP بروید و پروژه جدید خود را پیدا کنید
  2. یک حساب کاربری ایجاد کنید
  3. یک کلید حساب سرویس را به عنوان JSON بارگیری کنید
  4. متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را روی مسیر فایل فایل JSON که حاوی کلید حساب سرویس شما است، تنظیم کنید. اگر جلسه پوسته خود را مجدداً راه اندازی کنید، باید دوباره متغیر را تنظیم کنید.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"

به عنوان مثال:

$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"

اعتبارنامه برای Docs API دریافت کنید

  1. در کنسول GCP ، به Credentials بروید
  2. یک کلید OAuth 2.0 ایجاد کنید و آن را به عنوان JSON دانلود کنید
  3. نام فایل credentials.json را تغییر دهید و مطمئن شوید که در دایرکتوری src/main/resources/ کد شما قرار دارد.

API ها را فعال کنید

3066cf79c136a078.png

  1. تب Dashboard را انتخاب کنید، روی دکمه Enable APIs and Services کلیک کنید و 2 API زیر را فعال کنید:
  2. گفتار به متن
  3. Google Docs

846ba54aa7e1e584.png

اکنون شما آماده هستید تا کار خود را با کد خود شروع کنید.

3. کد خود را تنظیم کنید

کد نمونه را دریافت کنید

برای دریافت کد نمونه، یا فایل فشرده را در کامپیوتر خود دانلود کنید...

... یا مخزن GitHub را از خط فرمان کلون کنید.

$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git

شما در فایل CreateTranscript.java داخل دایرکتوری start کار خواهید کرد. فایل های gradle نباید اصلاح شوند.

در دایرکتوری خود، به پوشه start بروید و فایل CreateTranscript.java را باز کنید. به سمت پایین بروید تا جایی که اعلان کلاس CreateTranscript را می بینید.

public class CreateTranscript {
  private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
  
  // Specify audio file name below.
  private static final String AUDIO_FILENAME = "audioFile.wav";
  private static final String TOKENS_DIRECTORY_PATH = "tokens";
  private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
  private static final String APPLICATION_NAME = "CreateTranscript";
  private static final List<String> SCOPES = Collections.singletonList(DocsScopes.DOCUMENTS);

برای متغیر SCOPES خود، مشخص کرده‌اید که کد شما می‌تواند اسناد Google Docs کاربر شما را مشاهده و مدیریت کند. اگر کد شما به مجوزی فراتر یا متفاوت از این دسترسی نیاز دارد، مطمئن شوید که این متغیر را بر اساس OAuth 2.0 Google API Scopes تنظیم کنید.

برای مثال، اگر در Google Doc نمی‌نویسید، می‌توانید دامنه را به DOCUMENTS_READONLY تغییر دهید. متغیر SCOPES نه تنها برای اینکه برنامه شما مجوزهای دسترسی مناسب داشته باشد، بلکه برای حفظ شفافیت با کاربران نیز ضروری است. دامنه‌های خاصی که درخواست می‌کنید در صفحه تأیید OAuth به کاربر نمایش داده می‌شود که در آنجا باید با استفاده از برنامه موافقت کند.

تغییر نام متغیرها

مطمئن شوید که متغیرهای فوق به درستی برای پروژه شما اعلان شده اند.

  1. مطمئن شوید که AUDIO_FILENAME روی نام فایل نمایشی که به API گفتار به متن ارسال می‌کنید تنظیم شده است. در فایل CreateTranscript.java خود، باید ببینید که به درستی تنظیم شده است.
  2. CREDENTIALS_FILE_PATH را به نام فایل اعتبارنامه دانلود شده تغییر نام دهید (باید '/ credentials.json' باشد). مطمئن شوید که این فایل در پوشه src/main/resources پوشه شما قرار دارد، بنابراین اگر شبیه سازی GitHub این کار را برای شما انجام نمی دهد، مطمئن شوید که این دایرکتوری را ایجاد کنید.

اکنون، می توانید اجرای کد خود را شروع کنید!

4. یک کلاینت Docs را راه اندازی کنید

در فایل CreateTranscript.java ، اعلان متد اصلی را پیدا کنید و نگاهی به آنچه در داخل آن است بیندازید:

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
    getCredentials(HTTP_TRANSPORT))
          .setApplicationName(APPLICATION_NAME)
          .build();

مجوز عملکرد

اولین کاری که در اینجا انجام می دهید ایجاد Docs service (متغیر) است. این سرویس یک سرویس گیرنده API مجاز را نشان می دهد که اعتبار شما و در این مورد، احراز هویت کاربر نهایی شما را در اختیار دارد.

در کد شما، هر تابعی که با Docs API تماس می گیرد، باید از این متغیر service برای انجام وظایف مربوط به Docs استفاده کند.

5. ایجاد یک سند گوگل

شما یک سند Google جدید با عنوان مشخص ایجاد خواهید کرد. بنابراین، اجازه دهید کد زیر را در تابع createDocument کپی کنیم.

Document doc = new Document().setTitle("Transcript for " +
    AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;

این تابع شناسه فایل Drive Google Doc را برمی‌گرداند. همین شناسه را می توان در URL سندنگار یافت .

در مرحله بعد، کلاینت گفتار به متن را مقداردهی اولیه می کنید.

6. Speech to Text API را فراخوانی کنید

کار بعدی که می خواهید در کد خود انجام دهید، دریافت رونوشت نوشته شده برای فایل صوتی است. در داخل CreateTranscript.java ، تابع getTranscript() پیدا کنید.

ابتدا مسیر فایل صوتی و بایت های صوتی را بدست آورید:

SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);

پیکربندی تشخیص گفتار

در مرحله بعد، باید متغیر RecognitionConfig را به درستی مقداردهی اولیه کنید.

در اینجا، config اطلاعاتی در مورد اینکه چگونه تشخیص دهنده گفتار شما دقیقاً باید درخواست شما را پردازش کند، ارائه می دهد. برای مثال، اگر فایل صوتی شما به زبانی غیر از انگلیسی است، باید setLanguageCode() را ویرایش کنید و اگر فایل صوتی شما نرخ نمونه متفاوتی در هرتز دارد (1600 بهینه است) setSampleRateHertz() را تغییر دهید.

RecognitionConfig config =
    RecognitionConfig.newBuilder()
        .setEncoding(AudioEncoding.LINEAR16)
        .setLanguageCode("en-US")
        .setSampleRateHertz(8000)
        .build();
RecognitionAudio audio =
    RecognitionAudio.newBuilder().setContent(audioBytes).build();
RecognizeResponse response = speech.recognize(config, audio);
List<SpeechRecognitionResult> results = response.getResultsList();

آماده سازی متن

در نهایت، متغیر result رونوشت فایل صوتی را مدیریت کنید و آن را برای درج در یک سند آماده کنید.

هر مورد در نتایج یک رونوشت از نوع SpeechRecognitionAlternatives است. بنابراین، هر مورد شامل دو بخش است: رونوشت متن و امتیاز اطمینان مربوط به API.

List<Request> requests = new ArrayList<>();
for (SpeechRecognitionResult result : results) {
     // Using the first + most likely alternative transcript
     SpeechRecognitionAlternative alternative =
         result.getAlternativesList().get(0);
     String toInsert = alternative.getTranscript();

     // Add requests array list to return.
     requests.add(
         new Request()
             .setInsertText(
                 new InsertTextRequest()
                     .setText(toInsert)
                     .setEndOfSegmentLocation(new
     EndOfSegmentLocation().setSegmentId(""))));
}
return requests;

7. متن را در یک سند وارد کنید

اکنون متن رونوشت را در Google Doc وارد خواهید کرد. برای ایجاد هرگونه تغییر در سند، باید از روش BatchUpdate استفاده کنید. BatchUpdate محفظه ای برای انواع مختلف درخواست های نوشتن است و در اینجا از InsertTextRequest استفاده خواهید کرد.

EndOfSegmentLocation یک پارامتر مهم است که مشخص می‌کند در کجای Doc خود می‌خواهید متن خود را چاپ کنید. در کد منبع، متنی را در بدنه Doc خود درج می کنید.

بیایید کد زیر را در تابع خود وارد کنیم تا ببینیم چگونه نتایج Speech-to-Text API همراه با تماس‌های Docs API می‌توانند به ما اجازه دهند رونوشت فایل صوتی را در Google Doc وارد کنیم:

BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
    body.setRequests(insertRequests)).execute();

ایجاد درخواست

هنگام درخواست BatchUpdate، دو مشخصات بسیار مهم را تعیین می کنید: آنچه می خواهید چاپ کنید ( .setText() )، و همچنین در کجای سند خود می خواهید این کار را انجام دهید ( .setIndex(1) ).

شما اکنون رونوشت فایل صوتی خود را در Doc ایجاد شده خود وارد کرده اید.

8. اجرای کد

اکنون که تمام کدهای مورد نیاز برای گرفتن یک فایل صوتی، به دست آوردن رونوشت آن و چاپ رونوشت آن در Google Doc تازه ایجاد شده را دارید، بیایید این نمایش را به راه بیندازیم!

از آنجایی که قرار است کد جاوا خود را با استفاده از سیستم ساخت gradle اجرا کنید، باید به فایل build.gradle خود بگویید که دقیقا چه چیزی را بسازد و اجرا کند. در این پروژه و پروژه های دیگر، مطمئن شوید که mainClassName با کلاس جاوا که می خواهید اجرا کنید، مطابقت دهید.

عالیه اکنون آماده اجرای کد خود هستید. برای انجام این کار، عبارت زیر را در خط فرمان خود تایپ کنید:

$ gradle run

احراز هویت کاربر نهایی

اولین باری که این کد را اجرا می کنید، یک URL در ترمینال چاپ می شود که از شما می خواهد به حساب سرویس خود وارد شوید و اجازه دسترسی به Google Docs را بدهید. پس از اجازه دسترسی، متوجه یک فایل جدید ذخیره شده در دایرکتوری خود خواهید شد.

در داخل دایرکتوری کاری خود، یک پوشه جدید ایجاد شده با عنوان نشانه ها را مشاهده خواهید کرد که حاوی یک فایل StoredCredential است. این رمز احراز هویتی است که به تازگی ارائه کرده‌اید، که مشتری شما از سرور تأیید اعتبار Google درخواست کرده، از پاسخ آن استخراج کرده و اکنون به هر API که تماس می‌گیرید ارسال می‌کند.

راه حل

اگر کد شما کار نمی کند، به داخل فایل CreateTranscript.java داخل پوشه finish نگاهی بیندازید. این فایل تمام کدهای شما را دقیقاً همانطور که برای اجرای موفقیت آمیز باید باشد دارد.

حالا بیایید به نتیجه نگاه کنیم.

9. مشاهده نتایج شما

شما به تازگی یک سند Google جدید ایجاد کرده‌اید که حاوی رونوشت فایل صوتی خود است، بنابراین بیایید نگاهی به آن بیندازیم.

این سند از طریق حسابی ایجاد شده است که کاربر نهایی با آن مجوز ارائه کرده است. یکی از گسترش‌های احتمالی این است که می‌توانید به‌طور خودکار این سند را با استفاده از Drive API با دیگران به اشتراک بگذارید.

با استفاده از کد منبع و فایل صوتی ارائه شده، در اینجا چیزی است که باید ببینید:

ee73fcdd1dbcdcff.png

10. تبریک می گویم!

اکنون یاد گرفته‌اید که چگونه یک Google Doc ایجاد کنید، با Speech-to-Text API تماس بگیرید و رونوشت فایل صوتی خود را در سند ایجاد شده خود خارج کنید.

بهبودهای احتمالی

در اینجا چند ایده در مورد چگونگی ایجاد یک ادغام قانع کننده تر وجود دارد:

  • کدتان را طوری تنظیم کنید که وقتی یک فایل صوتی به درایو سطل فضای ذخیره‌سازی Google Cloud شما اضافه شده است، به آن گوش دهید و یک تابع Google Cloud را برای اجرای این کد فعال کنید.
  • با درج متن در Google Doc که خالی نیست بازی کنید

بیشتر بدانید