OCR-paddleocr

PaddleOCR 是一款由百度研发的超轻量级 OCR 工具,旨在提供丰富、领先的文本检测和识别功能。它支持中英文识别,可在多种操作系统和硬件平台上运行,并且包含 Detection、Directionclassifier 和 Recognition 三个部分。通过简单的参数配置,用户可以进行文本检测、识别和方向分类。此外,PaddleOCR 支持 GPU 和 CPU 预测,适用于服务器、移动设备和 IoT 设备。在代码使用中,可以灵活启用或禁用检测和识别功能,实现精准的文字识别。相较于 easyOCR,PaddleOCR 在识别准确性上有优势。
PaddleOCR 分为 Detection(文本检测)、Direction classifier(方向分类器)和  Recognition(文本识别)三部分,因此 需要三个模型

一、介绍

  • PaddleOCR是一款超轻量、中英文识别模型
  • 目标是打造丰富、领先、实用的文本识别模型/工具库
  • 3.5M实用超轻量OCR系统,支持在服务器,移动,嵌入式和IoT设备之间进行培训和部署
  • 同时支持中英文识别;支持倾斜、竖排等多种方向文字识别
  • 支持GPU、CPU预测
  • 可运行于Linux、Windows、MacOS等多种系统
  • 用户既可以通过PaddleHub很便捷的直接使用该超轻量模型,也可以使用PaddleOCR开源套件训练自己的超轻量模型
体积小、运行快、简单方便、性能好、中英文

二、安装

1、如果机器上装了 CUDA 9 或 CUDA 10(参考windows10安装CUDA),请运行:python3 -m pip install -i Simple Index paddlepaddle-gpu;
   没有可用的GPU,则安装CPU版本:python3 -m pip install -i Simple Index paddlepaddle
2、pip3 install -i Simple Index "paddleocr>=2.0.1"
windows上安装会报错:提示需要安装 Microsoft Visual C++ 14.0
解决:下载python_Levenshtein的whl文件,pip安装
linux模型保存在: /root/.paddleocr/whl/,分别对应检测、识别、分类

三、paddleocr使用

3.1、参数

Parameter
Description
Default value
use_gpu
是否启用GPU
TRUE
gpu_mem
GPU memory size used for initialization
8000M
image_dir
The images path or folder path for predicting when used by the command line
det_algorithm
选择的检测算法类型
DB
det_model_dir
文本检测推理模型文件夹。 参数传递有两种方式:
  1. None:自动将内置模型下载到 /root/.paddleocr/det ; 
  2. 自己转换的推理模型的路径,模型和params文件必须包含在模型路径中
None
det_max_side_len
图像长边的最大尺寸。 当长边超过这个值时,长边会调整到这个大小,短边会按比例缩放
960
det_db_thresh
Binarization threshold value of DB output map
0.3
det_db_box_thresh
The threshold value of the DB output box. Boxes score lower than this value will be discarded
0.5
det_db_unclip_ratio
The expanded ratio of DB output box
2
det_east_score_thresh
Binarization threshold value of EAST output map
0.8
det_east_cover_thresh
The threshold value of the EAST output box. Boxes score lower than this value will be discarded
0.1
det_east_nms_thresh
The NMS threshold value of EAST model output box
0.2
rec_algorithm
选择的识别算法类型
CRNN(卷积循环神经网络)
rec_model_dir
文本识别推理模型文件夹。 参数传递有两种方式:
  1. None:自动将内置模型下载到 /root/.paddleocr/rec ; 
  2. 自己转换的推理模型的路径,模型和params文件必须包含在模型路径中
None
rec_image_shape
图像形状识别算法
"3,32,320"
rec_batch_num
When performing recognition, the batchsize of forward images
30
max_text_length
识别算法可以识别的最大文本长度
25
rec_char_dict_path
the alphabet path which needs to be modified to your own path when  rec_model_Name  use mode 2
./ppocr/utils/ppocr_keys_v1.txt
use_space_char
是否识别空格
TRUE
drop_score
按分数过滤输出(来自识别模型),低于此分数的将不返回
0.5
use_angle_cls
是否加载分类模型
FALSE
cls_model_dir
分类推理模型文件夹。 参数传递有两种方式:
  1. None:自动下载内置模型到 /root/.paddleocr/cls ; 
  2. 自己转换的推理模型的路径,模型和params文件必须包含在模型路径中
