最終的なノートブック
Cloud Video Intelligence API を使うための準備
次のクイックスタートの 始める前に
の準備をします。
1~3はプロジェクトの設定なのでクイックスタートの指示通りですが、4,5は少し違います。
1. GCPプロジェクトを作成する
2. プロジェクトに対して課金が有効になっていることを確認する
1 で作ったプロジェクトが請求先アカウントにリンクされていることを確認します。
(課金の有効は自己責任でお願いします。)
3. Cloud Video Intelligence API を有効にする
を有効にする
ボタンを選択すると、プロジェクトを選択する画面が表示されるので、 1 で作ったプロジェクトを選択し、 続行
。
(以前、APIが有効にできない時がありましたが、プロジェクトを作り直したら問題なくできました。原因はわかっていません。)
4. サービスアカウントを作成する
まず、サービスアカウントとは、
サービス アカウントは、個々のエンドユーザーではなく、アプリケーションや仮想マシン(VM)に属している特別な Google アカウントです。アプリケーションはサービス アカウントを使用して、ユーザーの関与を必要とせずに Google のサービス API を呼び出すことができます。
たとえば、あるサービス アカウントで Compute Engine VM が実行される場合、必要なリソースへのアクセス権をそのアカウントに付与できます。こうしてサービス アカウントはサービスの ID となり、サービス アカウントの権限はサービスがアクセスできるリソースを制御します。
サービスアカウントの権限を設定することで、サービスがアクセスできるリソースを制御するので、
ここでは、 ストレージ
の 閲覧
権限のみを付与したサービスアカウントを作成したいと思います。
(動画を一度、 Google Cloud Storage
にアップロードして、そこから読み込んでもらうため。)
クイックスタートのリンクから作成すると、原因はわからなかったのですが、うまくいかなかったので、
-
サービス アカウント – IAM と管理 – Google Cloud Platform から
+ サービスアカウントを作成
を選択
-
サービスアカウント名
を入力し、作成
を選択
-
役割
からストレージ>ストレージオブジェクト閲覧者
を選択 -
続行
を選択
-
キーの作成
から作成
を選択
- ポップアップと共に、JSONファイルをダウンロード
環境変数の設定をする
JSONファイルのファイルパスを指定する必要があるため、クイックスタートとでは環境変数を設定していますが、
ここでは、Colaboratory上から直接パスを指定するので、設定は不要です。
動画を Google Cloud Storage にアップロードする
ストレージ ブラウザ – Storage – Google Cloud Platform にアクセスし、 バケットの作成
を選択します。
バケットの名前を入力し、 作成
を選択します。
(ここでは、リージョンなどは気にしていません。)
バケットが作成できたら、動画をアップロードします。
バケット直下に dog.mp4
をアップロードしました。
動画サイズなどについて
ストレージの容量やダウンロード容量の無料枠に気をつけてください。
Cloud Storage の料金 | Cloud Storage | Google Cloud
Colaboratory 上でノートブックを作る
Colaboratory 上で、
-
ファイル
>Python 3 の新しいノートブック
から新しいノートブックを作ります。
Cloud Video Intelligence API で動画を解析する
Cloud Video Intelligence API の Python パッケージをインストールする
Cloud Video Intelligence API
の Python パッケージをインストールします。
!pip install -U google-cloud-videointelligence
サービスアカウントの認証情報をアップロードする
サービスアカウント作成時にダウンロードした、JSON ファイルを Colaboratoryの左ペインの ファイル
からアップロードします。
認証情報から証明書を作成する
import json
from google.oauth2 import service_account
service_account_key_name = <JSON ファイル名>
info = json.load(open(service_account_key_name))
creds = service_account.Credentials.from_service_account_info(info)
クライアントを作成する
証明書をここで、指定してクライアントを作成します。
from google.cloud import videointelligence
video_client = videointelligence.VideoIntelligenceServiceClient(credentials=creds)
動画の場所を指定する
今回はバケット直下に動画ファイルをアップロードしたので、次のようになります。
video_url = "gs://<バケット名>/<動画ファイル名>"
動画を解析する
ここからは、クイックスタートと同じです。
features = [videointelligence.enums.Feature.LABEL_DETECTION]
operation = video_client.annotate_video(
video_url, features=features)
print('\nProcessing video for label annotations:')
result = operation.result(timeout=120)
print('\nFinished processing.')
# first result is retrieved because a single video was processed
segment_labels = result.annotation_results[0].segment_label_annotations
for i, segment_label in enumerate(segment_labels):
print('Video label description: {}'.format(
segment_label.entity.description))
for category_entity in segment_label.category_entities:
print('\tLabel category description: {}'.format(
category_entity.description))
for i, segment in enumerate(segment_label.segments):
start_time = (segment.segment.start_time_offset.seconds +
segment.segment.start_time_offset.nanos / 1e9)
end_time = (segment.segment.end_time_offset.seconds +
segment.segment.end_time_offset.nanos / 1e9)
positions = '{}s to {}s'.format(start_time, end_time)
confidence = segment.confidence
print('\tSegment {}: {}'.format(i, positions))
print('\tConfidence: {}'.format(confidence))
print('\n')
無事、解析結果が表示されました。
遭遇したエラー
PermissionDenied: 403 The caller does not have permission
IAM – IAM と管理 – Google Cloud Platform のページから、メンバー(サービスアカウント)に付与された権限を削除
した上で、サービスアカウントを作り直したら、うまく行きました
が、原因はわかっていません。