JianMiauandClaude Fable 5 c894b98e48 編譯前將照片縮至長邊 1280px,修正 iPhone 掃描無反應
根本原因:
管理頁把原始解析度照片(2244x4131)直接餵給 MindAR 編譯器,特徵檔隨圖片尺寸與張數暴漲。2 張時 iOS Safari 勉強可用,新增至 4 張重新編譯後,掃描頁的 WebGL 資源超出 iOS 上限,辨識引擎無聲失效——相機畫面正常但掃任何照片都沒反應;桌面 Chrome 資源上限較高所以不受影響。

影響:
NAS 部署(4 組配對)後 iPhone 完全無法辨識任何照片,服務等同不可用。

修法:
編譯前先在瀏覽器端把照片縮到長邊 1280px(canvas 縮圖後餵給編譯器),特徵檔由 4.05MB 降為 2.76MB。已用 Playwright 假相機對 NAS 實測,4 張照片皆可在 2 秒內辨識並播放對應影片;配對 aspect 仍以原圖計算,顯示比例不變。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 10:55:45 +08:00

photo-live 動態相片

把「照片」當成 key、「影片」當成 value 的 Web AR 服務。 用手機相機掃描照片,辨識成功後影片會貼齊照片的位置與角度覆蓋播放 (效果同小米相片印表機的動態照片功能)。

核心採用 MindAR(瀏覽器端影像追蹤), 手機不用安裝 App,開網頁就能用。

部署(NAS Docker

sudo docker compose up -d --build

啟動後:

頁面 網址 用途
動態相片管理 http://NAS的IP:3510/ 上傳照片+影片配對、編譯辨識特徵
動態相片掃描 https://NAS的IP:3511/ 手機開啟,掃描照片播放影片

Volume 對應(docker-compose.yml):

NAS 路徑 容器路徑 內容
/volume1/docker/photo-live /data 照片、影片、特徵檔(重建容器不會遺失)
/volume1/docker/certs /certs(唯讀) HTTPS 正式憑證

憑證

伺服器啟動時依序尋找憑證:

  1. 環境變數 SSL_KEY / SSL_CERT 指定的完整路徑
  2. /certs 目錄下的常見檔名組合:privkey.pem+fullchain.pemserver.key+server.crtkey.pem+cert.pem
  3. 都找不到就自動產生自簽憑證(瀏覽器會出現警告)

把 Synology 憑證(控制台 → 安全性 → 憑證 → 匯出)的 privkey.pemfullchain.pem 放進 /volume1/docker/certs 即可。注意:手機要用憑證對應的網域 連掃描頁(https://你的網域:3511/),用 IP 連的話憑證不會生效、仍會跳警告。 更換憑證後重啟容器:sudo docker compose restart

使用流程

  1. 桌機瀏覽器開管理頁,上傳一張照片與對應影片(可多組)。
  2. 按「重新編譯全部照片」。特徵編譯在瀏覽器端執行,每張照片約 10~30 秒, 完成後自動上傳到伺服器。新增或刪除配對後都要重新編譯。
  3. 手機開啟 https://NAS的IP:3511/,因為是自簽憑證,瀏覽器會警告 「連線不安全」→ 選「進階」→「仍要前往」。
  4. 按「開始掃描」並允許相機權限,對準實體照片(或螢幕上的照片)即可。

注意事項

  • 一定要用 HTTPS 開掃描頁:瀏覽器規定相機只能在安全連線下使用。 若 NAS 已有反向代理(如 Synology 的反向代理伺服器+正式憑證), 可以把網域用 HTTPS 指到容器的 3511 埠,體驗更好(沒有憑證警告)。
  • 照片建議:紋理豐富、對比清楚的照片辨識效果最好; 大面積純色、過暗或重複花紋的照片不易辨識。
  • 影片建議:H.264 編碼的 MP4 相容性最好(iOS/Android 皆可播)。 影片長寬比最好與照片一致,播放時才不會變形。
  • iOS 若無法自動播放聲音,影片會退回靜音播放(瀏覽器限制)。

埠號調整

docker-compose.yml 的 ports 即可,例如 "9510:3510""9511:3511"。 (頁面上顯示的互連連結取自容器內埠號,若對外映射成不同埠號,請自行以對外埠號連線。)

S
Description
No description provided
Readme
97 KiB
Languages
HTML 73.4%
JavaScript 23.6%
Dockerfile 3%