python提取图片中的文字写入excel文件,并打包为exe可执行文件

python提取图片数据写入excel,并打包为exe可执行文件

    • 1. 以下面的图片为例
    • 2. python环境需要的依赖包
    • 3. 创建交互式窗口
    • 4. 读取文件夹下的所有文件并提取数据
    • 5. 提取图片中字段的代码
    • 6. 打包代码为exe可执行文件
      • 安装打包依赖文件
      • 运行打包代码

1. 以下面的图片为例

在这里插入图片描述

2. python环境需要的依赖包

import os
import re
import pytesseract
from tkinter import Tk, filedialog
from PIL import Image, ImageOps
import pandas as pd

3. 创建交互式窗口

# 创建Tkinter窗口
root = Tk()
root.withdraw()  # 隐藏主窗口

# 弹出选择文件夹对话框
folder_path = filedialog.askdirectory(title='选择图片文件夹')

4. 读取文件夹下的所有文件并提取数据

# 弹出选择文件夹对话框
folder_path = filedialog.askdirectory(title='选择图片文件夹')
# 配置Tesseract路径,如果已配置环境变量则可以省略这步
pytesseract.pytesseract.tesseract_cmd = r'D:\toolsoft\tesseractocr\tesseract.exe'
# 创建一个字典来存储数据
data = {
    'file name': [],
    'CBF<30% volume': [],
    'Tmax>6.0s volume': [],
    'Mismatch volume': [],
    'Mismatch ratio': []
}
# 如果用户取消选择,返回空路径
if not folder_path:
    print('未选择文件夹。')
else:
    print(f'选择的文件夹路径为:{folder_path}')

    # 遍历文件夹中的所有文件
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        if os.path.isfile(file_path):
            # 检查文件是否为图片文件(可以根据实际需求扩展这个条件)
            if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
                # 打开图片
                try:
                    image = Image.open(file_path)
                    # 处理图片,例如显示、保存或进行其他操作
                    data = from_fig_get_txt(data, image)
                    data['file name'].append(f"{filename}")
                    # 例如,显示图片
                    # image.show()
                    # 或者进行其他处理,如图像处理、识别等
                    # 这里可以添加你的其他代码逻辑
                except OSError:
                    print(f'无法打开文件:{file_path}')

    # 使用pandas将数据写入Excel
    df = pd.DataFrame(data)
    df.to_excel('output.xlsx', index=False)
    print('提取完成并已写入output.xlsx文件。')

5. 提取图片中字段的代码

def from_fig_get_txt(data, image):
    # 将彩色图像转换为灰度图像
    gray_image = ImageOps.grayscale(image)
    # 使用pytesseract提取图片中的文字
    text = pytesseract.image_to_string(gray_image, lang='eng')  # chi_sim使用简体中文,'eng'用于英文

    # 将提取的文字按要求分割或处理
    lines = text.split('\n')

    for i, line in enumerate(lines):
        if 'CBF<30% volume' in line.strip():  # 跳过空行
            # 使用正则表达式进行匹配
            # 匹配CBF后面的数据
            cbf_match = re.search(r'CBF<(\d+%) volume:\s*(\S+)\s*ml', line)
            if cbf_match:
                # cbf_percent = cbf_match.group(1)  # 提取CBF的百分比
                cbf_volume = cbf_match.group(2)  # 提取CBF的体积
                # print(f"CBF百分比: {cbf_percent}, CBF体积: {cbf_volume} ml")
                data['CBF<30% volume'].append(f"{cbf_volume} ml")

        if 'Tmax>6.0s volume' in line.strip():  # 跳过空行
            # 匹配Tmax后面的数据
            tmax_match = re.search(r'Tmax>([\d.]+)s.*?volume:\s*([\d.]+)\s*ml', line)
            if tmax_match:
                # tmax_value = tmax_match.group(1)  # 提取Tmax的数值
                tmax_volume = tmax_match.group(2)  # 提取Tmax的体积
                # print(f"Tmax数值: {tmax_value} s, Tmax体积: {tmax_volume} ml")
                data['Tmax>6.0s volume'].append(f"{tmax_volume} ml")

        if 'Mismatch volume' in line.strip():  # 跳过空行
            # 匹配Mismatch后面的数据
            Mis_match = re.search(r':\s*(.*)$', line)
            Mis_volume = Mis_match.group(1)  # 提取Tmax的体积
            # print(f"Tmax数值: {tmax_value} s, Tmax体积: {tmax_volume} ml")
            data['Mismatch volume'].append(f"{Mis_volume}")

        if 'Mismatch ratio' in line.strip():  # 跳过空行
            # 匹配Mismatch后面的数据
            Mis_ratio = re.search(r':\s*(.*)$', line)
            Mis_ratio = Mis_ratio.group(1)  # 提取Tmax的体积
            # print(f"Tmax数值: {tmax_value} s, Tmax体积: {tmax_volume} ml")
            data['Mismatch ratio'].append(f"{Mis_ratio}")

    return data

