iT邦幫忙

2026 iThome 鐵人賽

DAY 4
2
Build on Google AI

給藥袋裝一張嘴:30 天用 Android 與 Google VLM 實作高齡語音用藥助手系列 第 4 篇

Day 04|金鑰不外洩、藥袋一眼看懂!Python 串接 Google Gemini VLM 實戰

  • 分享至 

  • xImage
  •  

✏️【本日實作紀錄:整合 .env 環境變數與首支 Gemini VLM 藥袋辨識腳本】

今天進入 AI 邏輯驗證階段,完成項目包含:

  1. 設定環境變數(.env)與版控安全(.gitignore) — 避免 API Key 意外推送至 GitHub 造成資安風險。
  2. 編寫 VLM 視覺辨識測試腳本(test_vlm.py) — 使用 Google GenAI SDK 載入實體藥袋照片並進行多模態推理。
  3. 驗證高齡友善 Prompt 提示詞工程 — 讓 Gemini 輸出繁體中文白話說明與結構化資訊。

一、 安全第一:環境變數管理與 .gitignore

開發 AI 專案時,API Key 不能硬編碼在程式碼中。推送到 GitHub 後,金鑰會被公眾掃描甚至遭有心人士盜用。

使用 python-dotenv 來管理機密資訊。

步驟 1:建立 .env 金鑰檔

在 PrescriptionVLM 專案根目錄下新建 .env 檔案,寫入第一天申請的金鑰:

GEMINI_API_KEY="去掉雙引號 將你的 GEMINI API KEY 貼在這裡"

步驟 2:設定 .gitignore 防護網

在專案根目錄新建(或檢查).gitignore 檔案,確保 .env 與虛擬環境不會被 Commit 上傳:

# 敏感金鑰與環境變數
.env

# Python 虛擬環境與快取
venv/
__pycache__/
*.pyc

# 測試用圖片/暫存檔
*.jpg
*.png

二、 編寫 Gemini VLM 藥袋辨識測試腳本(test_vlm.py)

在專案根目錄建立 test_vlm.py,撰寫調用 google-genai SDK 的測試邏輯:

import os
from dotenv import load_dotenv
from google import genai
from PIL import Image

# 1. 載入 .env 檔案中的環境變數
load_dotenv()

api_key = os.getenv("GEMINI_API_KEY")
if not api_key:
    raise ValueError("❌ 錯誤:找不到 GEMINI_API_KEY,請檢查 .env 設定!")

# 2. 初始化 Google GenAI Client
client = genai.Client(api_key=api_key)

def analyze_prescription(image_path):
    print(f"🔍 正在分析藥袋影像: {image_path} ...")
    
    # 載入藥袋照片 (使用 Pillow)
    image = Image.open(image_path)
    
    # 設計高齡友善的 Prompt 提示詞
    prompt = """
    你是一位專業且細心的藥師助手。請分析這張藥袋照片,並提取以下資訊:
    1. 藥品名稱(含學名或商品名)
    2. 用法與用量(如:一天幾次、一次幾顆、飯前/飯後)
    3. 重要警語與注意事項(如:不可與葡萄柚同食、會昏睡等)
    
    請用溫柔、白話且高齡友善的繁體中文說明,適合直接唸給長輩聽。
    """
    
    # 呼叫 Gemini 多模態視覺模型 (使用 gemini-3.6-flash)
    response = client.models.generate_content(
        model='gemini-3.6-flash',
        contents=[image, prompt]
    )
    
    print("\n✅ --- AI 藥袋解析結果 ---")
    print(response.text)

if __name__ == '__main__':
    # 測試圖片路徑
    test_image = "test_rx.jpg"
    
    if os.path.exists(test_image):
        analyze_prescription(test_image)
    else:
        print(f"⚠️ 請在專案根目錄放置一張名為 '{test_image}' 的測試藥袋圖片再執行測試!")

三、 測試驗證與成果執行

準備一張藥袋照片

找一張隨身的藥袋或網路上的藥袋照片,用滑鼠按住照片,直接拖拉到 Visual Studio Code 左側的「檔案總管 」空白區域放開,放入 PrescriptionVLM 資料夾中,並將此檔名命名為 test_rx.jpg。

執行測試腳本

確保終端機處於 (venv) 狀態下,輸入(Ctrl+C 可取消執行test_vlm.py):

python test_vlm.py

預期輸出成果

當 Gemini 成功列出藥名,並用白話中文寫出用法說明(如「阿公阿嬤,這個藥一天吃三次,飯後配溫開水」),代表 VLM 視覺辨識模型已串接成功。

四、 版本控制與提交 GitHub

測試成功後,將 Day 04 的程式碼提交至 GitHub:

git add .
git commit -m "保留雙引號 改填寫自己要記錄的標記 ex.鐵人賽第四天"
git push

五、 本日小結與明日預告

今天建立了安全防護(.env 搭配 .gitignore 保護 API Key),並撰寫了第一個 Python 腳本串接 Google Gemini VLM。透過實體藥袋圖片測試,驗證了 AI 能精準辨識藥名、劑量與服用天數,並轉化為高齡友善的說明。

明天(Day 05)將進行 Prompt 提示詞工程優化與 JSON 結構化輸出。除了生成給長輩聽的白話文,更要讓 AI 回傳標準 JSON 格式,方便後端寫入 SQLite 資料庫並觸發 LINE 自動化關懷推播!


上一篇
Day 03|萬丈高樓平地起!用 Python venv 與 Flask 打開 AI 後端的傳送門
下一篇
Day 05|治好 AI 的亂回答!用 Gemini Structured Output 強制輸出完美 JSON
系列文
給藥袋裝一張嘴:30 天用 Android 與 Google VLM 實作高齡語音用藥助手 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言