def model(img, model='keras', adjust=False, detectAngle=False): """ @@param:img, @@param:model,选择的ocr模型,支持keras\pytorch版本 @@param:adjust 调整文字识别结果 @@param:detectAngle,是否检测文字朝向 """ angle = 0 if detectAngle: # 进行文字旋转方向检测,分为[0, 90, 180, 270]四种情况 angle = angle_detect(img=np.copy(img)) # 文字朝向检测 print('The angel of this character is:', angle) im = Image.fromarray(img) print('Rotate the array of this img!') if angle == 90: im = im.transpose(Image.ROTATE_90) elif angle == 180: im = im.transpose(Image.ROTATE_180) elif angle == 270: im = im.transpose(Image.ROTATE_270) img = np.array(im) # 进行图像中的文字区域的识别 text_recs, tmp, img = text_detect(img) # 识别区域排列 text_recs = sort_box(text_recs) # result = crnnRec(img, text_recs, model, adjust=adjust) return result, tmp, angle
def model(img,adjust=False,detectAngle=False): """ @@param:img, @@param:model,选择的ocr模型,支持keras\pytorch版本 @@param:adjust 调整文字识别结果 @@param:detectAngle,是否检测文字朝向 """ angle = 0 if detectAngle: angle = angle_detect(img=np.copy(img))##文字朝向检测 im = Image.fromarray(img) if angle==90: im = im.transpose(Image.ROTATE_90) elif angle==180: im = im.transpose(Image.ROTATE_180) elif angle==270: im = im.transpose(Image.ROTATE_270) img = np.array(im) text_recs,tmp,img = text_detect(img) text_recs = sort_box(text_recs) result = crnnRec(img,text_recs,model,adjust=adjust) return result,tmp,angle
def model(img, _model='keras', adjust=False, detect_angle=False): """ :param img: :param _model: 选择的ocr模型,支持keras\pytorch版本 :param adjust: 调整文字识别结果 :param detect_angle: 是否检测文字朝向 :return: """ angle = 0 if detect_angle: # 文字朝向检测 angle = angle_detect(img=np.copy(img)) im = Image.fromarray(img) if angle == 90: im = im.transpose(Image.ROTATE_90) elif angle == 180: im = im.transpose(Image.ROTATE_180) elif angle == 270: im = im.transpose(Image.ROTATE_270) img = np.array(im) text_recs, tmp, img = text_detect(img) text_recs = sort_box(text_recs) result = crnnRec(img, text_recs, _model, adjust=adjust) return result, tmp, angle
def dete2img(img, adjust=False): """ 识别结果单独显示 @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') text_recs, img_framed, img_scale = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img_scale, text_recs, adjust) h, w = img.shape[:2] img_table = np.ones([h, w, 3], dtype=img.dtype) * 255 f = getScale(img, scale=TextLineCfg.SCALE, max_scale=TextLineCfg.MAX_SCALE) for key in result: for i in range(len(result[key][0])): result[key][0][i] = int(result[key][0][i] * 1.0 / f) for key in result: result[key][1] = charClassification.delSpaceOfChn(result[key][1]) result_copy = sorted(result.items(), key=lambda x: x[1][0][1], reverse=False) chnList = [] for ind in range(len(result_copy)): chnList.append(result_copy[ind][1][1]) img_table = showChn4table_pil(img_table, chnList) return result, img_framed, img_table
def modelPicExpansion_v(img, adjust=False): """ 识别结果在图片下侧显示 @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') text_recs, img_framed, img_scale = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img_scale, text_recs, adjust) h, w = img.shape[:2] img_expan = np.zeros([h * 2, w, 3], dtype=img.dtype) img_expan[0:h, 0:w, :] = img f = getScale(img, scale=TextLineCfg.SCALE, max_scale=TextLineCfg.MAX_SCALE) for i, list in enumerate(text_recs): for j, val in enumerate(list): text_recs[i][j] = int(val * 1.0 / f) for key in result: x1 = result[key][0][0] y1 = h + result[key][0][1] x2 = result[key][0][6] y2 = h + result[key][0][7] cv2.rectangle(img_expan, (x1, y1), (x2, y2), (255, 255, 255), thickness=-1) cv2.rectangle(img_expan, (x1, y1 - h), (x2, y2 - h), (255, 0, 0), thickness=2) pilimg = Image.fromarray(img_expan) draw = ImageDraw.Draw(pilimg) fs = getFontSize((y2 - y1)) font = ImageFont.truetype("simhei.ttf", fs, encoding="utf-8") draw.text((x1 + 2, y1 + 4), result[key][1], (0, 0, 0), font=font) img_expan = np.array(pilimg) return result, img_expan
def model(img, adjust=False): cfg_from_file('./ctpn/ctpn/text.yml') text_recs, img_framed, img = text_detect(img) text_recs = sort_box(text_recs) t = time.time() result = charRec(img, text_recs, adjust) print('OCR',(time.time()-t)) return result, img_framed
def model(self, img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ text_recs, img_framed, img = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img, text_recs, adjust) return result, img_framed
def model(img, adjust=True): """ @img: 图片 """ text_recs, img_framed, img = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img, text_recs, adjust) return result, img_framed
def model(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') text_recs, img_framed, img = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img, text_recs, adjust) return result, img_framed
def model(img, model='keras', adjust=False): """ @@param:img, @@param:model,选择的ocr模型,支持keras\pytorch版本 @@param:adjust 调整文字识别结果 @@param:detectAngle,是否检测文字朝向 """ text_recs, tmp, img = text_detect(img) text_recs = sort_box(text_recs) result = crnnRec(img, text_recs, model, adjust=adjust) return result, tmp
def get_text_region(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') text_recs, img_framed, img, detect_time, detect_number = text_detect(img) #tf.get_default_graph().finalize() text_recs = sort_box(text_recs) total_image, total_width = adjust_text_region(img, text_recs, adjust) return total_image, total_width, img_framed, detect_time, detect_number
def model(img, model='keras', adjust=False, detectAngle=False): """ @@param:img, @@param:model,选择的ocr模型,支持keras\pytorch版本 @@param:adjust 调整文字识别结果 @@param:detectAngle,是否检测文字朝向 """ # 进行图像中的文字区域的识别 text_recs, tmp, img = text_detect(img) # 识别区域排列 text_recs = sort_box(text_recs) # print(text_recs)
def bolian_model(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') # text_recs数据类型是:[[0,1,2,3,4,5,6,7]] (0,1):左上 (2,3):右上 (4,5):左下 (6,7):右下 text_recs, img_framed, img = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img, text_recs, adjust) retData = [] for key in result: retData.append(result[key][1]) return retData
def model(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') sttime = time.time() text_recs, img_framed, img = text_detect(img) print("text_detect时间", time.time() - sttime) # print("test_rec", text_recs) # print("img_framed", img_framed) text_recs = sort_box(text_recs) result = charRec(img, text_recs, adjust) return result, img_framed
def model(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') t = time.time() text_recs, img_framed, img = text_detect(img) print("text_detect cost {:.3f}s".format(time.time() - t)) t2 = time.time() text_recs = sort_box(text_recs) result = charRec(img, text_recs, adjust) print("charRec cost {:.3f}s".format(time.time() - t2)) return result, img_framed
def modeltest(img, model='keras', adjust=False, detectAngle=False): """ @@param:img, @@param:model,选择的ocr模型,支持keras\pytorch版本 @@param:adjust 调整文字识别结果 @@param:detectAngle,是否检测文字朝向 """ angle = 0 # 进行图像中的文字区域的识别 text_recs, tmp, img=text_detect(img) # 识别区域排列 text_recs = model.sort_box(text_recs) # result = model.crnnRec(img, text_recs, model, adjust=adjust) return result, tmp, angle
def model(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('../ctpn/ctpn/text.yml') text_recs, img_framed, img = text_detect(img) #检测文本框 # text_recs:文本框位置(列表形式), # img_framed:在原图上标注了文本框的图片, # img:原图 text_recs = sort_box(text_recs) #排序框 result = charRec(img, text_recs, adjust) #OCR模型,进行字符识别 return result, img_framed
def model_1(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') text_recs, img_framed, img_expan = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img_expan, text_recs, adjust) f = getScale(img, scale=TextLineCfg.SCALE, max_scale=TextLineCfg.MAX_SCALE) print(f) for key in result: for i in range(len(result[key][0])): result[key][0][i] = int(result[key][0][i] * 1.0 / f) return result, img_framed
def web_model(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') # text_recs数据类型是:[[0,1,2,3,4,5,6,7]] (0,1):左上 (2,3):右上 (4,5):左下 (6,7):右下 text_recs, img_framed, img = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img, text_recs, adjust) retData = [] i = 0 for key in result: retData.append({ 'loc': text_recs[0].tolist(), 'chinese': result[key][1] }) i = i + 1 return retData
def model(img, adjust=False, detectAngle=False): angle = 0 if detectAngle: angle = angle_detect(img=np.copy(img)) im = Image.fromarray(img) if angle == 90: im = im.transpose(Image.ROTATE_90) elif angle == 180: im = im.transpose(Image.ROTATE_180) elif angle == 270: im = im.transpose(Image.ROTATE_270) img = np.array(im) text_recs, tmp, img = text_detect(img) text_recs = sort_box(text_recs) result = crnnRec(img, text_recs, model, adjust=adjust) return result, tmp, angle
def model(img, adjust=False, detectAngle=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ angle = 0 if detectAngle: angle = angle_detect(img=np.copy(img)) ##文字朝向检测 im = Image.fromarray(img) if angle == 90: im = im.transpose(Image.ROTATE_90) elif angle == 180: im = im.transpose(Image.ROTATE_180) elif angle == 270: im = im.transpose(Image.ROTATE_270) img = np.array(im) cfg_from_file('./ctpn/ctpn/text.yml') text_recs, img_framed, img = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img, text_recs, adjust) return result, img_framed
def model(img, adjust=False): """ @img: 图片 @adjust: 是否调整文字识别结果 """ cfg_from_file('./ctpn/ctpn/text.yml') loops = 10 elapse0 = elapse1 = elapse2 = 0 for v in range(loops): t0 = time.time() text_recs, img_framed, img = text_detect(img) t1 = time.time() elapse0 += t1 - t0 text_recs = sort_box(text_recs) t2 = time.time() elapse1 += t2 - t1 result = charRec(img, text_recs, adjust) t3 = time.time() elapse2 += t3 - t2 print("Each: ", (elapse2 / (v + 1))) return result, img_framed
def model(img, model='keras', adjust=False, detectAngle=False): angle = 0 if detectAngle: angle = angle_detect(img=np.copy(img)) print('The angel of this character is:', angle) im = Image.fromarray(img) print('Rotate the array of this img!') if angle == 90: im = im.transpose(Image.ROTATE_90) elif angle == 180: im = im.transpose(Image.ROTATE_180) elif angle == 270: im = im.transpose(Image.ROTATE_270) img = np.array(im) text_recs, tmp, img = text_detect(img) text_recs = sort_box(text_recs) # result = crnnRec(img, text_recs, model, adjust=adjust) return result, tmp, angle
def model(img, model, adjust=False, detectAngle=False): """ @@param:img,输入的图像数组 @@param:model,选择的ocr模型,支持pytorch版本 @@param:adjust 调整文字识别结果 @@param:detectAngle,是否检测文字朝向 """ angle = 0 if detectAngle: # 进行文字旋转方向检测,分为[0, 90, 180, 270]四种情况,下面所用的是逆时针旋转,因此需要改正 angle = angle_detect(img=np.copy(img)) ##文字朝向检测 print('The angel of this character is:', angle) im = Image.fromarray(img) print('Rotate the array of this img!') if angle == 90: im = im.transpose(Image.ROTATE_270) elif angle == 180: im = im.transpose(Image.ROTATE_180) elif angle == 270: im = im.transpose(Image.ROTATE_90) img = np.array(im) print(img) # 进行图像中的文字区域的识别 t = time.time() text_recs, tmp, img = text_detect(img) print('image area recognition finished!') print("It takes time:{}s".format(time.time() - t)) # 识别区域排列 text_recs = sort_box(text_recs) # 文本识别 t = time.time() result = crnnRec(img, text_recs, ocrMode=model, adjust=adjust) print('end-to-end text recognition finished!') print("It takes time:{}s".format(time.time() - t)) return result, tmp, angle
def model(img, model_type='keras_crnn', adjust=False, angle_detect=False): """ @img: 图片 @model_type: ocr模型类型 @adjust: 是否调整文字识别结果 @angle_detect: 是否检测文字方向 """ angle = 0 if angle_detect: angle = angle_detector(img=np.copy(img)) # 文字方向检测 img = Image.fromarray(img) if angle == 90: img = img.transpose(Image.ROTATE_90) elif angle == 180: img = img.transpose(Image.ROTATE_180) elif angle == 270: img = img.transpose(Image.ROTATE_270) img = np.array(img) cfg_from_file('./ctpn/ctpn/text.yml') text_recs, tmp, img = text_detect(img) text_recs = sort_box(text_recs) result = charRec(img, text_recs, model_type, adjust) return result, tmp, angle
from ctpn.text_detect import text_detect import ocr # define test images dir image_files = glob('./test_images/02*.*') result_dir = './test_result' if os.path.exists(result_dir): shutil.rmtree(result_dir) os.mkdir(result_dir) # loop over all images for image_file in sorted(image_files): img = np.array(Image.open(image_file).convert('RGB')) t = time.time() # detect text area text_recs, img_framed, img = text_detect(img) # arrange box from top to bottom, from left to right text_recs = ocr.sort_box(text_recs) # load OCR model and recognize result = ocr.charRec(img, text_recs, False) # output result output_file = os.path.join(result_dir, image_file.split('/')[-1]) Image.fromarray(img_framed).save(output_file) print("Mission complete, it took {:.3f}s".format(time.time() - t)) print("\nRecognition Result:\n") for key in result: print(result[key][1])
def model(index, im_name, img, model='keras', adjust=True, recheck_flag=True): """ @@param:img, @@param:model,选择的ocr模型,支持keras\pytorch版本 @@param:adjust 调整文字识别结果 """ original_img = img # 进行图像中的文字区域的识别 text_recs, scale, img, abnormal_areas = text_detect( os.path.join(RESULTS_CTPN, im_name.split('.')[0] + str(index) + '.png'), img, recheck_flag=recheck_flag) if len(abnormal_areas): print abnormal_areas[0] #有异常区域,需要重新检测,暂时只检测第一个 #将异常区域贴到新的图片上,防止异常区域过小 abnormal_img = Image.fromarray( img[int(abnormal_areas[0][1]):int(abnormal_areas[0][3]), int(abnormal_areas[0][0]):int(abnormal_areas[0][2]), :]) sub_size = max(abnormal_img.size[0], abnormal_img.size[1]) if sub_size < 200: sub_img = Image.new('RGB', (200, 200), (255, 255, 255)) else: sub_img = Image.new('RGB', (sub_size, sub_size), (255, 255, 255)) sub_img.paste(abnormal_img, (0, 0)) sub_img.save('subimage.jpg') sub_text_recs, sub_scale, sub_img, _ = text_detect( os.path.join(RESULTS_CTPN, im_name.split('.')[0] + str(index) + 'sub.png'), np.array(sub_img.convert('RGB')), recheck_flag=False) finally_text_recs = [] # 把大图片和小图片的text_rec合并 # 大图片 for rec in text_recs: for i in range(4): if not rec_in_area(rec, abnormal_areas[0], scale): finally_text_recs.append(rec) # 小图片 for rec in sub_text_recs: #绝对位置 abs_rec = [] for i in range(4): abs_rec.append( int(rec[2 * i] / scale + abnormal_areas[0][0] / scale)) abs_rec.append( int(rec[2 * i + 1] / scale + abnormal_areas[0][1] / scale)) finally_text_recs.append(abs_rec) else: finally_text_recs = text_recs draw_box(im_name, original_img, finally_text_recs) # 识别区域排列 # text_recs = sort_box(text_recs) # # results = crnnRec(im_name, original_img, text_recs, model, adjust=adjust) results = crnnRec(im_name, original_img, finally_text_recs, model, adjust=adjust) # draw new image new_img = np.ones(original_img.shape) * 255 # new_img = np.ones(IMAGE_SIZE) * 255 color_ = (0, 0, 0) text_size = 20 ft = draw.put_chinese_text( '/datasets/text_renderer/data/fonts/chn/songti.ttf') f_result = open('results/{}.txt'.format(im_name), 'w') f_json = open('results/{}.json'.format(im_name.split('.')[0]), 'w') result_dict = [] for result in results.items(): box, b = result[1] pos = (box[0], box[1]) print b[0] #print box new_img = ft.draw_text(new_img, pos, b[0], text_size, color_) #f_result.write('{} {}, {} \n'.format(b[0], pos[0], pos[1])) result_dict.append( [box[0], box[1], box[2] - box[0], box[5] - box[3], b[0]]) cv2.imwrite(os.path.join(RESULTS, im_name), new_img) f_json.write(json.dumps(result_dict, ensure_ascii=False)) return
def model(img,model='keras',adjust=False): text_recs,tmp,img = text_detect(img) text_recs = sort_box(text_recs) result = crnnRec(img,text_recs,model,adjust=adjust) return result,tmp
0] > partImg.shape[1]: # 过滤异常图片 continue image = Image.fromarray(partImg).convert('L') text = do_predict(rec_model, image) if len(text) > 0: results[index] = [rec] results[index].append(text) # 识别文字 return results if __name__ == '__main__': result_dir = './test_result' if os.path.exists(result_dir): shutil.rmtree(result_dir) os.mkdir(result_dir) # rec_model = rec_model = keras.models.load_model('/workzone/tmp/basemodel.h5') for image_file in sorted(image_files): image = np.array(Image.open(image_file).convert('RGB')) t = time.time() text_recs, img_framed, image = text_detect(image) text_recs = sort_box(text_recs) result = charRec(rec_model, image, text_recs, adjust=False) pass