合同、票据、证件识别全搞定!NAS部署私有OCR服务,免费又安全
哈喽小伙伴们好,我是Stark-C~
说到OCR(Optical Character Recognition,也就是“光学字符识别”),很多特定办公党都知道,它能够将图片、扫描件中的文字快速转换成可编辑、可搜索的文本内容。
简单来说,无论是合同、发票、票据,还是身份证、营业执照等证件材料,我们都可以借助OCR快速完成文字提取,省去手动录入的麻烦,大幅提升工作效率。
不过,目前大多数用户使用的仍然是各类在线OCR服务。虽然使用方便,但每次识别都需要先将文件上传到第三方服务器,再由云端完成处理。这就引来了两个问题:一个是很多在线OCR服务是收费的,另外就是安全问题,毕竟敏感信息交给第三方,多多少少还是有些顾虑的。
所以今天就为大家分享一个可以部署在NAS上的私有化OCR服务方案,既能让我们无限制的使用OCR识别,还能保证所有操作均在本地进行,最重要的是无需担心隐私泄露问题。
PS:需要提前说明的是,本地OCR并非轻量级应用,对NAS的性能有一定要求。本文使用极空间NAS进行演示,建议极空间 Z4 Pro 及以上机型部署使用,且内存不低于8GB~。
关于PaddleOCR

🔺本文使用的OCR服务来自大名鼎鼎的百度飞桨PaddleOCR,它是目前国内应用最广泛的中文OCR项目之一,能够对图片、扫描件、PDF等文档中的文字内容进行高精度识别。据我所知,许多在线OCR工具和企业级文档识别方案,其底层能力实际上也是基于PaddleOCR构建的。
项目本身也是免费开源的,拥有十分活跃的开发者社区和完善的技术文档。如果大家想进一步了解PaddleOCR的功能特性、支持的识别能力以及官方部署方案,可以前往项目的 GitHub 主页查看详细介绍。
项目Github主页地址:https://github.com/PaddlePaddle/PaddleOCR
PaddleOCR部署
部署前的说明:

🔺想要部署完整的PaddleOCR服务在NAS上几乎是不可能的,所以有热心网友对项目进行了二次封装,并打包成轻量化的 Docker 镜像,除了大幅降低部署门槛,最主要的是对NAS的CPU和内存消耗也低了很多,至少已经能够在当前绝大多数高性能NAS上跑起来了。
目前在某Hub上已经有不少基于PaddleOCR封装的项目可供选择,经过一番对比后,我最终选择的是sllwakeup大佬上传过来的“sllwakeup/paddleocr”镜像,主要是看中它更新的日期近,并且在某Hub发布页还有详细的部署说明。也就是说,本文教程其实就是基于这个镜像来进行的。
还有就是,我们在NAS上其实部署的是一个OCR API服务。简单来说,就是通过接口的方式接收图片、PDF等文件,并返回识别后的文字结果。虽然它没有传统软件那样开箱即用的操作界面,但胜在资源占用更低、部署更灵活,并且我们还可以通过很多工具和服务来调用它,比如说Dify、n8n、OpenWebUI等支持HTTP API的应用,以及目前很火的Ai智能体,比如说OpenClaw、Hermes,甚至是WorkBuddy。
开始部署:

🔺本次部署以极空间NAS为例,打开文件管理器,在Docker目录下新建一个“paddleocr”的文件夹。

🔺然后点击极空间NAS的“Docker”应用,点击【Compose】 > 【新增项目】。

