def one_pred(img_path): ocr = PaddleOCR(use_angle_cls=True, lang="ch") result = ocr.ocr(img_path, cls=True) image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/doc/simfang.ttf') im_show = Image.fromarray(im_show) n = 0 stR = "" for line in result: #print(line[1]) n += 1 texts = line[1][0] stR = stR + "," + str(texts) #print(texts) print(stR) im_show.show() return stR
def draw_server_result(image_file, res): img = cv2.imread(image_file) image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) if len(res) == 0: return np.array(image) keys = res[0].keys() if 'text_region' not in keys: # for rec or clas, draw function is invalid logger.info("draw function is invalid for rec or clas!") return None elif 'text' not in keys: # for ocr_det logger.info("draw text boxes only!") boxes = [] for dno in range(len(res)): boxes.append(res[dno]['text_region']) boxes = np.array(boxes) draw_img = draw_boxes(image, boxes) return draw_img else: # for ocr_system logger.info("draw boxes and texts!") boxes = [] texts = [] scores = [] for dno in range(len(res)): boxes.append(res[dno]['text_region']) texts.append(res[dno]['text']) scores.append(res[dno]['confidence']) boxes = np.array(boxes) scores = np.array(scores) draw_img = draw_ocr(image, boxes, texts, scores, drop_score=0.5, font_path="../../doc/simfang.ttf") return draw_img
def img_word_translate(img_path): ocr = PaddleOCR(use_angle_cls=True, lang="ch") result = ocr.ocr(img_path, cls=True) image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/doc/simfang.ttf') im_show = Image.fromarray(im_show) n = 0 stR = "" for line in result: # print(line[1]) n += 1 texts = line[1][0] if re.findall('[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]', texts): stR = stR + str(texts) else: stR = stR + str(texts) + "," # print(texts) print(stR) translate(stR, "en", "zh-CN") im_show.show() return stR
def one_pred(img_path): ocr = PaddleOCR(use_angle_cls=True, lang="ch") result = ocr.ocr(img_path, cls=False) # print(result) n = 0 stR = "" phone = "" #电话 shopName = "" #店铺名 describe = "" #描述 otherinfo = "没有其他信息" print("+++", result) for line in result: n += 1 texts = line[1][0] if texts == "": continue if len(texts) < 2: continue r = test.pre(texts) if len(texts) < 3: continue if r == "商铺名": shopName = shopName + texts continue s = ms.pre(texts) if s == "描述": describe = describe + texts continue stR = stR + str(line[1][0]) + ":" + str(line[1][1]) + "\n" phones = texts.split("1") # print("++",phone) for i in phones: # print(i) if re.match(r'^[1-9]\d{9}$', i): a = "1" + i # print(a) phone = phone + ";" + a else: phone = " 图片中没有电话信息" phone = phone[1:] print("****", shopName, phone, describe, otherinfo) #return im_show.show() image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/doc/simfang.ttf') im_show = Image.fromarray(im_show) # im_show.show() # im_show.save是保存识别后的图片 fanhui_img = 'result.jpg' im_show.save(fanhui_img) return shopName, phone, describe, otherinfo, fanhui_img
def main(args): image_file_list = get_image_file_list(args.image_dir) text_sys = TextSystem(args) is_visualize = True tackle_img_num = 0 for image_file in image_file_list: img = cv2.imread(image_file) if img is None: logger.info("error in loading image:{}".format(image_file)) continue starttime = time.time() tackle_img_num += 1 if not args.use_gpu and args.enable_mkldnn and tackle_img_num % 30 == 0: text_sys = TextSystem(args) dt_boxes, rec_res = text_sys(img) elapse = time.time() - starttime print("Predict time of %s: %.3fs" % (image_file, elapse)) dt_num = len(dt_boxes) dt_boxes_final = [] txts_final = [] # add for dno in range(dt_num): text, score = rec_res[dno] if score >= 0.5: text_str = "%s, %.3f" % (text, score) print(text_str) dt_boxes_final.append(dt_boxes[dno]) txts_final.append(rec_res[dno][0]) # add label_dic = dict(zip(txts_final, dt_boxes_final)) print(label_dic) if is_visualize: image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) boxes = dt_boxes txts = [rec_res[i][0] for i in range(len(rec_res))] scores = [rec_res[i][1] for i in range(len(rec_res))] draw_img = draw_ocr(image, boxes, txts, scores, draw_txt=True, drop_score=0.5) draw_img_save = "./inference_results/" if not os.path.exists(draw_img_save): os.makedirs(draw_img_save) cv2.imwrite( os.path.join(draw_img_save, os.path.basename(image_file)), draw_img[:, :, ::-1]) print("The visualized image saved in {}".format( os.path.join(draw_img_save, os.path.basename(image_file))))
def one_pred(img_path): ocr = PaddleOCR(use_angle_cls=True, lang="ch") result = ocr.ocr(img_path, cls=True) image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/doc/simfang.ttf') im_show = Image.fromarray(im_show) im_show.show()
from paddleocr import PaddleOCR from tools.infer.utility import draw_ocr ocr = PaddleOCR( ) # need to run only once to download and load model into memory img_path = r'F:\chrome\zrbdata\data\images\33.jpg' result = ocr.ocr(img_path, rec=False) print("+++", result) for line in result: print(line) # 显示结果 from PIL import Image image = Image.open(img_path).convert('RGB') im_show = draw_ocr(image, result, txts=None, scores=None, font_path='/path/to/PaddleOCR/doc/simfang.ttf') im_show = Image.fromarray(im_show) im_show.save('result.jpg') im_show.show()
def pre_save(img_path,save_path,csv_path,m_filePicker11=None): ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory i = 0 names =[] #abels = [] imgs=[] one_qian_pic_path = "" one_hou_pic_path = "" #存放所有的图片路径 n_qian_pic_path = [] n_hou_pic_path = [] j=0 stR = "" # 启动窗口 window.Show(True) jindu_len = len(os.listdir(img_path)) + 2 print("共:"+str(jindu_len-2)) window.m_gauge1.SetRange(jindu_len) dangqian_jindu = 1 n=0 for img in os.listdir(img_path): n+=1 window.m_staticText11.SetLabel("正在识别:"+img_path+'/'+img) print("当前正在识别"+str(dangqian_jindu)+"-->"+"正在识别:"+img_path+'/'+img) window.m_gauge1.SetValue(dangqian_jindu) dangqian_jindu = dangqian_jindu + 1 #动态显示进度条 if dangqian_jindu==jindu_len: window.m_gauge1.SetValue(dangqian_jindu) print(img_path+'/'+img) i+=1 result = ocr.ocr(img_path+'/'+img, cls=True) image = Image.open(img_path+'/'+img).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/doc/simfang.ttf') im_show = Image.fromarray(im_show) # im_show.show() # im_show.save是保存识别后的图片 sp = save_path+"/"+img im_show.save(sp) print("图片保存的位置:"+sp) #存储所有的图片路径 n_qian_pic_path.append(img_path+'/'+img) n_hou_pic_path.append(save_path+"/"+img) if j==0: one_hou_pic_path = save_path+"/"+img one_qian_pic_path = img_path+'/'+img j = j + 1 if str(result) == "None": continue for line in result: texts = line[1][0] if texts == "": continue if texts in names: continue texts = re.findall('[\u4e00-\u9fa50-9]+', texts, re.S) # 只要字符串中的中文,字母,数字 texts = "".join(texts) label = test.pre(texts) if len(texts) < 3: label = "非商铺名" if label == "商铺名": #print(texts, " :", label) stR = stR + str(img) + ":" + str(texts) + "\n" imgs.append(img) #labels.append(label) names.append(texts) dataframe = pd.DataFrame({'图片名': imgs, '商铺名称': names}) if csv_path[-3:]=="xls": dataframe.to_excel(csv_path, index=True) elif csv_path[-3:]=="csv": dataframe.to_csv(csv_path, index=True,sep=',') else: print("请选择csv或者xls文件") stR = stR + "\n" + "共识别了" + str(n) + "张图片" + "\n" + "共检测出商铺名" + str(i) + "个\n" dangqian_jindu = dangqian_jindu + 1 window.m_gauge1.SetValue(dangqian_jindu) print("当前正在识别" + str(dangqian_jindu)) print(i) return stR,one_qian_pic_path,one_hou_pic_path,n_qian_pic_path,n_hou_pic_path
def main(args): image_file_list = get_image_file_list(args.image_dir) templates = get_templates(args.template_dir) text_sys = TextSystem(args) is_visualize = True tackle_img_num = 0 for image_file in image_file_list: img, flag = check_and_read_gif(image_file) if not flag: img = cv2.imread(image_file) if img is None: logger.info("error in loading image:{}".format(image_file)) continue starttime = time.time() tackle_img_num += 1 if not args.use_gpu and args.enable_mkldnn and tackle_img_num % 30 == 0: text_sys = TextSystem(args) dt_boxes, rec_res = text_sys(img) elapse = time.time() - starttime print("Predict time of %s: %.3fs" % (image_file, elapse)) drop_score = 0.5 match_results = text_match(templates, dt_boxes, rec_res, drop_score=drop_score) remove_invalid_results(templates, match_results, dt_boxes, rec_res, drop_score=drop_score) ocr_results = [] for match_result in match_results: ocr_result = {} for partition_type, match_dict in match_result.items(): ocr_dict = {} if partition_type == 'head': continue if partition_type == 'image_type': ocr_dict[partition_type] = match_dict continue for partition_id, results in match_dict.items(): for result in results: ocr_dict.setdefault(partition_id, []) ocr_patition_dict = { 'text': result['text'], # 'points': result['points'].tolist(), 'confidence': result['score'] } ocr_dict[partition_id].append(ocr_patition_dict) ocr_result[partition_type] = ocr_dict ocr_results.append(ocr_result) print('ocr_results:', ocr_results) # dt_num = len(dt_boxes) # for dno in range(dt_num): # dt_box = dt_boxes[dno] # text, score = rec_res[dno] # if score >= drop_score: # text_str = "%s, %.3f" % (text, score) # print(text_str, dt_box) # post_process(templates, text, dt_box) if is_visualize: image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) boxes = dt_boxes txts = [rec_res[i][0] for i in range(len(rec_res))] scores = [rec_res[i][1] for i in range(len(rec_res))] draw_img = draw_ocr(image, boxes, txts, scores, draw_txt=True, drop_score=drop_score) draw_img_save = "./inference_results/" if not os.path.exists(draw_img_save): os.makedirs(draw_img_save) cv2.imwrite( os.path.join(draw_img_save, os.path.basename(image_file)), draw_img[:, :, ::-1]) print("The visualized image saved in {}".format( os.path.join(draw_img_save, os.path.basename(image_file))))
def one_pred(img_path): ocr = PaddleOCR(use_angle_cls=True, lang="ch") save_path = img_path result = ocr.ocr(img_path, cls=True) image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/doc/simfang.ttf') im_show = Image.fromarray(im_show) n_qian_pic_path = [] n_hou_pic_path = [] # print(result) n = 0 stR = "" name = "" all = "" phone = "" #电话 shopName = "" #店铺名 describe = "" #描述 otherinfo = "没有其他信息" n_qian_pic_path.append(img_path + '/' + path[-3:]) n_hou_pic_path.append(save_path + "/" + path[-3:]) for line in result: n += 1 texts = line[1][0] if len(texts) < 4: nm = name_test.pre(texts) if nm == "姓名": name = name + texts nm1 = re.findall('[\u4e00-\u9fa5]+', texts[:3], re.S) nm = name_test.pre(nm1) if nm == "姓名": name = name + str(nm1) if texts[0] == "东": a1 = texts r = name_test.pre(texts) if len(texts) < 2: continue if r == "商铺名": shopName = shopName + texts continue if texts[0] == "孙": a2 = re.findall('[\u4e00-\u9fa5]+', texts, re.S) s = ms.pre(texts) if s == "描述": describe = describe + texts continue stR = stR + str(line[1][0]) + ":" + str(line[1][1]) + "\n" phones = texts.split("1") if texts[:2] == "地址": a3 = texts if texts[:2] == "电话": a4 = re.findall('[0-9]+', texts, re.S) if re.match(r'^[0-9]\d{9,12}$', texts): phone = "1" + texts # print("++",phone) for i in phones: # print(i) if re.match(r'^[0-9]\d{9}$', i): a = "1" + i # print(a) phone = phone + ";" + a # 存储所有的图片路径 phone = phone[1:] all = all + "\n公司名称:" + str(a1) + "\n姓名:" + "".join( a2) + "\n手机:" + phone + "\n" + str(a3) + "\n电话:" + "".join( a4[:2]) + ";" + "".join(a4[2:]) #print("+++",name) print(all) one_hou_pic_path = save_path + "/" + path[-3:] one_qian_pic_path = img_path + '/' + path[-3:] # print("****",shopName,phone,describe,otherinfo) #return im_show.show() im_show.show() return shopName, phone, describe, otherinfo, one_qian_pic_path, one_hou_pic_path
def pre_save(img_path,save_path,csv_path,m_filePicker11=None): ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory i = 0 names =[] #abels = [] imgs=[] one_qian_pic_path = "" one_hou_pic_path = "" #存放所有的图片路径 n_qian_pic_path = [] n_hou_pic_path = [] j=0 stR = "" # 启动窗口 window.Show(True) jindu_len = len(os.listdir(img_path)) + 2 print("共:"+str(jindu_len-2)) window.m_gauge1.SetRange(jindu_len) dangqian_jindu = 1 n=0 aaa = [] for img in os.listdir(img_path): n+=1 window.m_staticText11.SetLabel("正在识别:"+img_path+'/'+img) print("当前正在识别"+str(dangqian_jindu)+"-->"+"正在识别:"+img_path+'/'+img) window.m_gauge1.SetValue(dangqian_jindu) dangqian_jindu = dangqian_jindu + 1 #动态显示进度条 if dangqian_jindu==jindu_len: window.m_gauge1.SetValue(dangqian_jindu) print(img_path+'/'+img) i += 1 result = ocr.ocr(img_path+'/'+img, cls=True) image = Image.open(img_path+'/'+img).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/doc/simfang.ttf') im_show = Image.fromarray(im_show) # im_show.show() # im_show.save是保存识别后的图片 #存储所有的图片路径 n_qian_pic_path.append(img_path+'/'+img) n_hou_pic_path.append(save_path+"/"+img) for line in result: if line[1][0] =="": continue if len(line) < 6: continue # print("+++",line) car_board = one_pred(str(line[1][0])) aaa.append(car_board) #print("***",car_board) if j == 0: one_hou_pic_path = save_path+"/"+img one_qian_pic_path = img_path+'/'+img j = j + 1 if str(result) == "None": continue dataframe = pd.DataFrame({'图片名': imgs, '车牌号': names}) if csv_path[-3:]=="xls": dataframe.to_excel(csv_path, index=True) elif csv_path[-3:]=="csv": dataframe.to_csv(csv_path, index=True,sep=',') else: print("请选择csv或者xls文件") for i in aaa: if i != None: stR = stR + str(i) + "\n" dangqian_jindu = dangqian_jindu + 1 window.m_gauge1.SetValue(dangqian_jindu) print("当前正在识别" + str(dangqian_jindu)) print(i) print(stR) return stR,one_qian_pic_path,one_hou_pic_path,n_qian_pic_path,n_hou_pic_path
from paddleocr import PaddleOCR from tools.infer.utility import draw_ocr # 模型路径下必须含有model和params文件 ocr = PaddleOCR(det_model_dir='{your_det_model_dir}', rec_model_dir='{your_rec_model_dir}', rec_char_dict_path='{your_rec_char_dict_path}', cls_model_dir='{your_cls_model_dir}', use_angle_cls=True) img_path = 'PaddleOCR/doc/imgs/11.jpg' result = ocr.ocr(img_path, cls=True) for line in result: print(line) # 显示结果 from PIL import Image image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/simfang.ttf') im_show = Image.fromarray(im_show) im_show.save('result.jpg')
def one_pred(img_path): ocr = PaddleOCR(use_angle_cls=True, lang="ch") result = ocr.ocr(img_path, cls=True) image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] im_show = draw_ocr(image, boxes, txts, scores, font_path='/doc/simfang.ttf') im_show = Image.fromarray(im_show) # im_show.show() # im_show.save是保存识别后的图片 im_show.save("img/result_img/result.jpg") n = 0 stR = "" phone = "" #电话 shopName = "" #店铺名 describe = "" #描述 for line in result: texts = line[1][0] if texts == "": continue if len(texts) < 2: continue # print(line[1]) n += 1 stR = stR + str(texts) + ":" + str(texts) + "\n" texts = re.findall('[\u4e00-\u9fa50-9]+', texts, re.S) # 只要字符串中的中文,字母,数字 texts = "".join(texts) if len(texts) < 3: continue r = test.pre(texts) if r == "商铺名": shopName = shopName + texts + ',' continue s = ms.pre(texts) if s == "描述": describe = describe + texts continue # print("+++",texts) if re.match(r'^[1-9]\d{11}$', texts) or len(texts) == 11: phone = str(texts) continue else: phones = texts.split("1") # print("++",phone) for i in phones: # print(i) if re.match(r'^[1-9]\d{7,11}$', i): a = "1" + i # print(a) phone = phone + a + ";" continue stR = stR + "\n" + "共识别出" + str( n ) + "段文本" + "\n其中商铺名为:" + shopName # + "\n电话为:" +str(phone) # + "\n描述为:"+describe print(stR) return stR
def main(args): image_file_list = get_image_file_list(args.image_dir) text_sys = TextSystem(args) is_visualize = True tackle_img_num = 0 for image_file in image_file_list: img = cv2.imread(image_file) # print(image_file) if img is None: logger.info("error in loading image:{}".format(image_file)) continue starttime = time.time() tackle_img_num += 1 if not args.use_gpu and args.enable_mkldnn and tackle_img_num % 30 == 0: text_sys = TextSystem(args) dt_boxes, rec_res = text_sys(img) elapse = time.time() - starttime print("Predict time of %s: %.3fs" % (image_file, elapse)) dt_num = len(dt_boxes) dt_boxes_final = [] txts_final = [] # add for dno in range(dt_num): text, score = rec_res[dno] if score >= 0.5: text_str = "%s, %.3f" % (text, score) # print(text_str) dt_boxes_final.append(dt_boxes[dno]) txts_final.append(rec_res[dno][0]) # add ''' file_info_list = {} file_all = json.loads(json.dumps(file_info_list)) file_list = [] mark_out = [] image_result = dict() image_result['fileUrl'] = './data/img' for i in range(len(txts_final)): label_dic = dict() label_dic['MarkLabel'] = txts_final[i] label_dic['Points'] = dt_boxes_final[i] mark_out.append(label_dic) image_result['MarkOut'] = mark_out file_list.append(image_result) file_all['fileInfoList'] = file_list with open("./data.json", "w", encoding='utf8') as f: json.dump(file_all, f, ensure_ascii=False, cls=NpEncoder, indent=4) ''' image_info = {} image_label_info = json.loads(json.dumps(image_info)) image_label_info['version'] = '4.5.6' image_label_info['flags'] = {} shapes = [] # image_result['fileUrl'] = './data/img' for i in range(len(txts_final)): label_dic = dict() label_dic['label'] = txts_final[i] label_dic['points'] = dt_boxes_final[i] label_dic['group_id'] = 1 label_dic['shape_type'] = 'polygon' label_dic['flags'] = {} shapes.append(label_dic) image_label_info['shapes'] = shapes img_name = os.path.basename(image_file) dir_name = './doc/imgs/' image_path = dir_name + img_name image_label_info['imagePath'] = img_name # can be modified with open(image_path, 'rb') as f: base64_data = base64.b64encode(f.read()) img_base64 = base64_data.decode() image_label_info['imageData'] = img_base64 image_label_info['imageHeight'] = np.array(img).shape[0] image_label_info['imageWidth'] = np.array(img).shape[1] with open(dir_name + img_name.split('.')[0] + ".json", "w", encoding='utf8') as f: json.dump(image_label_info, f, ensure_ascii=False, cls=NpEncoder, indent=2) if is_visualize: image = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) boxes = dt_boxes txts = [rec_res[i][0] for i in range(len(rec_res))] scores = [rec_res[i][1] for i in range(len(rec_res))] draw_img = draw_ocr(image, boxes, txts, scores, draw_txt=True, drop_score=0.5) draw_img_save = "./inference_results/" if not os.path.exists(draw_img_save): os.makedirs(draw_img_save) cv2.imwrite( os.path.join(draw_img_save, os.path.basename(image_file)), draw_img[:, :, ::-1]) print("The visualized image saved in {}".format( os.path.join(draw_img_save, os.path.basename(image_file))))