一、了解 PaddleOCR
在当今数字化时代,数据安全与便捷性愈发受到重视。许多企业与个人在处理文档、图片等数据时,对文字识别有着强烈需求,却担忧数据在云端处理时的隐私泄露风险。
PaddleOCR 的私有部署方案应运而生,它允许用户将文字识别服务搭建在本地环境,极大地增强了数据的隐私性。通过在私有服务器或本地设备上部署,企业敏感文件、个人私密文档等无需上传至外部云端,有效避免了数据在传输与存储过程中的泄露风险。同时,私有部署带来了使用上的便利性,无需依赖不稳定的网络连接,用户可随时随地快速调用 OCR 服务,实现对各类文档的高效处理,提升工作效率。
PaddleOCR 是百度基于飞桨深度学习框架研发的一款开源 OCR 工具,旨在打造一套丰富、领先且实用的 OCR 工具库,打通数据准备、模型训练、压缩和推理部署的全流程。它采用深度学习技术,先对图片进行缩放、灰度化、去噪等预处理操作,以提高文字识别的准确率。接着,运用深度学习模型检测图片中的文字区域,并将其转换为电脑可识别的边界框。最后,利用另一个深度学习模型识别边界框中的文字,将其转化为电脑可识别的文本。接下来,我们将详细介绍如何使用 Docker 在本地进行 PaddleOCR 的部署,让您轻松搭建属于自己的高效文字识别系统。
二、使用 Docker 部署 PaddleOCR
(一)配置Dockerfile文件
创建文件名为Dockerfile
的文件。
参考官方的安装教程可以直接从官方的镜像源拉取paddlepaddle镜像,然后下载paddleocr以及部署paddleocr需要的paddlex,安装完成之后接着使用paddleocr命令执行一次文字识别,该操作是为了初始化模型,会从官方直接下载模型文件。最后通过paddlex
服务化部署paddleocr,可以通过https服务调用ocr接口。
FROM ccr-2vdh3abv-pub.cnc.bj.baidubce.com/paddlepaddle/paddle:3.0.0
# 切换工作目录
WORKDIR /paddle
# # 安装 PaddleOCR 和 PaddleX 依赖
# RUN pip install paddlex
RUN pip install paddlex[ocr-core]
RUN paddlex --install serving
RUN paddleocr ocr -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png \
--use_doc_orientation_classify False \
--use_doc_unwarping False \
--use_textline_orientation False
# 默认命令:启动 PaddleX OCR 服务
CMD ["paddlex", "--serve", "--pipeline", "OCR"]
在 Dockerfile 所在目录执行:
docker build -t paddleocr:1.0 .
运行容器
docker run -d -p 9080:8080 --name paddleocr paddleocr:1.0
此时paddleocr服务就运行成功了,日志会输出以下内容
然后可以通过三、测试与验证来测试ocr效果,如果需要使用docker compose 部署可以参考下面内容。
(二)配置Docker Compose 文件
创建docker-compose.yaml文件,然后把上面的Dockerfile
文件和docker-compose.yaml文件放在一个文件夹下。
services:
paddleocr:
build: .
container_name: paddleocr
stdin_open: true
tty: true
restart: always #重启策略
volumes:
- ./:/paddle
shm_size: "8g"
ports:
- "9090:8080" # 映射宿主机端口到容器
在docker-compose.yml所在目录执行:
docker-compose up -d # -d表示后台运行
(三)在绿联NAS上部署
使用 Docker Compose 部署容器
在 UGOS Pro 系统上,推荐使用项目 Docker Compose 快速部署容器,适合需同时管理多个容器的场景,这种方法简化了容器的部署与管理工作。以下是使用 Docker Compose 部署 paddleocr 的详细步骤。
在docker目录下创建一个空文件夹 paddleocr
将上面的Dockerfile
和Docker Compose 配置文件上传到该文件夹。
进入 Docker 项目界面
在 UGOS Pro 系统中,打开 Docker 应用,点击【项目】 > 【创建】,启动项目创建向导。
配置 Docker Compose 文件
在项目创建向导中,选择存放路径为前面创建的paddleocr文件夹,导出docker compose配置,点击立即部署
,系统会自动拉取镜像并启动容器。
部署完成后执行下面的测试脚本。
三、测试与验证
(一)运行测试案例
部署完成后,就可以对 PaddleOCR 进行测试了。我们先准备一张简单的测试图片,比如一张写有 “欢迎使用 PaddleOCR” 的白底黑字图片,假设图片名为 “test.jpg” 。
接下来,通过命令行或编写 Python 脚本来进行测试。如果使用 Python 脚本,可以按照以下步骤进行:
- 打开文本编辑器,创建一个新的 Python 文件,比如 “test_ocr.py”。
- 在文件中编写以下代码:
import base64
import requests
API_URL = "http://192.168.1.113:9090/ocr"
def ocr(image_path):
with open(image_path, "rb") as file:
file_bytes = file.read()
file_data = base64.b64encode(file_bytes).decode("ascii")
payload = {"file": file_data, "fileType": 1}
response = requests.post(API_URL, json=payload)
assert response.status_code == 200
result = response.json()["result"]
for i, res in enumerate(result["ocrResults"]):
print(res["prunedResult"])
ocr_img_path = f"ocr_{i}.jpg"
with open(ocr_img_path, "wb") as f:
f.write(base64.b64decode(res["ocrImage"]))
print(f"Output image saved at {ocr_img_path}")
return result
# 使用示例
if __name__ == "__main__":
# 原始图片路径
input_image_path = "./data/test.jpg"
import time
st = time.time()
# 使用优化后的图片进行OCR识别
result = ocr(output_image_path)
et = time.time()
for i, res in enumerate(result["ocrResults"]):
# 打印识别结果
print(res["prunedResult"]['rec_texts'])
print(f'耗时:{et-st:.1f}s')
- 保存文件,然后在命令行中运行该脚本。如果你的 Python 环境已经配置好,在命令行中进入到 “test_ocr.py” 所在的目录,运行命令 “python test_ocr.py” ,脚本就会读取图片,将其转换为 base64 编码后发送给 PaddleOCR 服务,并接收返回的识别结果。
(二)检查识别结果
运行测试脚本后,我们需要检查识别结果是否准确。在脚本的输出中,会看到类似以下的内容:
{'model_settings': {'use_doc_preprocessor': True, 'use_textline_orientation': True}, 'doc_preprocessor_res': {'model_settings': {'use_doc_orientation_classify': True, 'use_doc_unwarping': True}, 'angle': 0}, 'dt_polys': [[[49, 22], [96, 20], [98, 46], [51, 49]], [[51, 71], [98, 71], [98, 100], [51, 100]], [[51, 122], [98, 122], [98, 148], [51, 148]], [[53, 173], [99, 173], [99, 200], [53, 200]], [[51, 224], [98, 224], [98, 251], [51, 251]], [[49, 273], [99, 276], [97, 304], [47, 304]]], 'text_det_params': {'limit_side_len': 64, 'limit_type': 'min', 'thresh': 0.3, 'max_side_limit': 4000, 'box_thresh': 0.6, 'unclip_ratio': 1.5}, 'text_type': 'general', 'textline_orientation_angles': [0, 0, 0, 0, 0, 0], 'text_rec_score_thresh': 0.0, 'return_word_box': False, 'rec_texts': ['桌面', '下载', '文档', '图片', '音乐', '视频'], 'rec_scores': [0.99993896484375, 0.9999144673347473, 0.9977823495864868, 0.9996212720870972, 0.9995757937431335, 0.9998965859413147], 'rec_polys': [[[49, 22], [96, 20], [98, 46], [51, 49]], [[51, 71], [98, 71], [98, 100], [51, 100]], [[51, 122], [98, 122], [98, 148], [51, 148]], [[53, 173], [99, 173], [99, 200], [53, 200]], [[51, 224], [98, 224], [98, 251], [51, 251]], [[49, 273], [99, 276], [97, 304], [47, 304]]], 'rec_boxes': [[49, 20, 98, 49], [51, 71, 98, 100], [51, 122, 98, 148], [53, 173, 99, 200], [51, 224, 98, 251], [47, 273, 99, 304]]}
在这个结果中,“rec_texts” 字段就是识别出的文本内容,我们可以将其与图片中的实际文字进行对比,判断识别是否准确。这里识别出的 “欢迎使用 PaddleOCR” 与图片内容一致,说明识别是正确的。“rec_scores” 字段表示识别结果的置信度,取值范围是 0 到 1,越接近 1 表示置信度越高,识别结果越可靠,这里的置信度为 0.9987,说明识别结果的可信度很高。“dt_polys” 字段表示文字在图片中的位置,以四边形的四个顶点坐标来表示,通过这些坐标可以在图片上绘制出文字的位置框,进一步验证识别的准确性。如果识别结果不准确,可能是由于图片质量不佳、模型不匹配、参数设置不当等原因导致的,可以尝试对图片进行预处理、更换模型或调整参数来提高识别准确率。
未来,PaddleOCR 在绿联 NAS 上的私有部署应用前景极为广阔,其强隐私性与便利性将进一步凸显。在文档处理方面,结合自动化脚本和其他办公工具,能够实现文档的自动分类、内容提取和关键词检索。例如,将 PaddleOCR 与 Python 的办公库相结合,当新文档存入绿联 NAS 时,可自动触发 PaddleOCR 进行文字识别,随后依据识别内容将文档分类至不同文件夹,大幅提升文档管理效率,且整个过程数据始终在本地,隐私安全得以保障。在图像分析领域,与图像识别技术结合,可实现对图片中文字和物体的同时识别与分析,应用于安防监控中的文字标识识别、智能相册中的文字信息提取等场景,让用户在本地即可快速处理分析图像,无需等待网络传输与云端处理。此外,还可探索 PaddleOCR 在多语言环境下的自动化翻译流程,将识别出的文字快速翻译成多种语言,满足跨国交流和文档处理的需求,全程在私有环境内运行,数据安全无虞。相信随着技术的不断发展和探索,PaddleOCR 在绿联 NAS 上的私有部署会发挥出更大价值,为我们的工作和生活带来更多便利与创新,在保障隐私的同时,提供高效、便捷的文字识别解决方案。