Docker 部署 PaddleOCR 图文识别技术应用

2024-06-25 07:35:10 0点赞 15收藏 6评论

概述

PaddleOCR 是由百度飞桨(PaddlePaddle)团队开发的一款开源的光学字符识别(Optical Character Recognition, OCR)工具库。它专门设计用于文本检测和识别任务,能够识别图像中的文本信息,并将其转换成可编辑的文本格式。PaddleOCR 具有以下特点:

  1. 多语言支持:PaddleOCR 不仅支持中文,还支持多种语言的文本识别。

  2. 多种识别模型:提供了多种文本识别模型,包括但不限于通用识别模型、超轻量级模型等,以适应不同的应用场景和性能需求。

  3. 端到端识别:PaddleOCR 提供了端到端的识别流程,包括文本检测、方向分类、文本识别等步骤。

  4. 易用性:PaddleOCR 提供了丰富的 API 和命令行工具,使得开发者可以快速集成和使用 OCR 功能。

  5. 高性能:基于深度学习技术,PaddleOCR 在保证高精度的同时,也具有较高的识别速度。

  6. 可扩展性:PaddleOCR 允许用户自定义训练数据和模型,以适应特定的应用需求。

  7. 社区支持:作为开源项目,PaddleOCR 拥有活跃的社区,用户可以在社区中获取帮助和进行交流。

PaddleOCR 适用于各种场景下的文本识别任务,如文档扫描、票据识别、街景文字提取等,是企业和开发者在进行 OCR 相关开发时的一个有力工具。

效果预览

机票的识别结果:

Docker 部署 PaddleOCR 图文识别技术应用

照片识别结果:

Docker 部署 PaddleOCR 图文识别技术应用

从结果上看识别的准确率还是很高的,

镜像获取

本篇文章介绍如果通过 docker 部署 cpu 版本,有以下三种方式获取

  1. 通过 dockerfile 自己打包镜像使用 https://gitee.com/noogel/docker-paddleocr

  2. 通过拉取 dockerhub 的镜像。由于目前很难找到代理,倾向于通过第一中方式自己打包镜像。

  3. 联系作者要单独镜像文件。

其中第一中方式使用的是 cpu 版本服务端识别模型,需要部署的 cpu 有比较好的性能,特点是多语言识别,且识别结果很准确。

ENV PPOCR=v2.7.5 ENV DET=ch_PP-OCRv4_det_server_infer.tar ENV CLS=ch_ppocr_mobile_v2.0_cls_slim_infer.tar ENV REC=ch_PP-OCRv4_rec_server_infer.tar ENV PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python

如果你想切换使用不同的模型可以在 github 文档中自行选择:https://github.com/PaddlePaddle/PaddleOCR/blob/main/deploy/slim/auto_compression/README.md

测试代码

然而 docker 提供的只是 API 接口形式访问,需要先将图片读取转化为 base64 编码,再通过 POST 请求后获取解析结果。下面是测试代码。

import os import time import requests import json import base64 def cv2_to_base64(image): return base64.b64encode(image).decode("utf8") def main(args): headers = {"Content-type": "application/json"} cnt = 0 total_time = 0 for directory, _, file_list in os.walk(args.image_dir): for file_name in file_list: file_path = os.path.join(directory, file_name) img = open(file_path, "rb").read() if img is None: print("error in loading image:{}".format(file_path)) continue # seed http request starttime = time.time() data = {"images": [cv2_to_base64(img)]} r = requests.post(url=args.server_url, headers=headers, data=json.dumps(data)) elapse = time.time() - starttime total_time += elapse print("Predict time of %s: %.3fs" % (file_path, elapse)) res = r.json()["results"][0] print("Result:" + " ".join([val['text'] for val in res])) cnt += 1 if cnt % 100 == 0: print("{} processed".format(cnt)) print("avg time cost: {}".format(float(total_time) / cnt)) def parse_args(): import argparse parser = argparse.ArgumentParser(description="args for hub serving") parser.add_argument("--server_url", type=str, required=True) parser.add_argument("--image_dir", type=str, required=True) parser.add_argument("--output", type=str, default="./hubserving_result") args = parser.parse_args() return args if __name__ == "__main__": args = parse_args() main(args)

最后

关注到 PaddleOCR 是因为日常想找照片的时候,因为照片太多根本搜索不到,而照片存储NAS 上,又没有提供很好的图文检索功能,于是在自研的一个项目中想着集成图文检索功能。我是码力欧 https://noge.top ,如果你也有类似的需要,欢迎交流使用经验。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
6评论

  • 精彩
  • 最新
  • build镜像报错啊

    校验提示文案

    提交
    报啥错误

    校验提示文案

    提交
    第9行,RUN git clone 。。。,最后显示did not complete successfully:exit code:1

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 我这边也显示报错
    Could not find a version that satisfies the requirement setuptools>=67 (from versions: none)
    我是将pip install -r requirements.txt 这个注释掉 才build成功的

    校验提示文案

    提交
  • 有两个方案比这优雅 一个是Mt photos 另一个是anytxt 两个都能ocr,然后搜索

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
15
扫一下,分享更方便,购买更轻松