APP下载

智能AI相册软件的设计与实现

2024-09-13乔一鸣王烨炜王银平文靖铭高广银叶志鹏

电脑知识与技术 2024年22期

摘要:当前,大多数人的移动设备中都存储有大量图片,这些图片来源于相机拍摄、网络下载或是朋友同事分享等,而管理这些大量图片则往往是一项烦琐的任务。传统的相册应用通常只能按照时间或手动标签进行排序,用户在如此大量的图片中要找到目标图片非常困难。文章基于Kivy框架,设计并开发了一款智能AI相册软件,该软件集成了K-Means算法和CLIP模型,可实现图片的智能聚类、分类和语义检索,同时还具有个性化收藏和隐私保护功能,为用户提供了一种更智能、更便捷的照片管理方式。

关键词:AI相册;K-Means算法;CLIP模型;语义检索

中图分类号:TP391 文献标识码:A

文章编号:1009-3044(2024)22-0048-05

开放科学(资源服务)标识码(OSID)

0 引言

随着智能手机和数码相机的广泛使用,照片已经成为人们日常生活中不可或缺的一部分。App中不断产生的图片数据和人们日常摄影中保存的大量照片,使得移动终端的图片管理和维护变得更加困难。根据数码照片行业咨询公司Rise Above Research的估算,全世界在2020年拍摄的照片总数量大约是1.12万亿,如图1所示,其中89%以上是通过智能手机拍摄的,并且这一数字还在不断增长。据预测,2023年这一数字已经来到了1.6万亿,较2020年增长了43.92%。

<E:\飞翔打包文件目录001\电脑2024年8月上第二十二期打包文件\7.02xs202422\Image\image25.png>

图1 全球历年拍摄照片总数

因而,对于移动智能设备的用户来说,如何方便高效地管理这些图片成为一个亟待解决的问题。传统的人工整理分类ti2JDdYZQ02ChGL3HUuSNw==方式耗时耗力,难以满足用cAt+MkW8FzmrIqaRGgXVeQ==户对效率和便利性的要求。近年来,人工智能技术的发展为照片管理提供了新的智能化解决方案。通过计算机视觉和多模态技术,智能相册能够自动对照片进行聚类、分类,并根据用户的需求进行语义检索,大大提升了人们在管理大量图片时的效率。

本文基于Kivy框架设计并开发了一款AI智能相册软件,通过集成K-Means算法[1]和CLIP模型[2],实现了照片的智能聚类[3]、分类、语义检索和隐私管理等功能,旨在为用户提供高效、便捷的照片管理解决方案。

1 相关技术

1.1 Kivy框架

Kivy是一个开源的Python库,用于开发多触控应用程序。它支持多个操作系统,包括Windows、mac⁃OS、Linux、iOS和Android,能够快速开发应用程序。Kivy的核心特性包括:

1) 跨平台性[4]:Kivy应用无须修改代码即可跨多种操作系统运行,这使得它特别适合于需要跨多种设备部署的项目。

2) 灵活的图形引擎:内置的基于OpenGL ES 2的图形引擎,支持硬件加速,能够渲染高质量图形,在保证性能的同时提供出色的视觉效果。

3) 丰富的组件库:Kivy提供了丰富的预制组件,如按钮、滑块、文本输入框等,使得界面设计既直观又富有吸引力。

4) 事件驱动架构:Kivy采用事件驱动的编程模型,能够响应触控、鼠标、键盘等多种用户输入,使应用程序可以高效地处理用户交互。

5) 适应多种输入设备:Kivy支持从触控屏到传统鼠标键盘的多种输入设备,这使得开发的应用可以在不同的设备上提供一致的用户体验。

综上所述,Kivy强大的跨平台特性、丰富的组件库、高性能的图形引擎以及灵活的事件驱动架构,使其成为开发现代多平台应用的理想选择,特别适合需要高度交互和出色视觉体验的应用程序。

1.2 K-Means聚类算法

K-Means聚类算法是一种广泛应用的无监督学习算法,用于将数据集分成不同的组或簇。其目标是使簇内的数据点相似性最大化,而不同簇之间的数据点差异性最大化。K-Means算法的基本步骤包括:

1) 初始化:选择[K]个数据点作为初始聚类中心

2) 分配:根据欧氏距离或其他距离度量,将每个数据点分配到最近的聚类中心。

3) 更新:对于每个聚类,重新计算聚类中心,通常采用该聚类内所有数据点的平均值。

4) 重复:重复分配和更新步骤,直到聚类中心的变动不再显著或达到既定的最大迭代次数。

K-Means算法的目标是最小化所有数据点到其对应聚类中心的距离的平方和,即:[mini=1kx∈Cix-μi2],式中,[Ci]是第[i]个聚类,[μi]是第[i]个聚类的中心,[x-μi2]表示欧氏距离。

在照片智能聚类应用中,K-Means算法首先对照片进行特征提取,得到高维特征向量。然后根据这些特征向量进行聚类,将内容相似或相近的照片自动归类,形成不同的聚类相册,方便用户快速找到相关图片,提高浏览效率。

1.3 CLIP模型

CLIP(Contrastive Language-Image Pre-training) 模型是由OpenAI团队开发的一种多模态预训练模型,旨在实现文本和图像之间的跨模态理解。CLIP结合了对比学习和多模态学习的原理,与传统的基于图像增广的对比学习方法不同,CLIP的训练依赖大量的图像-文本对进行对比学习。其中,一张图像及其对应的文本描述为正样本,而与其不对应的文本描述为负样本。模型通过比较正负样本之间的相似性和差异性来学习文本与图像间的关联关系,以达到跨模态识别的效果。为此,OpenAI从互联网收集了共4亿个文本-图像对并使用一个统一的嵌入空间来表示文本和图像。

CLIP采用双塔结构,包括一个文本编码器和一个图像编码器。其中文本编码器用于提取文本特征,通常采用NLP中常用的Transformer模型[5];图像编码器用来提取图像的特征,通常采用ResNet[6]或者ViT[7]模型。文本和图像信息分别通过文本编码器和图像编码器编码后映射到同一特征空间中。假设有[N]个图像-文本对,则形成一个[N]×[N]的相似度矩阵,其中包括[N]个正样本和[N2-N]个负样本。通过余弦相似度表示图像与文本间的对应关系,余弦相似度越大,则关联性越高,反之越低。最后通过损失函数来优化模型,核心伪代码如下所示:

# image_encoder–图片编码器

# text_encoder–文本编码器

# I[n, h, w, c]–小批次的对齐图片

# T[n, l]–小批次的对齐文本

# W_i[d_i, d_e]–可学习的图片嵌入层

# W_t[d_t, d_e]–可学习的文本嵌入层

# t–可学习的温度参数

# 图片、文本特征提取

I_f = image_encoder(I) #[n, d_i]

T_f = text_encoder(T) #[n, d_t]

# 多模态联合编码

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)

# 对称损失函数

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

在进行零样本预测时,将输入的图片的特征提取后与文本特征一一匹配,进而输出相似度最高的标签,CLIP模型结构如图2所示。

得益于海量的训练样本,CLIP模型在零样本学习[8]的应用上表现出色。通过学习图像和文本之间的对应关系,CLIP模型具有极强的泛化能力。传统的机器学习模型需要大量带标签的数据来学习每个类别的特征,而CLIP通过学习语言和视觉的通用表示,无须任何先验知识即可进行精准分类。因此,在处理图像分类和检索任务时,CLIP模型具有适应新类别能力强、鲁棒性高等优点。基于此,本文的智能AI相册软件选择CLIP模型来进行图像分类和检索任务。

2 软件设计

智能AI相册软件主要包含4个功能模块,分别是所有照片模块、智能相册模块、智能搜索模块及隐私图片模块,如图3所示,下面本文将逐一介绍这4个模块。

2.1 所有照片模块

所有照片模块作为软件的核心页面,也是进入App软件后首先展示的主页。在这里,设备存储中的所有图片根据保存时间进行线性排序,默认以降序排序,即最新保存的图片在最上方,而最早保存的图片在最下方,并记录保存的时间,用户可以快速精确地访问到近期的常用图片。此外,该模块还提供灵活的排序切换功能,允许用户调整排序方式为升序,方便用户回顾历史图片。软件实现部分效果展示如图4所示。

