目录

paddle 文字识别验证代码:

onnx c++推理:

python onnx识别部分推理示例:


感谢博客:

PaddleOCR转ONNX模型(推理部分)_favorxin的博客-CSDN博客_paddleocr转onnx

paddle 文字识别验证代码:

infer_rec.py

参见博客:

https://blog.csdn.net/jacke121/article/details/122647698

onnx c++推理:

参考项目:

A cross platform OCR Library based on PaddleOCR & OnnxRuntime

https://github.com/RapidAI/RapidOCR

库下载:

https://gitee.com/benjaminwan/ocr-lite-onnx/releases/v1.0

开源库:

https://github.com/RapidAI/RapidOCR/tree/main/cpp

c++推理示例代码:

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <memory.h>
#include <string>
#include "../include/rapidocr_api.h"#define BPOCR_DET_MODEL "ch_ppocr_mobile_v2.0_det_infer.onnx"
#define BPOCR_CLS_MODEL "ch_ppocr_mobile_v2.0_cls_infer.onnx"
#define BPOCR_REC_MODEL "ch_ppocr_mobile_v2.0_rec_infer.onnx"
#define BPOCR_KEY_PATH  "ppocr_keys_v1.txt"#define THREAD_NUM   3
#define MAX_PATH    260
#ifdef WIN32const  char* DEFAULT_MODEL_DIR = "E:\\bai-piao-ocr\\cpp\\BaiPiaoOcrOnnx\\models\\";const char* DEFAULT_TEST_IMG = "E:\\bai-piao-ocr\\cpp\\BaiPiaoOcrOnnx\\images\\long1.jpg";
#else
const  char * DEFAULT_MODEL_DIR  ="/data/workprj/RapidOCR/models/";const char *  DEFAULT_TEST_IMG  ="/data/workprj/RapidOCR/images/1.jpg";
#endif
int main(int argc, char * argv[])
{const char *szModelDir = NULL;const char *szImagePath = NULL;if (argc == 1){szModelDir = DEFAULT_MODEL_DIR;szImagePath = DEFAULT_TEST_IMG;}else{szModelDir = argv[1];szImagePath = argv[2];}char szDetModelPath[MAX_PATH] = { 0 };char szClsModelPath[MAX_PATH] = { 0 };char szRecModelPath[MAX_PATH] = { 0 };char szKeylPath[MAX_PATH] = { 0 };strcpy(szDetModelPath, szModelDir);strcpy(szClsModelPath, szModelDir);strcpy(szRecModelPath, szModelDir);strcpy(szKeylPath, szModelDir);strcat(szDetModelPath, BPOCR_DET_MODEL);strcat(szClsModelPath, BPOCR_CLS_MODEL);strcat(szRecModelPath, BPOCR_REC_MODEL);strcat(szKeylPath, BPOCR_KEY_PATH);BPHANDLE  Handle = BPOcrInit(szDetModelPath, szClsModelPath, szRecModelPath, szKeylPath, THREAD_NUM);if (!Handle){printf("cannot initialize the OCR Engine.\n");return -1;}RAPIDOCR_PARAM Param = { 0 };BOOL bRet = BPOcrDoOcr(Handle, szImagePath, true, false, &Param);if (bRet){int nLen = BPOcrGetLen(Handle);if (nLen > 0){char* szInfo = (char*)malloc(nLen);if (szInfo){if (BPOcrGetResult(Handle, szInfo, nLen)){printf(szInfo);}free(szInfo);}}}if (Handle){BPOcrDeinit(Handle);}return 0;
}

python onnx识别部分推理示例:

