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()


### 文字识别
#### 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: