diff --git a/video/beta/README.md b/video/beta/README.md
index a77add90782..3615bf35a56 100644
--- a/video/beta/README.md
+++ b/video/beta/README.md
@@ -36,15 +36,6 @@ export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your-project-credentials.json
After you have authorized, you can analyze videos.
-Detect Faces' Bounding Boxes
-```
-mvn exec:java -DDetect -Dexec.args="faces-bounding-boxes gs://YOUR_BUCKET/YOUR_VIDEO.mp4"
-```
-
-Detect Faces' Emotions
-```
-mvn exec:java -DDetect -Dexec.args="faces-emotions gs://YOUR_BUCKET/YOUR_VIDEO.mp4"
-```
Video Transcription
```
diff --git a/video/beta/pom.xml b/video/beta/pom.xml
index ae129963c7c..683f378143a 100644
--- a/video/beta/pom.xml
+++ b/video/beta/pom.xml
@@ -40,7 +40,7 @@
com.google.cloud
google-cloud-video-intelligence
- 0.41.0-beta
+ 0.43.0-beta
diff --git a/video/beta/src/main/java/com/example/video/Detect.java b/video/beta/src/main/java/com/example/video/Detect.java
index 25512b7466e..5b77d5db9ea 100644
--- a/video/beta/src/main/java/com/example/video/Detect.java
+++ b/video/beta/src/main/java/com/example/video/Detect.java
@@ -20,13 +20,7 @@
import com.google.cloud.videointelligence.v1p1beta1.AnnotateVideoProgress;
import com.google.cloud.videointelligence.v1p1beta1.AnnotateVideoRequest;
import com.google.cloud.videointelligence.v1p1beta1.AnnotateVideoResponse;
-import com.google.cloud.videointelligence.v1p1beta1.EmotionAttribute;
-import com.google.cloud.videointelligence.v1p1beta1.FaceConfig;
-import com.google.cloud.videointelligence.v1p1beta1.FaceDetectionAnnotation;
-import com.google.cloud.videointelligence.v1p1beta1.FaceDetectionFrame;
-import com.google.cloud.videointelligence.v1p1beta1.FaceSegment;
import com.google.cloud.videointelligence.v1p1beta1.Feature;
-import com.google.cloud.videointelligence.v1p1beta1.NormalizedBoundingBox;
import com.google.cloud.videointelligence.v1p1beta1.SpeechRecognitionAlternative;
import com.google.cloud.videointelligence.v1p1beta1.SpeechTranscription;
import com.google.cloud.videointelligence.v1p1beta1.SpeechTranscriptionConfig;
@@ -39,7 +33,7 @@
public class Detect {
/**
- * Detects face's bounding boxes, emotions, and video transcription using the Video Intelligence
+ * Detects video transcription using the Video Intelligence
* API
* @param args specifies features to detect and the path to the video on Google Cloud Storage.
*/
@@ -64,7 +58,7 @@ public static void argsHelper(String[] args) throws Exception {
System.out.printf(
"\tjava %s \"\" \"\"\n"
+ "Commands:\n"
- + "\tfaces-bounding-boxes | faces-emotions | speech-transcription\n"
+ + "\tspeech-transcription\n"
+ "Path:\n\tA URI for a Cloud Storage resource (gs://...)\n"
+ "Examples: ",
Detect.class.getCanonicalName());
@@ -73,175 +67,11 @@ public static void argsHelper(String[] args) throws Exception {
String command = args[0];
String path = args.length > 1 ? args[1] : "";
- if (command.equals("faces-bounding-boxes")) {
- analyzeFacesBoundingBoxes(path);
- }
- if (command.equals("faces-emotions")) {
- analyzeFaceEmotions(path);
- }
if (command.equals("speech-transcription")) {
speechTranscription(path);
}
}
-
- // [START video_face_bounding_boxes]
- /**
- * Detects faces' bounding boxes on the video at the provided Cloud Storage path.
- *
- * @param gcsUri the path to the video file to analyze.
- */
- public static void analyzeFacesBoundingBoxes(String gcsUri) throws Exception {
- // Instantiate a com.google.cloud.videointelligence.v1p1beta1.VideoIntelligenceServiceClient
- try (VideoIntelligenceServiceClient client = VideoIntelligenceServiceClient.create()) {
- // Set the configuration to include bounding boxes
- FaceConfig config = FaceConfig.newBuilder()
- .setIncludeBoundingBoxes(true)
- .build();
-
- // Set the video context with the above configuration
- VideoContext context = VideoContext.newBuilder()
- .setFaceDetectionConfig(config)
- .build();
-
- // Create the request
- AnnotateVideoRequest request = AnnotateVideoRequest.newBuilder()
- .setInputUri(gcsUri)
- .addFeatures(Feature.FACE_DETECTION)
- .setVideoContext(context)
- .build();
-
- // asynchronously perform facial analysis on videos
- OperationFuture response =
- client.annotateVideoAsync(request);
-
- System.out.println("Waiting for operation to complete...");
- boolean faceFound = false;
- // Display the results
- for (VideoAnnotationResults results : response.get(900, TimeUnit.SECONDS)
- .getAnnotationResultsList()) {
- int faceCount = 0;
- // Display the results for each face
- for (FaceDetectionAnnotation faceAnnotation : results.getFaceDetectionAnnotationsList()) {
- faceFound = true;
- System.out.println("\nFace: " + ++faceCount);
- // Each FaceDetectionAnnotation has only one segment.
- for (FaceSegment segment : faceAnnotation.getSegmentsList()) {
- double startTime = segment.getSegment().getStartTimeOffset().getSeconds()
- + segment.getSegment().getStartTimeOffset().getNanos() / 1e9;
- double endTime = segment.getSegment().getEndTimeOffset().getSeconds()
- + segment.getSegment().getEndTimeOffset().getNanos() / 1e9;
- System.out.printf("Segment location: %.3fs to %.3f\n", startTime, endTime);
- }
- // There are typically many frames for each face,
- try {
- // Here we process only the first frame.
- if (faceAnnotation.getFramesCount() > 0) {
- FaceDetectionFrame frame = faceAnnotation.getFrames(0); // get the first frame
- double timeOffset = frame.getTimeOffset().getSeconds()
- + frame.getTimeOffset().getNanos() / 1e9;
- System.out.printf("First frame time offset: %.3fs\n", timeOffset);
- // print info on the first normalized bounding box
- NormalizedBoundingBox box = frame.getAttributes(0).getNormalizedBoundingBox();
- System.out.printf("\tLeft: %.3f\n", box.getLeft());
- System.out.printf("\tTop: %.3f\n", box.getTop());
- System.out.printf("\tBottom: %.3f\n", box.getBottom());
- System.out.printf("\tRight: %.3f\n", box.getRight());
- } else {
- System.out.println("No frames found in annotation");
- }
- } catch (IndexOutOfBoundsException ioe) {
- System.out.println("Could not retrieve frame: " + ioe.getMessage());
- }
- }
- }
-
- if (!faceFound) {
- System.out.println("No faces detected in " + gcsUri);
- }
- }
- }
- // [END video_face_bounding_boxes]
-
- // [START video_face_emotions]
- /**
- * Analyze faces' emotions over frames on the video at the provided Cloud Storage path.
- *
- * @param gcsUri the path to the video file to analyze.
- */
- public static void analyzeFaceEmotions(String gcsUri) throws Exception {
- // Instantiate a com.google.cloud.videointelligence.v1p1beta1.VideoIntelligenceServiceClient
- try (VideoIntelligenceServiceClient client = VideoIntelligenceServiceClient.create()) {
- // Set the configuration to include bounding boxes
- FaceConfig config = FaceConfig.newBuilder()
- .setIncludeEmotions(true)
- .build();
-
- // Set the video context with the above configuration
- VideoContext context = VideoContext.newBuilder()
- .setFaceDetectionConfig(config)
- .build();
-
- // Create the request
- AnnotateVideoRequest request = AnnotateVideoRequest.newBuilder()
- .setInputUri(gcsUri)
- .addFeatures(Feature.FACE_DETECTION)
- .setVideoContext(context)
- .build();
-
- // asynchronously perform facial analysis on videos
- OperationFuture response =
- client.annotateVideoAsync(request);
-
- System.out.println("Waiting for operation to complete...");
- boolean faceFound = false;
- // Display the results
- for (VideoAnnotationResults results : response.get(600, TimeUnit.SECONDS)
- .getAnnotationResultsList()) {
- int faceCount = 0;
- // Display the results for each face
- for (FaceDetectionAnnotation faceAnnotation : results.getFaceDetectionAnnotationsList()) {
- faceFound = true;
- System.out.println("\nFace: " + ++faceCount);
- // Each FaceDetectionAnnotation has only one segment.
- for (FaceSegment segment : faceAnnotation.getSegmentsList()) {
- double startTime = segment.getSegment().getStartTimeOffset().getSeconds()
- + segment.getSegment().getStartTimeOffset().getNanos() / 1e9;
- double endTime = segment.getSegment().getEndTimeOffset().getSeconds()
- + segment.getSegment().getEndTimeOffset().getNanos() / 1e9;
- System.out.printf("Segment location: %.3fs to %.3f\n", startTime, endTime);
- }
-
- try {
- // Print each frame's highest emotion
- for (FaceDetectionFrame frame : faceAnnotation.getFramesList()) {
- double timeOffset = frame.getTimeOffset().getSeconds()
- + frame.getTimeOffset().getNanos() / 1e9;
- float highestScore = 0.0f;
- String emotion = "";
- // Get the highest scoring emotion for the current frame
- for (EmotionAttribute emotionAttribute : frame.getAttributes(0).getEmotionsList()) {
- if (emotionAttribute.getScore() > highestScore) {
- highestScore = emotionAttribute.getScore();
- emotion = emotionAttribute.getEmotion().name();
- }
- }
- System.out.printf("\t%4.2fs: %14s %4.3f\n", timeOffset, emotion, highestScore);
- }
-
- } catch (IndexOutOfBoundsException ioe) {
- System.out.println("Could not retrieve frame: " + ioe.getMessage());
- }
- }
- }
-
- if (!faceFound) {
- System.out.println("No faces detected in " + gcsUri);
- }
- }
- }
- // [END video_face_emotions]
-
// [START video_speech_transcription]
/**
* Transcribe speech from a video stored on GCS.
@@ -268,7 +98,7 @@ public static void speechTranscription(String gcsUri) throws Exception {
.setVideoContext(context)
.build();
- // asynchronously perform facial analysis on videos
+ // asynchronously perform speech transcription on videos
OperationFuture response =
client.annotateVideoAsync(request);
diff --git a/video/beta/src/test/java/com/example/video/DetectIT.java b/video/beta/src/test/java/com/example/video/DetectIT.java
index d6d78e5adc5..e4de93f34b0 100644
--- a/video/beta/src/test/java/com/example/video/DetectIT.java
+++ b/video/beta/src/test/java/com/example/video/DetectIT.java
@@ -34,7 +34,7 @@ public class DetectIT {
private ByteArrayOutputStream bout;
private PrintStream out;
- static final String FACES_FILE_LOCATION =
+ static final String FILE_LOCATION =
"gs://java-docs-samples-testing/video/googlework_short.mp4";
@Before
@@ -49,27 +49,9 @@ public void tearDown() {
System.setOut(null);
}
- @Test
- public void testFacesBoundingBoxes() throws Exception {
- String[] args = {"faces-bounding-boxes", FACES_FILE_LOCATION};
- Detect.argsHelper(args);
- String got = bout.toString();
-
- assertThat(got).contains("Top:");
- }
-
- @Test
- public void testFacesEmotions() throws Exception {
- String[] args = {"faces-emotions", FACES_FILE_LOCATION};
- Detect.argsHelper(args);
- String got = bout.toString();
-
- assertThat(got).contains("CONCENTRATION");
- }
-
@Test
public void testSpeechTranscription() throws Exception {
- String[] args = {"speech-transcription", FACES_FILE_LOCATION};
+ String[] args = {"speech-transcription", FILE_LOCATION};
Detect.argsHelper(args);
String got = bout.toString();