paddleocr快速入门:基于python脚本及命令行两种方式实现图片OCR识别

本篇将再讲讲paddleocr在图像OCR识别方面的应用。

一、paddlecor参数说明

字段说明默认值
use_gpu是否使用GPUTRUE
gpu_mem初始化占用的GPU内存大小8000M
image_dir通过命令行调用时执行预测的图片或文件夹路径
page_num当输入类型为pdf文件时有效,指定预测前面page_num页,默认预测所有页0
det_algorithm使用的检测算法类型DB
det_model_dir检测模型所在文件夹。传参方式有两种,1. None: 自动下载内置模型到 ~/.paddleocr/det;2.自己转换好的inference模型路径,模型路径下必须包含model和params文件None
det_max_side_len检测算法前向时图片长边的最大尺寸,当长边超出这个值时会将长边resize到这个大小,短边等比例缩放960
det_db_threshDB模型输出预测图的二值化阈值0.3
det_db_box_threshDB模型输出框的阈值,低于此值的预测框会被丢弃0.5
det_db_unclip_ratioDB模型输出框扩大的比例2
det_db_score_mode计算检测框score的方式,有'fast'和'slow',如果要检测的文字有弯曲,建议用'slow','slow'模式计算的box的score偏大,box不容易被过滤掉'fast'
det_east_score_threshEAST模型输出预测图的二值化阈值0.8
det_east_cover_threshEAST模型输出框的阈值,低于此值的预测框会被丢弃0.1
det_east_nms_threshEAST模型输出框NMS的阈值0.2
rec_algorithm使用的识别算法类型CRNN
rec_model_dir识别模型所在文件夹。传参方式有两种,1. None: 自动下载内置模型到 ~/.paddleocr/rec;2.自己转换好的inference模型路径,模型路径下必须包含model和params文件None
rec_image_shape识别算法的输入图片尺寸"3,32,320"
rec_batch_num进行识别时,同时前向的图片数30
max_text_length识别算法能识别的最大文字长度25
rec_char_dict_path识别模型字典路径,当rec_model_dir使用方式2传参时需要修改为自己的字典路径./ppocr/utils/ppocr_keys_v1.txt
use_space_char是否识别空格TRUE
drop_score对输出按照分数(来自于识别模型)进行过滤,低于此分数的不返回0.5
use_angle_cls是否加载分类模型FALSE
cls_model_dir分类模型所在文件夹。传参方式有两种,1. None: 自动下载内置模型到 ~/.paddleocr/cls;2.自己转换好的inference模型路径,模型路径下必须包含model和params文件None
cls_image_shape分类算法的输入图片尺寸"3, 48, 192"
label_list分类算法的标签列表['0', '180']
cls_batch_num进行分类时,同时前向的图片数30
enable_mkldnn是否启用mkldnnFALSE
use_zero_copy_run是否通过zero_copy_run的方式进行前向FALSE
lang模型语言类型,目前支持 目前支持中英文(ch)、英文(en)、法语(french)、德语(german)、韩语(korean)、日语(japan)ch
det前向时使用启动检测TRUE
rec前向时是否启动识别TRUE
cls前向时是否启动分类 (命令行模式下使用use_angle_cls控制前向是否启动分类)FALSE
show_log是否打印logger信息FALSE
type执行ocr或者表格结构化, 值可选['ocr','structure']ocr
ocr_versionOCR模型版本,可选PP-OCRv3, PP-OCRv2, PP-OCR。PP-OCRv3 支持中、英文的检测、识别、多语种识别,方向分类器等模型;PP-OCRv2 目前仅支持中文的检测和识别模型;PP-OCR支持中文的检测,识别,多语种识别,方向分类器等模型PP-OCRv3

二、基于python脚本进行图片OCR文字识别

paddleocr whl包会自动下载ppocr轻量级模型作为默认模型,运行以下代码加载。

from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_angle_cls=True, lang="ch")

本地有一张t​est.jpg图片:

我们运行以下代码,进行图片文字识别,并打印​结果。

