こんにちは。新里です。
Google Geminiが最近は色々と出してきていて、触ってみたくなってきました。そこで、Gemini Provision API (マルチモーダル)を使って画像の判別をしてみました。
目次
ワインのラベル判定
勢いでWeb上からワインのラベルをアップロードすると、対象のワインの情報を取得してくる物を作ってみました。プログラムに要した時間は1時間もかからない程度でした。
これはGoogle AI Studioが便利だった…というのもありますね。

ローカルPCからワインのラベルがある画像をアップロードすると、対象のワイン情報を取得するものです。サクッと作ったついでに、GMOインターネットグループが2023年に行っていた「AIしあおうぜ」コンテストに出してみたら受賞にはなりませんでしたが、ピックアップ作品としてチョイスして頂きました。
Google AI Studioが便利
Google AI Studioは現在のところ英語版しかありませんが、いまの所は無料で使えるのでプロンプトやAPIを実験してみるにはお手軽な環境ですね。無料期間が2024年の初頭までみたいなので、いまのうちに使って遊んでみるのも良いです。

Google AI Studioの便利な所が、右上にある「Get code」から各種言語、Google Colabへのリンクもあって、プロンプトでテストしてみた内容をいきなりコード・Google Colab上で実際に動かすことが出来るのがめちゃくちゃ便利でした。
というのもあって、冒頭の1時間で実装できたというのも、この機能があってこそ…というのもあります。この辺のコードに展開する部分は他のサービスでは無いかなーと感じていたり、いかにもGoogleといった感じですね。

ここで生成されたコードを使うと簡単に自分のコードに入れ込めますね。僕の場合、フロントエンドはVue、バックエンドはPythonで作っていたので、組み込んだコードはこんな感じになりました。
class LabelImageView(APIView):
def post(self, request):
file = request.FILES['image']
genai.configure(api_key="your key")
# Set up the model
generation_config = {
"temperature": 0.4,
"top_p": 1,
"top_k": 32,
"max_output_tokens": 4096,
}
safety_settings = [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
}
]
model = genai.GenerativeModel(model_name="gemini-pro-vision",
generation_config=generation_config,
safety_settings=safety_settings)
image_parts = [
{
"mime_type": "image/png",
"data": file.read()
},
]
prompt_parts = [
"貴方はプロのソムリエです。この画像から銘柄・ビンテージ・畑名・生産者・ワインの説明を取得してきてください。結果はJSON形式で日本語のJSONにまとめてお願いします。\n\n",
image_parts[0],
]
response = model.generate_content(prompt_parts)
json_text = response.text
json_text = json_text.replace('```json', '')
json_text = json_text.replace('```', '')
data = json.loads(json_text)
return JsonResponse(data, safe=False)
PoCなので出力されたコードをほぼ、そのまま使っても全然普通に動きました。画僧ファイルを受け取ってGemini APIに投げているだけですね。最後に謎のreplaceをしているのは、LLMの応答としてそのままjson textを使えなかったので、jsonとして使えるように整形しています。
実は過去にも…
以前にもワインのラベル判定は実験的に検証をしていました。
ワインでもいかが? -Vol.02
この時は特徴点を使ったlabeling、近隣探索などなど…検証を行ってきましたが、うまくヒットさせることが難しかったでした。また、他のマルチモーダルは日本語や多言語が入ってくると、識字率が一気に下がってしまう問題もあります。多言語の文字を認識させるというは、なかなかハードルが高いですね。
Google Vision APIはOCRでも良いパフォーマンスを出しているというのもあって、この手の画像の中の文字認識をマルチモーダルとして扱う場合でも、非常によいパフォーマンスを出してくれました。
ただし、必ずしもラベルを正しく認識しているか?というとそうでもありませんでした。実際の画像とマルチモーダルが出してくる内容の差異を埋めるのは人の役目というわけです。
他の画像では?
他にもGeminiを使ってレシートを読み込みできるか?というのも試してみました。インボイス登録番号をレシートから判別して、実在性をチェックしてデータとして自動保存できるのでは?と。

レシートを色々と何枚か実験的に使ってみましたが、他のマルチモーダルで日本語が入ってきたり、この画像のように濡れ染みがあっても認識できるパフォーマンスを発揮できるのは、現時点では他にはありませんでした。

