Google AI Gemini を使って人を判別してみた

# 概要

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/3da301e7-8733-e712-f516-91c025578406.png' width=70%>

今回 Google の生成 AI である Gemini を使ってみました。
機能のひとつでもある画像への質問をやってみたので紹介します。

**環境** MAC
**開発** Flutter
**google_generative_ai** 0.4.4 (2024/8)

# Google AI Studio で API key を取得

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/91f53e07-d66f-a60b-f01b-3e60bf791f0e.png' width=70%>
https://aistudio.google.com/app/apikey

使用するためには API key というものが必要です。
Google AI Studio に行きます（また新しいのが出てきた）
左上にある [Get API key] を押して控えます。
注意
API_KEY は Github に保存しないでください。　

無料枠と従量課金があります。個人でテストする分には無料枠で十分そうです。
Gemini 1.5 Flash 無料枠
15 RPM（１分あたりのリクエスト数）
100 万 TPM（１分あたりのトークン数）
1,500 RPD（１日あたりのリクエスト数）
1 時間あたり最大 100 万トークンのストレージが無料

# ソースコードの一部
以下はソースコードの一部です。かなりシンプルに使えます。
以前に作った Google MLKit ＋ Tensor Flow ではパラメーターの解析なども必要でした。

```
import 'package:google_generative_ai/google_generative_ai.dart';

class _MainScreenState extends State<MainScreen> {
  String prompt = "Are they the same person?";
  File? imageFile1;
  File? imageFile2;

  Future<void> onGenerate() async {
    final model = GenerativeModel(model: 'gemini-1.5-flash', apiKey: apiKey);
    final bytes1 = await imageFile1!.readAsBytes();
    final bytes2 = await imageFile2!.readAsBytes();
    final content = [
      Content.multi([
        TextPart(prompt),
        DataPart('image/png', bytes1),
        DataPart('image/png', bytes2),
      ])
    ];
    final res = await model.generateContent(content);
    setState(() {
      response = res.text ?? 'none';
    });
  }
}
```

↓ 今回のソースの全部は Github にあります。
https://github.com/koji4104/flutter_google_ai_gemini

## MAC でエラー
実行しようとするとエラーが出ました。その対処法です。
```
flutter: -- ClientException with SocketException: Connection failed (OS Error: Operation not permitted, errno = 1), address = generativelanguage.googleapis.com, port = 443, uri=https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent
Application finished.
```

解決方法
macos/Runner/DebugProfile.entitlements に以下を追記します。

```
<key>com.apple.security.network.client</key>
<true/>
```

# 人を判別してみた
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/fc8498cb-728a-7788-c7f2-10d3dad41dea.png' width=70%>

そらそうよ (´・ω・`)

## 他の人も参戦
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/564534a9-4287-c2a4-251d-53ef1491fa78.png' width=70%>

ほんまか！？

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/a9a15af4-64db-9dd2-6e0d-c755231d65b5.png' width=70%>

適当なこと言ってんじゃないよ！

## 質問を変えてみた

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/5e871058-e39f-c028-63db-2001e0f418fb.png' width=70%>
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253995/9b340c93-7223-1703-4cd5-cd97a6d0dced.png' width=70%>

質問を変えてその特徴を聞いてみました。応用すれば何かに使えそうな気がします。

# 今回はモデルがいらない

以前は Tensor Flow を使ってモデルを作成していました。
**モデルの作成はめちゃくちゃ面倒です。**
モデルの作成にはトレーニング画像が各100枚以上必要です。しかし今回はモデルを作ってないのです。もうモデル職人もいらない時代になるのでしょうか。

# まとめ
Google AI Gemini を使って画像解析を行いました。
今回 AI Studio という新しいものが出てきました。AWS も GCP もどんどん新しいものが登場します。めげずにQiitaで頑張りたいと思います。

生成AIというとまさに生成に目が行きがちですが、今回のように解析もできちゃいます。日本語も使えます。使い方次第では何かできそうな気がします。

これには期待が持てます。機械学習モデルの作成が不要でコードの量も圧倒的に少ない。しかし作りやすい分ライバルも増えるでしょう。その中で中小企業の私は隙間産業を狙っていきたいと思います。