掘金 人工智能 前天 18:08
OCR工程实践复盘:从云服务踩坑到PaddleOCR本地部署优化全流程
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文分享了作者在构建知识库助手过程中,如何通过本地部署PaddleOCR解决OCR难题的实战经验。文章对比了云OCR和开源OCR的优缺点,最终选择了PaddleOCR,并详细介绍了PaddleOCR的安装、配置、API封装以及Docker部署流程。通过实践,作者实现了数据安全、高效率的OCR服务,并展示了其在知识库助手中的应用效果,为读者提供了可行的技术方案。

🔍 背景:知识库助手需要处理非结构化文档,OCR技术成为关键。作者在实践中遇到了云OCR的隐私、延迟、成本问题,以及开源OCR的准确率问题,最终选择了PaddleOCR。

💡 方案:PaddleOCR以其高准确率、优秀性能、开源可自定义、本地化部署和活跃社区的优势,成为作者的首选。文章详细介绍了PaddleOCR的安装、依赖配置以及API封装,为本地部署提供了技术细节。

⚙️ 实践:作者分享了使用Docker部署PaddleOCR并接入知识库助手的经验。通过调整Dockerfile和requirements.txt文件,实现了PaddleOCR的Docker化部署,并展示了在知识库助手中的实际运行效果,验证了方案的可行性。

✅ 效果:PaddleOCR本地部署方案在数据安全、性能和成本上取得了显著优势。与云OCR和早期方案相比,PaddleOCR在手写体识别和整体识别准确率上表现更优,提升了知识库助手的功能和用户体验。

OCR(光学字符识别) 作为知识库助手的数据入口,重要性不言而喻。但在实际落地过程中,我遇到了许多“坑”,性能、准确率、成本、部署难题……这篇文章,我将结合我的实战经历,告诉你如何用PaddleOCR本地部署,助力知识库助手稳定高效运转

一、为什么知识库助手离不开 OCR?

知识库助手核心是处理各种格式的文档,其中很多合同、简历、票据、手写材料等并非纯文本,OCR 成为“破局关键”。

二、OCR路上的“坑”逐一回顾

1. 云OCR的隐私与延迟问题

初期我尝试用百度云、腾讯云等云服务接口,虽然集成简单,但存在以下问题:

2. 开源OCR准确率参差不齐

试过Tesseract等开源项目,准确率与中文识别能力欠佳:

3. GPU资源与部署环境的挑战

不少OCR模型对硬件要求较高:

三、为什么最终选定 PaddleOCR 本地部署?

经过大量调研与试验,PaddleOCR以其以下优势成为我的首选:

四、PaddleOCR本地部署实操

1.基础环境准备

首先是Python8.0+基础环境,这个是必须的,关于Python的安装我这里就不做赘述。CUDA(Compute Unified Device Architecture)支持,如果要使用GPU加速,必须要有CUDA,然后需要根据其版本选择对应的PaddleOCR版本。因为我是Windows环境,在NVIDIA控制面板也没有找到CUDA的版本号,因此使用以下指令获取:

nvidia-smi

Linux和MacOS环境可以用以下指令都可以查看,如果是NVIDIA驱动,和Windows用同样的指令即可:

nvcc --version
cat /usr/local/cuda/version.txt

2.安装PaddleOCR

因为PaddleOCR依赖飞桨平台,因此要先安装PaddlePaddle,先在飞桨平台上找到适合自己CUDA版本的包,如果新版本没有对应的,则选择旧版本安装,然后根据自己的版本找到合适版本即可。指令直接cv过来用即可,因为我GPU和CPU版本都想尝试,所以我两个指令都贴出来。

python -m pip install paddlepaddle-gpu==2.6.2.post117 -i https://www.paddlepaddle.org.cn/packages/stable/cu117/python -m pip install paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/

安装3.0的CPU版本:安装适配的PaddleOCR3.0版本:

pip install paddleocr

安装2.6的GPU版本:安装适配的PaddleOCR2.6版本:

pip install "paddleocr>=2.6"

3.安装OpenCV

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,功能强大且应用广泛。号称是图像处理的瑞士军刀,它可以对图片进行非常丰富的预处理操作。不过其安装使用非常方便,以下一行指令搞定:

