Reputation: 155
I'm trying to use the videointelligence_v1p3beta1 API, but a 403 error occurs when I use this API.
403 The caller does not have permission
Using videointelligence API works fine, but v1p3beta1 asks for permission. I'm not sure how I can solve this problem.
I am using the discover_labels_streaming function of videointelligence_v1p3beta1 and would appreciate any help.
This code working well as for now.
def analyze_explicit_content_file(self, path):
from google.cloud import videointelligence
# [START video_analyze_explicit_content]
"""Detects explicit content from the GCS path to a video."""
video_client = videointelligence.VideoIntelligenceServiceClient()
features = [videointelligence.Feature.EXPLICIT_CONTENT_DETECTION]
with io.open(path, "rb") as movie:
input_content = movie.read()
operation = video_client.annotate_video(
request={"features": features, "input_content": input_content}
)
print("\nProcessing video for explicit content annotations:")
result = operation.result(timeout=90)
print("\nFinished processing.")
# Retrieve first result because a single video was processed
for frame in result.annotation_results[0].explicit_annotation.frames:
likelihood = videointelligence.Likelihood(frame.pornography_likelihood)
frame_time = frame.time_offset.seconds + frame.time_offset.microseconds / 1e6
print("Time: {}s".format(frame_time))
print("\tpornography: {}".format(likelihood.name))
# [END video_analyze_explicit_content]
But this code not working now.
def detect_labels_streaming_file(self, path):
# [START video_streaming_label_detection_beta]
from google.cloud import videointelligence_v1p3beta1 as videointelligence
# path = 'path_to_file'
client = videointelligence.StreamingVideoIntelligenceServiceClient()
# Set streaming config.
config = videointelligence.StreamingVideoConfig(
feature=(videointelligence.StreamingFeature.STREAMING_LABEL_DETECTION)
)
# config_request should be the first in the stream of requests.
config_request = videointelligence.StreamingAnnotateVideoRequest(
video_config=config
)
# Set the chunk size to 5MB (recommended less than 10MB).
chunk_size = 5 * 1024 * 1024
# Load file content.
stream = []
with io.open(path, "rb") as video_file:
while True:
data = video_file.read(chunk_size)
if not data:
break
stream.append(data)
def stream_generator():
yield config_request
for chunk in stream:
yield videointelligence.StreamingAnnotateVideoRequest(input_content=chunk)
requests = stream_generator()
# streaming_annotate_video returns a generator.
# The default timeout is about 300 seconds.
# To process longer videos it should be set to
# larger than the length (in seconds) of the stream.
responses = client.streaming_annotate_video(requests, timeout=600)
# Each response corresponds to about 1 second of video.
for response in responses:
# Check for errors.
if response.error.message:
print(response.error.message)
break
label_annotations = response.annotation_results.label_annotations
# label_annotations could be empty
if not label_annotations:
continue
for annotation in label_annotations:
# Each annotation has one frame, which has a timeoffset.
frame = annotation.frames[0]
time_offset = (
frame.time_offset.seconds + frame.time_offset.microseconds / 1e6
)
description = annotation.entity.description
confidence = annotation.frames[0].confidence
# description is in Unicode
print(
"{}s: {} (confidence: {})".format(time_offset, description, confidence)
)
# [END video_streaming_label_detection_beta]
Thank you. Warm regards.
Upvotes: 1
Views: 78