2.2 AI智能相册模块

AI智能相册模块包括以下4项功能:智能分类、智能聚类、最近删除和我的收藏。

智能分类功能可以根据用户的个人偏好自定义类别名称,将内存中属于该类别的照片自动归入。该功能模块以CLIP模型为核心,用户添加新的照片时,软件使用CLIP模型对照片进行特征提取,生成照片的特征向量。用户自定义的类别名称也会通过CLIP模型进行处理,生成对应的文本特征向量。软件将照片的特征向量与用户创建的类别名称的文本特征向量进行匹配,根据匹配度将照片自动归入相应的类别。用户可以随时添加、删除或修改类别名称,软件随即动态更新不同类别下的图片,方便用户个性化地管理相册。功能实现效果如图5所示。

智能聚类功能是软件自动化照片管理的重要组成部分。该功能通过K-Means算法将内容相似或相近的图片自动聚类,形成几个不同类别的相册。具体流程为:首先对内存中的照片进行特征提取,然后从提取的特征向量中随机选择 K 个作为初始质心,通过距离计算将每张照片分配到距离其最近的质心所代表的聚类中。随后软件会不断更新质心位置,直至聚类结果趋于稳定。用户可以通过这些不同聚类整理后的相册,快速找到相似的批量图片,提高浏览效率。聚类相册如图6所示。

最近删除功能为用户提供了一个临时存储空间,用于保存已删除的照片。在该功能模块中,删除后的照片在这里经过一段时间的备份保存后才会被永久删除;否则,用户可以一键恢复已删除的图片。这不仅为用户提供了额外的安全保障,防止误删重要照片,同时也提升了照片管理的灵活性。最近删除模块如图7所示。

我的收藏功能允许用户将喜欢的照片标记为收藏,以便快速访问和管理,收藏的照片会按照添加到收藏中的时间进行降序排序,方便了用户的查找和分享,如图8所示。

2.3 智能搜索模块

智能搜索模块为用户提供一个简洁的图片搜索框。在搜索框中直接搜索图片内容的关键词即可帮助用户快速定位所需的图片,无须浏览整个相册。如图9所示,该模块通过多模态技术[9],利用语义检索识别用户输入文本的语义信息[10],从而匹配与之相似度最高的图片,并根据相似度排序,为用户展示最符合搜索描述的图片。

2.4 隐私图片模块

隐私图片模块是智能AI相册中用于保护用户个人隐私和敏感照片的关键功能模块。用户可以在首次使用隐私功能时设置隐私密码以启用该功能,并将需要保护的照片设为隐私图片。用户在输入正确密码后进入隐私照片页面,可以进行查看、删除、分享或取消私密状态等管理操作。若忘记特定的隐私密码,也可以通过手机锁屏密码重置隐私密码,如图10所示。

3 系统实现

3.1 系统架构

对于智能AI相册软件的开发,本文采用了基于Python的Kivy框架的多层架构,根据职责将应用逻辑分布在不同的组件中。这些组件根据所属的不同层次被部署在不同的平台上。该应用的架构主要包括4个层次:用户界面层、应用逻辑层、模型服务层以及数据管理层。

用户界面层组件位于客户端设备上,主要由Kivy框架的GUI组件[11]构成。在该智能AI相册软件中,用户界面层通过Kivy应用程序直接负责页面的显示处理,进行各种图片浏览、编辑、分类及搜索等操作。

应用逻辑层和模型服务层位于应用服务器上,其中应用逻辑层主要负责实现软件的业务逻辑,如照片的上传处理、智能分类、隐私设置等。该层接收用户界面层传递的数据,进行适当处理后存储到数据存储设备中,或者从数据存储设备中读取数据,经过处理反馈到客户端。

模型服务层包含了K-Means算法和CLIP模型的实现,主要负责图像和文本的特征提取,以及基于特征的相似度计算和聚类分析。这一层为应用逻辑层提供必要的AI能力,以支持复杂的图像处理和智能搜索功能。

