Gemini Pro Visionモデルを使用してGoogle Cloudにアップロードした動画を解析してみた

## ゴール
Gemini Pro Visionモデルを使用してGoogle Cloudにアップロードした動画を解析します。

## 環境
- Python 3.11.5
- Google Cloud Storage
- Google Cloud CLI

## 実装
### Google Cloudに動画をアップロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/7f6abc8e-f07f-669b-7734-a0c6d55618f7.png)

[Cloud Storageのバケットページ](https://console.cloud.google.com/storage/browser?hl=ja&_ga=2.252583305.1070058582.1702889144-1663059782.1699238715)に移動し、「作成」を選択します。

バケット名を入力し、「続行」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/f4f554e3-38d3-2d59-0e1e-f2f673d5f214.png)
　　
ロケーションタイプを選択し、「続行」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/1a73eb07-97b6-9edd-ce17-70433a380f5b.png)
　　
ストレージクラスを選択し、「続行」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/52b94e38-fed8-5d3d-8d4b-56e8c97ad4b5.png)
　　
オブジェクトのアクセスは、「このバケットに対する公開アクセス禁止を適用する」のチェックを外し、アクセス制御は「きめ細かい管理」を選択し、「続行」します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/6a9a3c3c-0a77-25bd-82ff-42fd9bb07848.png)
　　
保護方法を選択し、「作成」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/0ace7835-9a5f-f172-715f-5eb5b8b0a998.png)


解析する動画は[こちら](https://pixabay.com/ja/videos/%E3%83%92%E3%83%92-%E5%8B%95%E7%89%A9-%E3%82%B7%E3%83%A9%E3%83%9F-%E3%82%B5%E3%83%AB-17644/)です。
アップロードできる動画の長さの制限は2分となっています。
　　
先ほど作成したバケット画面で、「ファイルをアップロード」を選択し、ダウンロードした動画をアップロードしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/d2c688f9-9a94-7ceb-7d40-04bd94f64ead.png)
　　
アップロードした動画の右端の3点リーダーから「gsutil URLをコピー」を選択します。後ほどのPythonプログラムで子のURLは使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/5976de7e-bf5a-6062-9288-0ba76a8febff.png)

### Google Cloud CLIをインストールする
test.pyを作成し、以下のコマンドでgoogle-cloud-aiplatformをインストールします。

```terminal
pip install --upgrade google-cloud-aiplatform
```

以下を参考にGoogle Cloud CLIをインストールします。

https://cloud.google.com/sdk/docs/install?hl=ja

Google Cloud CLIのインストールが完了したら以下のコマンドを入力し、設定を進めます。

```terminal
gcloud init
```

googleアカウントは動画をアップロードしたアカウント、projectは動画をアップロードしたプロジェクトのIDを選択してください。プロジェクトIDはGoogle Cloudの「ダッシュボード」から確認できます。

### Pythonプログラムを実行する
test.pyに以下のコードを追加してください。

```test.py
import vertexai
from vertexai.preview.generative_models import GenerativeModel, Part

PROJECT_ID = "プロジェクトID"
LOCATION = "asia-northeast1"
RESOURCE_ID = "gemini-pro-vision"

vertexai.init(project=PROJECT_ID, location=LOCATION)

VIDEO_FILE = "先ほどコピーしたgsutil URL"

model = GenerativeModel(RESOURCE_ID)
response = model.generate_content(
    [
        "この動画を詳しく解説してください。",
        Part.from_uri(
            VIDEO_FILE,
            mime_type="video/mp4",
        ),
    ]
)

print(response)
```
　　
Pythonファイルを実行します。
実行結果は以下の通りです。

```test.py
candidates {
  content {
    role: "model"
    parts {
      text: " この動画には、3匹のヒヒが暗闇の中でこちらを凝視しています。中央のヒヒは毛づくろいをしており、左のヒヒは右 のヒヒの背中をかいています。右のヒヒは、こちらをじっと見つめています。"
    }
  }
  finish_reason: STOP
  safety_ratings {
    category: HARM_CATEGORY_HARASSMENT
    probability: NEGLIGIBLE
  }
  safety_ratings {
    category: HARM_CATEGORY_HATE_SPEECH
    probability: NEGLIGIBLE
  }
  safety_ratings {
    category: HARM_CATEGORY_SEXUALLY_EXPLICIT
    probability: NEGLIGIBLE
  }
  safety_ratings {
    category: HARM_CATEGORY_DANGEROUS_CONTENT
    probability: NEGLIGIBLE
  }
}
usage_metadata {
  prompt_token_count: 1039
  candidates_token_count: 58
  total_token_count: 1097
}
```
ヒヒであることはもちろん、毛づくろいやそれぞれのヒヒの視線の解説までしてくれています。


## 終わりに
お疲れ様でした！
以下のXアカウウントで情報発信も行っています！

https://twitter.com/t___tatsuki

## 参考文献

https://zenn.dev/harappa80/articles/vertexai_gemini