美好的回憶免上雲! 用家裡電腦 設法用AI讓10萬張家庭照片活起來
為什麼要做這件事情?
【本文約有2,496字】
輕鬆幫你取得美好的回憶與意想不到的驚喜。
先來聊聊,為什麼我當初會想要做這個項目?
首先,因為家裡的小孩即將從國小畢業,他們正在製作一些畢業紀念冊,想要收集一些有紀念意義的照片。我突然想到,我們家裡有十萬張家庭生活照片,這些照片涵蓋了各式各樣的場景、各個年齡段、各個年份和月份。這些照片存放在我們家裡的 NAS 硬碟裡,始終保持靜止不動、宛如永久被埋藏的回憶。這次是因為小孩有需要,這讓我開始想到如何活化運用,這是我開始這個項目的第一個動機。
第二個動機是,我發現目前的開源人工智慧技術可以為照片自動加上文字描述。簡單來說,就是我們逐一把照片丟給AI,AI會幫你把照片裡的人事物等細節用文字自動生成描述出來。這種生成式的描述能夠比我們更厲害地找出照片中的每一個細節,有時候也會生成一些不存在的事物,在我粗略微調參數後,大約有 80% 的精準度(其實也夠了!如果真的想用人工來做,大概也沒這個體力)。有時看到這些描述,真的會有種腦洞大開,感到非常神奇。如果照片本身的精彩度是80分,那麼加上AI自動生成的描述,可能輕易就會超過100分。這是吸引我的第二個原因。
阿中哥的 AI 方案幫你實現夢想
我的AI方案可以幫你自動完成每一張照片的文字描述。我要強調的是,這些描述都是由AI自動完成的。AI可以比我們人類的眼睛看得更細緻,甚至能夠挖掘出一些我們難以察覺的細節。這正是讓人覺得神奇、創新、腦洞大開的主要原因。因為這個AI技術是生成式的,每次分析同一張照片時,AI可能都會提供不同的描述,但主要精神是不變的,也就是照片本身的內容不變,但描述卻可以千變萬化,非常厲害,也常常讓我感到非常驚訝。
阿中哥的 AI 方案幫你取得美好的回憶與意想不到的驚喜
為了不讓這些美好的回憶一直深藏在我們家的硬碟裡,我決定投入時間來研究這項技術。我先從下載開源的AI模型開始,練習如何使用 API 和 Open Web UI 進行操作。我家剛好也有一台 2~3 年前買的內建 RTX 3080 8 GB VRAM 顯示卡的筆記型電腦,主機擁有 16 GB 的記憶體,執行這些生成式AI模型的速度還可以接受。於是,我就想,為什麼不讓這台電腦幫忙把家庭照片進行逐一描述呢?
於是,我花了大約一週時間,從練習使用生成式AI模型開始,嘗試使用 RAG 檢索增強生成(Retrieval-Augmented Generation),餵給它 5,000 筆的工廠零件資料表,發現它高精準的辨識能力,實在令人嘖嘖稱奇!接著再使用這個能夠識別圖像並生成文字描述的模型。當我看到孩子的照片在我撰寫的網頁程式中展示出來,並且每張照片都有AI生成的描述時,每個描述都讓我大開眼界。隨著我不斷深入研究,越做越有趣,也越做越來勁。
經過AI讀取的照片,照片本身並不會被破壞,因為只是讀取並非寫入。我們要的只是照片的文字描述。因此我設計了一個資料庫,規劃了一個資料表,用 AI 寫了一個 Python 程式,把這些 AI 生成後的照片描述文字通通存起來。這個程式建議在Linux上運行(比較穩定),並且很容易就能掛接我們家裡的10萬張照片。我們家裡有一個 1Gb 的乙太網路,雖然這個速度現在來看已經不算是最快的速度,甚至列為入門等級,但還是夠用。透過這個 1Gb 的乙太網路,搭配我的 Python 程式,在 Linux 上執行 find 命令掃描指定目錄下的所有照片類型,然後將它們逐一傳送給這個 Python 程式進行處理。
IBM 伺服器老將出馬,強棒出擊!
我的Python程式會呼叫安裝在配備RTX 3080顯示卡的筆記型電腦上的API,這個API會將照片傳送給AI模型,並將AI生成的文字描述回傳給我的Python程式。由於模型回傳預設的描述是簡體中文,所以我們還需自動化將其轉換成繁體中文,這樣我們才能更方便地閱讀。轉換完成後,我們使用照片的絕對路徑,利用SHA256雜湊算法對照片絕對路徑檔名進行快速哈希處理,並將哈希值一併存入資料庫中,以利日後使用。
在我的方案中,我除了使用配備RTX 3080的筆記型電腦,還有一台 IBM 二手伺服器。這台伺服器擁有 16GB 的 ECC RAM和 500GB 的 SSD,運行著虛擬化系統,裡面的 VM 裝有 HAProxy 並包含 SSL、Ubuntu Linux 等。我們可以從外部連回來,當然這裡我和中華電信申請了一個免費固定IP,這樣我們就可以從外部登入。不論是在家裡、公司、捷運、廁所、房間,甚至客廳地板上,只要有網路,我們就可以透過平板、手機或電腦或客廳電視來瀏覽這些照片。
孩子們可以開始尋找他們的照片,我也會在網頁介面繼續添加新功能,比如照片描述的辨識結果,關鍵字超連結等等。我在這台 RTX 3080 的筆記型電腦上安裝了兩個模型,一個是國科會的模型,另一個是用來識別圖像並生成文字描述的模型。我使用API分別呼叫這兩個模型,一個生成照片的文字描述,另一個則對描述進行關鍵字和分類的辨識。這樣,我們的十萬張照片大約需要一個星期的時間應該可以全部跑完自動生成圖片文字的過程。
接下來是繼續用程式讀取這些生成的文字描述,並以 API 方式傳送給國科會的模型,幫我們全自動生成新的分類和關鍵字。這些分類和關鍵字在網頁相簿中將會非常好用(不用輸入就可以跟隨關鍵字一直衝浪,直到精疲力盡為止)。我們的資料庫也可支援全文檢索,可以方便想用手動搜尋的需要,或直接點擊網頁上的分類、關鍵字連結來查看 AI 自動分類的照片。如此,不管是在家裡還是外面,只要有網路,就能隨時查看這些照片。這台設備是我買的二手中古設備,非常便宜,印象中大約花了 NT$6000 元左右,已經運作非常多年,非常穩定。我家裡的網路是中華電信的,速度又快又穩非常不錯。
這就是我的 AI 方案,如果你也希望實現這個夢想,我希望這些經驗能為你帶來美好的回憶,並讓您的府上獲得更多意想不到的驚喜。
我如何提供協助?
每個人的情況都不太相同,建議先用 E-Mail 聯絡(網頁下方有我的聯絡信箱),以利給予適切之建議。
我的時間有限,每週一、五、六、日,可提供服務。初期僅限台北市為優先服務區域(我外出搭捷運通勤較快較方便)。
備註:本方案使用的工具清單
1. 開源模型:文字生成式 from 國科會:
ryan4559/llama3-taide-lx-8b-chat-alpha1-4bit
2. 開源模型:照片自動辨識成為文字:
llava-llama3
3. 開發工具 VScode + Python 3 + ChatGPT4o。
4. 容器工具 Docker Desktop。
5. 開源軟體 Open WebUI。
6. 開源軟體 Ollama + Ollama API。
7. 中華電信 500M 光纖。
8. 中華電信固定 IP 一個。
9. 家用 1Gb 有線區域網路 (5~8 port 交換器)。
10. 家用 Wifi6 無線網路 (Router)。
11. 家用 NAS 3 TB RAID 1 一台。
12. 家用 IBM Server 一台。
13. 家用 RTX 3080 筆電一台。
14. 開源 HAproxy、Ubuntu Linux、MariaDB、PHP 7/8、Codeigniter 4 (CI 4)。
15. 開源 Tailwind CSS / Bootstrap CSS 。