最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python開發(fā)一個(gè)圖片OCR管理和文章下載工具

 更新時(shí)間:2025年12月26日 08:56:27   作者:winfredzhang  
在日常工作中,我們經(jīng)常面臨兩個(gè)零碎但繁瑣的需求,一是管理大量的OCR(文字識(shí)別)圖片素材,二是看到優(yōu)質(zhì)的公眾號(hào)文章,想把里面的圖片批量下載下來(lái)保存素材,下面我們就來(lái)看看如何使用Python將這兩個(gè)功能整合到一個(gè)工具中吧

在日常工作中,我們經(jīng)常面臨兩個(gè)零碎但繁瑣的需求:一是管理大量的OCR(文字識(shí)別)圖片素材,需要頻繁查看、縮放圖片并保存識(shí)別結(jié)果;二是看到優(yōu)質(zhì)的公眾號(hào)文章,想把里面的圖片批量下載下來(lái)保存素材。

今天,我將通過(guò)一個(gè)完整的 Python GUI 項(xiàng)目,分享如何使用 wxPython 將這兩個(gè)功能整合到一個(gè)工具中。我們將重點(diǎn)分析如何自定義支持縮放/拖拽的圖片控件、實(shí)現(xiàn)“智能保存”邏輯以及編寫多線程爬蟲。

技術(shù)棧概覽

GUI 框架: wxPython (主要用于界面構(gòu)建)

圖像處理: Pillow (PIL) (用于圖片加載和預(yù)處理)

網(wǎng)絡(luò)爬蟲: requests + BeautifulSoup4 (用于抓取微信文章)

系統(tǒng)交互: subprocess (調(diào)用外部OCR程序), threading (防界面卡死)

架構(gòu)設(shè)計(jì)

程序的主體結(jié)構(gòu)采用 wx.Notebook(選項(xiàng)卡)布局,將應(yīng)用分為兩個(gè)獨(dú)立的 Panel:

OCRPanel: 負(fù)責(zé)圖片導(dǎo)入、預(yù)覽、調(diào)用外部OCR工具以及工程文件的保存(JSON格式)。

DownloaderPanel: 負(fù)責(zé)解析微信文章URL,批量下載圖片。

核心亮點(diǎn)一:自定義可縮放、拖拽的圖片畫布 (ImageCanvas)

在早期的 wxPython 開發(fā)中,我們常用 wx.StaticBitmap 顯示圖片,但它不支持縮放和移動(dòng),查看大圖細(xì)節(jié)非常不便。為了解決這個(gè)問(wèn)題,我重寫了一個(gè) ImageCanvas 類。

1. 原理分析

這個(gè)控件繼承自 wx.Panel,核心在于綁定 EVT_PAINT 事件,使用 wx.GraphicsContext 進(jìn)行高性能繪圖。

平移(Pan): 監(jiān)聽 EVT_MOTION 和鼠標(biāo)點(diǎn)擊事件,計(jì)算鼠標(biāo)移動(dòng)的 dx 和 dy,更新圖片的繪制偏移量 offset_x 和 offset_y。

縮放(Zoom): 監(jiān)聽 EVT_MOUSEWHEEL。當(dāng)滾輪滾動(dòng)時(shí),更新 self.scale 變量。

2. 代碼解析

def on_paint(self, event):
    dc = wx.BufferedPaintDC(self) # 使用雙緩沖防止閃爍
    dc.Clear()
    
    if self.image:
        gc = wx.GraphicsContext.Create(dc)
        if gc:
            gc.PushState()
            # 核心變換邏輯:先平移,再縮放
            gc.Translate(self.offset_x, self.offset_y)
            gc.Scale(self.scale, self.scale)
            
            bmp = wx.Bitmap(self.image)
            gc.DrawBitmap(bmp, 0, 0, self.image.GetWidth(), self.image.GetHeight())
            gc.PopState()

這段代碼的精髓在于 wx.GraphicsContext,它讓我們不需要手動(dòng)計(jì)算每個(gè)像素的位置,而是通過(guò)矩陣變換(Translate/Scale)輕松實(shí)現(xiàn)視圖操作。

核心亮點(diǎn)二:工程文件的“智能保存”邏輯

在許多工具軟件中,每次點(diǎn)擊保存都彈出“另存為”對(duì)話框是非常糟糕的體驗(yàn)。我們?cè)?OCRPanel 中實(shí)現(xiàn)了類似 Word 的保存邏輯。

1. 狀態(tài)管理

我們?cè)陬愔性黾恿艘粋€(gè)變量 self.current_project_file 來(lái)記錄當(dāng)前工程是否已經(jīng)關(guān)聯(lián)了磁盤上的文件。

2. 邏輯流

新建/清空時(shí):將 self.current_project_file 置為 None。

點(diǎn)擊保存時(shí):

Case A (已有文件): 如果 current_project_file 存在,直接寫入 JSON,不彈窗。

Case B (新文件): 彈出 wx.TextEntryDialog 詢問(wèn)工程名,保存成功后更新 current_project_file。

def on_save_project(self, event):
    # ... 省略數(shù)據(jù)收集代碼 ...

    # 智能判斷:是“保存”還是“另存為”
    if self.current_project_file and os.path.exists(self.current_project_file):
        # === 直接保存 ===
        with open(self.current_project_file, 'w', encoding='utf-8') as f:
            json.dump(self.current_project, f, ...)
    else:
        # === 新建工程,詢問(wèn)名稱 ===
        dlg = wx.TextEntryDialog(self, "請(qǐng)輸入工程名稱:", "保存新工程")
        if dlg.ShowModal() == wx.ID_OK:
            # ... 保存并更新 self.current_project_file ...