pip install opencv-python

4.封装OCR图片识别API

我的本地项目结构如下:以下是基础的OCR代码,不过由于我自身样本不使用OpenCV做预处理效果更好,因此代码中注释了预处理的内容:

ocr = PaddleOCR(    use_doc_orientation_classify=False,     use_doc_unwarping=False,     use_textline_orientation=False)async def process_ocr(file: UploadFile):    uid = uuid.uuid4().hex    tmp_input = f"ocr/paddle/tmp/tmp_{uid}.jpg"    tmp_output = f"ocr/paddle/tmp/pre_{uid}.jpg"    output_dir = "ocr/paddle/output"        # 确保中间目录存在    os.makedirs(os.path.dirname(tmp_input), exist_ok=True)    os.makedirs(output_dir, exist_ok=True)    # 保存上传的文件    with open(tmp_input, "wb") as buffer:        shutil.copyfileobj(file.file, buffer)    # 读取图像    img = cv2.imread(tmp_input)    if img is None:        raise ValueError(f"图像读取失败,请确认上传的是有效图片,收到文件名: {file.filename}")    # 预处理    # gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    # _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)    # denoised = cv2.medianBlur(binary, 3)    cv2.imwrite(tmp_output, img)    # OCR识别    result = ocr.predict(tmp_output)        # 保存识别结果可视化 + JSON        texts = []    for i,res in enumerate(result):        texts.append(res["rec_texts"])    return {"texts": texts}

大家也可以使用以下代码将输出结果保存到文件夹中,以便于观察OCR的实际识别情况:

for res in result:    res.print()    res.save_to_img("output")    res.save_to_json("output")

这样输出后会在本地生成实际识别效果的图片和识别结果的json文件,我们可以看到PaddleOCR识别了哪些区域,识别结果如何:以下是我用源文件和输出的json文件的对比:

5.使用Docker部署并接入知识库助手

使用Docker部署只需要调整其Dockerfile,然后在requirements.txt文件中增加对应的依赖即可。Dockerfile调整如下:

FROM python:3.10-slim# 设置 UTF-8 环境防止中文乱码ENV PYTHONIOENCODING=UTF-8 \    LANG=C.UTF-8 \    LC_ALL=C.UTF-8WORKDIR /app# 安装 PaddleOCR 和 OpenCV 所需的系统依赖RUN apt-get update && apt-get install -y \    libgomp1 \    libgl1 \    libglib2.0-0 \    && rm -rf /var/lib/apt/lists/*RUN pip install --upgrade pip \    && pip uninstall -y paddlepaddle paddlepaddle-gpu paddle \    && pip install paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/COPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txt# 不 copy 代码!由 volumes 动态挂载CMD ["python", "main.py"]

requirements.txt中增加如下内容:

paddleocr==3.0.3opencv-python==4.11.0.86

然后启动即可:

docker compose downdocker compose up -d --build

6.知识库助手运行效果演示

在知识库助手中调整HTTP节点为新的接口:查看生成的预览结果,我们可以看到识别效果相当可以,除去特别模糊的部分,其余内容基本都可以完整的识别出来:我们再来对比一下之前用百度OCR实现的识别效果,从图中我们可以看到,对手写部分的识别基本无效,其他内容稍微有点模糊也识别不准确,可以说是根本没法用:到这里呢,整个部署实操流程就完成了,可以说是简单又好用,真正的快、准、狠。本文是使用CPU版本完成的演示,实际效果也不慢,大概3秒左右就能出识别结果。如果有需要GPU部署到Docker版本的读者可以留言,或者加入我的交流群咨询。

五、附录:实用资源推荐

六、总结

这一路的OCR探索,教会我三个核心真理:

只有用心打磨底层技术,才能在智能文档时代占据一席之地PaddleOCR本地方案只是开始,AI赋能的知识库助手将迎来无限可能。

点个【在看】和【转发】支持我继续优化内容!你的鼓励是我继续打磨 AI 应用的最大动力💪

🎁 关注我的公众号【AI转型之路】 ,获取更多内容,有疑问也可以在公众号咨询。

加微信sgw_clj

发送66进群

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

PaddleOCR OCR 知识库助手 本地部署 Docker
相关文章