Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Speech api changes #266

Closed
wants to merge 14 commits into from
Prev Previous commit
Next Next commit
added sync changes and test
Author: puneith <[email protected]>
  • Loading branch information
puneith authored and puneithk committed Jul 6, 2016
commit a916587cdcc06c9a3f5c797935a68cd27a32aff6
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

package com.google.cloud.speech.grpc.demos;

import com.google.cloud.speech.v1.AudioRequest;
import com.google.cloud.speech.v1beta1.RecognitionAudio;
import com.google.protobuf.ByteString;

import java.io.IOException;
Expand All @@ -27,10 +27,10 @@
import java.nio.file.Paths;

/*
* AudioRequestFactory takes a URI as an input and creates an AudioRequest. The URI can point to a
* RecognitionAudioFactory takes a URI as an input and creates a RecognitionAudio. The URI can point to a
* local file or a file on Google Cloud Storage.
*/
public class AudioRequestFactory {
public class RecognitionAudioFactory {

private static final String FILE_SCHEME = "file";
private static final String GS_SCHEME = "gs";
Expand All @@ -39,27 +39,27 @@ public class AudioRequestFactory {
* Takes an input URI of form $scheme:// and converts to audio request.
*
* @param uri input uri
* @return AudioRequest audio request
* @return RecognitionAudio recognition audio
*/
public static AudioRequest createRequest(URI uri)
public static RecognitionAudio createRecognitionAudio(URI uri)
throws IOException {
if (uri.getScheme() == null || uri.getScheme().equals(FILE_SCHEME)) {
Path path = Paths.get(uri);
return audioFromBytes(Files.readAllBytes(path));
} else if (uri.getScheme().equals(GS_SCHEME)) {
return AudioRequest.newBuilder().setUri(uri.toString()).build();
return RecognitionAudio.newBuilder().setUri(uri.toString()).build();
}
throw new RuntimeException("scheme not supported " + uri.getScheme());
}

/**
* Convert bytes to AudioRequest.
* Convert bytes to RecognitionAudio.
*
* @param bytes input bytes
* @return AudioRequest audio request
* @return RecognitionAudio recognition audio
*/
private static AudioRequest audioFromBytes(byte[] bytes) {
return AudioRequest.newBuilder()
private static RecognitionAudio audioFromBytes(byte[] bytes) {
return RecognitionAudio.newBuilder()
.setContent(ByteString.copyFrom(bytes))
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

// Client that sends audio to Speech.NonStreamingRecognize via gRPC and returns transcription.
// Client that sends audio to Speech.SyncRecognize via gRPC and returns transcription.
//
// Uses a service account for OAuth2 authentication, which you may obtain at
// https://console.developers.google.com
Expand All @@ -26,12 +26,12 @@
package com.google.cloud.speech.grpc.demos;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.speech.v1.AudioRequest;
import com.google.cloud.speech.v1.InitialRecognizeRequest;
import com.google.cloud.speech.v1.InitialRecognizeRequest.AudioEncoding;
import com.google.cloud.speech.v1.NonStreamingRecognizeResponse;
import com.google.cloud.speech.v1.RecognizeRequest;
import com.google.cloud.speech.v1.SpeechGrpc;
import com.google.cloud.speech.v1beta1.RecognitionAudio;
import com.google.cloud.speech.v1beta1.RecognitionConfig;
import com.google.cloud.speech.v1beta1.RecognitionConfig.AudioEncoding;
import com.google.cloud.speech.v1beta1.SyncRecognizeRequest;
import com.google.cloud.speech.v1beta1.SyncRecognizeResponse;
import com.google.cloud.speech.v1beta1.SpeechGrpc;
import com.google.protobuf.TextFormat;

import io.grpc.ManagedChannel;
Expand All @@ -57,12 +57,12 @@
import java.util.logging.Logger;

/**
* Client that sends audio to Speech.NonStreamingRecognize and returns transcript.
* Client that sends audio to Speech.SyncRecognize and returns transcript.
*/
public class NonStreamingRecognizeClient {
public class SyncRecognizeClient {

private static final Logger logger =
Logger.getLogger(NonStreamingRecognizeClient.class.getName());
Logger.getLogger(SyncRecognizeClient.class.getName());

private static final List<String> OAUTH2_SCOPES =
Arrays.asList("https://www.googleapis.com/auth/cloud-platform");
Expand All @@ -78,7 +78,7 @@ public class NonStreamingRecognizeClient {
/**
* Construct client connecting to Cloud Speech server at {@code host:port}.
*/
public NonStreamingRecognizeClient(String host, int port, URI input, int samplingRate)
public SyncRecognizeClient(String host, int port, URI input, int samplingRate)
throws IOException {
this.host = host;
this.port = port;
Expand All @@ -95,8 +95,8 @@ public NonStreamingRecognizeClient(String host, int port, URI input, int samplin
logger.info("Created blockingStub for " + host + ":" + port);
}

private AudioRequest createAudioRequest() throws IOException {
return AudioRequestFactory.createRequest(this.input);
private RecognitionAudio createRecognitionAudio() throws IOException {
return RecognitionAudioFactory.createRecognitionAudio(this.input);
}

public void shutdown() throws InterruptedException {
Expand All @@ -105,25 +105,26 @@ public void shutdown() throws InterruptedException {

/** Send a non-streaming-recognize request to server. */
public void recognize() {
AudioRequest audio;
RecognitionAudio audio;
try {
audio = createAudioRequest();
audio = createRecognitionAudio();
} catch (IOException e) {
logger.log(Level.WARNING, "Failed to read audio uri input: " + input);
return;
}
logger.info("Sending " + audio.getContent().size() + " bytes from audio uri input: " + input);
InitialRecognizeRequest initial = InitialRecognizeRequest.newBuilder()
.setEncoding(AudioEncoding.LINEAR16)
.setSampleRate(samplingRate)
RecognitionConfig config = RecognitionConfig.newBuilder()
.setEncoding(AudioEncoding.LINEAR16)
.setSampleRate(samplingRate)
.build();
SyncRecognizeRequest request = SyncRecognizeRequest.newBuilder()
.setConfig(config)
.setAudio(audio)
.build();
RecognizeRequest request = RecognizeRequest.newBuilder()
.setInitialRequest(initial)
.setAudioRequest(audio)
.build();
NonStreamingRecognizeResponse response;

SyncRecognizeResponse response;
try {
response = blockingStub.nonStreamingRecognize(request);
response = blockingStub.syncRecognize(request);
} catch (StatusRuntimeException e) {
logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus());
return;
Expand Down Expand Up @@ -196,8 +197,8 @@ public static void main(String[] args) throws Exception {
System.exit(1);
}

NonStreamingRecognizeClient client =
new NonStreamingRecognizeClient(host, port, URI.create(audioFile), sampling);
SyncRecognizeClient client =
new SyncRecognizeClient(host, port, URI.create(audioFile), sampling);
try {
client.recognize();
} finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import static org.junit.Assert.assertEquals;

import com.google.cloud.speech.v1.AudioRequest;
import com.google.cloud.speech.v1beta1.RecognitionAudio;

import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -29,15 +29,15 @@
import java.net.URI;

/**
* Unit tests for {@link AudioRequestFactory}.
* Unit tests for {@link RecognitionAudioFactory}.
*/
@RunWith(JUnit4.class)
public class AudioRequestFactoryTest {
public class RecognitionAudioFactoryTest {

@Test
public void verifyBytesInSizeFromLocalFile() throws IOException {
URI uri = new File("resources/audio.raw").toURI();
AudioRequest audio = AudioRequestFactory.createRequest(uri);
RecognitionAudio audio = RecognitionAudioFactory.createRecognitionAudio(uri);

int numBytes = audio.getContent().toByteArray().length;

Expand All @@ -50,7 +50,7 @@ public void verifyBytesInSizeFromGoogleStorageFile() throws IOException {
String audioUri = "gs://cloud-samples-tests/speech/audio.raw";

URI uri = URI.create(audioUri);
AudioRequest audio = AudioRequestFactory.createRequest(uri);
RecognitionAudio audio = RecognitionAudioFactory.createRecognitionAudio(uri);

int numBytes = audio.getContent().toByteArray().length;

Expand Down