使用参考: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)