【圖片識別改名】批量讀取圖片區域文字識別后批量改名,基于Python和騰訊云的實現方案

項目場景

  • ??辦公文檔管理??:將掃描的發票、合同等文檔按編號、日期自動重命名。例如,識別“編號:2023001 日期:20230403”生成“2023001_20230403.jpg”。
  • ??產品圖片整理??:電商產品圖片按產品編號、名稱自動命名。例如,識別“產品編號:P1001 產品名稱:無線耳機”生成“P1001_無線耳機.jpg”。
  • ??證件照片歸檔??:身份證、學生證等證件照片按姓名、學號等信息命名。例如,識別“姓名:張三 學號:20230001”生成“張三_20230001.jpg”。
  • ??會議資料整理??:會議照片按會議名稱、日期自動命名。例如,識別“會議:季度總結 日期:20230403”生成“季度總結_20230403.jpg”。

界面設計

可以使用Python的tkinter庫來設計一個簡單的圖形用戶界面(GUI),以下是一個基本的界面設計思路:

  • ??標題??:顯示“批量圖片文字識別與重命名工具”。
  • ??API配置區域??:包含輸入框用于填寫騰訊云的SecretIdSecretKey,以及一個“保存配置”按鈕。
  • ??關鍵字設置區域??:輸入框用于輸入要識別的關鍵詞,用逗號分隔,例如“編號,名稱,日期”,并提供一個“設置關鍵詞”按鈕。
  • ??圖片選擇區域??:一個按鈕用于選擇要處理的圖片文件,支持多選,下方顯示已選擇的圖片數量。
  • ??選項設置區域??:包含“自動重命名文件”和“添加序號后綴”的復選框。
  • ??開始處理按鈕??:點擊后開始進行文字識別和文件重命名操作。
  • ??進度條??:顯示處理進度。
  • ??結果區域??:顯示識別結果和重命名信息。

詳細代碼步驟

