【图片识别改名】批量读取图片区域文字识别后批量改名,基于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.mzph.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注解 前言 最近有点懒了,太松懈可不行。为了让自己保持学习的动力,我决定将最近的学习内容整理成博客,目标是让未来的自己也能轻松理解。我会尽量以整体记录的方式呈…