1. Genel Bakış
Bu codelab'de, Google Cloud Speech to Text API üzerinden ses dosyasını nasıl göndereceğinizi ve ardından transkriptin çıktısını bir Google Dokümanı'na nasıl çıkaracağınızı öğreneceksiniz. Kolayca kullanılabilen Speech to Text API, geliştiricilerin sesi metne dönüştürmesini sağlamak için güçlü nöral ağlar kullanır. Ayrıca, makine öğrenimi tarafından desteklenmektedir.
Yeni bir doküman oluşturmak ve dokümana yazmak için Google Docs API'yi kullanırsınız. Java komut satırı uygulaması oluşturup gradle derleme sistemini kullanarak kodunuzu çalıştıracak, ardından 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 Docs API'yi kullanma
- Dokümana yazmak için Docs API'yi kullanma
Gerekenler
- Java yüklü (sürüm 7 veya sonraki sürümler)
- Gradle yüklendi (5. veya sonraki sürümler)
- İnternete ve web tarayıcısına erişim
- Google Hesabı
- Bir Google Cloud Platform projesi
2. Projenizi oluşturun
Bulut projenizi oluşturma
- Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya Workspace hesabınız yoksa hesap oluşturmanız gerekir.)
Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID
olarak adlandırılacaktır.
- Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.
Cloud Speech-to-Text API için hizmet hesabı anahtarı alma
- GCP Console'a gidin ve yeni projenizi bulun
- Hizmet hesabı oluşturma
- Hizmet hesabı anahtarını JSON olarak indirin
- GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini, hizmet hesabı anahtarınızı içeren JSON dosyasının dosya yoluna 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 Bilgisi Alma
- GCP konsolunda Kimlik bilgileri'ne gidin.
- Bir OAuth 2.0 anahtarı oluşturun ve JSON olarak indirin
credentials.json
dosyasını yeniden adlandırın ve kodunuzunsrc/main/resources/
dizininde bulunduğ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 klonlayın.
$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git
start dizinindeki CreateTranscript.java
dosyası üzerinde çalışacaksınız. Gradle dosyaları değiştirilmemelidir.
Dizininizde start klasörüne gidin ve CreateTranstranskript.java dosyasını açın. Aşağı kaydırarak CreateTranscript
sınıf beyanını gö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şimden başka veya bu erişimden farklı bir yetkilendirme gerektiriyorsa bu değişkeni OAuth 2.0 Google API kapsamlarına göre ayarladığınızdan emin olun.
Örneğin, bir Google Dokümanı'na yazmadıysanız kapsamı DOCUMENTS_READONLY
olarak değiştirebilirsiniz. SCOPES
değişkeni yalnızca uygulamanızın uygun erişim izinlerine sahip olması için değil, kullanıcı açısından şeffaflığın korunması için de gereklidir. Kullanıcının, uygulamanın kullanılmasına izin vermesi gereken OAuth doğrulama sayfasında istediğiniz kapsamlar gösterilir.
Değişkenleri Yeniden Adlandırma
Yukarıdaki değişkenlerin projeniz için doğru şekilde belirtildiğinden emin olun.
- AUDIO_FILENAME dosyasının, Speech to Text API'ye gönderdiğiniz demo dosyasının adına ayarlandığından emin olun. CreateTranscript.java dosyanızda, dosyanın doğru bir şekilde ayarlanmış olduğunu görüyor olmanız gerekir.
- CREDENTIALS_FILE_PATH yolunu indirilen kimlik bilgileri dosyasının adıyla değiştirin ("/
credentials.json'
" olmalıdır). Bu dosyanın, klasörünüzünsrc/main/resources
dizininde olduğundan emin olun. Bu nedenle, GitHub klonlaması işlemi sizin yerinize yapmıyorsa bu dizini oluşturmayı da unutmayın.
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çindekilere 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) öğesinin oluşturulmasıdır. Hizmet, kimlik bilgilerinizi ve bu örnekte son kullanıcı kimlik doğrulamanızı elinde bulunduran yetkili bir API istemcisini temsil eder.
Kodunuzda, Docs API'ye ç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şturacaksınız. Şimdi aşağıdaki kodu createDocument
işlevine 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 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ı için yazılı transkripti elde etmektir. CreateTranscript.java dosyasının içinde 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ıma'yı yapılandırın
Ardından, RecognitionConfig
değişkenini doğru şekilde ilk kullanıma hazırlamanız gerekir.
Burada config
, konuşma tanıyıcınızın isteğinizi tam olarak nasıl işlemesi gerektiğiyle ilgili bilgi sağlar. Örneğin, ses dosyanız İngilizce dışında bir dildeyse setLanguageCode()
öğesini düzenlemeniz ve ses dosyanız Hertz'de farklı bir örnek hızına sahipse (en uygunu 1600) setSampleRateHertz()
değerini 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();
Metin Hazırlanıyor
Son olarak, ses dosyasının transkript result
değişkenini tutun ve bir dokümana eklenmek üzere hazırlayın.
Sonuçlardaki her öğe, SpeechRecognitionAlternatives
türünde bir transkripttir. Bu nedenle her öğe iki bölüm içerir: bir metin transkripti ve API'nin ilgili 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 ekleyeceksiniz. Dokümanda değişiklik yapmak için BatchUpdate
yöntemini kullanmanız gerekir. BatchUpdate
, farklı yazma isteği türlerine yönelik bir kapsayıcıdır. Burada InsertTextRequest
değerini kullanacaksınız.
EndOfSegmentLocation
, dokümanınızda metninizi nereye yazdırmak istediğinizi belirten önemli bir parametredir. Kaynak kodunda, Dokümanınızın gövdesine metin ekliyorsunuz.
Dokümanlar API'sine yapılan çağrılarla birlikte, Speech-to-Text API sonuçlarınızın bir ses dosyasının transkriptini bir Google Dokümanına eklememize nasıl olanak tanıyabileceğini görmek için aşağıdaki kodu işlevinize ekleyelim:
BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
body.setRequests(insertRequests)).execute();
İsteği oluşturma
BatchUpdate isteğinde bulunurken çok önemli iki özellik belirlersiniz: Yazdırmak istediğiniz şey (.setText()
) ve bunu yapmak istediğiniz belgenin konumu (.setIndex(1)
).
Artık ses dosyanızın transkriptini oluşturduğunuz dokümana eklediniz.
8. Kodu çalıştırma
Artık bir ses dosyasını almak, transkriptini edinmek ve transkriptin transkriptini yeni oluşturulan bir Google Dokümanı'na yazdırmak için ihtiyacınız olan tüm kodlara sahip olduğunuza göre, şimdi bu programı birlikte 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ı bildirmeniz gerekir. Bu projede ve diğer projelerde mainClassName
öğesinin, çalıştırmak istediğiniz Java sınıfıyla tutarlı olduğundan emin olun.
Çok güzel! 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 ve sizden hizmet hesabınıza giriş yapmanız ve hesabın Google Dokümanlar'ına erişim için yetki vermeniz istenir. Erişime izin verdikten sonra dizininizde yeni bir dosya depolandığını görürsünüz.
Çalışma dizininizin içinde, tokens adında yeni oluşturulmuş ve StoredCredential dosyasını içeren bir klasör göreceksiniz. Bu, az önce sağladığınız, istemcinizin Google Kimlik Doğrulama Sunucusu'ndan istediği, yanıtından çıkardığı ve artık çağrı yaptığınız tüm API'lere gönderilecek kimlik doğrulama jetonudur.
Çözüm
Kodunuz çalışmıyorsa CreateTranscript.java klasöründeki CreateTranscript.java dosyasının içine bakın. Bu dosyada, başarılı bir şekilde çalıştırılmak için gereken tüm kodlar tam olarak aynı olması gerekir.
Ş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 buna göz atalım.
Bu doküman, son kullanıcının yetki verdiği hesap aracılığıyla oluşturuldu. Olası genişletmelerden biri, Drive API'yi kullanarak bu Dokümanı başkalarıyla otomatik olarak paylaşabilmenizdir.
Kaynak kodunuzu ve sağlanan ses dosyasını kullandığınızda şunları görürsünüz:
10. Tebrikler!
Google Dokümanı oluşturmayı, Speech-to-Text API'ye çağrı yapmayı ve ses dosyanızın transkriptini oluşturduğunuz dokümana nasıl aktaracağınızı öğrendiniz.
Olası İyileştirmeler
Aşağıda, daha etkili bir entegrasyonun nasıl gerçekleştirileceğine ilişkin bazı fikirler yer almaktadır:
- Google Cloud Storage paket Drive'ınıza bir ses dosyası eklendiğinde dinlenecek şekilde kodunuzu ayarlayın ve bu kodu yürütmesi için bir Google Cloud Functions işlevini tetikleyin.
- Bir Google Dokümanı'na boş olmayan metinler ekleyerek çeşitli denemeler yapın
Daha Fazla Bilgi
- Google Docs API Geliştirici dokümanlarını okuyun
- google-docs-api etiketinin altında Stack Overflow'da soru yayınlayın ve yanıtları bulun