4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Colaboratory 上から Cloud Video Intelligence API を使い、動画を解析した結果を表示する。

Posted at

最終的なノートブック

解析する動画:
image.png

Cloud Video Intelligence API を使うための準備

次のクイックスタートの 始める前に の準備をします。
1~3はプロジェクトの設定なのでクイックスタートの指示通りですが、4,5は少し違います。

1. GCPプロジェクトを作成する

Screen Shot 2019-12-27 at 17.46.14.png

2. プロジェクトに対して課金が有効になっていることを確認する

1 で作ったプロジェクトが請求先アカウントにリンクされていることを確認します。
(課金の有効は自己責任でお願いします。)

3. Cloud Video Intelligence API を有効にする

を有効にする ボタンを選択すると、プロジェクトを選択する画面が表示されるので、 1 で作ったプロジェクトを選択し、 続行
(以前、APIが有効にできない時がありましたが、プロジェクトを作り直したら問題なくできました。原因はわかっていません。)

image.png

4. サービスアカウントを作成する

まず、サービスアカウントとは、

サービス アカウントは、個々のエンドユーザーではなく、アプリケーションや仮想マシン(VM)に属している特別な Google アカウントです。アプリケーションはサービス アカウントを使用して、ユーザーの関与を必要とせずに Google のサービス API を呼び出すことができます。

たとえば、あるサービス アカウントで Compute Engine VM が実行される場合、必要なリソースへのアクセス権をそのアカウントに付与できます。こうしてサービス アカウントはサービスの ID となり、サービス アカウントの権限はサービスがアクセスできるリソースを制御します。

サービス アカウント  |  Cloud IAM のドキュメント  |  Google Cloud より

サービスアカウントの権限を設定することで、サービスがアクセスできるリソースを制御するので、
ここでは、 ストレージ閲覧 権限のみを付与したサービスアカウントを作成したいと思います。
(動画を一度、 Google Cloud Storage にアップロードして、そこから読み込んでもらうため。)

クイックスタートのリンクから作成すると、原因はわからなかったのですが、うまくいかなかったので、

image.png

  • サービスアカウント名 を入力し、 作成 を選択

image.png

  • 役割 から ストレージ>ストレージオブジェクト閲覧者 を選択
  • 続行 を選択

image.png

  • キーの作成 から 作成 を選択

image.png

  • ポップアップと共に、JSONファイルをダウンロード

image.png

環境変数の設定をする

JSONファイルのファイルパスを指定する必要があるため、クイックスタートとでは環境変数を設定していますが、
ここでは、Colaboratory上から直接パスを指定するので、設定は不要です。

動画を Google Cloud Storage にアップロードする

ストレージ ブラウザ – Storage – Google Cloud Platform にアクセスし、 バケットの作成 を選択します。

image.png

バケットの名前を入力し、 作成 を選択します。
(ここでは、リージョンなどは気にしていません。)

image.png

バケットが作成できたら、動画をアップロードします。

image.png

バケット直下に dog.mp4 をアップロードしました。

動画サイズなどについて

ストレージの容量やダウンロード容量の無料枠に気をつけてください。

image.png

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の左ペインの ファイル からアップロードします。

image.png

認証情報から証明書を作成する

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)

image.png

クライアントを作成する

証明書をここで、指定してクライアントを作成します。

from google.cloud import videointelligence

video_client = videointelligence.VideoIntelligenceServiceClient(credentials=creds)

動画の場所を指定する

今回はバケット直下に動画ファイルをアップロードしたので、次のようになります。

video_url = "gs://<バケット名>/<動画ファイル名>"

image.png

動画を解析する

ここからは、クイックスタートと同じです。

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')

無事、解析結果が表示されました。

image.png

遭遇したエラー

PermissionDenied: 403 The caller does not have permission

IAM – IAM と管理 – Google Cloud Platform のページから、メンバー(サービスアカウント)に付与された権限を削除
した上で、サービスアカウントを作り直したら、うまく行きました
が、原因はわかっていません。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?