跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

OFA Image Caption 扩展支持 WebP 格式与 EXIF 元数据保留

综述由AI生成对 OFA Image Caption 工具的升级方案,旨在解决原有版本不支持 WebP 格式及无法保留图片 EXIF 元数据的问题。通过修改 Streamlit 文件上传组件类型列表并集成 Pillow 库的 EXIF 提取功能,实现了 WebP 格式的无缝支持及拍摄信息的自动展示。升级后工具在保持本地运行和隐私安全的同时,增强了格式兼容性与信息维度,适用于摄影师和内容管理者的批量处理场景。

指针猎手发布于 2026/4/6更新于 2026/6/1042 浏览

OFA Image Caption 扩展支持 WebP 格式与 EXIF 元数据保留

1. 引言

从手机或相机导出照片时,手动写描述费时费力。在做内容创作时,为大量图片配精准英文说明效率极低。

本文介绍的 ofa_image-caption 是一个纯本地运行的图像描述生成工具。基于 OFA 模型,输入图片即可输出英文描述。原有版本已支持 JPG、PNG 等常见格式,但面对日益普及的 WebP 格式及用户对原始拍摄信息(EXIF)的需求,我们进行了升级。

2. 项目回顾与升级目标

2.1 原有工具的核心功能

该工具是一个本地化的'看图说话'助手:

  1. 上传图片(原支持 JPG, PNG, JPEG)。
  2. 调用 OFA 模型(基于 COCO 数据集训练,输出英文)。
  3. 展示结果(通过 Streamlit 网页界面)。

基于 ModelScope 和 Streamlit 搭建,纯本地运行保障隐私,配合 GPU 推理速度快。

2.2 本次升级要解决的两个问题

用户反馈主要集中在:

  1. 格式支持:WebP 格式无法上传,需转换太麻烦。
  2. 信息关联:希望生成的描述能保留图片原始 EXIF 信息(如时间、相机型号)。

升级目标:

  • 直接读取和处理 WebP 格式图片。
  • 提取并保留图片原始的 EXIF 元数据。

3. 代码实战:扩展 WebP 格式支持

原文件上传组件限制如下:

uploaded_file = st.file_uploader("上传图片", type=['jpg', 'jpeg', 'png'])  # 仅定义三种格式

解决方案: 在 type 列表中添加 webp:

uploaded_file = st.file_uploader("上传图片", type=['jpg', 'jpeg', 'png', 'webp'])  # 新增 webp

此外,需确保后端 Pillow 库支持 WebP。建议在 requirements.txt 中指定较新版本:

streamlit>=1.28.0
modelscope>=1.9.0
pillow>=9.0.0

4. 代码实战:提取与保留 EXIF 元数据

EXIF 是嵌入图片中的'身份证',记录拍摄设备、时间等信息。

4.1 如何提取 EXIF 信息

使用 Pillow 库的 _getexif() 方法:

from PIL import Image import PIL.ExifTags def extract_exif(image_path): """ 提取图片的 EXIF 元数据。 参数: image_path: 图片文件的路径。 返回: 一个字典,包含可读的 EXIF 标签和值;如果无 EXIF 或读取失败,返回空字典。 """ exif_data = {} try: img = Image.open(image_path) info = img._getexif() if info: for tag, value in info.items(): decoded_tag = PIL.ExifTags.TAGS.get(tag, tag) exif_data[decoded_tag] = value except Exception as e: print(f"读取 EXIF 时出错:{e}") return exif_data
4.2 如何与描述结果一起展示

在 Streamlit 界面新增可折叠区域显示 EXIF:

if caption:
    st.success("生成成功!")
    st.markdown(f"**生成描述:** {caption}")
    
    # 新增:提取并显示 EXIF 信息
    exif_info = extract_exif(temp_image_path)  # temp_image_path 为临时保存路径
    
    if exif_info:
        with st.expander("📸 查看图片 EXIF 元数据"):
            if 'DateTimeOriginal' in exif_info:
                st.text(f"拍摄时间:{exif_info['DateTimeOriginal']}")
            if 'Make' in exif_info and 'Model' in exif_info:
                st.text(f"拍摄设备:{exif_info['Make']} {exif_info['Model']}")
            if 'ExposureTime' in exif_info:
                st.text(f"曝光时间:{exif_info['ExposureTime']} 秒")
            if 'FNumber' in exif_info:
                st.text(f"光圈值:f/{exif_info['FNumber']}")
            if 'ISOSpeedRatings' in exif_info:
                st.text(f"ISO 感光度:{exif_info['ISOSpeedRatings']}")
            
            if st.checkbox("显示全部 EXIF 信息"):
                st.json(exif_info)
    else:
        st.info("此图片未包含 EXIF 元数据。")

5. 完整功能演示与效果

5.1 操作流程演示
  1. 启动工具:运行 streamlit run app.py。
  2. 上传混合格式图片:支持 .jpg, .png, .webp。
  3. 生成描述与查看 EXIF:
    • 上传含 EXIF 的原图,点击生成。
    • 界面显示英文描述,下方出现'查看图片 EXIF 元数据'区域。
    • 展开后可见拍摄时间、设备型号等,或选择显示全部 JSON 数据。
    • 若图片无 EXIF(如截图),则友好提示。
5.2 升级带来的价值
  • 格式兼容性更强:无缝支持 WebP,覆盖互联网素材。
  • 信息维度更丰富:视觉描述 + 拍摄元数据,便于结构化归档。
  • 应用场景更广:适合摄影师批量处理及内容管理者自动化打标。

6. 总结

本次对 ofa_image-caption 工具的升级主要完成了两点:

  1. 诊断需求:解决 WebP 不支持及 EXIF 缺失痛点。
  2. 实施改造:修改 file_uploader 类型列表扩展 WebP 支持;编写 extract_exif 函数集成到展示界面。

通过轻量级代码改进,显著提升了工具的实用性和用户体验。

目录

  1. OFA Image Caption 扩展支持 WebP 格式与 EXIF 元数据保留
  2. 1. 引言
  3. 2. 项目回顾与升级目标
  4. 2.1 原有工具的核心功能
  5. 2.2 本次升级要解决的两个问题
  6. 3. 代码实战:扩展 WebP 格式支持
  7. 4. 代码实战:提取与保留 EXIF 元数据
  8. 4.1 如何提取 EXIF 信息
  9. 4.2 如何与描述结果一起展示
  10. 5. 完整功能演示与效果
  11. 5.1 操作流程演示
  12. 5.2 升级带来的价值
  13. 6. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • MySQL 事务详解:ACID 属性、引擎支持与提交方式
  • Mac 系统性能优化指南:5 个设置提升运行流畅度
  • AIGC 个性化与定制化内容生成的技术与应用
  • 国内大模型公司面试经验总结与备考指南
  • Prompt 逆向工程:从错误答案回溯优化思路
  • Python if 条件语句详解与实战示例
  • IntelliJ IDEA 快速创建 Spring Boot Web 项目指南
  • 基于闲置 Mac Mini 部署 OpenClaw 构建金融 AI 分析助手
  • Conda InvalidArchiveError 错误排查与解决方案
  • FastGPT 结合 MCP 协议实现工具增强型智能体构建
  • VS Code 远程开发 GitHub Copilot 失效排查指南
  • Android 版 Kotlin 协程入门进阶实战:基础应用
  • 前端应用监控方案与最佳实践
  • Python 在 CentOS 系统上的安装、配置与部署深度指南
  • Python 使用 Selenium 实现网页自动化操作指南
  • 哈佛学霸的学习力培养与专注力提升指南
  • 大模型技术:检索增强生成 RAG 详解
  • Python+AI 三大高性价比赛道解析与学习路线
  • 二叉搜索树 C++ 实现:增删查改详解
  • AI 领域必读精选:6 部名家名作

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online