欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python開發(fā)一個圖像標注與OCR識別工具

 更新時間:2025年03月06日 15:45:50   作者:winfredzhang  
這篇文章主要介紹了一個使用Python開發(fā)的工具,允許用戶在圖像上進行矩形標注,使用 OCR 對標注區(qū)域進行文本識別,并將結(jié)果保存為 Excel 文件,感興趣的可以了解下

圖像標注和OCR(光學(xué)字符識別)工具的代碼進行詳細分析。該工具允許用戶在圖像上進行矩形標注,使用 OCR 對標注區(qū)域進行文本識別,并將結(jié)果保存為 Excel 文件。同時,用戶可以保存和加載標注,清除標注,以及裁剪圖像等。

項目簡介

這個圖像標注和OCR工具的功能主要包括:

  • 加載圖像并顯示在界面上。
  • 允許用戶在圖像上繪制矩形框,以標注感興趣的區(qū)域。
  • 在標注區(qū)域內(nèi)執(zhí)行OCR識別,并顯示識別的文本。
  • 將OCR識別結(jié)果保存為Excel文件。
  • 保存和加載用戶的標注數(shù)據(jù)(JSON格式)。
  • 提供裁剪、清除標注、重置圖像等功能。

1. 圖像加載與顯示

首先,程序會掃描指定文件夾中的圖像文件(支持的格式包括 .png, .jpg, .jpeg, .bmp, .tiff),并顯示在界面的圖像面板中。

self.image_files = [f for f in os.listdir(folder_path) 
                    if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff'))]

通過 wx.ListBox 組件顯示圖像文件的列表,用戶可以點擊選擇一個文件,然后加載并顯示它:

file_path = os.path.join(self.folder_path, filename)
self.original_image = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), cv2.IMREAD_COLOR)
self.original_image = cv2.cvtColor(self.original_image, cv2.COLOR_BGR2RGB)

這段代碼使用 OpenCV 讀取圖像,并轉(zhuǎn)換顏色空間以適應(yīng) wxPython 顯示。

2. 矩形標注

用戶可以在圖像上繪制矩形框,標記感興趣的區(qū)域。程序通過鼠標事件(按下、移動、松開)來繪制和更新矩形框:

def on_mouse_down(self, event):
    """鼠標按下開始繪制矩形"""
    if self.displayed_image is not None:
        self.start_point = event.GetPosition()
        self.drawing = True

def on_mouse_move(self, event):
    """鼠標移動時更新矩形"""
    if self.drawing and self.displayed_image is not None:
        self.image_panel.Refresh()

???????def on_mouse_up(self, event):
    """鼠標松開完成矩形繪制"""
    if self.drawing and self.displayed_image is not None:
        end_point = event.GetPosition()
        # 確保矩形方向正確
        x1 = min(self.start_point.x, end_point.x)
        y1 = min(self.start_point.y, end_point.y)
        x2 = max(self.start_point.x, end_point.x)
        y2 = max(self.start_point.y, end_point.y)
        orig_rect = self.convert_to_original_coords((x1, y1, x2, y2))
        self.rectangles.append(orig_rect)
        self.drawing = False
        self.image_panel.Refresh()

在 on_mouse_down 中,用戶點擊圖像開始繪制矩形框,on_mouse_move 用于實時更新矩形的形狀,on_mouse_up 在用戶松開鼠標時完成矩形的繪制。

3. OCR識別

標注完成后,用戶可以點擊“識別”按鈕,程序會對標注區(qū)域進行OCR識別。OCR處理通過 pytesseract 庫實現(xiàn):

text = pytesseract.image_to_string(
    pil_image, 
    lang='chi_sim',  # 中文簡體
    config='--psm 6 --oem 3'  # 更精確的文本塊處理
)

識別結(jié)果會顯示在文本框中,并且可以將識別的結(jié)果保存為Excel文件:

if ocr_results:
    df = pd.DataFrame({'識別區(qū)域': range(1, len(ocr_results) + 1), '識別文本': ocr_results})
    output_path = os.path.join(self.folder_path, f'{self.current_filename}_ocr_results.xlsx')
    df.to_excel(output_path, index=False, engine='openpyxl')

使用 pandas 庫將識別結(jié)果保存為Excel文件,方便后續(xù)查看和處理。

4. 標注的保存與加載

程序還允許用戶將標注區(qū)域保存為 JSON 格式,以便下次加載時使用。這是通過以下方式實現(xiàn)的:

annotations_data = {
    'filename': self.current_filename,
    'rectangles': self.rectangles
}
json_path = os.path.join(self.folder_path, f'{self.current_filename}_annotations.json')
with open(json_path, 'w', encoding='utf-8') as f:
    json.dump(annotations_data, f)

