ofa_image-caption 扩展支持 WebP 格式与 EXIF 元数据保留功能
1. 引言
你有没有遇到过这种情况?从手机或相机里导出一堆照片,想快速整理归档,却要一张张手动写描述,费时又费力。或者,在做内容创作时,需要为大量图片配上精准的英文说明,人工处理效率极低。
今天要介绍的这个工具,就是来解决这个痛点的。它叫 ofa_image-caption,是一个纯本地运行的图像描述生成工具。简单来说,你给它一张图,它就能用英文告诉你这张图里有什么。
这个工具的核心是基于一个叫 OFA 的模型,这个模型在图像描述生成领域表现很不错。我们之前发布的版本已经能很好地处理 JPG、PNG 这些常见格式了。但最近,越来越多的用户开始使用 WebP 这种更高效的图片格式,同时,很多摄影师和内容创作者也希望生成的描述能保留图片拍摄时的原始信息(比如拍摄时间、相机型号)。
所以,我们对这个工具进行了一次重要的升级。这篇文章,我就带你手把手看看,我们是如何在原有代码基础上,扩展了对 WebP 格式的支持,并实现了 EXIF 元数据的保留功能。整个过程就像给一个工具加上了两个非常实用的'配件',让它能适应更多场景,更好用。
2. 项目回顾与升级目标
在开始动手改代码之前,我们先快速回顾一下这个工具原本是干什么的,以及我们这次想让它变得多能干。
2.1 原有工具的核心功能
这个工具本质上是一个本地化的'看图说话'小助手。它的工作流程非常清晰:
- 你上传一张图片(之前支持 JPG, PNG, JPEG)。
- 工具在后台调用 OFA 模型,这个模型是专门在 COCO 英文数据集上训练过的,所以它'说'的是英文。
- 工具把模型生成的英文描述,通过一个简洁的网页界面展示给你看。
整个工具基于 ModelScope 和 Streamlit 搭建,最大的优点就是纯本地运行,你的图片数据不会上传到任何服务器,隐私有保障,而且如果电脑有独立显卡(GPU),推理速度会非常快。
2.2 本次升级要解决的两个问题
随着用户增多,我们收到了两类反馈:
- 格式支持问题:'我有很多网站截图和素材是 WebP 格式的,上传不了,还得先转换,太麻烦了。'
- 信息关联问题:'生成的描述很好,但如果能和我照片自带的拍摄信息(EXIF)一起保存下来,对我后续整理和归档就太有帮助了。'
因此,我们这次代码升级的目标非常明确:
- 目标一:让工具能直接读取和处理 WebP 格式的图片。
- 目标二:在生成描述的同时,把图片原始的 EXIF 元数据(如果有的话)提取并保留下来,方便后续使用。
下面,我们就进入实战环节,看看代码具体是怎么改的。
3. 代码实战:扩展 WebP 格式支持
原来工具里,限制图片格式的代码可能长这样(在文件上传组件处):
uploaded_file = st.file_uploader("上传图片", type=['jpg', 'jpeg', 'png']) # 这里只定义了三种格式
看到问题了吗?type 列表里没有 webp。所以用户上传 WebP 文件时,会被直接过滤掉,根本选不中。
解决方案非常简单,只需要加一个后缀名:
uploaded_file = st.file_uploader("上传图片", type=['jpg', , , ])