6. 打包代码为exe可执行文件

安装打包依赖文件

pip install pyinstaller

运行打包代码

pyinstaller --onefile yourpyfile.py

生成的 EXE 文件将在 dist 文件夹中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/767598.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Omniverse、Isaac Sim、Isaac Lab入门必会之 Nucleus 部署

新手入门Omniverse、Isaac Sim、Isaac Lab时经常发现&#xff0c;要想跑通例程&#xff0c;总是usd等资源加载不出来&#xff0c;软件傻傻的进程阻塞卡在那里&#xff0c;点两下就崩溃&#xff0c;这对新手来说非常的不友好&#xff0c;这都是由于没有安装 Nucleus 或者 Nucle…

14. Java中 volatile 关键字

1. 前言 本节内容主要是对 volatile 关键字进行讲解&#xff0c;具体内容点如下&#xff1a; volatile 关键字概念介绍&#xff0c;从整体层面了解 volatile 关键字&#xff1b;volatile 关键字与 synchronized 关键字的区别&#xff0c;这是本节的重点内容之一&#xff0c;了…

一种非凸全变差正则化的信号降噪方法(以模拟信号和轴承振动信号为例,MATLAB)

以旋转机械振动信号为例&#xff0c;由于旋转机械运行中背景噪声较强&#xff0c;振动信号需要进行降噪处理。常用的小波阈值降噪会在信号的不连续处产生虚假的波峰和伪吉布森震荡&#xff0c;而奇异值分解SVD去噪容易产生虚假分量&#xff0c;全变差去噪则不会出现这样的情况&…

解锁科研新动力,QtiPlot for Mac——您的数据可视化与分析首选工具!

QtiPlot for Mac&#xff0c;一款专为科研工作者和数据分析爱好者打造的数据可视化与分析神器&#xff0c;它如同科研道路上的得力助手&#xff0c;让复杂的数据分析变得简单直观。&#x1f52c;&#x1f4c8; 这款软件拥有强大的数据导入与处理能力&#xff0c;支持多种数据格…

Unity 3D软件下载安装;Unity 3D游戏制作软件资源包获取!

Unity3D&#xff0c;它凭借强大的功能和灵活的特性&#xff0c;在游戏开发和互动内容创作领域发挥着举足轻重的作用。 作为一款顶尖的游戏引擎&#xff0c;Unity3D内置了先进的物理引擎——PhysX。这一物理引擎堪称业界翘楚&#xff0c;能够为开发者提供全方位、高精度的物理模…

如何使用python网络爬虫批量获取公共资源数据教程?

原文链接&#xff1a;如何使用python网络爬虫批量获取公共资源数据教程&#xff1f;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608240&idx4&snef281f66727afabfaae2066c6e92f792&chksmfa826657cdf5ef41571115328a09b9d34367d8b11415d5a5781dc4c…

【C++】vector的底层原理及实现

文章目录 vector的底层结构迭代器容量操作size()capacity()reserve()resize() 默认成员函数构造无参构造函数带参构造函数 析构拷贝构造赋值重载 operator[ ]插入删除操作insert()任意位置插入erase()任意位置删除push_back()尾插pop_back()尾删 vector的底层结构 我们的目的不…

海外注册 | 欧盟医疗器械法规下免除临床试验的条件与要求

在欧盟医疗器械法规&#xff08;MDR&#xff09;的严格监管下&#xff0c;植入性医疗器械和III类医疗器械通常需要进行临床试验来证明其安全性和性能。 然而&#xff0c;MDR也规定了一些特定情况下免除临床试验的可能性。以下是免除临床试验的条件和要求的详细说明&#xff1a…

offer150-16:数值的整数次方