まさかここまで認識できるとは、かなり驚きです。
マルチモーダルの利活用
単純なOCRだけでは難しい処理がマルチモーダルLLMだと可能だと分かりました。従来は画像の中にある文字を読み取るだけでしたが、コンテキスト・意味がある物として読み取ることが出来る点が大きく違いますね。
画像の要素・コンテキストをプログラムが処理しやすい形式に変換するコンバーターとして、マルチモーダルLLMを使うという方法もアリなのかもしれません。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(608)
-
イベント(242)
-
カルチャー(61)
-
デザイン(78)
TAG
- 5G
- Active Directory
- AI
- AI for DevOps
- AI TALK
- AI 機械学習強化学習
- AI/機械学習
- AIO
- AIエージェント
- AIコーディング
- AIコーディングエージェント
- AIセキュリティ
- AI人財
- AI教育
- AI活用
- AI研究
- AI駆動
- Behind the Scenes
- BIT VALLEY
- blockchain
- ChatGPT
- ChatGPT Team
- Claude Code
- Claude Team
- cloudflare
- cloudnative
- CNDO
- CNDT
- CODE BLUE
- ConoHa
- ConoHa VPS
- ConoHa VPS MCP
- CSS
- CTF
- DEF CON
- DEF CON 34
- Designship
- developer
- DevRel
- DevSecOpsThon
- Docker
- DTF
- EDR
- Engineering Journey
- expert
- EXPERT CROSS
- GMO AI&ロボティクス商事
- GMO AIR
- GMO DESIGN AWARD
- GMO Developers Day
- GMO Developers Night
- GMO Flatt Security
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOインターネット
- GMOインターネットグループ
- GMOインターネットグループ陸上部
- GMOグローバルサイン
- GMOコネクト
- GMOサイバーセキュリティ byイエラエ
- GMOサイバーセキュリティbyイエラエ
- GMOデジキッズ
- GMOヒューマノイド・ラボ
- GMOブランドセキュリティ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOメイクショップ
- GMOメディア
- GMOロボッツ
- GMO大会議
- GMO天秤AI
- Go
- GPUクラウド
- GTB
- Hack-1グランプリ
- IETF
- iOS
- IoT
- ISUCON
- Japan Drone
- JapanDrone
- Java
- JJUG
- JSAI2026
- K8s
- Kaigi on Rails
- Kerberos
- Kids VALLEY
- LLM
- LLMO
- MCP
- MetaMask
- MySQL
- NFT
- OpenStack
- OSS
- Perl
- PHP
- PHPcon
- PHPerKaigi
- Python
- QUIC
- RFC
- RPA
- Ruby
- SECCON
- Selenium
- Spectrum Tokyo Meetup
- splunk
- SRE
- Takumi byGMO
- Terraform
- TypeScript
- UI/UX
- vibe
- VLA
- VPN
- VPS
- VS Code
- WebRTC
- Webアプリケーション開発
- XR
- XSS
- Yoitoi Summit
- ZTNA
- アウトプット
- アドベントカレンダー
- イベントレポート
- インターンシップ
- インハウス
- インフラ
- エキスパート制度
- エキスパート座談会
- エンジニア採用
- エンジニア文化
- お名前.com
- クラウド
- クリエイターインタビュー
- クリエイティブ
- コーディングエージェント
- コンテナ
- コンピュータビジョン
- サイバーセキュリティ
- サマーインターン
- スクラム
- スパム対策
- スペシャリスト
- セキュリティ
- セキュリティカンファレンス
- セキュリティ人材
- センシング
- ソフトウェアサプライチェーン
- ソフトウェア開発
- チームビルディング
- データサイエンティスト
- デザイン
- ネットのセキュリティもGMO
- ハーネスエンジニアリング
- バイブコーディング
- バックエンド
- ヒューマノイド
- ヒューマノイドロボット
- フィジカルAI
- フルスタック開発
- プログラミング教育
- ブロックチェーン
- フロントエンド
- プロンプトインジェクション
- ペアリング暗号
- ペネトレーションテスト
- ホワイトハッカー
- ゆめみらいワーク
- リモートワーク
- レッドチーム
- レンタルサーバー
- ロボット
- ロボット導入
- ロボティクス
- ワークフロー
- 世界モデル
- 京大ミートアップ
- 京都大学
- 京都未踏
- 人型ロボット
- 人工知能
- 人工知能学会
- 光学
- 国際ロボット展
- 国際標準化
- 基礎
- 多拠点開発
- 大阪公立大学
- 宇宙セキュリティ
- 宮崎オフィス
- 強化学習
- 応用
- 技育プロジェクト
- 技術イベント
- 技術ブログ
- 技術同人誌
- 技術広報
- 技術書典
- 拡張知能
- 新卒
- 新卒研修
- 新規サービス開発
- 映像
- 映像クリエイター
- 映像制作
- 暗号
- 未踏
- 業務効率化
- 機械学習
- 次世代育成
- 決済
- 生成AI
- 産学連携
- 研究開発
- 社会実装
- 社内コミュニティ
- 組織横断
- 耐量子暗号
- 脆弱性診断
- 自動化
- 自律実行
- 若手人材育成
- 通信技術
- 開発組織
- 開発者
PICKUP
-
AI時代、人の心はどこで動くのか?GMO DESIGN AWARD 2026 審査員有馬トモユキ・清水勝太・広野萌が語る、作品に宿る 「作り手の理由」
デザイン
-
【エキスパート座談会 #1】生成AI活用の現在地:作業の自動化から「仕組みづくり」へ
技術情報
-
【第4回・AI TALK】GMOインターネットグループ・石丸智輝さんに聞く、AI時代に「人が書く意味」
技術情報
-
近畿圏の若手14名、半年の開発の起点に。「京都未踏」ブースト会議レポート
イベント
-
【第3回・AI TALK】GMOインターネットグループ・真次さんに聞く、ヒューマノイドの現在地と研究者としての挑戦
技術情報
-
【DEF CON 34 参加レポート】GMOインターネットグループが挑む、世界最高峰セキュリティカンファレンスの最前線
イベント