1. Genel Bakış
Bu codelab'de, ses dosyası göndermeyi ve Google Cloud Speech-to-Text API aracılığıyla transkripti Google Dokümanı'na aktarmayı öğreneceksiniz. Speech to Text API'nin kullanımı kolaydır ve geliştiricilerin sesi metne dönüştürmesini sağlamak için güçlü nöral ağlar uygular. Ayrıca, makine öğrenimi tarafından desteklenir.
Yeni bir doküman oluşturmak ve bu dokümana yazmak için Google Dokümanlar API'sini kullanacaksınız. Java komut satırı uygulaması oluşturacak, Gradle derleme sistemini kullanarak kodunuzu çalıştıracak ve sonuçlarınızı görüntülemek için Docs API'yi kullanacaksınız.
Neler öğreneceksiniz?
- Google Cloud Speech-to-Text API'yi kullanma
- Yeni bir doküman oluşturmak için Google Dokümanlar API'sini kullanma
- Doküman API'sini kullanarak dokümana yazma
İhtiyacınız olanlar
- Java'nın yüklü olması (7 veya sonraki sürümler)
- Gradle'ın yüklü olması (5 veya sonraki sürümler)
- İnternet erişimi ve web tarayıcısı
- Google Hesabı
- Google Cloud Platform projesi
2. Projenizi oluşturma
Bulut projenizi oluşturma
- Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya Workspace hesabınız yoksa hesap oluşturmanız gerekir.)
Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen kısımlarında PROJECT_ID olarak adlandırılacaktır.
- Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Speech-to-Text API için hizmet hesabı anahtarı alma

- GCP Console'a gidip yeni projenizi bulun.
- Hizmet hesabı oluşturma
- Hizmet hesabı anahtarını JSON olarak indirme
- GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini, hizmet hesabı anahtarınızı içeren JSON dosyasının dosya yolu olarak ayarlayın. Kabuk oturumunuzu yeniden başlatırsanız değişkeni tekrar ayarlamanız gerekir.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Örneğin:
$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"
Docs API için kimlik bilgileri alma
- GCP Console'a geri dönün ve Kimlik Bilgileri'ne gidin.
- OAuth 2.0 anahtarı oluşturun ve JSON olarak indirin.
- Dosyayı
credentials.jsonolarak yeniden adlandırın ve kodunuzunsrc/main/resources/dizininde olduğundan emin olun.
API'leri etkinleştir

- Kontrol Paneli sekmesini seçin, API'leri ve Hizmetleri Etkinleştir düğmesini tıklayın ve aşağıdaki 2 API'yi etkinleştirin:
- Konuşmayı Metne Dönüştürme
- Google Dokümanlar

