RV1106 OCR 识别算法

  一 题记

目标是在某款 RV1106 低算力小板下跑通OCR文字识别算法,做个简单的应用,RK 官方模型库rk_model_zoo 有PP-OCR 的例子,但在 rv1106 上尚未支持。于是便打算折腾一吧。

二 方案甄选

参考国外某大佬的比较:

对比了几种方案, paddleOCR 在性能和精度上 应该算得上最优, 工程部署上的事情应该不是大问题。

hugging-face 的在线比较 : (PaddleOCR + EasyOcr + kerasOCR)

https://huggingface.co/spaces/pragnakalp/OCR-image-to-text

简单测试了一下,ppocr 在复杂的比如模糊的反光的照片下效果要好一些。

三 思路梳理

3.1 OCR 处理的通用流程

图像预处理(尺寸,归一化)=> 检测文字区域(OCR-DET) => 子图规一化(尺寸,角度变换) => 文字识别(OCR-REC)

  1. 其中 OCR-DET 和 OCR-REC 需要 预训练的算法模型来做
  2. 图像预处理是要将图像 调整到模型输入的大小,在 RKNN 平台,要固定输入图像的尺寸。
  3. 子图规一化,是将检测区域的子图像扣出来,拉成 横平竖直的规整图像。主要是做视角和尺寸的变换(仿射变换)。但 paddleOCR 可以识别 0 度和180度图像 , 90度和270度与不是模型的输入顺序,需要 通过 方向分类模型判断方向,旋转,然后再做仿射变换。

3.2 模型部署转换的流程

paddle模型 ==> 固定输入的onnx 模型 ==> rknn 模型

因为 rknn不支持动态输入,所以转 onnx 时要固定输入

其他tricks:

paddle 转 onnx模型本身是支持优化的,onnx 转 rknn 时工具也有针对rknn 平台的优化, 用类似 onnx-sim 工具再做优化价值不大。 不如实际 RKNN 跑起来做性能评估针对性的优化。

四 pad

参考引用中未提及适用于RV1126芯片(ARM架构)的二维码识别算法相关内容。不过,一般在ARM架构芯片上可以使用以下常见的二维码识别算法: ### ZXing(Zebra Crossing) ZXing是一个开源的、多格式的一维/二维条码图像处理库,用Java实现,同时也有其他语言的移植版本,如C++、Python等。它支持多种二维码格式,如QR Code、Data Matrix等。在ARM架构的设备上使用时,可以选择其C++版本进行编译和部署。 ### ZBar ZBar是一个开源的条形码和二维码扫描库,支持多种格式的条形码和二维码,包括QR Code、PDF417等。它提供了C和C++的API,并且可以很方便地集成到ARM设备的应用程序中。 ### OpenCV结合二维码解码算法 OpenCV是一个强大的计算机视觉库,可以用于图像的预处理和特征提取。结合二维码解码算法,可以实现二维码的识别。例如,可以使用OpenCV进行图像的灰度化、二值化等操作,然后使用相关的解码算法进行二维码的解码。 以下是一个使用ZXing C++版本进行二维码识别的简单示例代码: ```cpp #include <zxing/Reader.h> #include <zxing/common/HybridBinarizer.h> #include <zxing/common/GreyscaleLuminanceSource.h> #include <zxing/qrcode/QRCodeReader.h> #include <zxing/BinaryBitmap.h> #include <zxing/Result.h> #include <opencv2/opencv.hpp> int main() { // 读取图像 cv::Mat image = cv::imread("qrcode.png", cv::IMREAD_GRAYSCALE); // 创建ZXing的亮度源 zxing::Ref<zxing::LuminanceSource> source(new zxing::GreyscaleLuminanceSource(image.data, image.cols, image.rows)); zxing::Ref<zxing::Binarizer> binarizer(new zxing::HybridBinarizer(source)); zxing::Ref<zxing::BinaryBitmap> bitmap(new zxing::BinaryBitmap(binarizer)); // 创建二维码读取器 zxing::Ref<zxing::Reader> reader(new zxing::qrcode::QRCodeReader()); try { // 解码二维码 zxing::Ref<zxing::Result> result(reader->decode(bitmap, zxing::DecodeHints(zxing::DecodeHints::DEFAULT_HINT))); std::cout << "Decoded text: " << result->getText()->getText() << std::endl; } catch (const zxing::Exception& e) { std::cout << "Error: " << e.what() << std::endl; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walletiger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值