paddleocr印章彎曲文字識別無法定位和識別彎曲文字

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/applications/%E5%8D%B0%E7%AB%A0%E5%BC%AF%E6%9B%B2%E6%96%87%E5%AD%97%E8%AF%86%E5%88%AB.md

我在復現(xiàn)paddleocr的印章彎曲文字識別的時候拇泛,發(fā)現(xiàn)使用paddle提供的彎曲文字定位模型DB++時穷绵,只能定位給到水平文字,無法定位到彎曲文字。

如下圖


image.png

因為我本人是個菜鳥啊提岔,我只會看paddle的教程啊,他說的我就照做冠息,他沒說,我就不會啊。

最終經(jīng)過我的研究,需要修改一個參數(shù)诈茧。參數(shù)的路徑如下:
PaddleOCR/ppocr/postprocess/db_postprocess.py


image.png

改了下面的參數(shù)就可以定位任意多邊形啦。效果圖如下:


image.png

但是呢棵介,我又發(fā)現(xiàn)用他的彎曲文字定位模型SVTR不能識別彎曲文字后雷,只能識別水平文字镇眷,我就很不高興咬最,我找了好久也沒找到類似的定位模型里面的參數(shù)欠动,所以無從下爪。

不著急慢慢分析具伍。

首先,根據(jù)paddle給出的做法望几,當我們拿到印章圖片,并且定位到印章中的文字之后橄抹,我們手里應該是有文字的坐標的祈坠,也就是下面代碼里的points,但是如果是水平文字(或者水平略傾斜)赦拘,那么我們的定位框就是一個四邊形,也就是下面代碼里assert 的points的長度是4阁猜,也就是4個點形成一個閉合框蹋艺。但是呢,如果我要預測彎曲文字怎么辦捎谨,points就不是四個點了啊。這時你看看最頂端被注銷掉的部分代碼畏邢,他的做法是什么检吆,其目的就是取一個緊貼定位框的四邊形。這么做的效果是什么呢蹭沛。

import cv2
import numpy as np

def get_rotate_crop_image(img, points):
    '''
    img_height, img_width = img.shape[0:2]
    left = int(np.min(points[:, 0]))
    right = int(np.max(points[:, 0]))
    top = int(np.min(points[:, 1]))
    bottom = int(np.max(points[:, 1]))
    img_crop = img[top:bottom, left:right, :].copy()
    points[:, 0] = points[:, 0] - left
    points[:, 1] = points[:, 1] - top
    '''
    assert len(points) == 4, "shape of points must be 4*2"
    img_crop_width = int(
        max(
            np.linalg.norm(points[0] - points[1]),
            np.linalg.norm(points[2] - points[3])))
    img_crop_height = int(
        max(
            np.linalg.norm(points[0] - points[3]),
            np.linalg.norm(points[1] - points[2])))
    pts_std = np.float32([[0, 0], [img_crop_width, 0],
                          [img_crop_width, img_crop_height],
                          [0, img_crop_height]])
    M = cv2.getPerspectiveTransform(points, pts_std)
    dst_img = cv2.warpPerspective(
        img,
        M, (img_crop_width, img_crop_height),
        borderMode=cv2.BORDER_REPLICATE,
        flags=cv2.INTER_CUBIC)
    dst_img_height, dst_img_width = dst_img.shape[0:2]
    if dst_img_height * 1.0 / dst_img_width >= 1.5:
        dst_img = np.rot90(dst_img)
    return dst_img


def run(data_dir, label_file, save_dir):
    datas = open(label_file, 'r').readlines()
    for idx, line in enumerate(datas):
        img_path, label = line.strip().split('\t')
        img_path = os.path.join(data_dir, img_path)

        label = json.loads(label)
        src_im = cv2.imread(img_path)
        if src_im is None:
            continue

        for anno in label:
            seal_box = anno['seal_box']
            txt_boxes = anno['polys']
            crop_im = get_rotate_crop_image(src_im, text_boxes)

            save_path = os.path.join(save_dir, f'{idx}.png')
            if not os.path.exists(save_dir):
                os.makedirs(save_dir)
            # print(src_im.shape)
            cv2.imwrite(save_path, crop_im)

這么做的效果就如下圖臂寝,亂七八糟的章鲤,用腳指頭想,都知道識別的效果不會好的


image.png

下面是識別效果败徊,都是paddle的代碼和paddle的模型素征。


image.png

但是呢如果一張圖片里既有水平文字御毅,又有彎曲文字的時候,他對水平文字就是別的很好端蛆,彎曲文字就完全不行。如下圖
image.png

下圖是文字識別的結果


image.png

難道他的正確率55%是拋棄所有彎曲文字,只要水平文字得來的嗎呆躲?
image.png

搞得我都懷疑我自己了插掂,到底是哪里做錯了。
是不是因為我把定位和識別聯(lián)系起來的過程中用的文字切片有問題辅甥,人家在det和rec連接的時候還有什么高明的做法嗎?
我用截圖軟件要销,找了幾張非常清晰的圖片夏块,將彎曲文字切割出來,不通過det模型直接送給rec模型試試看效果脐供。如下面幾個圖的效果,是我用win自帶的截圖截出來的。win+shift+s


d2670fcecb9cf1b001a7e025f301ec7.png

9f51eee1a153998f31dc8c5b3905edc.png

437a6b52d2c9a23d41a53342830ab6e.png

測試的結果如下圖匹颤,沒一個能看的,結果顯示的是識別出來的文字+置信度辽慕,你看看赦肃,甚至很多置信度都是0,完全識別不到文字船侧。


image.png

我累了厅各,我再找找原因吧,队塘,,遮怜,鸿市,
肯定還有一個隱藏的參數(shù),沒讓我發(fā)現(xiàn)灸芳。
這個世界對菜鳥太不友好了。
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冯遂,一起剝皮案震驚了整個濱河市谒获,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裸准,老刑警劉巖赔硫,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異权悟,居然都是意外死亡,警方通過查閱死者的電腦和手機峦阁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門榔昔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撒会,你說我怎么就攤上這事÷庀裕” “怎么了曾掂?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長溜歪。 經(jīng)常有香客問我许蓖,道長,這世上最難降的妖魔是什么膊爪? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任米酬,我火速辦了婚禮,結果婚禮上赃额,老公的妹妹穿的比我還像新娘。我一直安慰自己跳芳,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布娄琉。 她就那樣靜靜地躺著,像睡著了一般檬输。 火紅的嫁衣襯著肌膚如雪匈棘。 梳的紋絲不亂的頭發(fā)上析命,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音簇搅,去河邊找鬼软吐。 笑死,一個胖子當著我的面吹牛凹耙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播备典,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼意述,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拌屏?” 一聲冷哼從身側響起术荤,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎务唐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枫笛,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡刚照,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了啊楚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡拯辙,死狀恐怖颜价,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夕春,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布及志,位于F島的核電站寨腔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锌畸。R本人自食惡果不足惜靖避,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盆犁。 院中可真熱鬧篡九,春花似錦谐岁、人聲如沸榛臼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金刁。三九已至议薪,卻和暖如春媳友,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背醇锚。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工焊唬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人求晶。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓衷笋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爵赵。 傳聞我的和親對象是個殘疾皇子泊脐,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容