1. 安裝必要的庫
pip install pillow requests tkinter
2. 代碼實現
import os
import requests
from PIL import Image
from tkinter import Tk, Label, Entry, Button, Listbox, Checkbutton, IntVar, filedialog, messagebox, ttk# 騰訊云OCR API地址
OCR_API_URL = "https://ocr.tencentcloudapi.com"# 全局變量存儲API密鑰和關鍵詞
SECRET_ID = ""
SECRET_KEY = ""
KEYWORDS = ""def set_api_config():global SECRET_ID, SECRET_KEYSECRET_ID = secret_id_entry.get()SECRET_KEY = secret_key_entry.get()if SECRET_ID and SECRET_KEY:messagebox.showinfo("提示", "API配置已保存")else:messagebox.showerror("錯誤", "請輸入SecretId和SecretKey")def set_keywords():global KEYWORDSKEYWORDS = keywords_entry.get()if KEYWORDS:messagebox.showinfo("提示", "關鍵詞已設置")else:messagebox.showerror("錯誤", "請輸入要識別的關鍵詞,用逗號分隔")def select_images():global image_pathsimage_paths = filedialog.askopenfilenames(filetypes=[("圖片文件", "*.jpg;*.png")])if image_paths:image_count_label.config(text=f"已選擇 {len(image_paths)} 張圖片")else:messagebox.showerror("錯誤", "未選擇任何圖片")def recognize_and_rename():if not SECRET_ID or not SECRET_KEY or not KEYWORDS:messagebox.showerror("錯誤", "請先完成API配置和關鍵詞設置")returnif not image_paths:messagebox.showerror("錯誤", "請先選擇要處理的圖片")returntotal = len(image_paths)progress["maximum"] = totalprogress["value"] = 0for i, image_path in enumerate(image_paths):try:# 讀取圖片with open(image_path, "rb") as f:image_data = f.read()# 構建請求參數params = {"Action": "GeneralBasicOCR","Version": "2018-11-19","Region": "ap-guangzhou","SecretId": SECRET_ID,"SecretKey": SECRET_KEY,"ImageBase64": image_data.hex()}# 發送請求response = requests.get(OCR_API_URL, params=params)result = response.json()if "TextDetections" in result:text = " ".join([item["DetectedText"] for item in result["TextDetections"]])# 根據關鍵詞提取信息keyword_values = []for keyword in KEYWORDS.split(","):start_index = text.find(keyword)if start_index != -1:end_index = start_index + len(keyword)value = text[end_index:].split()[0](@ref)keyword_values.append(value)else:keyword_values.append("")# 生成新文件名new_name = "_".join(keyword_values) + os.path.splitext(image_path)[1]new_path = os.path.join(os.path.dirname(image_path), new_name)# 重命名文件os.rename(image_path, new_path)result_text.insert(tk.END, f"{image_path} -> {new_path}\n")else:result_text.insert(tk.END, f"{image_path} 識別失敗\n")progress["value"] += 1root.update_idletasks()except Exception as e:result_text.insert(tk.END, f"{image_path} 處理出錯: {str(e)}\n")progress["value"] += 1root.update_idletasks()messagebox.showinfo("完成", "處理完成")# 創建主窗口
root = Tk()
root.title("批量圖片文字識別與重命名工具")# API配置區域
api_frame = LabelFrame(root, text="API配置")
api_frame.pack(pady=10, padx=10, fill="x")Label(api_frame, text="SecretId:").grid(row=0, column=0, padx=5, pady=5)
secret_id_entry = Entry(api_frame)
secret_id_entry.grid(row=0, column=1, padx=5, pady=5)Label(api_frame, text="SecretKey:").grid(row=1, column=0, padx=5, pady=5)
secret_key_entry = Entry(api_frame, show="*")
secret_key_entry.grid(row=1, column=1, padx=5, pady=5)save_api_button = Button(api_frame, text="保存配置", command=set_api_config)
save_api_button.grid(row=2, column=0, columnspan=2, pady=10)# 關鍵字設置區域
keyword_frame = LabelFrame(root, text="關鍵字設置")
keyword_frame.pack(pady=10, padx=10, fill="x")Label(keyword_frame, text="關鍵詞:").grid(row=0, column=0, padx=5, pady=5)
keywords_entry = Entry(keyword_frame)
keywords_entry.grid(row=0, column=1, padx=5, pady=5)set_keyword_button = Button(keyword_frame, text="設置關鍵詞", command=set_keywords)
set_keyword_button.grid(row=1, column=0, columnspan=2, pady=10)# 圖片選擇區域
image_frame = LabelFrame(root, text="圖片選擇")
image_frame.pack(pady=10, padx=10, fill="x")Label(image_frame, text="選擇圖片:").grid(row=0, column=0, padx=5, pady=5)
image_listbox = Listbox(image_frame)
image_listbox.grid(row=0, column=1, padx=5, pady=5)select_button = Button(image_frame, text="選擇圖片", command=select_images)
select_button.grid(row=1, column=0, columnspan=2, pady=10)image_count_label = Label(image_frame, text="未選擇任何圖片")
image_count_label.grid(row=2, column=0, columnspan=2, pady=5)# 選項設置區域
option_frame = LabelFrame(root, text="選項設置")
option_frame.pack(pady=10, padx=10, fill="x")auto_rename_var = IntVar()
auto_rename_checkbox = Checkbutton(option_frame, text="自動重命名文件", variable=auto_rename_var)
auto_rename_checkbox.grid(row=0, column=0, padx=5, pady=5)add_suffix_var = IntVar()
add_suffix_checkbox = Checkbutton(option_frame, text="添加序號后綴", variable=add_suffix_var)
add_suffix_checkbox.grid(row=1, column=0, padx=5, pady=5)# 開始處理按鈕
start_button = Button(root, text="開始處理", command=recognize_and_rename)
start_button.pack(pady=20)# 進度條
progress = ttk.Progressbar(root, orient="horizontal", length=300, mode="determinate")
progress.pack(pady=10)# 結果區域
result_text = Text(root, height=10, width=50)
result_text.pack(pady=10)root.mainloop()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80965.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

