使用Python-pytesseract处理PDF遇Unsupported image object错误的解决办法
解决Python用Tesseract处理PDF时的「Unsupported image object」错误
嘿,这个问题我碰到过好多次啦——cv2.imread()只能读取JPG、PNG这类图像格式的文件,完全没法直接处理PDF,这就是你触发TypeError: Unsupported image object的核心原因。下面给你两种靠谱的解决思路,根据你的PDF类型选就行:
方案一:把PDF转成图片后再做OCR识别(适合扫描版/图片型PDF)
如果你的PDF是扫描生成的(本质是一堆图片),那得先把每页PDF转成图片,再用Tesseract识别。推荐用pdf2image库来做转换:
步骤1:安装依赖
先装pdf2image,Mac用户还要额外装poppler(PDF转图片的底层工具):
# 安装pdf2image pip install pdf2image # Mac用户用Homebrew装poppler brew install poppler
步骤2:修改后的代码
import cv2 import pytesseract import numpy as np from pdf2image import convert_from_path # 把PDF转成图片列表(每页对应一张图) pages = convert_from_path('/Users/user1/Desktop/folder1/pdf1.pdf') # 遍历每页图片做OCR for page_num, page in enumerate(pages, start=1): # 把PIL图片转成OpenCV格式(也可以直接用PIL图片给Tesseract) img = cv2.cvtColor(np.array(page), cv2.COLOR_RGB2BGR) # 直接用PIL图片的话,替换成这行:text = pytesseract.image_to_string(page) text = pytesseract.image_to_string(img) print(f"第{page_num}页文本:") print(text)
方案二:直接提取PDF文本(适合原生文本型PDF)
如果你的PDF是直接编辑生成的(不是扫描件),那根本不需要OCR,直接用文本提取库更快更准确,比如PyPDF2:
步骤1:安装依赖
pip install PyPDF2
步骤2:提取文本的代码
from PyPDF2 import PdfReader reader = PdfReader('/Users/user1/Desktop/folder1/pdf1.pdf') text_content = "" for page in reader.pages: text_content += page.extract_text() + "\n" print(text_content)
这样就能完美解决你的问题啦~
内容的提问来源于stack exchange,提问作者adrCoder