None
cls_image_shape
图像形状分类算法
"3,48,192"
label_list
label list of classification algorithm
['0','180']
cls_batch_num
When performing classification, the batchsize of forward images
30
enable_mkldnn
是否启用 mkldnn
FALSE
use_zero_copy_run
Whether to forward by zero_copy_run
FALSE
lang
支持语言,目前只支持中文(ch)、English(en)、French(french)、German(german)、Korean(korean)、Japanese(japan)
ch
det
ppocr.ocr 函数执行时启用检测
TRUE
rec
ppocr.ocr func exec 时启用识别
TRUE
cls
Enable classification when  ppocr.ocr  func exec((Use use_angle_cls in command line mode to control whether to start classification in the forward direction)
FALSE
show_log
Whether to print log
FALSE
type
Perform ocr or table structuring, 取值在 ['ocr','structure']
ocr
ocr_version
OCR型号版本号,目前模型支持列表如下:
  • PP-OCRv3支持中英文检测、识别、多语言识别、方向分类器模型;
  • PP-OCRv2支持中文检测识别模型;
  • PP-OCR支持中文检测、识别 和方向分类器、多语言识别模型
PP-OCRv3

3.2、基本使用

测试数据集: PaddleOCR provides a series of test images, click  here  to download,包含测试图片、测试图表、字体
1、文本检测、方向分类、文本识别:设置参数--use_gpu false禁用gpu设备,--use_angle_cls true 加载分类模型
paddleocr --image_dir ./imgs_en/img_12.jpg --use_angle_cls true --lang en --use_gpu false
输出将是一个列表,每个项目包含边界框、文本和识别置信度
2、仅文本检测:将 --rec 设置为 false
paddleocr --image_dir ./imgs_en/img_12.jpg --use_angle_cls true --lang en --use_gpu false --rec false
输出将是一个列表,每个项目仅包含边界框
3、仅文本识别:将 --det 设置为 false
paddleocr --image_dir ./imgs_en/img_10.jpg --use_angle_cls true --lang en --use_gpu false --det false
输出将是一个列表,每个项目都包含文本和识别置信度:

四、代码使用

检测、角度分类和识别
from paddleocr import PaddleOCR, draw_ocr
# Paddleocr supports Chinese, English, French, German, Korean and Japanese.
# You can set the parameter `lang` as `ch`, `en`, `fr`, `german`, `korean`, `japan` to switch the language model in order.
ocr = PaddleOCR(
    use_angle_cls=True,
    lang='en',
    use_gpu=False,
    det_model_dir="/root/.paddleocr/whl/det/en/en_PP-OCRv3_det_infer/", # 检测模型
    cls_model_dir="/root/.paddleocr/whl/cls/ch_ppocr_mobile_v2.0_cls_infer/", # 分类模型
    rec_model_dir="/root/.paddleocr/whl/rec/en/en_PP-OCRv3_rec_infer/" # 识别模型
)  # need to run only once to download and load model into memory

img_path = '/ppocr_img/imgs_en/img_12.jpg'
result = ocr.ocr(img_path, cls=True)
for line in result:
    print(line)

# draw result
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='./fonts/simfang.ttf') # 字体需要准备
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')
输出:

五、easyocr VS paddleocr

easyocr识别结果:
paddleocr识别结果:
paddleocr更准确
<think>嗯,用户遇到了一个QAC报错,问题出在数组初始化上。让我仔细看看。用户定义了一个uint8类型的数组mcu_result,大小是24,初始化的时候用了{0x00}。这时候编译器会提示数组的初始值比声明的大小少,剩下的元素会用默认值初始化。 首先,我得回忆一下C语言的数组初始化规则。当数组初始化列表中的元素数量少于数组大小时,剩余的元素会被自动初始化为0。所以实际上用户这样的写法是正确的,但QAC可能认为显式初始化更安全,或者公司的编码规范要求必须明确所有元素的初始值。 用户可能是在使用静态代码分析工具QAC,这类工具通常会严格执行某些编码标准,比如MISRA C。MISRA C可能有规定,要求显式初始化所有元素,避免隐式行为带来的不确定性。因此,即使语法正确,工具还是会报错。 接下来,我需要考虑如何修改代码。最直接的办法是把初始化的元素数量补全到24个。但手动写24个0x00太麻烦,可以写成{0},这样编译器会自动填充剩余部分为0,但不确定QAC是否接受这种写法。或者,用户可能需要显式地写出所有24个0,或者用更简洁的方式,比如{0x00}重复24次,但这样代码看起来冗长。 另外,可能用户的环境允许使用设计ated initializer,比如在C99中可以用{0},或者更简洁的写法,但需要确认QAC是否支持这些特性,以及是否符合项目规范。 可能的解决方案包括: 1. 补全所有24个元素,显式初始化为0x00。 2. 使用{0},因为C语言会自动填充剩余为0,但不确定QAC是否接受。 3. 检查QAC的配置或规则是否有例外,可以忽略这种警告,如果确实符合项目规范的话。 需要进一步确认用户使用的编码标准和QAC的具体规则。不过通常来说,补全所有元素是最稳妥的方式,避免静态分析工具报错。但手动写24个0不太实际,可以建议用户使用{0}的方式,或者使用宏来定义数组大小,确保初始化的数量匹配。 最后,用户可能需要根据团队规范来决定是否必须显式初始化所有元素,或者是否允许隐式补零。如果允许,可以调整QAC的规则设置,否则必须修改代码。</think>该问题的原因及修改方法如下: 1. **错误分析**: - 声明了一个24字节的数组`uint8 mcu_result[24]` - 初始化时仅提供了1个元素`{0x00}` - 根据C语言规则,未显式初始化的元素会被置为0,但QAC静态分析工具将此视为不规范编码 2. **解决方案(任选其一)**: **方案一:显式补全初始化** ```c uint8 mcu_result[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; ``` **方案二:使用C99简化写法(需编译器支持)** ```c uint8 mcu_result[24] = {[0 ... 23] = 0x00}; // GCC扩展语法 ``` **方案三:推荐规范写法** ```c uint8 mcu_result[24] = {0}; // 标准C语法,自动填充全0 ``` 3. **附加建议**: - 使用`{0}`初始化是C语言标准做法,所有元素都会被正确置零 - 若必须保持`0x00`形式,建议添加注释说明: ```c uint8 mcu_result[24] = {0x00}; /* QAC_DISABLE: 此处隐式补零符合设计预期 */ ``` - 检查QAC规则配置,确认是否需要调整MISRA-C:2012 Rule 9.3的检查策略 选择方案三`{0}`是最简洁且符合标准的解决方案,既能消除警告,又能保证代码可读性和可维护性。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值