import mathimport cv2
import onnxruntime
import numpy as np
small_rec_file="vc_rec_dynamic.onnx"
onet_rec_session = onnxruntime.InferenceSession(small_rec_file)## 根据推理结果解码识别结果
class process_pred(object):def __init__(self, character_dict_path=None, character_type='ch', use_space_char=False):self.character_str = ''with open(character_dict_path, 'rb') as fin:lines = fin.readlines()for line in lines:line = line.decode('utf-8').strip('\n').strip('\r\n')self.character_str += lineif use_space_char:self.character_str += ' 'dict_character = list(self.character_str)dict_character = self.add_special_char(dict_character)self.dict = {}for i, char in enumerate(dict_character):self.dict[char] = iself.character = dict_characterdef add_special_char(self, dict_character):dict_character = ['blank'] + dict_characterreturn dict_characterdef decode(self, text_index, text_prob=None, is_remove_duplicate=False):result_list = []ignored_tokens = [0]batch_size = len(text_index)for batch_idx in range(batch_size):char_list = []conf_list = []for idx in range(len(text_index[batch_idx])):if text_index[batch_idx][idx] in ignored_tokens:continueif is_remove_duplicate:if idx > 0 and text_index[batch_idx][idx - 1] == text_index[batch_idx][idx]:continuechar_list.append(self.character[int(text_index[batch_idx][idx])])if text_prob is not None:conf_list.append(text_prob[batch_idx][idx])else:conf_list.append(1)text = ''.join(char_list)result_list.append((text, np.mean(conf_list)))return result_listdef __call__(self, preds, label=None):if not isinstance(preds, np.ndarray):preds = np.array(preds)preds_idx = preds.argmax(axis=2)preds_prob = preds.max(axis=2)text = self.decode(preds_idx, preds_prob, is_remove_duplicate=True)if label is None:return textlabel = self.decode(label)return text, labelpostprocess_op = process_pred('../ppocr/utils/ppocr_keys_v1.txt', 'ch', True)
def resize_norm_img(img, max_wh_ratio):imgC, imgH, imgW = [int(v) for v in "3, 32, 100".split(",")]assert imgC == img.shape[2]imgW = int((32 * max_wh_ratio))h, w = img.shape[:2]ratio = w / float(h)if math.ceil(imgH * ratio) > imgW:resized_w = imgWelse:resized_w = int(math.ceil(imgH * ratio))resized_image = cv2.resize(img, (resized_w, imgH))resized_image = resized_image.astype('float32')resized_image = resized_image.transpose((2, 0, 1)) / 255resized_image -= 0.5resized_image /= 0.5padding_im = np.zeros((imgC, imgH, imgW), dtype=np.float32)padding_im[:, :, 0:resized_w] = resized_imagereturn padding_imdef get_img_res(onnx_model, img, process_op):h, w = img.shape[:2]img = resize_norm_img(img, w * 1.0 / h)img = img[np.newaxis, :]inputs = {onnx_model.get_inputs()[0].name: img}outs = onnx_model.run(None, inputs)result = process_op(outs[0])return resultpic=cv2.imread(r"F:\project\jushi\data\shuini\ocr_crop\image\093807_148562_1.jpg")# pic=cv2.cvtColor(pic,cv2.COLOR_BGR2RGB)
res = get_img_res(onet_rec_session, pic, postprocess_op)print(res)

