You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用camelot-py提取PDF表格触发OpenCV(-215)断言错误如何解决

错误排查方案

核心错误定位

报错!_src.empty() in function 'cv::cvtColor'属于OpenCV底层断言失败,原因是camelot调用图像处理逻辑时传入的源图像为空,说明PDF转临时图像的步骤执行失败,没有生成有效图像数据。


具体排查方向

  • 路径有效性校验
    首先测试目标PDF文件是否能被程序正常读取,执行以下代码验证:

    import os
    pdf_file = 'C:/Users/myuser/Desktop/statement_7022035.pdf'
    print(os.path.exists(pdf_file))
    

    如果返回False,修正路径写法,可尝试改用原始字符串格式r'C:\Users\myuser\Desktop\statement_7022035.pdf';如果返回True,检查PDF是否被其他程序独占打开,当前Python进程是否有文件读取权限。

  • Ghostscript环境配置校验
    即使已经安装Ghostscript,Windows环境下大概率是未将Ghostscript的bin目录加入系统PATH环境变量,导致camelot调用Ghostscript将PDF转为图像时执行失败,生成空图像。
    验证方式:打开cmd窗口执行gswin64c -version(64位系统)或gswin32c -version(32位系统),如果提示找不到命令,将Ghostscript安装目录下的bin文件夹(例如C:\Program Files\gs\gs9.56.1\bin)加入系统PATH,重启虚拟环境/IDE后重试。

  • 解析模式适配调整
    你当前使用的是camelot默认的lattice解析模式,该模式依赖OpenCV识别表格边框,必须经过PDF转图像的步骤。你的待处理文件是文本型PDF,更适合用不需要转图像的stream模式,修改代码如下即可跳过图像处理流程:

    tables = camelot.read_pdf(pdf_file, flavor='stream')
    

    如果stream模式可以正常提取数据,可直接使用该模式,不需要再排查lattice模式的依赖问题。

  • PDF属性验证
    确认PDF没有设置加密、编辑/复制限制,也可手动指定页码测试,避免默认读取的第一页无内容导致转换失败:

    # 示例:读取PDF第2页
    tables = camelot.read_pdf(pdf_file, pages='2', flavor='stream')
    

内容的提问来源于stack exchange,提问作者Garry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:09:03