使用参考:https://github.com/breezedeus/CnSTD/tree/master
原理参考:https://cnocr.readthedocs.io/zh/latest/intro-cnstd-cnocr.pdf
模型:
结论:
经过测试, 长文本检测效果不错,短文本可能角度不对
from cnstd import CnStd
import cv2
from cnocr import CnOcr
#文字检测模型使用的是 DBNet
std = CnStd(model_name='db_resnet34',auto_rotate_whole_image=True,rotated_bbox=False,context ='cpu',model_fp=None,model_backend='onnx', # ['pytorch', 'onnx']root = r'E:\db_resnet34-pan\db_resnet34', #模型文件所在的根目录。use_angle_clf=False,#对于检测出的文本框,是否使用角度分类模型进行调整angle_clf_configs=None
)
cn_ocr = CnOcr()image_org = cv2.imread(r'xxxx.jpg')
box_info_list = std.detect(
img_list=image_org,
resized_shape = (image_org.shape[0]//8,image_org.shape[1]//8), # 这个取值对检测结果的影响较大,可以针对自己的应用多尝试几组值,再选出最优值。例如 (512, 768), (768, 768), (768, 1024)等。
preserve_aspect_ratio = True,#
min_box_size = 8,
box_score_thresh = 0.3,
batch_size = 20,
)#image_list = [x['cropped_img'] for x in box_info_list['detected_texts']]
for i,image in enumerate(image_list):ocr_res = cn_ocr.ocr_for_single_line(image)print('ocr result: %s' % str(ocr_res))cv2.imwrite(str(i)+'.jpg', image)