亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python使用Keras OCR實現(xiàn)從圖像中刪除文本

 更新時間:2022年03月28日 14:24:42   作者:woshicver  
這篇文章主要為大家介紹了如何在Python中利用Keras OCR實現(xiàn)快速地從圖像中刪除文本,從而作為圖像分類器的預(yù)處理步驟,需要的可以參考一下

介紹

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

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

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

處理

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

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

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

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

實現(xiàn)

Keras ocr簡介

KerasOCR提供現(xiàn)成的ocr模型和端到端訓(xùn)練管道,以構(gòu)建新的ocr模型(請參見:https://keras-ocr.readthedocs.io/en/latest/).

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

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

當(dāng)通過Keras orc傳遞圖像時,它將返回一個(word,box)元組,其中框包含四個角的坐標(biāo)(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)一組坐標(biāo)。

例如,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)左上角的坐標(biāo),第二個元素對應(yīng)右下角,第三個元素是右上角,而第四個元素是左下角。

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

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

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

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

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

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

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

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

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

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)

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

結(jié)尾

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

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

以上就是Python使用Keras OCR實現(xiàn)從圖像中刪除文本的詳細(xì)內(nèi)容,更多關(guān)于Python圖像刪除文本的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 獲取et和excel的版本號

    python 獲取et和excel的版本號

    在進(jìn)行OA開發(fā)過程中,經(jīng)常會用到當(dāng)前辦公軟件的版本號,在python可以通過如下的方法獲取。
    2009-04-04
  • Selenium關(guān)閉INFO:CONSOLE提示的解決

    Selenium關(guān)閉INFO:CONSOLE提示的解決

    這篇文章主要介紹了Selenium關(guān)閉INFO:CONSOLE提示的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python抖音表白程序源代碼

    python抖音表白程序源代碼

    這篇文章主要為大家詳細(xì)介紹了python抖音表白程序源代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 簡單的命令查看安裝的python版本號

    簡單的命令查看安裝的python版本號

    在本篇內(nèi)容里小編給大家整理的是關(guān)于簡單的命令查看安裝的python版本號的文章,需要的朋友們可以參考下。
    2020-08-08
  • Python實現(xiàn)合并多張圖片成視頻的示例詳解

    Python實現(xiàn)合并多張圖片成視頻的示例詳解

    隨著短視頻的興起,越來越多的人開始用各種形式進(jìn)行視頻制作,本篇博客從程序員的角度為大家解析一下如何通過?Python?合并多個圖片為一個視頻,需要的可以參考一下
    2023-02-02
  • 初探Python元編程之理解并使用元編程改變代碼的代碼示例

    初探Python元編程之理解并使用元編程改變代碼的代碼示例

    在Python編程中,有一種強(qiáng)大的技術(shù)允許我們在運行時修改或生成代碼,這就是元編程,Python的元編程工具包括裝飾器,元類,以及函數(shù)和類的各種動態(tài)修改技術(shù),這篇文章將向你介紹元編程的基本概念,并通過實例講解如何使用元編程
    2023-07-07
  • python通過wxPython打開一個音頻文件并播放的方法

    python通過wxPython打開一個音頻文件并播放的方法

    這篇文章主要介紹了python通過wxPython打開一個音頻文件并播放的方法,實例分析了wxPython操作音頻文件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀

    Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀

    這篇文章主要介紹了Matlab中關(guān)于argmax、argmin函數(shù)的使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python GUI庫圖形界面開發(fā)之PyQt5選項卡控件QTabWidget詳細(xì)使用方法與實例

    python GUI庫圖形界面開發(fā)之PyQt5選項卡控件QTabWidget詳細(xì)使用方法與實例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5選項卡控件QTabWidget詳細(xì)使用方法與實例,需要的朋友可以參考下
    2020-03-03
  • Python socket模塊實現(xiàn)的udp通信功能示例

    Python socket模塊實現(xiàn)的udp通信功能示例

    這篇文章主要介紹了Python socket模塊實現(xiàn)的udp通信功能,結(jié)合具體實例形式分析了Python使用socket模塊實現(xiàn)UDP通信客戶端與服務(wù)器端相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04

最新評論