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

如何修复Streamlit OCR平台开发中的TypeError:expected str, bytes or os.PathLike object, not UploadedFile

问题描述

我正在用Streamlit和EasyOCR开发OCR平台,已经实现了图片转文本的功能,但卡在PDF转JPG这一步。流程是上传PDF→转JPG→转numpy.ndarray→提取文本,但上传PDF时触发TypeError: expected str, bytes or os.PathLike object, not UploadedFile,错误出在执行convert_from_path(uploaded_file)的时候。

代码片段:

uploaded_file = st.file_uploader("Download PDF:", type=['pdf'])
if uploaded_file is not None:
    st.write('File downloaded')
    pdf2img = convert_from_path(uploaded_file)
    pdf2img.save('out.jpg', 'JPEG')
    imgcv=cv2.imread('out.jpg')
    imgcv=cv2.cvtColor(imgcv, cv2.COLOR_BGR2RGB)
    file_bytes = np.asarray(bytearray(imgcv.read()), dtype=np.uint8)
    bytearray_img1 = cv2.imdecode(file_bytes, 1)
解决方法

核心问题是convert_from_path需要文件路径或字节流,但Streamlit的UploadedFile是文件对象,不是路径。另外代码还有两处错误:convert_from_path返回的是图片列表,不能直接调用save;imgcv是numpy数组,不存在read()方法。

修正步骤:

  • 用convert_from_bytes替代convert_from_path,直接传入上传文件的字节数据
  • 处理convert_from_bytes返回的图片列表(兼容PDF多页场景)
  • 直接将PIL图片转为numpy数组,跳过本地文件存储,减少IO操作

修正后的代码:

import streamlit as st
from pdf2image import convert_from_bytes
import cv2
import numpy as np
import easyocr

# 初始化EasyOCR阅读器,可按需设置语言
reader = easyocr.Reader(['ch_sim', 'en'])

uploaded_file = st.file_uploader("上传PDF文件:", type=['pdf'])
if uploaded_file is not None:
    st.write('文件已上传')
    # 读取上传文件的字节数据
    pdf_bytes = uploaded_file.read()
    # 将PDF转换为PIL图片列表(每页对应一张图片)
    pil_images = convert_from_bytes(pdf_bytes)
    
    # 遍历处理每一页
    for idx, img in enumerate(pil_images):
        st.subheader(f"第{idx+1}页识别结果")
        # 将PIL图片转为numpy数组
        img_np = np.array(img)
        # 转换为OpenCV兼容的BGR格式
        img_cv = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
        # 用EasyOCR提取文本
        result = reader.readtext(img_cv)
        
        # 展示识别出的文本
        for detection in result:
            st.write(f"文本: {detection[1]}")

内容的提问来源于stack exchange,提问作者Алексей Курочкин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:44:59