標注文件會根據(jù)圖像的文件名命名,以便與圖像文件對應(yīng)。加載標注時,程序會讀取 JSON 文件并恢復(fù)之前的標注狀態(tài):

with open(json_path, 'r', encoding='utf-8') as f:
    annotations_data = json.load(f)
if annotations_data['filename'] == self.current_filename:
    self.rectangles = annotations_data['rectangles']

5. 裁剪與重置圖像

裁剪功能允許用戶裁剪圖像的選定區(qū)域。用戶完成矩形繪制后,點擊“裁剪”按鈕,程序會根據(jù)最后一個矩形進行圖像裁剪:

cropped = self.current_image[y1:y2, x1:x2].copy()

如果需要重置圖像,用戶可以點擊“重置圖像”按鈕,程序?qū)⒒謴?fù)到原始圖像狀態(tài)。

6. UI組件與布局

wxPython 的布局管理使得界面整潔易用。主界面分為文件列表、圖像顯示區(qū)域和操作按鈕區(qū)域三個部分。文件列表用于選擇圖像,圖像顯示區(qū)域展示圖像并允許標注,按鈕區(qū)域提供裁剪、標注、OCR識別等操作。

file_list_sizer = wx.BoxSizer(wx.VERTICAL)
self.file_listbox = wx.ListBox(panel, choices=self.image_files, style=wx.LB_SINGLE)
file_list_sizer.Add(self.file_listbox, 1, wx.EXPAND | wx.ALL, 10)

通過 BoxSizer 管理不同控件的布局,使得界面更加模塊化和靈活。

運行結(jié)果

以上就是使用Python開發(fā)一個圖像標注與OCR識別工具的詳細內(nèi)容,更多關(guān)于Python圖像標注與OCR識別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文掌握Python描述符與裝飾器的神奇妙用

    一文掌握Python描述符與裝飾器的神奇妙用

    Python 是一種多范式編程語言,具有靈活的特性,其中可調(diào)用實例、嵌套函數(shù)、描述符和裝飾器是其功能強大的特性之一,這些概念對于編寫高效、優(yōu)雅的代碼至關(guān)重要
    2024-01-01
  • Python利用遞歸和walk()遍歷目錄文件的方法示例

    Python利用遞歸和walk()遍歷目錄文件的方法示例

    在日常開發(fā)中經(jīng)常需要檢查一個“目錄或文件夾”內(nèi)部有沒有我們想要的文件或者文件夾,下面這篇文章主要給大家介紹了關(guān)于Python利用遞歸和walk()遍歷目錄文件的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • Python坐標線性插值應(yīng)用實現(xiàn)

    Python坐標線性插值應(yīng)用實現(xiàn)

    這篇文章主要介紹了Python坐標線性插值應(yīng)用實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python PyQt5中彈出子窗口解決子窗口一閃而過的問題

    Python PyQt5中彈出子窗口解決子窗口一閃而過的問題

    這篇文章主要介紹了Python PyQt5中彈出子窗口解決子窗口一閃而過的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python之列表推導(dǎo)式的用法

    python之列表推導(dǎo)式的用法

    這篇文章主要介紹了python之列表推導(dǎo)式的用法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 解決pyqt5中QToolButton無法使用的問題

    解決pyqt5中QToolButton無法使用的問題

    今天小編就為大家分享一篇解決pyqt5中QToolButton無法使用的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python使用flask作為web服務(wù)器的代碼實現(xiàn)

    Python使用flask作為web服務(wù)器的代碼實現(xiàn)

    Python Flask 框架是一個輕量級的 Web 框架,它簡單易用,靈活多變,非常適合用于構(gòu)建小型到中型規(guī)模的 Web 應(yīng)用程序,本文給大家介紹了Python使用flask作為web服務(wù)器的代碼實現(xiàn),需要的朋友可以參考下
    2024-06-06
  • python 求兩個向量的順時針夾角操作

    python 求兩個向量的順時針夾角操作

    這篇文章主要介紹了python 求兩個向量的順時針夾角操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python range與enumerate函數(shù)區(qū)別解析

    Python range與enumerate函數(shù)區(qū)別解析

    這篇文章主要介紹了Python range與enumerate函數(shù)區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 利用Python的PyPDF2庫提取pdf中的文字

    利用Python的PyPDF2庫提取pdf中的文字

    PyPDF2是一個用于處理PDF文件的Python庫,它提供了許多用于讀取和操作PDF文件的功能,對于需要處理PDF文件的Python應(yīng)用程序,PyPDF2是一個非常實用的工具庫,本文將給大家詳細介紹一下如何通過Python的PyPDF2庫提取pdf中的文字,需要的朋友可以參考下
    2023-05-05

最新評論