img_path = './img/test.jpg'
# 结果是一个list,每个item包含了文本框,文字和识别置信度
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)

识别内容如下,结果是一个list,每个item包含了文本框,文字和识别置信度。

[2024/06/01 23:35:00] ppocr DEBUG: dt_boxes num : 6, elapsed : 3.8749797344207764
[2024/06/01 23:35:01] ppocr DEBUG: cls num  : 6, elapsed : 0.583005428314209
[2024/06/01 23:35:02] ppocr DEBUG: rec_res num  : 6, elapsed : 1.3186604976654053
[[[195.0, 70.0], [336.0, 70.0], [336.0, 200.0], [195.0, 200.0]], ('R', 0.9454304575920105)]
[[[175.0, 255.0], [617.0, 255.0], [617.0, 315.0], [175.0, 315.0]], ('当游戏数据遇上', 0.9989826083183289)]
[[[649.0, 271.0], [722.0, 271.0], [722.0, 326.0], [649.0, 326.0]], ('R', 0.9735457897186279)]
[[[174.0, 414.0], [526.0, 414.0], [526.0, 438.0], [174.0, 438.0]], ('第八届中国R语言大会(上海会场)', 0.9587013721466064)]
[[[540.0, 415.0], [677.0, 415.0], [677.0, 436.0], [540.0, 436.0]], ('2015.11.22', 0.9998686909675598)]

从结果来看,文字识别准确率还​很高,模型还将两个R图片中的R字识别出来。

以下代码主要用于显示 OCR(Optical Character Recognition,光学字符识别)的结果,并将结果显示在一张图片上,然后将这张图片保存到本地。

from PIL import Image
result = result[0]
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='/path/to/PaddleOCR/doc/fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')

运行后,我们在当前目录​生成一张result.jpg的图片,内容如下:

三、基于python脚本对PDF文件进行OCR文字识别

如果我们输入的是pdf文件,也能进行​文字识别。

​假如本地有一个test.pdf文件:

运行以下代码,对pdf文件的文字进行识别:

ocr = PaddleOCR(use_angle_cls=True, lang="ch")  
img_path = './img/test.pdf'
result = ocr.ocr(img_path, cls=True)

运行以下代码,打印识别结果:

for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)

可见,中英文都很好被识别出来。

同样,我们也想将OCR识别的结果在图片标注并保存到本地。通过以下代码实现。此处将官网代码报错地方进行了修正。

# 显示结果
import fitz
from PIL import Image
import cv2
import numpy as np
imgs = []
with fitz.open(img_path) as pdf:
    for pg in range(0, pdf.page_count): # 将 原文的pageCount 修改为 page_count
        page = pdf[pg]
        mat = fitz.Matrix(2, 2)
        pm = page.get_pixmap(matrix=mat, alpha=False) # 将原文的getPixmap 修改为 get_pixmap
        # if width or height > 2000 pixels, don't enlarge the image
        if pm.width > 2000 or pm.height > 2000:
            pm = page.getPixmap(matrix=fitz.Matrix(1, 1), alpha=False)

        img = Image.frombytes("RGB", [pm.width, pm.height], pm.samples)
        img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
        imgs.append(img)
for idx in range(len(result)):
    res = result[idx]
    image = imgs[idx]
    boxes = [line[0] for line in res]
    txts = [line[1][0] for line in res]
    scores = [line[1][1] for line in res]
    im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf')
    im_show = Image.fromarray(im_show)
    im_show.save('pdf_result.jpg'.format(idx))

四、基于命令行使用进行图片OCR文字识别

基于代码行识别图片OCR是非常容易的,我们可以在Anaconda Prompt中​运行以下代码实现:

paddleocr --image_dir ./img/test.jpg --use_angle_cls true --use_gpu false

其中,--image_dir 是要识别的图片​地址,--use_angle_cls true设置使用方向分类器识别180度旋转文字,--use_gpu false设置不使用GPU。

看到以下输出,说明已经完成。

如果我们想在jupyter Notebook运行命令行,只需在前面添加!号即可。