生物化學筆記:神經生物學概論04 視覺通路簡介視網膜視網膜神經細胞大小神經節細胞(視錯覺)

視覺通路簡介 神經節細胞的胞體構成一明確的解剖層次,其外鄰神經纖維層,內接內叢狀層,該層在鼻側厚約10~20μm,最厚在黃斑區約60~80μm。 全部細胞數約為120萬個(1000000左右)。 每個細胞有一軸突&#xff…

「Mac暢玩AIGC與多模態08」開發篇04 - 基于 OpenAPI Schema 開發專用 Agent 插件

一、概述 本篇介紹如何在 macOS 環境下,通過編寫 OpenAPI Schema,開發自定義的專用插件,讓智能體可以調用外部 API,擴展功能至任意在線服務。實踐內容基于 Dify 平臺,適配 macOS 開發環境。 二、環境準備 1. 確認本地開發環境 macOS 系統Dify 平臺已完成部署并可訪問本…

【計算機視覺】深度解析MediaPipe:谷歌跨平臺多媒體機器學習框架實戰指南

深度解析MediaPipe:谷歌跨平臺多媒體機器學習框架實戰指南 技術架構與設計哲學核心設計理念系統架構概覽 核心功能與預構建解決方案1. 人臉檢測2. 手勢識別3. 姿勢估計4. 物體檢測與跟蹤 實戰部署指南環境配置基礎環境準備獲取源碼 構建第一個示例(手部追…

NVIDIA高級輔助駕駛領域的創新實踐與云計算教育啟示

AI與高級輔助駕駛的時代浪潮 人工智能正在重塑現代交通的面貌,而高級輔助駕駛技術無疑是這場變革中最具顛覆性的力量之一。作為全球AI計算的領軍企業,NVIDIA憑借其全棧式技術生態和創新實踐,為高級輔助駕駛的產業化落地樹立了標桿。從芯片到…

頭歌實訓之存儲過程、函數與觸發器

🌟 各位看官好,我是maomi_9526! 🌍 種一棵樹最好是十年前,其次是現在! 🚀 今天來學習C語言的相關知識。 👍 如果覺得這篇文章有幫助,歡迎您一鍵三連,分享給更…

醫學圖像處理軟件中幾種MPR

1:設備廠商的MPR 2:后處理的MPR 3:閱片PACS的MPR 4:手術導航 手術規劃的MPR 設備廠商的MPR需求更多是掃描線、需要3DMPR ,三條定位線的任意角度旋轉。 后處理的MPR,需求更多的是算法以及UI工具的研發&a…

java 類的實例化過程,其中的相關順序 包括有繼承的子類等復雜情況,靜態成員變量的初始化順序,這其中jvm在干什么

Java類的實例化過程及初始化順序 Java類的實例化過程涉及多個步驟,特別是在存在繼承關系和靜態成員的情況下。下面我將詳細解釋整個過程,包括JVM在其中的角色。 1. 類加載階段(JVM的工作) 在實例化一個類之前,JVM首…

Sce2DriveX: 用于場景-到-駕駛學習的通用 MLLM 框架——論文閱讀

《Sce2DriveX: A Generalized MLLM Framework for Scene-to-Drive Learning》2025年2月發表,來自中科院軟件所和中科院大學的論文。 端到端自動駕駛直接將原始傳感器輸入映射到低級車輛控制,是Embodied AI的重要組成部分。盡管在將多模態大語言模型&…

【題解-Acwing】870. 約數個數

題目:870. 約數個數 題目描述 給定 n 個正整數 ai,請你輸出這些數的乘積的約數個數,答案對 109+7 取模。 輸入 第一行包含整數 n。 接下來 n 行,每行包含一個整數 ai。 輸出 輸出一個整數,表示所給正整數的乘積的約數個數,答案需對 109+7 取模。 數據范圍 1 ≤ …

創龍全志T536全國產(4核A55 ARM+RISC-V+NPU 17路UART)工業開發板硬件說明書

前 言 本文檔主要介紹TLT536-EVM評估板硬件接口資源以及設計注意事項等內容。 T536MX-CXX/T536MX-CEN2處理器的IO電平標準一般為1.8V、3.3V,上拉電源一般不超過3.3V或1.8V,當外接信號電平與IO電平不匹配時,中間需增加電平轉換芯片或信號隔離芯片。按鍵或接口需考慮ESD設計…

Redis 持久化雙雄:RDB 與 AOF 深度解析

Redis 是一種內存數據庫,為了保證數據在服務器重啟或故障時不丟失,提供了兩種持久化方式:RDB(Redis Database)和 AOF(Append Only File)。以下是它們的詳細介紹: 一、RDB 持久化 工…

數據結構|并查集

Hello !朋友們,這是我在學習過程中梳理的筆記,以作以后復習回顧,有時略有潦草,一些話是我用自己的話描述的,可能不夠準確,還是感謝大家的閱讀! 目錄 一、并查集Quickfind 二、兩種算…

【GPU 微架構技術】Pending Request Table(PRT)技術詳解

PRT(Pending Request Table)是 GPU 中用于管理 未完成內存請求(outstanding memory requests)的一種硬件結構,旨在高效處理大規模并行線程的內存訪問需求。與傳統的 MSHR(Miss Status Handling Registers&a…

遠程訪問你的家庭NAS服務器:OpenMediaVault內網穿透配置教程

文章目錄 前言1. OMV安裝Cpolar工具2. 配置OMV遠程訪問地址3. 遠程訪問OMV管理界面4. 固定遠程訪問地址 前言 在這個數據爆炸的時代,無論是管理家人的照片和視頻,還是企業老板處理財務報表和技術文檔,高效的數據管理和便捷的文件共享已經變得…

微服務架構下的熔斷與降級:原理、實踐與主流框架深度解析

微服務架構下的熔斷與降級:原理、實踐與主流框架深度解析 在現代分布式系統中,熔斷 (Circuit Breaker) 和 降級 (Degrade) 是保障系統彈性與高可用性的核心機制。本文將系統解析兩者的原理、區別與協同方式,并結合主流框架 (Resilience4j、S…

docker-vllm運行大模型

vllm鏡像下載,國內代理源 vllm/vllm-openai - Docker Image - 毫秒鏡像https://1ms.run/r/vllm/vllm-openai 執行下載docker pull docker.1ms.run/vllm/vllm-openai 查看本地鏡像 查看鏡像 查看鏡像 docker images導出鏡像 docker save -o E:\docker\ollama.tar …

基于tabula對pdf中多個excel進行識別并轉換成word中的優化(四)

對上一節進行優化: 1、識別多個excel 2、將表格中的nan替換成空字符串 一、示例中的pdf內容 二、完整代碼參考: import tabula import numpy as np from docx import Document from docx.oxml.ns import qn from docx.oxml import OxmlElementdef get_t…

【10分鐘讀論文】Power Transmission Line Inspections電力視覺水文

標題Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems 2024 評分一顆星 論文《Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems》的核心內…

linux安裝ragflow

先安裝docker,操作步驟參考文章: Linux安裝Docker docker安裝完畢,下載ragflow源碼: https://github.com/infiniflow/ragflow 下載完成,進入docker文件夾中,修改.env文件,因為默認安裝的是sli…

學習記錄:DAY20

技術探索之旅:YAML配置,依賴注入、控制反轉與Java注解 前言 最近有點懶了,太松懈可不行。為了讓自己保持學習的動力,我決定將最近的學習內容整理成博客,目標是讓未來的自己也能輕松理解。我會盡量以整體記錄的方式呈…