国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        使用CV2和Keras OCR從圖像中刪除文本

        介紹

        本文將討論如何快速地從圖像中刪除文本,作為圖像分類器的預(yù)處理步驟。

        刪除文本可能有多種或多種原因,例如,我們可以使用無文本圖像進行數(shù)據(jù)增強。

        在本教程中,我們將使用OCR(光學字符識別)檢測圖像中的文本,并在修復(fù)過程中填充照片中丟失的部分以生成完整的圖像——以刪除我們檢測到的文本。

        處理

        為了從圖像中刪除文本,我們將執(zhí)行以下三個步驟:

        1. 識別圖像中的文本,并使用KerasOCR獲取每個文本的邊界框坐標。

        2. 對于每個邊界框,應(yīng)用一個遮罩來告訴算法我們應(yīng)該修復(fù)圖像的哪個部分。

        3. 最后,應(yīng)用一種修復(fù)算法對圖像的遮罩區(qū)域進行修復(fù),從而得到一個無文本圖像。

        實現(xiàn)

        Keras ocr簡介

        KerasOCR提供現(xiàn)成的ocr模型和端到端訓練管道,以構(gòu)建新的ocr模型

        在這種情況下,我們將使用預(yù)訓練的模型,它對我們的任務(wù)非常有效。

        KerasOCR將自動下載探測器和識別器的預(yù)訓練權(quán)重。

        當通過Keras orc傳遞圖像時,它將返回一個(word,box)元組,其中框包含四個角的坐標(x,y)。

        下面是一個快速示例:

        import matplotlib.pyplot as plt

        import keras_ocr

        pipeline = keras_ocr.pipeline.Pipeline()

        #read image from the an image path (a jpg/png file or an image url)

        img = keras_ocr.tools.read(image_path)

        # Prediction_groups is a list of (word, box) tuples

        prediction_groups = pipeline.recognize([img])

        #print image with annotation and boxes

        keras_ocr.tools.drawAnnotations(image=img, predictions=prediction_groups[0])

        如果我們看一下prediction_groups,我們會看到每個元素對應(yīng)一組坐標。

        例如,prediction_groups[0][10]如下:

        ('tuesday',

        array([[ 986.2778 ,  625.07764],

                       [1192.3856 ,  622.7086 ],

                       [1192.8888 ,  666.4836 ],

                       [ 986.78094,  668.8526 ]], dtype=float32))

        數(shù)組的第一個元素對應(yīng)左上角的坐標,第二個元素對應(yīng)右下角,第三個元素是右上角,而第四個元素是左下角。

        cv2修復(fù)函數(shù)

        使用OpenCV應(yīng)用修復(fù)算法時,需要提供兩幅圖像:

        1. 輸入圖像,包含我們要刪除的文本。

        2. 遮罩圖像,它顯示圖像中要刪除的文本在哪里。第二個圖像的尺寸應(yīng)與輸入的尺寸相同。

        Cv2具有兩種修復(fù)算法,并允許應(yīng)用矩形、圓形或線遮罩

        在這種情況下,我決定使用線遮罩,因為它們更靈活地覆蓋不同方向的文本(矩形遮罩只適用于平行或垂直于x軸的單詞,圓形遮罩將覆蓋比較大的區(qū)域)。

        為了應(yīng)用遮罩,我們需要提供線的起點和終點坐標以及線的厚度:

        起點將是框的左上角和左下角之間的中點,終點將是右上角和右下角之間的中點。

        對于厚度,我們將計算左上角和左下角之間的線長度。

        import math

        import numpy as np

        def midpoint(x1, y1, x2, y2):

           x_mid = int((x1 + x2)/2)

           y_mid = int((y1 + y2)/2)

           return (x_mid, y_mid)

        #example of a line mask for the word "Tuesday"

        box = prediction_groups[0][10]

        x0, y0 = box[1][0]

        x1, y1 = box[1][1] 

        x2, y2 = box[1][2]

        x3, y3 = box[1][3] 

        x_mid0, y_mid0 = midpoint(x1, y1, x2, y2)

        x_mid1, y_mi1 = midpoint(x0, y0, x3, y3)

        thickness = int(math.sqrt( (x2 - x1)**2 + (y2 - y1)**2 ))

        現(xiàn)在我們可以創(chuàng)建我們的遮罩:

        mask = np.zeros(img.shape[:2], dtype="uint8")

        cv2.line(mask, (x_mid0, y_mid0), (x_mid1, y_mi1), 255, thickness)

        我們還可以檢查遮罩區(qū)域,確保其正常工作。

        masked = cv2.bitwise_and(img, img, mask=mask)

        plt.imshow(masked)

        最后,我們可以修復(fù)圖像。

        在這種情況下,我們將使用cv2.INPAINT_NS,指得是“Navier-Stokes, Fluid Dynamics, and Image and Video Inpainting”一文中描述的修復(fù)算法。

        img_inpainted = cv2.inpaint(img, mask, 7, cv2.INPAINT_NS)

        plt.imshow(img_inpainted)

        正如你所看到的,“Tuesday”已從圖片中刪除。

        匯總

        現(xiàn)在,讓我們把它總結(jié)起來,創(chuàng)建一個函數(shù)來去除任何圖像中的文本。我們只需要生成框列表,并迭代每個文本框。

        import matplotlib.pyplot as plt

        import keras_ocr

        import cv2

        import math

        import numpy as np

        def midpoint(x1, y1, x2, y2):

           x_mid = int((x1 + x2)/2)

           y_mid = int((y1 + y2)/2)

           return (x_mid, y_mid)

        pipeline = keras_ocr.pipeline.Pipeline()

        def inpaint_text(img_path, pipeline):

           # read image

           img = keras_ocr.tools.read(img_path)

           # generate (word, box) tuples 

           prediction_groups = pipeline.recognize([img])

           mask = np.zeros(img.shape[:2], dtype="uint8")

           for box in prediction_groups[0]:

               x0, y0 = box[1][0]

               x1, y1 = box[1][1] 

               x2, y2 = box[1][2]

               x3, y3 = box[1][3] 

               x_mid0, y_mid0 = midpoint(x1, y1, x2, y2)

               x_mid1, y_mi1 = midpoint(x0, y0, x3, y3)

               thickness = int(math.sqrt( (x2 - x1)**2 + (y2 - y1)**2 ))

               cv2.line(mask, (x_mid0, y_mid0), (x_mid1, y_mi1), 255, thickness)

               img = cv2.inpaint(img, mask, 7, cv2.INPAINT_NS)

           return(img)

        以下是最終結(jié)果(之前和之后):

        另外兩個例子:

        請注意,如果要保存圖像,需要將其轉(zhuǎn)換為RGB格式,否則顏色會反轉(zhuǎn)!

        img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

        cv2.imwrite(‘text_free_image.jpg’,img_rgb)

        如果你只對刪除某些單詞感興趣,則可以包括一個if條件,如下所示:

        給出了一個要刪除的單詞列表

        remove_list = [‘tuesday’, ‘monday’]

        我們可以在for循環(huán)中包含if條件

        def inpaint_text(img_path, remove_list, pipeline):
           

           # read image

           img = keras_ocr.tools.read(img_path)
           

           # generate (word, box) tuples 

           prediction_groups = pipeline.recognize([img])

           mask = np.zeros(img.shape[:2], dtype="uint8")
           

           for box in prediction_groups[0]:
               

              if box[0] in remove_list:

                  x0, y0 = box[1][0]

                  x1, y1 = box[1][1] 

                  x2, y2 = box[1][2]

                  x3, y3 = box[1][3]
               

                  x_mid0, y_mid0 = midpoint(x1, y1, x2, y2)
                   

                  x_mid1, y_mi1 = midpoint(x0, y0, x3, y3)
               

                  thickness = int(math.sqrt( (x2 - x1)**2 + (y2 - y1)**2 ))
               

                  cv2.line(mask, (x_mid0, y_mid0), (x_mid1, y_mi1), 255,    
                  thickness)
                   

                  img = cv2.inpaint(img, mask, 7, cv2.INPAINT_NS)
                        

           return(img)

        當然,這只是一個快速的例子,說明了如何對特定的單詞列表進行修復(fù)。

        結(jié)尾

        在這篇文章中,我們討論了如何實現(xiàn)一種算法來自動刪除圖像中的文本,該算法使用一個預(yù)訓練好的OCR模型(使用Keras)和一個使用cv2的修復(fù)算法。該算法似乎可以很好地從圖像中快速刪除文本,而無需為此特定任務(wù)訓練模型。

        當文本框靠近其他對象時,它通常表現(xiàn)不好,因為它可能會扭曲周圍環(huán)境。

        感謝閱讀!

               原文標題 : 使用CV2和Keras OCR從圖像中刪除文本

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

        發(fā)表評論

        0條評論,0人參與

        請輸入評論內(nèi)容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關(guān)注公眾號
          OFweek人工智能網(wǎng)
          獲取更多精彩內(nèi)容
          文章糾錯
          x
          *文字標題:
          *糾錯內(nèi)容:
          聯(lián)系郵箱:
          *驗 證 碼:

          粵公網(wǎng)安備 44030502002758號

          主站蜘蛛池模板: Jizz日本18| 日韩A| 莱阳市| 精品视频99| 卢氏县| 波多野结衣av88综合| 久久综合88| 国产成人亚洲日韩欧美婷婷亚片| 日韩操逼网| 乐亭县| 91色拍| 久久99免费麻辣视频| 好吊av| 国产AV一区二区三区| 1024视频在线| va精品在线| 亚洲黄色成人网站| 日本特级片| 精品一区二区三区三区| 国产黄色短视频| 滦平县| 亚洲播播| 日本成人有码| jizz日| 黄网免费观看| 日韩无码2020| 口爆视频| 91视频免费| 亚洲性视频| 色悠悠撸视频| 疏附县| 中文字幕丝袜| 讷河市| 激情综合久久| 国产xxxxxx| 亚洲无码一区二区三区蜜桃| 日日cao| 亚州精品熟女在线| 大姚县| 日本道久久综合88| 牟定县|