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

۱. مرور کلی

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

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

آنچه یاد خواهید گرفت

  • نحوه استفاده از API تبدیل گفتار به متن گوگل کلود
  • نحوه استفاده از API گوگل داکس برای ایجاد یک سند جدید
  • نحوه استفاده از API اسناد برای نوشتن در یک سند

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

  • جاوا نصب شده باشد (نسخه ۷ یا بالاتر)
  • Gradle نصب شده (نسخه ۵ یا بالاتر)
  • دسترسی به اینترنت و مرورگر وب
  • یک حساب گوگل
  • یک پروژه پلتفرم ابری گوگل

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5 OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

  1. در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .

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

یک کلید حساب کاربری برای API تبدیل گفتار به متن ابری دریافت کنید

60f112dedc208681.png

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

برای مثال:

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

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

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

فعال کردن APIها

3066cf79c136a078.png

  1. برگه داشبورد را انتخاب کنید، روی دکمه فعال کردن APIها و خدمات کلیک کنید و دو API زیر را فعال کنید:
  2. تبدیل گفتار به متن
  3. اسناد گوگل

846ba54aa7e1e584.png

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

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

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

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

... یا مخزن 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 کاربر شما خواهد بود. اگر کد شما به مجوزهایی فراتر یا متفاوت از این دسترسی نیاز دارد، مطمئن شوید که این متغیر را بر اساس Scopes API OAuth 2.0 Google تنظیم کنید.

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

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

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

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

حالا می‌توانید شروع به اجرای کد خود کنید!

۴. مقداردهی اولیه یک کلاینت Docs

در فایل CreateTranscript.java ، تعریف متد main را پیدا کنید و نگاهی به محتویات آن بیندازید:

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 مجاز است که اطلاعات احراز هویت شما و در این مورد، اطلاعات احراز هویت کاربر نهایی شما را در خود نگه می‌دارد.

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

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

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

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

این تابع شناسه فایل درایو مربوط به سند گوگل را برمی‌گرداند. همین شناسه را می‌توان در URL سند نیز یافت .

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

۶. فراخوانی 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() را ویرایش کنید و اگر فایل صوتی شما نرخ نمونه‌برداری متفاوتی بر حسب هرتز دارد (۱۶۰۰ بهینه است) 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;

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

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

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

بیایید کد زیر را در تابع خود وارد کنیم تا ببینیم چگونه نتایج API تبدیل گفتار به متن شما همراه با فراخوانی‌های API اسناد می‌تواند به ما امکان دهد متن یک فایل صوتی را در یک سند گوگل وارد کنیم:

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

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

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

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

۸. اجرای کد

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

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

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

$ gradle run

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

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

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

راه حل

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

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

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

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

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

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

ee73fcdd1dbcdcff.png

۱۰. تبریک می‌گویم!

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

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

در اینجا چند ایده در مورد چگونگی ایجاد یک ادغام جذاب‌تر ارائه شده است:

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

اطلاعات بیشتر