数据管理层位于数据库服务器上,使用SQLite轻量级数据库来存储和管理所有的图片数据以及用户生成的元数据。在智能AI相册系统中实现的所有数据存储和查询功能都是在数据管理层中实现。

这种分层的架构设计不仅确保了软件的可维护性和扩展性,也使得各层之间的职责清晰,有助于高效的团队协作和软件开发。

3.2 软件开发关键技术

CLIP模型的模型体积和计算需求通常超出了普通移动设备的处理能力,本文选择在云服务器上部署预训练的CLIP模型,通过开发一个API服务,接收从移动设备应用传输的模型调用请求,并返回相应的结果。这种方式使得模型不受手机硬件限制,可以利用强大的服务器资源,且易于更新和维护模型。

依赖CLIP模型进行实时语义检索的另一个问题是查询速度。当内存中存在大量图片时,提取每张图片的图像特征与关键字的文本特征进行匹配需要较长时间。本文通过3种策略解决该问题:

首先,每张图像在添加至相册时就预先计算并存储其特征向量于数据库文件中,这样搜索时仅需计算文本特征并进行匹配。

其次,对常见的搜索查询和结果进行缓存,当相同或类似的查询再次发生时,可以直接从缓存文件中提取结果,避免重复计算。

最后,当搜索结果较多时,先返回部分结果供用户查看,后台继续处理剩余结果并渐进式地显示。

4 软件测试与部署

为确保软件的正常使用,本文进行了以下测试:

1) 功能测试:确保所有功能模块和页面都能正常工作,包括照片展示、分类、搜索和隐私功能。

2) 性能测试:测试软件在不同设备上的性能,包括加载速度、响应时间和资源占用情况。

3) 兼容性测试:测试软件在不同操作系统和设备上的兼容性,确保在不同环境下都能正常运行。

4) 安全性测试:测试隐私功能的安全性,确保隐私图片只能在输入正确密码后才能查看。

5) 用户体验测试:邀请部分目标用户群体参与早期测试,收集并分析其反馈,以调整和优化用户界面和操作流程。

在测试结束后,本文对智能AI相册软件进行了平台部署。具体包括以下步骤:

1) 打包应用:使用Kivy的打包工具将应用程序打包为可执行文件,以便在不同平台上部署。

2) 发布到应用商店:将打包好的应用程序上传到应用商店,如Google Play Store、Apple App Store,并按照每个平台的审核指南进行优化,以确保顺利通过审核,以便用户下载和安装。

3) 更新和维护:在应用发布后,定期监控其运行状况,并根据用户反馈及时进行更新,以修复任何发现的漏洞并引入新功能。在重要的更新或功能发布后,特别是那些影响用户数据和隐私安全的更新,确保进行周密的测试和重新部署。

4) 用户支持:提供用户支持渠道,帮助用户解决使用中遇到的问题。

5 结束语

随着移动设备和社交媒体的普及,大量的图片被存储在智能设备中,如何高效地管理这些图片成为困扰用户的难题。为了解决传统相册在查询和管理图片方面的缺点,本文基于Kivy框架,设计并开发了一款智能AI相册软件。该软件集成了K-Means聚类算法和CLIP多模态预训练模型,实现了图片的时间轴管理和个性化聚类分类功能。用户也可以通过关键字描述直接搜索图片,并进行收藏、删除、隐私设置等图片管理操作,为用户提供了高效便捷的照片管理方式。

参考文献:

[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].计算机科学,2015,42(6A):491-499.

[4] 徐朝胜,师卫.应用软件跨平台技术的研究[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] 王泽深,杨云,向鸿鑫,等.零样本学习综述[J].计算机工程与应用,2021,57(19):1-17.

[9] 孙影影,贾振堂,朱昊宇.多模态深度学习综述[J].计算机工程与应用,2020,56(21):1-10.

[10] 文坤梅,卢正鼎,孙小林,等.语义搜索研究综述[J].计算机科学,2008,35(5):1-4.

[11] 李利,王秀峰.Java布局管理器在GUI设计中的应用[J].企业技术开发,2003(10):15-18.

【通联编辑:谢媛媛】