Artık kodunuzla çalışmaya başlayabilirsiniz.
3. Kodunuzu ayarlama
Örnek kodu alın
Örnek kodu almak için ZIP dosyasını bilgisayarınıza indirin...
...veya GitHub deposunu komut satırından kopyalayın.
$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git
start dizinindeki CreateTranscript.java dosyasında çalışacaksınız. Gradle dosyaları değiştirilmemelidir.
Dizininizde start klasörüne gidin ve CreateTranscript.java dosyasını açın. CreateTranscript sınıf bildirimini görene kadar aşağı kaydırın.
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 değişkeniniz için kodunuzun, kullanıcınızın Google Dokümanlar dokümanlarını görüntüleyip yönetebileceğini belirttiniz. Kodunuz bu erişimin ötesinde veya bu erişimden farklı bir yetkilendirme gerektiriyorsa OAuth 2.0 Google API Kapsamları'na göre bu değişkeni uygun şekilde ayarladığınızdan emin olun.
Örneğin, Google Dokümanı'na yazmıyorsanız kapsamı DOCUMENTS_READONLY olarak değiştirebilirsiniz. SCOPES değişkeni, uygulamanızın uygun erişim izinlerine sahip olması için değil, aynı zamanda kullanıcılarla şeffaflığı korumak için de gereklidir. Kullanıcıya, OAuth doğrulama sayfasında istediğiniz kapsamlar gösterilir. Kullanıcı, uygulamayı kullanmak için bu kapsamları kabul etmelidir.
Değişkenleri Yeniden Adlandırma
Yukarıdaki değişkenlerin projeniz için doğru şekilde tanımlandığından emin olun.
- AUDIO_FILENAME değerinin, Speech-to-Text API'ye gönderdiğiniz demo dosyasının adı olarak ayarlandığından emin olun. CreateTranscript.java dosyanızda bu değerin doğru şekilde ayarlandığını görebilirsiniz.
- CREDENTIALS_FILE_PATH dosyasını, indirilen kimlik bilgileri dosyasının adıyla yeniden adlandırın (ad "/
credentials.json'" olmalıdır). Bu dosyanın klasörünüzünsrc/main/resourcesdizininde olduğundan emin olun. GitHub'da klonlama işlemi bu dizini sizin için oluşturmazsa dizini oluşturduğunuzdan emin olun.
Artık kodunuzu çalıştırmaya başlayabilirsiniz.
4. Dokümanlar istemcisini başlatma
CreateTranscript.java dosyasında ana yöntem bildirimini bulun ve içeriğine göz atın:
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
İşlev Yetkilendirmesi
Burada gerçekleştirdiğiniz ilk görev, Docs service (değişken) oluşturmaktır. Bu hizmet, kimlik bilgilerinizi ve bu durumda son kullanıcı kimlik doğrulamanızı içeren yetkili bir API istemcisini temsil eder.
Kodunuzda, Dokümanlar API'sine çağrı yapan tüm işlevlerin Dokümanlar ile ilgili görevleri gerçekleştirmek için bu service değişkenini kullanması gerekir.
5. Google Dokümanı oluşturma
Belirtilen başlığa sahip yeni bir Google Dokümanı oluşturursunuz. Bu nedenle, createDocument işlevinde aşağıdaki kodu kopyalayalım.
Document doc = new Document().setTitle("Transcript for " +
AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;
Bu işlev, Google Dokümanı'nın Drive dosya kimliğini döndürür. Aynı kimlik Doküman'ın URL'sinde de bulunabilir.
Ardından, Speech-to-Text istemcisini başlatacaksınız.
6. Speech-to-Text API'yi çağırma
Kodunuzda gerçekleştirmek istediğiniz bir sonraki görev, ses dosyasının yazılı transkriptini almaktır. CreateTranscript.java dosyasında getTranscript() işlevini bulun.
Öncelikle ses dosyasının yolunu ve ses baytlarını alın:
SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);
Konuşma tanımayı yapılandırma
Ardından, RecognitionConfig değişkenini doğru şekilde başlatmanız gerekir.
Burada, config konuşma tanıyıcınızın isteğinizi tam olarak nasıl işlemesi gerektiği hakkında bilgi verir. Örneğin, ses dosyanız İngilizce dışında bir dildeyse setLanguageCode() bölümünü düzenlemeniz, ses dosyanızın Hertz cinsinden farklı bir örnekleme hızı varsa (1600 idealdir) setSampleRateHertz() bölümünü değiştirmeniz gerekir.
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();
Metni hazırlama
Son olarak, ses dosyasının transkript result değişkenini işleyin ve bir dokümana eklenmeye hazır hale getirin.
Sonuçlardaki her öğe, SpeechRecognitionAlternatives türünde bir transkripttir. Bu nedenle, her öğe iki bölümden oluşur: metin transkripti ve API'nin karşılık gelen güven puanı.
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. Dokümana metin ekleme
Şimdi transkript metnini Google Dokümanı'na ekleyin. Dokümanda değişiklik yapmak için BatchUpdate yöntemini kullanmanız gerekir. BatchUpdate, farklı türlerdeki yazma istekleri için bir kapsayıcıdır ve burada InsertTextRequest öğesini kullanacaksınız.
EndOfSegmentLocation, dokümanınızda metninizi nerede yazdırmak istediğinizi belirten önemli bir parametredir. Kaynak kodunda, dokümanınızın gövdesine metin ekliyorsunuz.
Aşağıdaki kodu işlevinize ekleyerek, Dokümanlar API'sine yapılan çağrılarla birlikte Konuşmayı Metne Dönüştürme API'si sonuçlarınızın, bir ses dosyasının transkriptini Google Dokümanı'na eklememize nasıl olanak tanıdığını görelim:
BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
body.setRequests(insertRequests)).execute();
İsteği oluşturma
BatchUpdate isteğini oluştururken iki çok önemli özellik belirlersiniz: yazdırmak istediğiniz şey (.setText()) ve bunu belgenizin neresinde yapmak istediğiniz (.setIndex(1)).
Ses dosyanızın transkriptini oluşturduğunuz dokümana eklediniz.
8. Kodu çalıştırma
Ses dosyası almak, transkriptini edinmek ve transkriptini yeni oluşturulan bir Google Dokümanı'na yazdırmak için ihtiyacınız olan tüm kodlara sahipsiniz. Şimdi bu gösteriyi başlatalım.
Java kodunuzu Gradle derleme sistemini kullanarak çalıştıracağınız için build.gradle dosyanıza tam olarak neyin derlenip çalıştırılacağını söylemeniz gerekir. Bu ve diğer projelerde mainClassName öğesini, çalıştırmak istediğiniz Java sınıfıyla tutarlı tuttuğunuzdan emin olun.
Mükemmel! Artık kodunuzu çalıştırmaya hazırsınız. Bunu yapmak için komut satırınıza aşağıdakileri yazın:
$ gradle run
Son kullanıcı kimlik doğrulaması
Bu kodu ilk kez çalıştırdığınızda terminalde bir URL yazdırılır. Bu URL'de, hizmet hesabınızda oturum açmanız ve Google Dokümanlar'a erişimi yetkilendirmeniz istenir. Erişime izin verdikten sonra dizininizde yeni bir dosya depolandığını görürsünüz.
Çalışma dizininizde, StoredCredential adlı bir dosyayı içeren tokens adlı yeni bir klasör görürsünüz. Bu, istemcinizin Google Auth Server'dan istediği, yanıtından çıkarılan ve şimdi çağırdığınız tüm API'lere gönderilecek olan kimlik doğrulama jetonudur.
Çözüm
Kodunuz çalışmıyorsa CreateTranscript.java klasöründeki CreateTranscript.java dosyasına göz atın. Bu dosya, kodunuzun başarılı bir şekilde çalışması için gereken tüm bilgileri içerir.
Şimdi sonuca bakalım.
9. Sonuçlarınızı görüntüleme
Ses dosyanızın transkriptini içeren yeni bir Google Dokümanı oluşturdunuz. Şimdi bu dokümana göz atalım.
Bu Doküman, son kullanıcının yetkilendirme sağladığı hesap üzerinden oluşturuldu. Bu dokümanı Drive API'yi kullanarak başkalarıyla otomatik olarak paylaşabilirsiniz.
Kaynak kodunuzu ve sağlanan ses dosyasını kullanarak görmeniz gerekenler aşağıda verilmiştir:

10. Tebrikler!
Artık Google Dokümanı oluşturmayı, Speech-to-Text API'yi çağırmayı ve ses dosyanızın transkriptini oluşturduğunuz Doküman'a aktarmayı öğrendiniz.
Olası İyileştirmeler
Daha ilgi çekici bir entegrasyon oluşturmayla ilgili bazı fikirler:
- Kodunuzu, Google Cloud Storage paketi Drive'ınıza bir ses dosyası eklendiğinde dinleyecek ve bu kodu yürütmek için bir Google Cloud Functions işlevi tetikleyecek şekilde ayarlayın.
- Boş olmayan bir Google Dokümanı'na metin ekleme
Daha Fazla Bilgi
- Google Dokümanlar API geliştirici dokümanlarını okuyun.
- Stack Overflow'da google-docs-api etiketi altında sorularınızı yayınlayabilir ve yanıtlarını bulabilirsiniz.