[工程部署]在RK3588上部署OCR(文字检测识别)(DBNet+CRNN)_rk3588部署ppocr

    cv2.polylines(img_path, [point], True, color, thickness)

return img_path

if name == ‘main’:

onnx_model = onnxruntime.InferenceSession("detect_model_small.onnx")

input_name = onnx_model.get_inputs()[0].name

# Set inputs

img = cv2.imread('./pic/6.jpg')

img0 , image= narrow_224_32(img,expected_size=(640,640))



transform_totensor = transforms.ToTensor()

tensor=transform_totensor(image)

tensor_nor=transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

tensor=tensor_nor(tensor)

tensor = np.array(tensor,dtype=np.float32).reshape(1,3,640,640)


post_proess = DBPostProcess()

is_output_polygon = False

#run

outputs = onnx_model.run(None, {input_name:tensor})

#post process

feat_2 = torch.from_numpy(outputs[0])

print(feat_2.size())

box_list, score_list = post_proess(outputs[0], [image.shape[:2]], is_output_polygon=is_output_polygon)

box_list, score_list = box_list[0], score_list[0]

if len(box_list) > 0:

    idx = [x.sum() > 0 for x in box_list]

    box_list = [box_list[i] for i, v in enumerate(idx) if v]

    score_list = [score_list[i] for i, v in enumerate(idx) if v]

else:

    box_list, score_list = [], []

print("-----------------box list",box_list)

img = draw_bbox(image, box_list)

img = img[0:img0.shape[0],0:img0.shape[1]]

print("============save pic")

img1=np.array(img,dtype=np.uint8).reshape(640,640,3)

cv2.imwrite("img.jpg",img1)

cv2.waitKey()

![](https://img-blog.csdnimg.cn/46146e587b6f410b83ff263a3410b2f7.png)


![](https://img-blog.csdnimg.cn/94ecd3e63b4f4300b006fd126827812b.png)



### 文字识别


#### onnx模型导出



#!/usr/bin/env python3

import os

import sys

import pathlib

将 torchocr路径加到python路径里

dir = pathlib.Path(os.path.abspath(file))

import numpy as np

sys.path.append(str(dir))

sys.path.append(str(dir.parent.parent))

import torch

from torchocr.networks import build_model

MODEL_PATH=‘./model/ch_rec_moblie_crnn_mbv3.pth’

DEVICE=‘cuda:0’ if torch.cuda.is_available() else ‘cpu’

print(“-----------------------devices”,DEVICE)

class RecInfer:

def __init__(self, model_path, batch_size=1):

    ckpt = torch.load(model_path, map_location=DEVICE)

    cfg = ckpt['cfg']

    self.model = build_model(cfg['model'])

    state_dict = {}

    for k, v in ckpt['state_dict'].items():

        state_dict[k.replace('module.', '')] = v

    self.model.load_state_dict(state_dict)

    self.batch_size = batch_size

    self.device = torch.device(DEVICE)

    self.model.to(self.device)

    self.model.eval()

Prepare input tensor

    input = torch.randn(1, 3, 32, 224, requires_grad=False).float().to(torch.device(DEVICE))

Export the torch model as onnx

    print("-------------------export")

    torch.onnx.export(self.model,

        input,

        'rego_model_small.onnx',

        export_params=True,

        opset_version=12,

        do_constant_folding=False)

Load the pretrained model and export it as onnx

model = RecInfer(MODEL_PATH)



#### 验证



import onnxruntime

import numpy as np

import cv2

import torch

DEVICE=‘cuda:0’ if torch.cuda.is_available() else ‘cpu’

IMG_WIDTH=448

ONNX_MODEL=‘./onnx_model/repvgg_s.onnx’

LABEL_FILE=‘/root/autodl-tmp/warren/PytorchOCR_OLD/torchocr/datasets/alphabets/dict_text.txt’

#ONNX_MODEL=‘./onnx_model/rego_model_small.onnx’

#LABEL_FILE=‘/root/autodl-tmp/warren/PytorchOCR_OLD/torchocr/datasets/alphabets/ppocr_keys_v1.txt’

PIC=‘./pic/img.jpg’

class CTCLabelConverter(object):

""" Convert between text-label and text-index """


def __init__(self, character):

    # character (str): set of the possible characters.

    dict_character = []

    with open(character, "rb") as fin:

        lines = fin.readlines()

        for line in lines:

            line = line.decode('utf-8').strip("\n").strip("\r\n")

            dict_character += list(line)

    self.dict = {}

    for i, char in enumerate(dict_character):

        # NOTE:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值