🔺在“创建项目”页面自定义项目名称,“存储位置”需要手动选择我们前面新建的“paddleocr”文件夹,在下方输入框输入以下Docker Compose 配置信息:
services:
paddleocr:
image: docker.1ms.run/sllwakeup/paddleocr:1.0.2
container_name: paddleocr
restart: unless-stopped
shm_size: 256m
platform: linux/amd64
# 限制 OCR 容器资源,避免模型初始化或异常请求耗尽宿主机资源。
cpus: "2.0"
mem_limit: 2g
mem_reservation: 512m
memswap_limit: 2g
pids_limit: 64
env_file:
- .env
environment:
TZ: Asia/Shanghai
LANG: C.UTF-8
LC_ALL: C.UTF-8
FLAGS_use_mkldnn: "${FLAGS_USE_MKLDNN}"
PADDLEOCR_DEVICE: ${PADDLEOCR_DEVICE:-cpu}
PADDLEOCR_LANG: ${PADDLEOCR_LANG:-ch}
PADDLEOCR_USE_DOC_ORIENTATION_CLASSIFY: "${PADDLEOCR_USE_DOC_ORIENTATION_CLASSIFY:-true}"
PADDLEOCR_USE_DOC_UNWARPING: "${PADDLEOCR_USE_DOC_UNWARPING:-true}"
PADDLEOCR_USE_TEXTLINE_ORIENTATION: "${PADDLEOCR_USE_TEXTLINE_ORIENTATION:-true}"
PADDLEOCR_RETURN_LINES: "${PADDLEOCR_RETURN_LINES:-true}"
ports:
- "8060:8080" # 项目访问端口,冒号前面请勿与其它服务冲突
command:
- uvicorn
- main:app
- --host
- 0.0.0.0
- --port
- "${PADDLEOCR_CONTAINER_PORT}"
# - --limit-concurrency 这个是表示 仅允许有 1 个并发请求
# - "1"
volumes:
- ./data:/app/data
- ./output:/app/output
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/health', timeout=5)"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
networks:
- paddleocr-network
networks:
paddleocr-network:
driver: bridge
name: paddleocr-network
以上代码需要修改的地方就看我给到的中文注释即可,镜像的拉取需要自行解决网络问题,粘贴到自己的NAS这边之前建议使用AI工具优化一下,以防止格式问题造成的部署失败。

🔺接着勾选下面的“添加.env”,输入以下配置信息,最后直接点“创建”即可:
# 推理设备:cpu;有 GPU 时可按镜像支持情况配置 gpu:0
PADDLEOCR_DEVICE=cpu
# OCR 识别语言:ch 表示中文
PADDLEOCR_LANG=ch
# 下载远程文件的超时时间(秒)
PADDLEOCR_TIMEOUT=60
# DOC/DOCX 转 PDF 的超时时间(秒)
PADDLEOCR_CONVERT_TIMEOUT=120
# 单个输入文件最大大小(字节,当前为 50 MiB)
PADDLEOCR_MAX_DOWNLOAD_BYTES=52428800
# 端口映射:宿主机端口:容器端口
PADDLEOCR_PORT=8060:8080
# 容器内 Uvicorn 服务端口
PADDLEOCR_CONTAINER_PORT=8080
# 是否启用 PaddlePaddle MKLDNN CPU 加速:0 关闭,1 开启
FLAGS_USE_MKLDNN=0
# 跳过模型源连通性检查,使用镜像中已内置的模型
PADDLE_PDX_DISABLE_MODEL_SOURCE_CHECK=true
# PaddleOCR 文档预处理模型开关:默认开启,识别旋转、弯曲或方向异常的文档时效果更好
# 文档方向分类(0°/90°/180°/270°)
PADDLEOCR_USE_DOC_ORIENTATION_CLASSIFY=false
# 文档畸变校正(透视、弯曲等)
PADDLEOCR_USE_DOC_UNWARPING=false
# 文本行方向分类
PADDLEOCR_USE_TEXTLINE_ORIENTATION=false
# 是否返回逐行结果;false 可减小响应体,减少对内存持续消耗,只返回必要字段。
PADDLEOCR_RETURN_LINES=false
以上每行代码都有中文注释,一般来说默认就可以了。

🔺项目部署之后可以看到容器显示正常,就说明可以使用了!
PaddleOCR体验
因为前面说了,我们部署的只是一个OCR API服务,需要通过其它工具或者AI智能体来调用。工具我目前这边没有测试,但AI智能体我倒是一直在用。

🔺先来试试小龙虾,我直接给小龙虾发了一段话:我通过 Docker 在本地部署了一个 PaddleOCR,接口地址是 http://192.168.31.122:8160 ,你测试一下能否正常使用。
然后小龙虾不到10秒就给出答案,告诉我们PaddleOCR服务可用。

🔺不过我最近常用的还是WorkBuddy,所以我把同样的话扔给它,让它也检测一下连通性。

🔺也给出了同样的答案!

🔺直接实测,我在我个人张大妈主页这里截取了一张包含文字介绍的图。

🔺直接扔到WorkBuddy这边让它使用PaddleOCR识别,不到5s时间就给出结果,并且准确率100%!
最后
总的来说,借助NAS强大的存储和持续运行能力,我们其实完全可以根据本文思路搭建一套属于自己的私有化OCR识别平台。
以后我们不管日常的截图、扫描件、PDF文档,还是合同、票据、证件等这些包含敏感信息的重要文件,我们都可以直接在本地完成识别,既能享受OCR带来的高效与便捷,又无需担心隐私泄露和次数限制的问题,有需要的小伙伴赶快试试吧!
好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,咱们下期再见!谢谢大家~

校验提示文案
校验提示文案