這是一個基於 Raspberry Pi 與多執行緒架構的智慧健康監測系統。本專案整合了電腦視覺與多種硬體感測器,能夠即時監控使用者的坐姿角度、與螢幕的距離,以及水杯的水量,並在需要時透過語音發出提醒。
- 即時坐姿偵測:使用 OpenCV 與 MediaPipe 擷取人體骨架,計算耳朵與肩膀的夾角。若前傾角度大於 25 度,系統將發出「請坐直」的語音警告。系統內建清空影像緩衝區的機制,確保影像辨識維持極低延遲。
- 距離監測:透過 HC-SR04 超音波感測器即時量測使用者與螢幕的距離。若距離小於 65 公分,將提醒「請離螢幕遠點」。
- 智慧飲水提醒:結合 HX711 測重模組與重量感測器,動態追蹤水杯重量。當偵測到重量過低時,會自動提醒「請儘快加水」。
- 多執行緒運作:感測器資料讀取、影像處理、OLED 顯示與語音輸出皆在獨立的執行緒中運行,確保系統效能穩定,不會互相阻塞。
- Web 影像串流與本機顯示:提供 Flask Web 介面以查看即時攝影機畫面及骨架繪製結果;本機端則配備 SSD1306 OLED 螢幕,隨時顯示當前數值狀態。
本專案運行於 Raspberry Pi (推薦 3B+ 或以上版本)。請依照以下 BCM 腳位連接您的硬體設備:
| 硬體模組 | 腳位名稱 | RPi BCM Pin | 說明 |
|---|---|---|---|
| HX711 測重模組 | DT | GPIO 5 | 資料腳位 |
| SCK | GPIO 6 | 時脈腳位 | |
| 按鈕開關 | Button | GPIO 7 | 用於確認放置空杯並開始系統 |
| HC-SR04 超音波 | Trig | GPIO 23 | 發射端 |
| Echo | GPIO 24 | 接收端 | |
| SSD1306 OLED | SDA/SCL | I2C Pins | 透過 I2C 介面連接 |
| USB 攝影機 | - | USB Port | 建議解析度設定為 640x360 以減輕運算負擔 |
| 音訊輸出 | - | 3.5mm/USB/Bluetooth | 需連接喇叭以播放語音提示 |
專案要求 Python 3.9.25 環境。推薦使用 uv 進行套件與虛擬環境管理。
語音播放功能依賴於作業系統底層的 mpg123 套件:
sudo apt-get update
sudo apt-get install mpg123使用 uv 初始化虛擬環境並安裝所需套件:
uv venv --python 3.9.25
source .venv/bin/activate
uv pip install -e .(若您使用傳統 pip,亦可直接查閱 pyproject.toml 中的 dependencies 列表進行安裝)
- 啟動系統:
確認所有硬體連接無誤後,執行主程式:
python src/app.py
- 初始化測重模組: 啟動後,請觀察 OLED 螢幕,當顯示「Please init the hx711」時,請確保秤盤上沒有任何物品,系統將自動進行歸零校正。
- 放置空杯與確認: 歸零完成後,螢幕會顯示「Please press button and place an empty cup」。請將您平時使用的空水杯放上秤盤,並按下連接於 GPIO 7 的按鈕。系統會記錄空杯重量作為基準。
- 開始監測: 系統將開始即時監測。您可以透過 OLED 螢幕查看當前的重量、角度與距離資訊。
- 開啟 Web 介面:
在同網域的裝置上,打開瀏覽器並輸入
http://<Raspberry_Pi_IP>:5000/,即可觀看即時的姿勢偵測影像串流。
├── src/
│ ├── app.py # 系統主程式與 Flask 路由 (包含影像處理邏輯)
│ ├── audio.py # 文字轉語音 (gTTS) 封裝模組
│ ├── data.py # 跨執行緒共享資料類別 (ThreadData)
│ ├── hx711_load_cell.py # HX711 測重模組控制與校正演算法
│ ├── ssd1306_display.py # OLED 顯示器控制模組 (具備無閃爍緩衝設計)
│ └── ultrasonic.py # HC-SR04 超音波距離換算模組
├── pyproject.toml # 專案設定與套件依賴清單
├── .python-version # Python 版本鎖定 (3.9.25)
└── .gitignore # 忽略的檔案與目錄設定