geminiのurl_context機能について
- NISHIO KEI
- 8月26日
- 読了時間: 5分
更新日:10月2日
1.はじめに
url_contextがGAになり、便利だったので紹介します。
2.Google Patentsでの利用
特許で言えば一番使うと思われるgoogle patentsのURLを指定して取得するもの。今までだとうまく内容を取れなかったのですが、url_context機能を使えば無事に取得できました。複数URL指定もできました。
例えばこんな感じ。
以下の URL を参考にしてください
* US11022820B2: {url_1}
の部分がミソです。
#@title 関数
url_1 = "https://patents.google.com/patent/US10592739B2/" # @param {"type":"string"}
from google import genai
from google.genai.types import Tool, GenerateContentConfig, HttpOptions, UrlContext
client = genai.Client(api_key=GEMINI_API_KEY)
model_id = "gemini-2.5-pro"
url_context_tool = Tool(
url_context = UrlContext
)
contents = f"""
* 指定した特許文章から、システムが収集する物理情報(偏光、位相、振幅など)と生体情報(瞳孔角膜の変化など)を抽出してください。
* さらに、その2つの関係性を分析してください。
* 必ず日本語で出力してください。
以下の URL を参考にしてください。
* US11022820B2: {url_1}
"""
contents += """
*下記のようなフォーマットで出力してください。####は例示です。
# 物理情報
* ####
* ####
# 生体情報
* ####
* ####
# 両者の関係を示すフロー図(graphviz形式)
digraph G {グラフ全体の見た目を設定 graph [ layout = dot, rankdir = TB, // 上から下へ描画 fontname = "Helvetica", // フォントを指定 fontsize = 12, label = "物理情報と生体情報の関係性フローチャート", labelloc = t // ラベルを一番上に配置 ]; // ノード(各ステップ)のデフォルトスタイルを設定 node [ shape = box, style = "rounded,filled", fontname = "Helvetica", fontsize = 10 ]; // エッジ(矢印)のデフォルトスタイルを設定 edge [ fontname = "Helvetica", fontsize = 9 ]; // ノードの定義 A [label="スタート\nデバイス装着", shape=ellipse, fillcolor="#cde4ff"]; B [label="デバイスが電磁界を生成", fillcolor="#ffffff"]; D [label="瞼の重なりや涙液膜の状態\n【生体情報】", fillcolor="#d4edda"]; E [label="電磁界と生体組織が\n相互作用", fillcolor="#ffffff"]; F [label="電気的な特性が変化\n【物理情報】\n(抵抗・静電容量など)", fillcolor="#fff3cd"]; G [label="物理情報の変化を\n検知・分析", shape=diamond, fillcolor="#ffe8cc"]; H [label="ユーザーの状態を推定\n【生体情報の推定】\n(視線方向、眼の乾燥レベルなど)", fillcolor="#ffffff"]; I [label="推定結果に基づき、\nレンズの機能を調整\n【デバイスの動作】\n(光学的パワーの変更など)", fillcolor="#f8d7da"]; J [label="エンド\nユーザーの視覚を最適化", shape=ellipse, fillcolor="#cde4ff"]; // サブグラフでプロセスをグループ化 subgraph cluster_device { label = "デバイス内部のプロセス"; style = filled; color = "#f5f5f5"; B; G; I; } subgraph cluster_interaction { label = "眼とデバイスの相互作用"; style = "dashed"; D; E; F; H; } // ノード間の繋がりを定義 A -> B; B -> D [label="ユーザーの\n眼の動き"]; D -> E; E -> F; F -> G; G -> H [label="分析結果"]; H -> I; I -> J;}
"""
response = client.models.generate_content(
model=model_id,
contents=contents,
config=GenerateContentConfig(
tools=[url_context_tool],
response_modalities=["TEXT"],
)
)
# Generated contents
print("===== content.parts =====")
for each in response.candidates[0].content.parts:
print(each.text)
# URLs retrieved for context
print("\n===== url_context_metadata =====")
print(response.candidates[0].url_context_metadata)レスポンス
===== content.parts =====
指定された特許文章(US10592739B2)から抽出した物理情報と生体情報、およびその関係性は以下の通りです。
### 物理情報
この特許技術は、ユーザーの視線を追跡(ゲイズトラッキング)するためのシステムに関するものです。システムは、光源(Illuminator)から特定のパターンの光(構造化光)をユーザーの眼に照射し、その反射光をカメラで捉えることで情報を収集します。
* **構造化光の反射**: 光源から照射された構造化光(赤外線または近赤外線)が、眼の表面(主に角膜)で反射した光。この反射光は「グリント(glint)」と呼ばれる複数の輝点として捉えられます。
* **反射光の形状(form)**: カメラで撮影されたグリント群の形状やパターン。特許では、特定の文字(例:「V」字型)を複数組み合わせた、ユニークで識別しやすいパターンが用いられます。
* **反射光の位置(position)**: カメラの撮像面における、各グリントの正確な位置情報。
* **光の波長**: ユーザーに不快感を与えないよう、主に目に見えない赤外線または近赤外線の波長が使用されます。
* **光の強度**: プロセッサによって調整可能な光の強さ。
### 生体情報
上記の物理情報を分析することで、以下のようなユーザーの生体情報を推定します。
* **視線の方向(gaze direction)**: 瞳孔の位置と、基準となる反射光(グリント)の位置関係を分析することで、ユーザーがどこを見ているかを特定します。
* **瞳孔の位置と形状**: 瞳孔の収縮や散大といった形状変化、およびグリント群との相対的な位置。
* **眼球の形状と向き**: 眼球は完全な球体ではないため、構造化光が角膜の各領域で異なる角度で反射されます。この反射光の歪みや形状の変化を分析することで、眼球そのものの形状や向きを推定します。
* **まぶたによる光の遮蔽**: ユーザーが目を細めたり、まばたきをしたりすると、まぶたによって一部のグリントが遮蔽されます。どのグリントが見えなくなったかを分析することで、まぶたの状態を把握します。
### 両者の関係を示すフロー図(graphviz形式)
物理情報と生体情報の関係性は、以下のようなフローで表すことができます。システムは物理的な光の反射をセンサーで捉え、それを解析することでユーザーの視線やまぶたの状態といった生体情報を推定し、ヘッドマウントディスプレイなどのデバイスの表示を最適化します。
```mermaid
graph TD
subgraph "デバイスの動作"
A[スタート: デバイス装着] --> B(光源が構造化光を照射);
B --> C{眼球表面で光が反射};
end
subgraph "物理情報と生体情報の相互作用"
D[眼球の向き、瞳孔の状態、まぶたの開き具合など<br><b>【生体情報】</b>] --> C;
C --> E[反射光(グリント)の<br>形状・位置が変化<br><b>【物理情報】</b>];
end
subgraph "システムによる解析と応用"
F(カメラが反射光の画像を撮影) --> G{プロセッサが画像を解析};
E --> F;
G --> H[視線方向、眼球の形状などを推定<br><b>【生体情報の推定】</b>];
H --> I(推定結果に基づき<br>表示内容などを調整);
I --> J[エンド: ユーザー体験の最適化];
end
style A fill:#cde4ff,stroke:#333,stroke-width:2px
style J fill:#cde4ff,stroke:#333,stroke-width:2px
style D fill:#d4edda,stroke:#333,stroke-width:2px
style E fill:#fff3cd,stroke:#333,stroke-width:2px
style H fill:#d4edda,stroke:#333,stroke-width:2px
```
===== url_context_metadata =====
url_metadata=[UrlMetadata(
retrieved_url='https://patents.google.com/patent/US10592739B2/',
url_retrieval_status=<UrlRetrievalStatus.URL_RETRIEVAL_STATUS_SUCCESS: 'URL_RETRIEVAL_STATUS_SUCCESS'>
)]NoteBookLMのようなことをスクリプト上で実行できるのはありがたいですね。


コメント