当前位置: 首页 > news >正文

Paddle OCR Win 11下的安装和简单使用教程

Paddle OCR Win 11下的安装和简单使用教程

对于中文的识别,可以考虑直接使用Paddle OCR,识别准确率和部署都相对比较方便。

环境搭建

目前PaddlePaddle 发布到v2.4,先下载paddlepaddle,再下载paddleocr。根据自己设备操作系统进行下载安装。paddle官网地址:https://www.paddlepaddle.org.cn

在这里插入图片描述

pip install paddlepaddle-gpu==2.4.2.post112 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
如果需要CPU版本:
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

paddleocr 推荐环境

PaddlePaddle >= 2.1.2

Python 3.7

CUDA 10.1 / CUDA 10.2

CUDNN 7.6

可参考paddle官方出的环境搭建进行,地址:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/doc/doc_ch/environment.md

安装paddle ocr
pip install paddleocr -i https://mirror.baidu.com/pypi/simple

对于直接pip shapely库可能出现的问题[winRrror 126],建议下载shapely安装包完成安装。地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely

使用教程

在环境搭建好之后,就可以愉快的直接使用了。话说,两年没用paddle,跟torch越来越像了。

import paddle
import paddleocr
from paddleocr import PaddleOCR
import numpy as np
import cv2
import matplotlib.pyplot as plt
import os
from PIL import Image
import glob
import random
import re
import jsonprint(paddle.__version__)
#2.4.1
print(paddleocr.__version__)
#2.6.1.3

使用PaddleOCR,默认使用的是PP-OCRv3,轻量级模型。

源代码:
SUPPORT_DET_MODEL = ['DB']
VERSION = '2.6.1.0'
SUPPORT_REC_MODEL = ['CRNN', 'SVTR_LCNet']
BASE_DIR = os.path.expanduser("~/.paddleocr/")DEFAULT_OCR_MODEL_VERSION = 'PP-OCRv3'

OCR model用的PP-OCRv3,根据论文,检测用的DB,识别用的SVTR。相比PP-OCRv2,模型框架如下图:

在这里插入图片描述

ocr = PaddleOCR(use_angles_cls=True, use_gpu=False)def draw_img(img_path,boxes):save_root = 'data/resocr/'img_name = img_path.split('\\')[1]img = cv2.imread(img_path)for box in boxes:box = np.reshape(np.array(box),[-1,1,2]).astype(np.int64)img = cv2.polylines(np.array(img), [box], True, (255,0,0),2)plt.figure(figsize=(10,10))save_file = save_root+img_nameplt.imshow(img)plt.savefig(save_file)imgp = 'data\\idcard1.png'
print(ocr.args)
res = ocr.ocr(imgp)
print(res)
boxes = []
texts = []
for j in range(len(res[0])):boxes.append(res[0][j][0])texts.append(res[0][j][1][0])
draw_img(imgp,boxes)

网上随便找了一张奥巴马身份证,得到的结果如下:(写了才发现,包自带了一个draw_ocr的函数)

在这里插入图片描述

部分结果:
[[[[[350.0, 16.0], [819.0, 16.0], [819.0, 58.0], [350.0, 58.0]],('上海增值税电子普通发票', 0.9431300759315491)],[[[864.0, 38.0], [1060.0, 41.0], [1060.0, 62.0], [864.0, 59.0]],('发票代码:031001600311', 0.9889101982116699)],[[[864.0, 71.0], [1024.0, 71.0], [1024.0, 92.0], [864.0, 92.0]],('发票号码:81471594', 0.9445592164993286)],[[[864.0, 102.0], [1074.0, 98.0], [1074.0, 119.0], [864.0, 123.0]],('开票日期:2017年11月13日', 0.9694705009460449)],[[[535.0, 115.0], [633.0, 112.0], [634.0, 139.0], [536.0, 142.0]],('上海市税务局', 0.9940652847290039)],[[[6.0, 134.0], [201.0, 138.0], [201.0, 155.0], [6.0, 151.0]],('机器编号:499099774351', 0.9102509021759033)],[[[864.0, 132.0], [1164.0, 129.0], [1164.0, 150.0], [864.0, 153.0]],('校验码:01519962196503160071', 0.9772385954856873)]]]

可以看到基本该拿的信息都拿了。可以通过调节超参对检测框阈值和比例进行调节。根据utility.py参数初始化设置如下:

 # DB parmasparser.add_argument("--det_db_thresh", type=float, default=0.3) #二值化输出图的阈值parser.add_argument("--det_db_box_thresh", type=float, default=0.6) #过滤检测框阈值parser.add_argument("--det_db_unclip_ratio", type=float, default=1.5) #检测框扩张的系数
ocr = PaddleOCR(use_angles_cls=True, use_gpu=False, det_db_thresh=0.3,det_db_unclip_ratio=2.5, det_db_box_thresh=0.8)
更改参数后看看结果:

过滤掉了一些检测框。

在这里插入图片描述

参数可以根据自己所处的任务进行调节,也可以选择其他模型进行增加识别率。

paddle现在跟torch很像,也就减少了学习成本。

官方出了一个Dive into OCR的教程,有点儿狗的是,中文版要进群后才能领取。英文版则大方给出来了,地址如下:https://paddleocr.bj.bcebos.com/ebook/Dive_into_OCR.pdf

在这里插入图片描述

http://www.lryc.cn/news/25000.html

相关文章:

  • 杂谈:数组index问题和对象key问题
  • 三天Golang快速入门—Slice切片
  • 腾讯会议演示者视图/演讲者视图
  • 【C++】类与对象(一)
  • JavaScript基本语法
  • OpenCV4.x图像处理实例-道路车辆检测(基于背景消减法)
  • pwnlab通关流程
  • 面向过程与面向对象的区别与联系
  • 主机状态(查看资源占用情况、查看网络占用情况)
  • 代码随想录算法训练营第四十一天 | 01背包问题-二维数组滚动数组,416. 分割等和子集
  • VMware NSX 4.1 发布 - 网络安全虚拟化平台
  • 计算理论 复杂度预备知识
  • 二叉树——二叉搜索树中的插入操作
  • C# if break,if continue,if return的区别和使用
  • 力扣-第二高的薪水
  • I - 太阳轰炸(组合数学Cnk n固定)
  • centos安装gitlab
  • 【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)
  • 【Hello Linux】进程优先级和环境变量
  • 日期:Date,SimpleDateFormat常见API以及包装类
  • 嵌入式之ubuntu终端操作与shell常用命令详解
  • 【Shell学习笔记】6.Shell 流程控制
  • 27k入职阿里测开岗那天,我哭了,这5个月付出的一切总算没有白费~
  • 服务端开发之Java备战秋招面试篇5
  • 有趣的 Kotlin 0x11: joinToString,你真的了解嘛?
  • 代码随想录算法训练营day46 | 动态规划之背包问题 139.单词拆分
  • DPDK中的无锁共享数据结构
  • 【使用两个栈实现队列】
  • web,h5海康视频接入监控视频流记录一
  • 做毕业设计,前端部分你需要掌握的6个核心技能