核心亮點(diǎn)三:健壯的微信文章圖片獲取

微信公眾號(hào)文章的圖片下載有兩個(gè)難點(diǎn):懶加載(Lazy Load)和防盜鏈參數(shù)。

1. 對(duì)抗懶加載

微信文章的 HTML 中,真實(shí)的圖片 URL 通常不在 src 屬性中(src 往往是一個(gè)占位圖),而是藏在 data-src 中。我們的爬蟲采用了多重策略提取 URL:

BeautifulSoup 解析: 優(yōu)先查找 data-src、data-original 等屬性。

正則兜底: 如果 HTML 解析遺漏,使用正則表達(dá)式 re.findall 直接從源碼中暴力匹配 https://mmbiz.qpic.cn/... 格式的鏈接。

2. URL 清洗

微信圖片 URL 往往帶有大量的參數(shù)(如 tp=webp),直接下載可能導(dǎo)致格式混亂。代碼中實(shí)現(xiàn)了 clean_image_url 方法,提取基礎(chǔ) URL,并根據(jù) Content-Type 智能判斷文件后綴(.jpg, .png, .gif)。

3. 多線程防卡死

GUI 程序最忌諱在主線程進(jìn)行網(wǎng)絡(luò)請(qǐng)求。我們?cè)?DownloaderPanel 中使用了 threading:

# 錯(cuò)誤做法:直接調(diào)用下載函數(shù),界面會(huì)卡死直到下載完成
# self.download_images(url, save_path) 

# 正確做法:開啟新線程
threading.Thread(target=self.run_download_task, args=(url, save_path)).start()

同時(shí),為了在子線程中安全地更新 UI(如進(jìn)度條),我們使用了 wx.CallAfter,確保 UI 操作回到主線程執(zhí)行。

運(yùn)行結(jié)果

到此這篇關(guān)于使用Python開發(fā)一個(gè)圖片OCR管理和文章下載工具的文章就介紹到這了,更多相關(guān)Python圖片OCR管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3連接MySQL數(shù)據(jù)庫(kù)實(shí)例詳解

    python3連接MySQL數(shù)據(jù)庫(kù)實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了python3連接MySQL數(shù)據(jù)庫(kù)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python?urllib?入門使用詳細(xì)教程

    Python?urllib?入門使用詳細(xì)教程

    urllib?庫(kù),它是?Python?內(nèi)置的?HTTP?請(qǐng)求庫(kù),不需要額外安裝即可使用,這篇文章主要介紹了Python?urllib?入門使用,需要的朋友可以參考下
    2022-11-11
  • python列表切片和嵌套列表取值操作詳解

    python列表切片和嵌套列表取值操作詳解

    今天小編就為大家分享一篇python列表切片和嵌套列表取值操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python matplotlib實(shí)現(xiàn)雙Y軸的實(shí)例

    python matplotlib實(shí)現(xiàn)雙Y軸的實(shí)例

    今天小編就為大家分享一篇python matplotlib實(shí)現(xiàn)雙Y軸的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python文本處理之按行處理大文件的方法

    Python文本處理之按行處理大文件的方法

    下面小編就為大家分享一篇Python文本處理之按行處理大文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 在VSCode中添加Python解釋器并安裝Python庫(kù)的方法

    在VSCode中添加Python解釋器并安裝Python庫(kù)的方法

    這篇文章主要介紹了在VSCode中添加Python解釋器并安裝Python庫(kù)的方法,本文分步驟通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • python使用Pandas庫(kù)提升項(xiàng)目的運(yùn)行速度過(guò)程詳解

    python使用Pandas庫(kù)提升項(xiàng)目的運(yùn)行速度過(guò)程詳解

    這篇文章主要介紹了python使用Pandas庫(kù)提升項(xiàng)目的運(yùn)行速度過(guò)程詳解,這是一篇關(guān)于“如何充分利用Pandas內(nèi)置的強(qiáng)大且易于上手的特性”的指引。此外,你將學(xué)習(xí)到一些實(shí)用的節(jié)省時(shí)間的技巧,需要的朋友可以參考下
    2019-07-07
  • Flask 上傳自定義頭像的實(shí)例詳解

    Flask 上傳自定義頭像的實(shí)例詳解

    今天小編就為大家分享一篇Flask 上傳自定義頭像的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 深入了解Python中frozenset的功能與用法

    深入了解Python中frozenset的功能與用法

    在Python中,frozenset是一種與set類似的數(shù)據(jù)類型,但具有不可變性,本文將詳細(xì)介紹frozenset的作用、用法以及與set的區(qū)別,感興趣的可以了解下
    2024-01-01
  • pytorch finetuning 自己的圖片進(jìn)行訓(xùn)練操作

    pytorch finetuning 自己的圖片進(jìn)行訓(xùn)練操作

    這篇文章主要介紹了pytorch finetuning 自己的圖片進(jìn)行訓(xùn)練操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

阳西县| 澄城县| 晴隆县| 绩溪县| 海南省| 公主岭市| 丹棱县| 孝义市| 锡林浩特市| 湛江市| 贺州市| 青海省| 久治县| 白银市| 彭水| 收藏| 和硕县| 革吉县| 三台县| 新邵县| 浏阳市| 舒兰市| 汉沽区| 周至县| 南溪县| 平顺县| 荥经县| 洞口县| 都兰县| 新建县| 塘沽区| 临邑县| 灵丘县| 常德市| 宁国市| 都兰县| 洪泽县| 砚山县| 淮南市| 托克逊县| 台州市|