Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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
Exemplo n.º 11
0
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
Exemplo n.º 13
0
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)
Exemplo n.º 14
0
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
Exemplo n.º 15
0
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
Exemplo n.º 16
0
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
Exemplo n.º 17
0
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
Exemplo n.º 18
0
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
Exemplo n.º 19
0
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
Exemplo n.º 20
0
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
Exemplo n.º 22
0
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
Exemplo n.º 23
0
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
Exemplo n.º 24
0
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
Exemplo n.º 25
0
Arquivo: model.py Projeto: qiu9yu/OCR
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
Exemplo n.º 26
0
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
Exemplo n.º 27
0
    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])
Exemplo n.º 28
0
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
Exemplo n.º 29
0
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