Skip to content

Commit 10c66ac

Browse files
authored
Update 印章弯曲文字识别.md
1 parent 9586094 commit 10c66ac

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

docs/applications/印章弯曲文字识别.md

+56
Original file line numberDiff line numberDiff line change
@@ -995,6 +995,62 @@ def run(data_dir, label_file, save_dir):
995995

996996
```
997997

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+
9981054
数据处理完成后,即可配置训练的配置文件。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)
9991055
修改SVTR配置文件中的训练数据部分如下:
10001056

0 commit comments

Comments
 (0)