qidao123.com技术社区-IT企服评测·应用市场

标题: ocr识别遇到的小问题-图片的EXIF 元数据 [打印本页]

作者: 宁睿    时间: 2025-4-10 13:16
标题: ocr识别遇到的小问题-图片的EXIF 元数据
背景

  之前在公司通过paddleocr写了个接口,传入图片的base64编码返回识别出的文字信息。但是图片为横向时,文字行会乱序,以是准备新加一个功能通过paddleclas推理图片文字的倾斜角度,并将图片旋转为正向。在测试过程中发现windows打开一个正向图片,调用ocr接口时无法识别,返回一堆奇怪的文字。
排查过程

  首先我必要识别的图片在windows中打开是如许的,宽为4096,长为3072



  识别出的结果为

(图片内容为示例图片,实际是纯文字图片,返回的内容都是奇怪的文字)


  之后尝试了其他正向图片都可以正知识别,于是在PyCharm中计划通过python打开图片,然后使用本地的paddleocr尝试一下。使用如下代码:
  1. with open("C:\\Users\\xxxxx\\test.jpg", "rb") as image_file:
  2.      file_content = base64.b64encode(image_file.read()).decode("utf8")
复制代码
  发现预览图片时,图片是旋转的,于是将图片复制到pycharm和idea里,发现全部都是旋转的图片。

  并且发现只有jpg格式的出现了这个问题,其他如PNG格式的图片是正常的。


  于是搜索了一下jpg和PNG图片的不同之处。发现JPEG 图片通常包含 EXIF 元数据,里面包罗了一个 Orientation 标签,它告诉系统应该怎样旋转图片来正常显示。
  那么问题就很明显了,使用如下代码对图片的EXIF信息进行读取
  1. from PIL import Image, ExifTags
  2. def open_image_with_correct_orientation(path):
  3.     image = Image.open(path)
  4.     try:
  5.         for orientation in ExifTags.TAGS.keys():
  6.             if ExifTags.TAGS[orientation] == 'Orientation':
  7.                 break
  8.         exif = image._getexif()
  9.         if exif is not None:
  10.             orientation_value = exif.get(orientation)
  11.             if orientation_value == 3:
  12.                 image = image.rotate(180, expand=True)
  13.             elif orientation_value == 6:
  14.                 image = image.rotate(270, expand=True)
  15.             elif orientation_value == 8:
  16.                 image = image.rotate(90, expand=True)
  17.     except Exception as e:
  18.         print(f"读取 EXIF 方向失败: {e}")
  19.     return image
  20. # 示例使用
  21. img = open_image_with_correct_orientation("your_image.jpg")
  22. img.show()
复制代码
  返回结果为

  发现Orientation 为3,证明原始图片确实是旋转过的。
解决办法

1、通过上述代码获取图片的元数据的旋转信息,对图片进行旋转
2、通过paddleclas判定文字的倾斜角度,对图片进行旋转,我这边采用的是这种方法,毕竟这次遇到的bug是由于测试为了方便直接对图片进行旋转并保存而出现。线上情况中图片由于每个人拍摄角度不固定,以是很可能上传的原始图片就是倾倒的。
图片的EXIF元数据

常见关键字段:
Orientation 的取值含义:
值阐明1正常3旋转 180 度6顺时针旋转 90 度8逆时针旋转 90 度常见支持 EXIF 的图片格式
值阐明JPEG / JPG✅ 是主要支持 EXIF 的格式TIFF✅ 原始格式之一,支持丰富的元信息HEIF / HEIC✅ 新一代图像格式(如 iPhone 照相),支持 EXIF,但不是全部工具都能读取WebP✅ 支持嵌入元数据(EXIF 和 XMP),但不是标准实现的一部门,兼容性差异较大RAW 格式(如 .CR2, .NEF, .ARW, .DNG 等)✅ 摄影相机原始文件,通常包含大量 EXIF 和其他元数据PNG❌ 不支持 EXIF,但可以写入其他形式的元数据(如 tEXt 或 iTXt)BMP❌ 不支持 EXIFGIF❌ 不支持 EXIFSVG❌ 是 XML 文本格式,不支持 EXIF,但可以有自定义 metadata 地区
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4