123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import datetime
- import os.path
- import uuid
- import cv2
- from paddleocr import PaddleOCR, draw_ocr
- import argparse
- from PIL import Image
- # 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
- from tqdm import tqdm
- def get_boxes(img_path, language):
- ocr = PaddleOCR(use_angle_cls=True, lang=language) # need to run only once to download and load model into memory
- result = ocr.ocr(img_path, cls=True)
- # for line in idcard_imgs:
- # print(line)
- #
- for line in result:
- # 左上
- line[0][0][0] -= 5
- line[0][0][1] -= 5
- # 右上
- line[0][1][0] += 5
- line[0][1][1] -= 5
- # 右下
- line[0][2][0] += 5
- line[0][2][1] += 5
- # 左下
- line[0][3][0] -= 5
- line[0][3][1] += 5
- # 显示结果
- image = Image.open(img_path).convert('RGB')
- boxes = [line[0] for line in result]
- texts = [line[1][0] for line in result]
- scores = [line[1][1] for line in result]
- im_show = draw_ocr(image, boxes, texts, scores, font_path='./fonts/STSONG.TTF')
- im_show = Image.fromarray(im_show)
- im_show.save('result_lisa_ch.jpg')
- return [line[0] for line in result]
- def image_cut_save(img_path, boxes, save_dir, cnt):
- if not os.path.exists(save_dir):
- os.makedirs(save_dir)
- img = cv2.imread(img_path) # 打开图像
- for box in tqdm(boxes):
- upper = int(box[0][1])
- lower = int(box[2][1])
- left = int(box[0][0])
- right = int(box[2][0])
- cropped = img[upper:lower, left:right]
- time = datetime.datetime.now()
- t = str(time.year).zfill(4) + '-' + str(time.month).zfill(2) + '-' + str(time.day).zfill(2)
- save_path = save_dir + '/' + 'kdan' + '_' + t + '_' + str(cnt).zfill(4) + '_' + str(uuid.uuid1())[0:8] + '.jpg'
- cv2.imwrite(save_path, cropped)
- cnt += 1
- def get_all_img(img_dir):
- result = []
- img_paths = os.listdir(img_dir)
- for it in img_paths:
- temp = os.path.join(img_dir, it)
- result.append(temp)
- return result
- if __name__ == '__main__':
- parser = argparse.ArgumentParser()
- parser.add_argument('--img_path', type=str, default='idcard_lisa.png')
- parser.add_argument('--img_dir', type=str, default='')
- parser.add_argument('--language', type=str, default='chinese_cht')
- parser.add_argument('--save_dir', type=str, default='./idcard_imgs')
- args = parser.parse_args()
- cnt = 1
- if args.img_dir == '':
- boxes = get_boxes(args.img_path, args.language)
- # image_cut_save(args.img_path, boxes, args.save_dir, cnt)
- else:
- img_paths = get_all_img(args.img_dir)
- for img_path in tqdm(img_paths):
- boxes = get_boxes(img_path, args.language)
- image_cut_save(img_path, boxes, args.save_dir, cnt)
|