paddleoc onnx转换推理相关推荐

  1. 深度估计自监督模型monodepth2在自己数据集的实战——单卡/多卡训练、推理、Onnx转换和量化指标评估

    本文详细介绍monodepth2模型在自己数据集的实战方法,包括单卡/多卡训练.推理.Onnx转换和量化评估等,关于理论部分请参见另一篇博客:深度估计自监督模型monodepth2论文总结和源码分析 ...

  2. yolov3模型部署实战weights转onnx并推理

    前言: 最近比较忙(懒),本学渣在写毕业论文(好难受),所以博客的更新不是那么有效率,哈哈: 本文的目的是用实操带你一步一步的实现darknet模型框架的部署流程:(当然darknet算法的训练在本人 ...

  3. onnx模型推理(python)

    onnx模型推理(python) 以下ONNX一个检测模型的推理过程,其他模型稍微修改即可 # -*-coding: utf-8 -*-import os, syssys.path.append(os ...

  4. yolov7利用onnx进行推理同时调用usb摄像头

    最近再弄一个项目,需要用到yolov7但官方只发布了利用单张图片进行onnx推理的代码,网上一大堆对也基本是搬运,还一堆bug,博主在这里进行了改正! 官方onnx推理地址,感兴趣的可以去看看.官方o ...

  5. onnx 模型推理示例-Python 实现 |【onnx 模型推理】

    文章目录 Python onnx 模型推理示例 Python onnx 模型推理示例 onnx 模型推理示例 [仅供参考] 这是一个 风格迁移 onnx 模型推理过程代码,包含步骤如下 加载模型 - ...

  6. onnxruntime c++ 工程实例

    onnxruntime下载: 库下载: https://gitee.com/benjaminwan/ocr-lite-onnx/releases/v1.0 参考项目: 1. paddlecor 参见我 ...

  7. 【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理

    目录 一.项目介绍 二.项目结构 三.准备数据 1.数据标注 2.数据转换格式 四.执行训练 1.anchors文件 2.标签文件 3.预训练模型 4.训练数据 5.修改配置 6.执行训练 五.执行预 ...

  8. 【地平线开发板 模型转换】将pytorch生成的onnx模型转换成.bin模型

    文章目录 1 获取onnx模型 2 启动docker容器 3 onnx模型检查 3.1 为什么要检查? 3.2 如何操作 4 图像数据预处理 4.1 一些问题的思考 4.2 图片挑选与放置 4.2 使 ...

  9. TensorRT:在NVIDIA各种GPU硬件平台下运行的高性能推理C++库【Pytorch->ONNX->TensorRT】【实现神经网络提速(读取ONNX模型并运行)】【目前对ONNX的支持最好】

    tensorRT 基本网络构建 创建builder 创建network 创建config network添加输入 network添加层,绑定输入 network mark output,指定输出节点 ...

最新文章

  1. Windows下为PHP安装redis扩展
  2. Kruskal重构树
  3. 2009年最佳80后科技创业者
  4. asp mysql添加数据_ASP:ado.net 实例向数据库添加数据。
  5. 新代系统cnc怎样连接电脑_你真的了解3C产线上的运控系统吗?
  6. Mark:Camel SQL Route
  7. 在Azure平台上使用托管卡进行身份认证
  8. MFC中的问题记录 2012-2-20
  9. 九存:重新定义存储矿机
  10. ADB各种操作指令详解大汇总
  11. SIP软电话开发的基本条件和要点
  12. 运放专题:虚短、虚短
  13. Could not find artifact org.eclipse.m2e:lifecycle-mapping:pom:1.0.0
  14. uni-app学习:CSS之渐变色
  15. 程序员的一百万种变现方式之2,努力多赚零花钱
  16. steam验证登录失败_如何向Steam添加两方面身份验证
  17. SQL注入-二次注入和多语句注入
  18. 高性能Golang研讨会【精】
  19. oracle从序列中查最大id,Oracle序列详解
  20. kali上装软件gedit_linux下的gedit命令使用方法与技巧

热门文章

  1. 一句话后门中eval和assert的区别
  2. 进程特征码遍历VC版
  3. 深度优先搜索找迷宫的出路
  4. 《Debug Hacks》和调试技巧
  5. Google怎么用linux
  6. js 正则表达式奇偶字符串替换_Python中的正则表达式及其常用匹配函数用法简介...
  7. scrapy 中不同页面的拼接_scrapy官方文档提供的常见使用问题
  8. 陈老师Linux内核概述导学
  9. linux centos 6.8svn,CentOS6.8 安装配置以SVNAdmin管理SVN代码库
  10. 天津科技大学计算机科学与信息工程学院,天津科技大学人工智能学院欢迎您!...