摘要:當(dāng)前,大多數(shù)人的移動設(shè)備中都存儲有大量圖片,這些圖片來源于相機(jī)拍攝、網(wǎng)絡(luò)下載或是朋友同事分享等,而管理這些大量圖片則往往是一項煩瑣的任務(wù)。傳統(tǒng)的相冊應(yīng)用通常只能按照時間或手動標(biāo)簽進(jìn)行排序,用戶在如此大量的圖片中要找到目標(biāo)圖片非常困難。文章基于Kivy框架,設(shè)計并開發(fā)了一款智能AI相冊軟件,該軟件集成了K-Means算法和CLIP模型,可實現(xiàn)圖片的智能聚類、分類和語義檢索,同時還具有個性化收藏和隱私保護(hù)功能,為用戶提供了一種更智能、更便捷的照片管理方式。
關(guān)鍵詞:AI相冊;K-Means算法;CLIP模型;語義檢索
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2024)22-0048-05
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID)
0 引言
隨著智能手機(jī)和數(shù)碼相機(jī)的廣泛使用,照片已經(jīng)成為人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。App中不斷產(chǎn)生的圖片數(shù)據(jù)和人們?nèi)粘z影中保存的大量照片,使得移動終端的圖片管理和維護(hù)變得更加困難。根據(jù)數(shù)碼照片行業(yè)咨詢公司Rise Above Research的估算,全世界在2020年拍攝的照片總數(shù)量大約是1.12萬億,如圖1所示,其中89%以上是通過智能手機(jī)拍攝的,并且這一數(shù)字還在不斷增長。據(jù)預(yù)測,2023年這一數(shù)字已經(jīng)來到了1.6萬億,較2020年增長了43.92%。
<E:\飛翔打包文件目錄001\電腦2024年8月上第二十二期打包文件\7.02xs202422\Image\image25.png>
圖1 全球歷年拍攝照片總數(shù)
因而,對于移動智能設(shè)備的用戶來說,如何方便高效地管理這些圖片成為一個亟待解決的問題。傳統(tǒng)的人工整理分類ti2JDdYZQ02ChGL3HUuSNw==方式耗時耗力,難以滿足用cAt+MkW8FzmrIqaRGgXVeQ==戶對效率和便利性的要求。近年來,人工智能技術(shù)的發(fā)展為照片管理提供了新的智能化解決方案。通過計算機(jī)視覺和多模態(tài)技術(shù),智能相冊能夠自動對照片進(jìn)行聚類、分類,并根據(jù)用戶的需求進(jìn)行語義檢索,大大提升了人們在管理大量圖片時的效率。
本文基于Kivy框架設(shè)計并開發(fā)了一款A(yù)I智能相冊軟件,通過集成K-Means算法[1]和CLIP模型[2],實現(xiàn)了照片的智能聚類[3]、分類、語義檢索和隱私管理等功能,旨在為用戶提供高效、便捷的照片管理解決方案。
1 相關(guān)技術(shù)
1.1 Kivy框架
Kivy是一個開源的Python庫,用于開發(fā)多觸控應(yīng)用程序。它支持多個操作系統(tǒng),包括Windows、mac?OS、Linux、iOS和Android,能夠快速開發(fā)應(yīng)用程序。Kivy的核心特性包括:
1) 跨平臺性[4]:Kivy應(yīng)用無須修改代碼即可跨多種操作系統(tǒng)運行,這使得它特別適合于需要跨多種設(shè)備部署的項目。
2) 靈活的圖形引擎:內(nèi)置的基于OpenGL ES 2的圖形引擎,支持硬件加速,能夠渲染高質(zhì)量圖形,在保證性能的同時提供出色的視覺效果。
3) 豐富的組件庫:Kivy提供了豐富的預(yù)制組件,如按鈕、滑塊、文本輸入框等,使得界面設(shè)計既直觀又富有吸引力。
4) 事件驅(qū)動架構(gòu):Kivy采用事件驅(qū)動的編程模型,能夠響應(yīng)觸控、鼠標(biāo)、鍵盤等多種用戶輸入,使應(yīng)用程序可以高效地處理用戶交互。
5) 適應(yīng)多種輸入設(shè)備:Kivy支持從觸控屏到傳統(tǒng)鼠標(biāo)鍵盤的多種輸入設(shè)備,這使得開發(fā)的應(yīng)用可以在不同的設(shè)備上提供一致的用戶體驗。
綜上所述,Kivy強(qiáng)大的跨平臺特性、豐富的組件庫、高性能的圖形引擎以及靈活的事件驅(qū)動架構(gòu),使其成為開發(fā)現(xiàn)代多平臺應(yīng)用的理想選擇,特別適合需要高度交互和出色視覺體驗的應(yīng)用程序。
1.2 K-Means聚類算法
K-Means聚類算法是一種廣泛應(yīng)用的無監(jiān)督學(xué)習(xí)算法,用于將數(shù)據(jù)集分成不同的組或簇。其目標(biāo)是使簇內(nèi)的數(shù)據(jù)點相似性最大化,而不同簇之間的數(shù)據(jù)點差異性最大化。K-Means算法的基本步驟包括:
1) 初始化:選擇[K]個數(shù)據(jù)點作為初始聚類中心
2) 分配:根據(jù)歐氏距離或其他距離度量,將每個數(shù)據(jù)點分配到最近的聚類中心。
3) 更新:對于每個聚類,重新計算聚類中心,通常采用該聚類內(nèi)所有數(shù)據(jù)點的平均值。
4) 重復(fù):重復(fù)分配和更新步驟,直到聚類中心的變動不再顯著或達(dá)到既定的最大迭代次數(shù)。
K-Means算法的目標(biāo)是最小化所有數(shù)據(jù)點到其對應(yīng)聚類中心的距離的平方和,即:[mini=1kx∈Cix-μi2],式中,[Ci]是第[i]個聚類,[μi]是第[i]個聚類的中心,[x-μi2]表示歐氏距離。
在照片智能聚類應(yīng)用中,K-Means算法首先對照片進(jìn)行特征提取,得到高維特征向量。然后根據(jù)這些特征向量進(jìn)行聚類,將內(nèi)容相似或相近的照片自動歸類,形成不同的聚類相冊,方便用戶快速找到相關(guān)圖片,提高瀏覽效率。
1.3 CLIP模型
CLIP(Contrastive Language-Image Pre-training) 模型是由OpenAI團(tuán)隊開發(fā)的一種多模態(tài)預(yù)訓(xùn)練模型,旨在實現(xiàn)文本和圖像之間的跨模態(tài)理解。CLIP結(jié)合了對比學(xué)習(xí)和多模態(tài)學(xué)習(xí)的原理,與傳統(tǒng)的基于圖像增廣的對比學(xué)習(xí)方法不同,CLIP的訓(xùn)練依賴大量的圖像-文本對進(jìn)行對比學(xué)習(xí)。其中,一張圖像及其對應(yīng)的文本描述為正樣本,而與其不對應(yīng)的文本描述為負(fù)樣本。模型通過比較正負(fù)樣本之間的相似性和差異性來學(xué)習(xí)文本與圖像間的關(guān)聯(lián)關(guān)系,以達(dá)到跨模態(tài)識別的效果。為此,OpenAI從互聯(lián)網(wǎng)收集了共4億個文本-圖像對并使用一個統(tǒng)一的嵌入空間來表示文本和圖像。
CLIP采用雙塔結(jié)構(gòu),包括一個文本編碼器和一個圖像編碼器。其中文本編碼器用于提取文本特征,通常采用NLP中常用的Transformer模型[5];圖像編碼器用來提取圖像的特征,通常采用ResNet[6]或者ViT[7]模型。文本和圖像信息分別通過文本編碼器和圖像編碼器編碼后映射到同一特征空間中。假設(shè)有[N]個圖像-文本對,則形成一個[N]×[N]的相似度矩陣,其中包括[N]個正樣本和[N2-N]個負(fù)樣本。通過余弦相似度表示圖像與文本間的對應(yīng)關(guān)系,余弦相似度越大,則關(guān)聯(lián)性越高,反之越低。最后通過損失函數(shù)來優(yōu)化模型,核心偽代碼如下所示:
# image_encoder–圖片編碼器
# text_encoder–文本編碼器
# I[n, h, w, c]–小批次的對齊圖片
# T[n, l]–小批次的對齊文本
# W_i[d_i, d_e]–可學(xué)習(xí)的圖片嵌入層
# W_t[d_t, d_e]–可學(xué)習(xí)的文本嵌入層
# t–可學(xué)習(xí)的溫度參數(shù)
# 圖片、文本特征提取
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]
# 多模態(tài)聯(lián)合編碼
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
# 余弦相似度計算
logits = np.dot(I_e, T_e.T) * np.exp(t)
# 對稱損失函數(shù)
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2
在進(jìn)行零樣本預(yù)測時,將輸入的圖片的特征提取后與文本特征一一匹配,進(jìn)而輸出相似度最高的標(biāo)簽,CLIP模型結(jié)構(gòu)如圖2所示。
得益于海量的訓(xùn)練樣本,CLIP模型在零樣本學(xué)習(xí)[8]的應(yīng)用上表現(xiàn)出色。通過學(xué)習(xí)圖像和文本之間的對應(yīng)關(guān)系,CLIP模型具有極強(qiáng)的泛化能力。傳統(tǒng)的機(jī)器學(xué)習(xí)模型需要大量帶標(biāo)簽的數(shù)據(jù)來學(xué)習(xí)每個類別的特征,而CLIP通過學(xué)習(xí)語言和視覺的通用表示,無須任何先驗知識即可進(jìn)行精準(zhǔn)分類。因此,在處理圖像分類和檢索任務(wù)時,CLIP模型具有適應(yīng)新類別能力強(qiáng)、魯棒性高等優(yōu)點?;诖耍疚牡闹悄蹵I相冊軟件選擇CLIP模型來進(jìn)行圖像分類和檢索任務(wù)。
2 軟件設(shè)計
智能AI相冊軟件主要包含4個功能模塊,分別是所有照片模塊、智能相冊模塊、智能搜索模塊及隱私圖片模塊,如圖3所示,下面本文將逐一介紹這4個模塊。
2.1 所有照片模塊
所有照片模塊作為軟件的核心頁面,也是進(jìn)入App軟件后首先展示的主頁。在這里,設(shè)備存儲中的所有圖片根據(jù)保存時間進(jìn)行線性排序,默認(rèn)以降序排序,即最新保存的圖片在最上方,而最早保存的圖片在最下方,并記錄保存的時間,用戶可以快速精確地訪問到近期的常用圖片。此外,該模塊還提供靈活的排序切換功能,允許用戶調(diào)整排序方式為升序,方便用戶回顧歷史圖片。軟件實現(xiàn)部分效果展示如圖4所示。
2.2 AI智能相冊模塊
AI智能相冊模塊包括以下4項功能:智能分類、智能聚類、最近刪除和我的收藏。
智能分類功能可以根據(jù)用戶的個人偏好自定義類別名稱,將內(nèi)存中屬于該類別的照片自動歸入。該功能模塊以CLIP模型為核心,用戶添加新的照片時,軟件使用CLIP模型對照片進(jìn)行特征提取,生成照片的特征向量。用戶自定義的類別名稱也會通過CLIP模型進(jìn)行處理,生成對應(yīng)的文本特征向量。軟件將照片的特征向量與用戶創(chuàng)建的類別名稱的文本特征向量進(jìn)行匹配,根據(jù)匹配度將照片自動歸入相應(yīng)的類別。用戶可以隨時添加、刪除或修改類別名稱,軟件隨即動態(tài)更新不同類別下的圖片,方便用戶個性化地管理相冊。功能實現(xiàn)效果如圖5所示。
智能聚類功能是軟件自動化照片管理的重要組成部分。該功能通過K-Means算法將內(nèi)容相似或相近的圖片自動聚類,形成幾個不同類別的相冊。具體流程為:首先對內(nèi)存中的照片進(jìn)行特征提取,然后從提取的特征向量中隨機(jī)選擇 K 個作為初始質(zhì)心,通過距離計算將每張照片分配到距離其最近的質(zhì)心所代表的聚類中。隨后軟件會不斷更新質(zhì)心位置,直至聚類結(jié)果趨于穩(wěn)定。用戶可以通過這些不同聚類整理后的相冊,快速找到相似的批量圖片,提高瀏覽效率。聚類相冊如圖6所示。
最近刪除功能為用戶提供了一個臨時存儲空間,用于保存已刪除的照片。在該功能模塊中,刪除后的照片在這里經(jīng)過一段時間的備份保存后才會被永久刪除;否則,用戶可以一鍵恢復(fù)已刪除的圖片。這不僅為用戶提供了額外的安全保障,防止誤刪重要照片,同時也提升了照片管理的靈活性。最近刪除模塊如圖7所示。
我的收藏功能允許用戶將喜歡的照片標(biāo)記為收藏,以便快速訪問和管理,收藏的照片會按照添加到收藏中的時間進(jìn)行降序排序,方便了用戶的查找和分享,如圖8所示。
2.3 智能搜索模塊
智能搜索模塊為用戶提供一個簡潔的圖片搜索框。在搜索框中直接搜索圖片內(nèi)容的關(guān)鍵詞即可幫助用戶快速定位所需的圖片,無須瀏覽整個相冊。如圖9所示,該模塊通過多模態(tài)技術(shù)[9],利用語義檢索識別用戶輸入文本的語義信息[10],從而匹配與之相似度最高的圖片,并根據(jù)相似度排序,為用戶展示最符合搜索描述的圖片。
2.4 隱私圖片模塊
隱私圖片模塊是智能AI相冊中用于保護(hù)用戶個人隱私和敏感照片的關(guān)鍵功能模塊。用戶可以在首次使用隱私功能時設(shè)置隱私密碼以啟用該功能,并將需要保護(hù)的照片設(shè)為隱私圖片。用戶在輸入正確密碼后進(jìn)入隱私照片頁面,可以進(jìn)行查看、刪除、分享或取消私密狀態(tài)等管理操作。若忘記特定的隱私密碼,也可以通過手機(jī)鎖屏密碼重置隱私密碼,如圖10所示。
3 系統(tǒng)實現(xiàn)
3.1 系統(tǒng)架構(gòu)
對于智能AI相冊軟件的開發(fā),本文采用了基于Python的Kivy框架的多層架構(gòu),根據(jù)職責(zé)將應(yīng)用邏輯分布在不同的組件中。這些組件根據(jù)所屬的不同層次被部署在不同的平臺上。該應(yīng)用的架構(gòu)主要包括4個層次:用戶界面層、應(yīng)用邏輯層、模型服務(wù)層以及數(shù)據(jù)管理層。
用戶界面層組件位于客戶端設(shè)備上,主要由Kivy框架的GUI組件[11]構(gòu)成。在該智能AI相冊軟件中,用戶界面層通過Kivy應(yīng)用程序直接負(fù)責(zé)頁面的顯示處理,進(jìn)行各種圖片瀏覽、編輯、分類及搜索等操作。
應(yīng)用邏輯層和模型服務(wù)層位于應(yīng)用服務(wù)器上,其中應(yīng)用邏輯層主要負(fù)責(zé)實現(xiàn)軟件的業(yè)務(wù)邏輯,如照片的上傳處理、智能分類、隱私設(shè)置等。該層接收用戶界面層傳遞的數(shù)據(jù),進(jìn)行適當(dāng)處理后存儲到數(shù)據(jù)存儲設(shè)備中,或者從數(shù)據(jù)存儲設(shè)備中讀取數(shù)據(jù),經(jīng)過處理反饋到客戶端。
模型服務(wù)層包含了K-Means算法和CLIP模型的實現(xiàn),主要負(fù)責(zé)圖像和文本的特征提取,以及基于特征的相似度計算和聚類分析。這一層為應(yīng)用邏輯層提供必要的AI能力,以支持復(fù)雜的圖像處理和智能搜索功能。
數(shù)據(jù)管理層位于數(shù)據(jù)庫服務(wù)器上,使用SQLite輕量級數(shù)據(jù)庫來存儲和管理所有的圖片數(shù)據(jù)以及用戶生成的元數(shù)據(jù)。在智能AI相冊系統(tǒng)中實現(xiàn)的所有數(shù)據(jù)存儲和查詢功能都是在數(shù)據(jù)管理層中實現(xiàn)。
這種分層的架構(gòu)設(shè)計不僅確保了軟件的可維護(hù)性和擴(kuò)展性,也使得各層之間的職責(zé)清晰,有助于高效的團(tuán)隊協(xié)作和軟件開發(fā)。
3.2 軟件開發(fā)關(guān)鍵技術(shù)
CLIP模型的模型體積和計算需求通常超出了普通移動設(shè)備的處理能力,本文選擇在云服務(wù)器上部署預(yù)訓(xùn)練的CLIP模型,通過開發(fā)一個API服務(wù),接收從移動設(shè)備應(yīng)用傳輸?shù)哪P驼{(diào)用請求,并返回相應(yīng)的結(jié)果。這種方式使得模型不受手機(jī)硬件限制,可以利用強(qiáng)大的服務(wù)器資源,且易于更新和維護(hù)模型。
依賴CLIP模型進(jìn)行實時語義檢索的另一個問題是查詢速度。當(dāng)內(nèi)存中存在大量圖片時,提取每張圖片的圖像特征與關(guān)鍵字的文本特征進(jìn)行匹配需要較長時間。本文通過3種策略解決該問題:
首先,每張圖像在添加至相冊時就預(yù)先計算并存儲其特征向量于數(shù)據(jù)庫文件中,這樣搜索時僅需計算文本特征并進(jìn)行匹配。
其次,對常見的搜索查詢和結(jié)果進(jìn)行緩存,當(dāng)相同或類似的查詢再次發(fā)生時,可以直接從緩存文件中提取結(jié)果,避免重復(fù)計算。
最后,當(dāng)搜索結(jié)果較多時,先返回部分結(jié)果供用戶查看,后臺繼續(xù)處理剩余結(jié)果并漸進(jìn)式地顯示。
4 軟件測試與部署
為確保軟件的正常使用,本文進(jìn)行了以下測試:
1) 功能測試:確保所有功能模塊和頁面都能正常工作,包括照片展示、分類、搜索和隱私功能。
2) 性能測試:測試軟件在不同設(shè)備上的性能,包括加載速度、響應(yīng)時間和資源占用情況。
3) 兼容性測試:測試軟件在不同操作系統(tǒng)和設(shè)備上的兼容性,確保在不同環(huán)境下都能正常運行。
4) 安全性測試:測試隱私功能的安全性,確保隱私圖片只能在輸入正確密碼后才能查看。
5) 用戶體驗測試:邀請部分目標(biāo)用戶群體參與早期測試,收集并分析其反饋,以調(diào)整和優(yōu)化用戶界面和操作流程。
在測試結(jié)束后,本文對智能AI相冊軟件進(jìn)行了平臺部署。具體包括以下步驟:
1) 打包應(yīng)用:使用Kivy的打包工具將應(yīng)用程序打包為可執(zhí)行文件,以便在不同平臺上部署。
2) 發(fā)布到應(yīng)用商店:將打包好的應(yīng)用程序上傳到應(yīng)用商店,如Google Play Store、Apple App Store,并按照每個平臺的審核指南進(jìn)行優(yōu)化,以確保順利通過審核,以便用戶下載和安裝。
3) 更新和維護(hù):在應(yīng)用發(fā)布后,定期監(jiān)控其運行狀況,并根據(jù)用戶反饋及時進(jìn)行更新,以修復(fù)任何發(fā)現(xiàn)的漏洞并引入新功能。在重要的更新或功能發(fā)布后,特別是那些影響用戶數(shù)據(jù)和隱私安全的更新,確保進(jìn)行周密的測試和重新部署。
4) 用戶支持:提供用戶支持渠道,幫助用戶解決使用中遇到的問題。
5 結(jié)束語
隨著移動設(shè)備和社交媒體的普及,大量的圖片被存儲在智能設(shè)備中,如何高效地管理這些圖片成為困擾用戶的難題。為了解決傳統(tǒng)相冊在查詢和管理圖片方面的缺點,本文基于Kivy框架,設(shè)計并開發(fā)了一款智能AI相冊軟件。該軟件集成了K-Means聚類算法和CLIP多模態(tài)預(yù)訓(xùn)練模型,實現(xiàn)了圖片的時間軸管理和個性化聚類分類功能。用戶也可以通過關(guān)鍵字描述直接搜索圖片,并進(jìn)行收藏、刪除、隱私設(shè)置等圖片管理操作,為用戶提供了高效便捷的照片管理方式。
參考文獻(xiàn):
[1] ZHU J,WANG H S.An improved K-means clustering algorithm[C]//2010 2nd IEEE International Conference on Information Management and Engineering.IEEE,2010:190-192.
[2] RADFORD A,KIM J W,HALLACY C,et al.Learning transferable visual models from natural language supervision[C].Proceedings of the 38th International Conference on Machine Learning,PMLR,2021:8748-8763.
[3] 伍育紅.聚類算法綜述[J].計算機(jī)科學(xué),2015,42(6A):491-499.
[4] 徐朝勝,師衛(wèi).應(yīng)用軟件跨平臺技術(shù)的研究[J].科技情報開發(fā)與經(jīng)濟(jì),2007,17(5):244-245.
[5] VASWANI A,SHAZEER N,PARMAR N,et al.Attention is all you need[EB/OL].[2022-10-20].2017:arXiv:1706.03762.http://arxiv.org/abs/1706.03762
[6] HE K M,ZHANG X Y,REN S Q,et al.Deep residual learning for image recognition[C]//2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR).IEEE,2016:770-778.
[7] DOSOVITSKIY A,BEYER L,KOLESNIKOV A,et al.An image is worth 16x16 words:transformers for image recognition at scale[J/OL].[2022-10-20].ArXiv e-Prints,2020:arXiv:2010.11929.
[8] 王澤深,楊云,向鴻鑫,等.零樣本學(xué)習(xí)綜述[J].計算機(jī)工程與應(yīng)用,2021,57(19):1-17.
[9] 孫影影,賈振堂,朱昊宇.多模態(tài)深度學(xué)習(xí)綜述[J].計算機(jī)工程與應(yīng)用,2020,56(21):1-10.
[10] 文坤梅,盧正鼎,孫小林,等.語義搜索研究綜述[J].計算機(jī)科學(xué),2008,35(5):1-4.
[11] 李利,王秀峰.Java布局管理器在GUI設(shè)計中的應(yīng)用[J].企業(yè)技術(shù)開發(fā),2003(10):15-18.
【通聯(lián)編輯:謝媛媛】