@@ -995,6 +995,62 @@ def run(data_dir, label_file, save_dir):
995
995
996
996
```
997
997
998
+ 若训练数据使用** 4点标注以外的多点标注** (如8点,16点等不规则形状标注),可以使用以下代码进行印章文字区域剪切
999
+
1000
+ <details >
1001
+
1002
+ ``` python linenums="1"
1003
+ import cv2
1004
+ import numpy as np
1005
+ import os
1006
+ import json
1007
+
1008
+ def get_polygon_crop_image (img , points ):
1009
+ points = np.array(points, dtype = np.int32)
1010
+ mask = np.zeros_like(img, dtype = np.uint8)
1011
+ cv2.fillPoly(mask, [points], (255 , 255 , 255 ))
1012
+ result = cv2.bitwise_and(img, mask)
1013
+ x, y, w, h = cv2.boundingRect(points)
1014
+ cropped_result = result[y:y+ h, x:x+ w]
1015
+ return cropped_result
1016
+
1017
+
1018
+ def run (data_dir , label_file , save_dir , output_txt ):
1019
+ if not os.path.exists(output_txt):
1020
+ os.makedirs(os.path.dirname(output_txt), exist_ok = True )
1021
+ open (output_txt, ' w' ).close()
1022
+
1023
+ with open (output_txt, ' w' ) as txt_file:
1024
+ datas = open (label_file, ' r' ).readlines()
1025
+ for line in datas:
1026
+ filename, label = line.strip().split(' \t ' )
1027
+ img_path = os.path.join(data_dir, filename)
1028
+ label = json.loads(label)
1029
+ src_im = cv2.imread(img_path)
1030
+ if src_im is None :
1031
+ continue
1032
+ for i, anno in enumerate (label):
1033
+ txt_boxes = anno[' points' ]
1034
+ crop_im = get_polygon_crop_image(src_im, txt_boxes)
1035
+ crop_img_name = f ' { filename.split(" /" )[- 1 ].split(" ." )[0 ]} _crop_ { i} .jpg '
1036
+ save_path = os.path.join(save_dir, crop_img_name)
1037
+ if not os.path.exists(save_dir):
1038
+ os.makedirs(save_dir)
1039
+ cv2.imwrite(save_path, crop_im)
1040
+ txt_file.write(f ' crop_img/ { crop_img_name} \t { anno[" transcription" ]} \n ' )
1041
+
1042
+ if __name__ == " __main__" :
1043
+ data_dir = " seal" # 图片数据集路径
1044
+ label_file = " Label.txt" # 数据标记结果txt路径
1045
+ save_dir = " crop_img" # 导出识别结果,即识别所用训练图片的文件夹路径
1046
+ output_txt = " rec_gt.txt" # 识别训练标记结果txt路径
1047
+ run(data_dir, label_file, save_dir, output_txt)
1048
+
1049
+ ```
1050
+
1051
+ </details >
1052
+
1053
+
998
1054
数据处理完成后,即可配置训练的配置文件。SVTR配置文件选择[ configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml] ( https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml )
999
1055
修改SVTR配置文件中的训练数据部分如下:
1000
1056
0 commit comments