!paddleocr --image_dir ./img/test.jpg --use_angle_cls true --use_gpu false 

五、基于命令行使用进行PDF文件的文字识别

paddleocr也支持输入pdf文件,并且可以通过指定参数page_num来控制推理前面几页,默认为0,表示推理所有页。在Jupyter Notebook输入以下命令:

!paddleocr --image_dir ./img/test.pdf --use_angle_cls true --use_gpu false --page_num 1

 如果大家对想学习其他更多内容,包括ChatGPT大模型、数据挖掘、可视化、R语言、Python等专题,可关注“我爱数据科学”的公众号或视频号。

         我爱数据科学公众号二维码:

如果公众号二维码过期,可在 微信 -> 公众号 -> + -> 搜索 “我爱数据科学” 进行关注。

我爱数据科学的视频号二维码:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/670023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言ggplot2包绘制世界地图

数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 1. 数据读取与处理 首先&#xff0c;从CSV文件中读取数据&#xff0c;并计算各国每日收入的平均签证成本。 library(tidyverse) ​ df <- read_csv("df.csv") %>% group_…

MAC帧

基本问题 数据链路层的协议有很多&#xff0c;但是都有三个基本问题&#xff1a;封装成帧&#xff0c;透明传输和差错检测。 封装成帧 封装成帧&#xff08;Framing&#xff09;就是在一段数据的前后分别添加首部和尾部&#xff0c;这样就构成了一个帧。帧是数据链路层的传送…

css 中clip 属性和替代方案 clip-path属性使用

clip clip 属性概述 作用&#xff1a;clip 属性用于定义一个裁剪区域&#xff0c;该区域外的元素内容将不可见。适用元素&#xff1a;clip 属性只对绝对定位&#xff08;position: absolute&#xff09;或固定定位&#xff08;position: fixed&#xff09;的元素有效&#xf…

掘金AI 商战宝典-高阶班:如何用AI制作视频(11节视频课)

课程目录&#xff1a; 1-第一讲用AI自动做视频&#xff08;上&#xff09;_1.mp4 2-第二讲用AI自动做视频&#xff08;中&#xff09;_1.mp4 3-第四讲A1做视频实战&#xff1a;店铺宣传_1.mp4 4-第五讲Al做视频实战&#xff1a;商品带贷1.mp4 5-第六讲Al做视频实战&#x…

码随想录算法训练营第二十四天| 77. 组合

77. 组合 - 力扣&#xff08;LeetCode&#xff09; class Solution {ArrayList<Integer> path new ArrayList<>();ArrayList<List<Integer>> result new ArrayList<>();public List<List<Integer>> combine(int n, int k) {if(n &…

SAP揭秘者- SAP PP模块日常常见运维问题之工单入库失败原因分析及快速处理

文章摘要&#xff1a; 无论您是负责SAP实施项目还是负责SAP运维项目&#xff0c;当用户发现有SAP PP模块的各种异常问题的时都需要作为SAP PP顾问的您快速地理解用户提交的问题&#xff0c;并快速地解决这些问题&#xff0c; 上篇文章跟大家聊了基本单位维护错了怎么修改的解决…

qt按钮的autoRepeat属性和default属性

autoRepeat属性&#xff1a;按住按钮不松&#xff0c;表示一直在点击按钮 default属性&#xff1a;点击Enter键表示在点击按钮

02Docker中的镜像和容器命令

镜像和容器 Docker中有镜像和容器的概念 镜像(Image): Docker将应用程序及其运行所需要的依赖、函数库、环境、配置等文件打包在一起称为镜像即硬盘中的文件容器(Container): 镜像中的应用程序运行起来并加载到内存中后形成的进程就是容器,一个镜像可以运行多个容器将来形成集…

计算机毕业设计hadoop++hive微博舆情预测 微博舆情分析 微博推荐系统 微博预警系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 知识图谱

摘 要 随着社交媒体的普及和互联网技术的快速发展&#xff0c;热点舆情事件频发&#xff0c;对于政府、企业和公众来说&#xff0c;及时了解和分析热点舆情&#xff0c;把握舆论走向&#xff0c;已经成为一项重要的任务。然而&#xff0c;传统的数据处理和分析方法在面对海量…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第五套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第五套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff0c;每套四十题选择题&#xff09;获取&#xff08;WX:…

Java18新版本特性!

Java 18引入了多项新特性&#xff0c;主要包括默认UTF-8字符集、简单的Web服务器、栈步进API等。Java 18是Oracle在2022年发布的版本&#xff0c;其旨在通过一系列创新特性来提升开发效率与性能。下面将逐一探讨Java 18的主要新特性以及它们对开发者的具体影响&#xff1a; 默认…

【C语言】10.C语言指针(4)

文章目录 1.回调函数是什么&#xff1f;2.qsort 使⽤举例2.1 使⽤qsort函数排序整型数据2.2 使⽤qsort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

Prime1 - 信息收集和分析能力的试炼

主机发现 nmap扫描与分析 端口22、80 详细扫描&#xff1b;linux、ubuntu、 udp扫描 端口都是关闭的 脚本扫描 web渗透 打开只有一张图片&#xff1b;源码有图片和一个alt&#xff1a;hnp security不知道有啥用&#xff0c;先记录下来吧 继续web渗透思路走吧&#xff0c;目录…

线性代数|机器学习-P3乘法和因式分解矩阵

文章目录 1. 矩阵分解2. S Q Λ Q T SQ\Lambda Q^T SQΛQT3. A U Σ V T AU\Sigma V^T AUΣVT4. A LU 分解5. 矩阵的四个子空间 1. 矩阵分解 目前我们有很多重要的矩阵分解&#xff0c;每个分解对应于多个前提条件&#xff0c;分解方法&#xff0c;分解后的形状会中如下&…

如何跨渠道分析销售数据 - 6年制造业销售经验小结

如何跨渠道分析销售数据 - 6年制造业销售经验小结&#xff08;1&#xff09; 【前言】 在我过去6年销售工作生涯中&#xff0c;从第一年成为公司销冠后&#xff0c;我当时的确自满的一段时间&#xff0c;认为自己很了不起。但是第一年的销售业绩并没有拿到提成&#xff0c;最…

“一键”掌控数据库特权,DpEasy 新版本即将启航

去年11月&#xff0c;我们在 BinTools 社区推出了一款新产品——DpEasy。在我们最初设计这款产品的时候&#xff0c;我们给出的定位是「数据库安全风险扫描工具」&#xff0c;目标是提供一种简单、安全且高效的方式来管理数据库账号密码以及分析数据库账号的使用情况&#xff0…

Python开发与应用实验1 | 开发环境安装配置

*本文来自博主对专业课 Python开发与应用 实验部分的整理与解析。 *一些题目可能会增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人的补充&#xff0c;以便各位学习参考。 *实验环境为&#xff1a;Python 3.10 &#xf…

[AFCTF 2018]JPython

小祥为了保护自己的代码&#xff0c;修改了部分Python Bytecode指令集&#xff0c;并把这个指令集称之为JPython&#xff0c; JPython只能在他私人定制的环境上才能运行&#xff0c;其他人无法得到这个环境。 现在&#xff0c;小明为了获取小祥代码中的秘密&#xff0c;收集到了…

LangChain实战技巧之四:当模型(Model)不支持Tool/Function的解决办法

文心大模型两大主力模型已全面免费&#xff0c;可参考我之前发的文章 AI菜鸟向前飞 — 今日三则AI相关新闻 但是&#xff0c;这些模型原生并不支持Tool/Function Call 如下所示&#xff1a; tool def greeting(name: str):向朋友致欢迎语return f"你好啊, {name}"…

xilinx ip自带XDC只读

检查生成的IP核再目录下显示的文件类型是不是.xcix 如果是的话&#xff0c;重新生成为.xci 再二次编辑即可 或者 将框柱的部分不选择&#xff0c;从新生成