题目描述:实现函数double Power(double base,int exponent),求base 的exponent次方。不得使用库函数&#xff0c;同时不需要考虑大数问题。 分析&#xff0c;题目要求实现库函数pow(),由于不需要考虑大数问题&#xff0c;不必担心溢出&#xff0c;那么就需要对输入的各种情况进…

CesiumJS【Basic】- #053 绘制渐变填充多边形(Entity方式)-使用canvas

文章目录 绘制渐变填充多边形(Entity方式)-使用canvas1 目标2 代码2.1 main.ts绘制渐变填充多边形(Entity方式)-使用canvas 1 目标 使用Entity方式绘制绘制渐变填充多边形 - 使用canvas 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium…

antd+vue——实现table组件跨页多选,已选择数据禁止第二次重复选择

需求场景&#xff1a;点击【新增】按钮可以在分页弹窗中跨页多选选择数据后添加到页面中&#xff0c;再次点击【新增】&#xff0c;已经选择过的数据则置灰不让重复选择。 选择后&#xff0c;置灰 点击【确定】数据添加到页面中&#xff0c;可再次点击【新增】进行添加数据 …

一篇文章入门主成分分析PCA

文章目录 基本概念事件随机变量独立同分布离散型随机变量伯努利分布&#xff08;两点分布&#xff09;二项分布几何分布泊松分布 连续型随机变量正态分布 期望方差标准化协方差相关系数线性组合特征值和特征向量特征值分解对称矩阵的特征值分解 齐次线性方程组单位向量基向量矩…

算法体系-25 第二十五节:窗口内最大值或最小值的更新结构

一 滑动窗口设计知识点 滑动窗口是什么&#xff1f; 滑动窗口是一种想象出来的数据结构&#xff1a; 滑动窗口有左边界L和有边界R 在数组或者字符串或者一个序列上&#xff0c;记为S&#xff0c;窗口就是S[L..R]这一部分 L往右滑意味着一个样本出了窗口&#xff0c;R往右滑意味…

Markdown+VSCODE实现最完美流畅写作体验

​下载VSCODE软件 安装插件 Markdown All in One &#xff1a;支持markdown的语言的&#xff1b; Markdown Preview Enhanced &#xff1a;观看写出来文档的效果&#xff1b; Paste IMage :添加图片的 Code Spell Checker检查英文单词错误&#xff1b; 基础语法 标题 #一个…

Batch Size 不同对evaluation performance的影响

目录 问题描述如果是bugbatch size的设置问题尝试使用GroupNorm解决batchsize不同带来的问题归一化的分类 参考文章 问题描述 深度学习网络训练时&#xff0c;使用较小的batch size训练网络后&#xff0c;如果换用较大的batch size进行evaluation&#xff0c;网络的预测能力会…

In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking

文章目录 In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking背景关键点内容预处理Long-Term Recurrent CNNsLSTM-RNN模型训练实验data启示In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking 会议:2018 IEEE International…

如何选择适合自己的巴比达内网穿透方案

选择适合自己的巴比达内网穿透方案&#xff0c;需要考虑几个关键因素&#xff0c;包括您的具体需求、安全性要求、技术水平以及预算。以下是一些选择巴比达内网穿透方案的建议步骤&#xff1a; 1. 确定需求和用途 首先&#xff0c;需要明确您希望通过内网穿透实现的具体目标和…

【Python网络通信】基于Bypy调用百度网盘api实现自动上传和下载网盘文件

网盘对于大家的生活工作可以说是息息相关&#xff0c;但是如果每天都重复去上传下载文件就会很浪费时间&#xff0c;所以有没有什么办法可以解放双手&#xff1f;那就是网盘接口&#xff0c;本文通过Bypy库实现百度网盘的自动上传和下载文件。 原创作者&#xff1a;RS迷途小书童…

ubuntu 安装并启用 samba

环境&#xff1a;ubuntu server 24.04 步骤如下&#xff1a; sudo apt update sudo apt install samba修改配置文件&#xff1a; sudo vi /etc/samba/smb.conf新增内容&#xff1a; [username]path /home/[username]available yesvalid users [username]read only nobrow…

Squid配置用户名密码的方法

环境 Centos7.9 Squid 3.5.20 步骤 1 使用htpasswd工具&#xff0c;生成用户名密码。 例如这里添加用户名peter, 密码123. yum install httpd-tools htpasswd -c /etc/squid/squid_user peter New password: 123 Re-type new password: 123 Adding password for user peter…