PaddleOCR百度开源—文字识别OCR windows端口本地部署使用

目录

更新时间:2022年02月07日 新增: 本地调用OCR

什么是Paddle OCR?

Paddle OCR特性:

导言

下载源码

配置环境        

 安装依赖库

报错处理办法: 

下载模型

文本检测模型

配置模型 

文本效果:

文字OCR识别

 文字OCR识别结果:​


更新时间:2022年02月07日 新增: 本地调用OCR

什么是Paddle OCR?

Paddle OCR特性:

  • 超轻量级中文OCR,总模型仅8.6M
    • 单模型支持中英文数字组合识别、竖排文本识别、长文本识别
    • 检测模型DB(4.1M)+识别模型CRNN(4.5M)
  • 多种文本检测训练算法,EAST、DB
  • 多种文本识别训练算法,Rosetta、CRNN、STAR-Net、RARE

本教程旨在帮助使用者快速了解PaddleOCR,并掌握PaddleOCR的使用方式,包括:

    1. PaddleOCR快速使用
    1. 文本检测模型的训练方式
    1. 文件识别模型的训练方式

以上摘抄至: PaddleOCR使用教程 - 飞桨AI Studio - 人工智能学习与实训社区

导言

上文是官方的教程和介绍,但是属于部署在Linux端口上的,所以就希望每个喜欢代码的小伙伴也能简单易上手,所以出了个在window端的部署,使用的版本如下:

        Window 10 系统

        python 3.8 

        Pycharm

下载源码

首先下载源码: PaddleOCR: 基于飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测、文本识别的训练算法。https://gitee.com/paddlepaddle/PaddleOCR

配置环境        

        安装依赖库

        在下载的文件夹下运行cmd命令:

pip install -r requirments.txt -i https://mirror.baidu.com/pypi/simple

报错处理办法: 

这里有个很奇怪的报错问题,官方教程里命令行的安装,出现了找不到文件的提示:

[Errno 2] No such file or directory: 'requirments.txt'

后来我才发现原来下载的代码和官方教程出现的偏差

 

 这个地方少了个E,所以各位小伙伴运行报错找不到文件可以查看一下文件名是否正确

 pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple

运行前需要确认pip的版本是否满足要求,要求pip版本为9.0.1+。可通过事先升级pip,运行如下命令:

pip install --upgrade pip

下载模型


文本检测模型https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar

配置模型 

手动创建: inference 文件夹 在文件夹内再创建个det 文件

将下载的三个文件放置到 PaddleOCR-release-2.3 \ inference \ det    文件夹下

 

 执行以下代码

(作者图片文件路径:E:\ png\2.jpg)

python tools/infer/predict_det.py --image_dir="E:\png\2.jpg" --det_model_dir="./inference/det/" --use_gpu=False

文本效果:

执行成功会有个新的文件夹  inference_results 

 

 文档识别效果(还不错,大部分都识别出来了)

到这一步就都差不多了,可以开始识别文字了,在文件夹PaddleOCR下新建py文件

文字OCR识别

from paddleocr import PaddleOCR
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from paddleocr import PaddleOCR, draw_ocr
font=cv2.FONT_HERSHEY_SIMPLEX

# Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch",use_gpu=False,
                rec_model_dir='./models/ch_ppocr_server_v2.0_rec_infer/',
                cls_model_dir='./models/ch_ppocr_mobile_v2.0_cls_infer/',
                det_model_dir='./models/ch_ppocr_server_v2.0_det_infer/') # need to run only once to download and load model into memory


img_path = r'E:\png\1643776550(1).jpg'
result = ocr.ocr(img_path, cls=True)
# 显示结果
from PIL import Image
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='./simfang.ttf')
im_show = Image.fromarray(im_show)

im_show.save('result.png')
print(txts)

 文字OCR识别结果:

(这一步会自己下载文件,有个进度条稍微等待一下就行了)

左边的是文字,后面的小数点是文字的置信区间

做到这一步基本已经实现了本地部署OCR,但是我们有时候需要OCR给我们返回正确的识别文字结果。

在PddleOCR文件夹下,新建一个py文件,叫什么都行。

我们使用flask,在本地主机上开一个后端接口,方便我们调用。

from flask import Flask, request

app = Flask(__name__)


@app.route('/', methods=["GET"])
def hello_world():
    return 'hello world'


@app.route("/ocr", methods=["POST"])
def ocr_html_post():
    data = request.files
    file = data['file']
    # print(file.filename)
    # 文件写入磁盘
    file.save(file.filename)
    ocr_str = ocr(file.filename)
    return str(ocr_str)


def ocr(img_path):
    import cv2
    from paddleocr import PaddleOCR
    # font = cv2.FONT_HERSHEY_SIMPLEX

    # Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
    # 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
    ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False,
                    rec_model_dir='./models/ch_ppocr_server_v2.0_rec_infer/',
                    cls_model_dir='./models/ch_ppocr_mobile_v2.0_cls_infer/',
                    det_model_dir='./models/ch_ppocr_server_v2.0_det_infer/')  # need to run only once to download and load model into memory

    # img_path = r'E:\png\1643776550(1).jpg'
    result = ocr.ocr(img_path, cls=True)
    # 显示结果
    # image = Image.open(img_path).convert('RGB')
    # boxes = [line[0] for line in result]
    txts = [line[1][0] for line in result]
    # scores = [line[1][1] for line in result]
    # im_show = draw_ocr(image, boxes, txts, scores, font_path='./simfang.ttf')
    # im_show = Image.fromarray(im_show)

    # im_show.save('result.png')
    # print(txts)
    return txts


if __name__ == '__main__':
    app.run(port=5001, debug=True)

运行之后就部署了本地OCR识别服务,我们在使用的时候就可以直接调用就行。

这个后端就需要一直保持开启,直到使用完毕再关闭

然后我们调用OCR

本地调用代码: 

import os

import requests


def ocr_Paddle(root, name):
    # root = 'E:\\png'
    # name = '2.png'
    file = os.path.join(root, name)
    files_t = {'file': (name, open(file, 'rb'))}
    headers = {'File-Name': name}
    r = requests.post("http://127.0.0.1:5001/ocr", files=files_t, headers=headers)

    print(eval(r.text))
    return eval(r.text)

root是路径,name是文件名运行之后就返回识别文字结果。

识别结果: 

 这样我们就完成了OCR的本地部署

  • 20
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值