基于Tesseract_OCR识别

news2024/9/20 12:25:58
1、安装Tesseract
Mac版本,通过Homebrew进行安装即可
brew install tesseract

windows版本安装

下载地址:https://digi.bib.uni-mannheim.de/tesseract/

2、更换语言包

下载语言包

https://github.com/tesseract-ocr/tesseract

亦可参照这个 Tesseract最新版语言包chi_sim.traineddata(4.0.0)GitHub官方获取免csdn积分,各个版本语言包全有_tesseract github releases-CSDN博客

3、 程序 

import os
from PIL import Image
import pytesseract
import re
import pandas as pd

# 如果你使用 Windows,指定 Tesseract 的安装路径
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# 1. 遍历文件夹中的所有图片并进行OCR识别
def process_images(folder_path, output_txt):
    with open(output_txt, 'w', encoding='utf-8') as f:
        for filename in os.listdir(folder_path):
            if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff')):
                image_path = os.path.join(folder_path, filename)
                print(f"Processing image: {filename}")
                img = Image.open(image_path)

                # 进行OCR识别
                text = pytesseract.image_to_string(img, lang='chi_sim')

                # 替换错误识别的符号为 ¥
                text = text.replace('#', '¥')
                text = text.replace('Y', '¥')
                text = text.replace('*', '¥')

                # 处理每一行中的多余空格
                lines = text.splitlines()
                processed_lines = []
                for line in lines:
                    # 移除行内的字符间空格
                    processed_line = re.sub(r'\s', '', line)
                    processed_lines.append(processed_line)
                processed_text = '\n'.join(processed_lines)
                f.write(f"Image: {filename}\n")
                f.write(processed_text)
                f.write("\n" + "=" * 40 + "\n")

    # 处理完图片后,清理txt文件并保存为新的文件
    cleaned_txt_file = 'cleaned_' + output_txt  # 创建清理后的文件名
    clean_txt(output_txt, cleaned_txt_file)     # 调用清理函数
    print(f"Cleaned text saved to {cleaned_txt_file}")
    return cleaned_txt_file


# 2. 清理txt文件中的无关内容,只保留指定信息
def clean_txt(txt_file, cleaned_txt_file):
    headers = ["券码", "券类型", "套餐内容", "验证时间", "消费金额", "消费明细", "订单号", "验券账号"]
    with open(txt_file, 'r', encoding='utf-8') as f:
        lines = f.readlines()

    with open(cleaned_txt_file, 'w', encoding='utf-8') as f:
        buffer = ''
        is_in_taocan = False  # 标识是否在"套餐内容"部分
        for line in lines:
            line = line.strip()
            if any(header in line for header in headers):
                if "套餐内容" in line:
                    buffer += line  # 如果遇到"套餐内容",开始处理
                    is_in_taocan = True
                else:
                    if is_in_taocan:  # 如果之前是在"套餐内容"内
                        f.write(buffer + '\n')  # 把完整的"套餐内容"写入文件
                        buffer = ''  # 清空buffer
                        is_in_taocan = False  # 退出"套餐内容"模式

                    f.write(line + '\n')  # 写入其他字段
            elif is_in_taocan:
                # 如果是在处理"套餐内容"部分,合并多行内容
                buffer += line  # 合并到buffer
            else:
                continue  # 跳过非关键信息行

        if buffer:  # 写入最后一部分的"套餐内容"(如果有)
            f.write(buffer + '\n')

# 运行流程
image_folder = '/pytorchPeoject/testDemo1/img/'  # 图片文件夹路径
output_txt_file = 'output_02.txt'  # 临时存储OCR结果的txt文件

# 执行图像处理和OCR识别,并清理txt文件
cleaned_txt_file = process_images(image_folder, output_txt_file)  # 获取清理后的文件路径

# 打开并读取txt文件
with open(cleaned_txt_file, 'r', encoding='utf-8') as file:
    data = file.read()

# 使用正则表达式提取需要的数据
pattern = re.compile(r'券码:(\d+)\s+券类型:(.+?)\s+套餐内容:(.+?)\s+验证时间:(\d{4}-\d{2}-\d{2})(\d{2}:\d{2}:\d{2})\s+消费金额:(.+?)\s+消费明细:(.+?)\s+订单号:(\d+)\s+验券账号:(\w+)')
matches = pattern.findall(data)

# 创建DataFrame
columns = ['券码', '券类型', '套餐内容', '验证时间', '时间', '消费金额', '消费明细', '订单号', '验券账号']
df = pd.DataFrame(matches, columns=columns)

# 合并验证时间和时间列
df['验证时间'] = df['验证时间'] + ' ' + df['时间']
df.drop('时间', axis=1, inplace=True)

# 保存到Excel文件
df.to_excel('output.xlsx', index=False)

print("数据提取并保存到Excel文件成功!")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CTF Reverse】XCTF GFSJ1101 Mine- Writeup(反编译+动态调试+Base58编码)

Mine- 运气怎么这么差? 原理 Base58 Base58是用于比特币(Bitcoin)中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。 相比Base64,Base58不使用数字"0",字母大写"O"&…

Linux 文件权限详解与管理

文章目录 前言一、文件权限概述1. 权限表示格式2. 权限组合值 二、查看文件权限三、修改文件所有者与所属组1. 使用 chown 修改文件所有者2. 使用 chgrp 修改文件所属组3. 添加所有者 四、修改文件权限1. 符号方式2. 八进制方式 总结 前言 在 Linux 系统中,文件权限…

React + Vite 多环境配置

1.根目录创建文件: .env.dev //测试环境 .env.development //本地环境 .env.production //正式环境 .env.uat //预发布环境 注:变量名必须使用 VITE_API 开头 2.package.json 配置: --mode 设置读取制定 .env文件 ,默认读取.en…

Windows10安装cuda11.3.0+cudnn8.5.0,以及创建conda虚拟环境(pytorch)

1、检查电脑驱动版本为561.09&#xff0c;选择cuda版本&#xff0c;下图可知cuda版本<12.6。 nvidia-smi #查看驱动版本&#xff0c;以及最大可以安装的cuda版本 2、Anaconda3-2024.06-1-Windows-x86_64.exe下载&#xff1a; 官网&#xff1a;https://www.baidu.com/link?…

研究生存指南:必备Zotero插件,让你的文献管理更轻松

在读研阶段&#xff0c;我经常面临大量文献阅读和项目研究的任务。忽略文献整理会导致后续使用时非常不便&#xff0c;查找困难且混乱。导师向我们推荐了 Zotero&#xff0c;经过亲身试用&#xff0c;我发现它非常好用&#xff01;zotero有非常多的插件&#xff0c;能够一个就满…

了解Node开发基础知识

目录 定义架构应用场景安装版本工具代码执行REPL传递参数输出全局对象 定义 Node.js 是一个基于 V8 JavaScript 引擎构建的运行时环境&#xff0c;允许你在服务器端运行 JavaScript 代码。Node.js 允许开发者使用 JavaScript 编写服务器端代码&#xff0c;实现前后端代码的统一…

安全帽识别算法、安全帽智能识别、不戴安全帽检测算法

不戴安全帽检测算法是一种基于人工智能技术&#xff0c;用于实时监测和提醒工作人员是否正确佩戴安全帽的系统。以下是对不戴安全帽检测算法的详细介绍&#xff1a; 1. 技术原理 - 数据采集与预处理&#xff1a;通过安装在施工现场或工厂车间等场所的摄像头收集图像数据&#…

HTML 盒子标签、字符实体及废弃标签介绍

目录 HTML盒子标签 div标签 span标签 字符实体 HTML注释 HTML 废弃标签介绍 关注作者微信公众号&#xff0c;开启探索更多 HTML 知识的精彩之旅。在这里&#xff0c;你将收获丰富的 HTML 专业内容&#xff0c;深入了解这一网页开发语言的奥秘&#xff0c;不断拓展你的知识…

c语言面试字符串复制

1&#xff0c;下面这个函数的打印是什么&#xff1a; #include<stdio.h> #include<string.h>int main() {char str0[5], str1[] "welcome";strcpy(str0, str1);printf("str0:%s\r\n",str0);printf("str1:%s\r\n",str1); } larkla…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL21

根据状态转移表实现时序电路 描述 某同步时序电路转换表如下&#xff0c;请使用D触发器和必要的逻辑门实现此同步时序电路&#xff0c;用Verilog语言描述。 电路的接口如下图所示。 输入描述&#xff1a; input A , input clk , …

uniapp+renderJS+google map开发安卓版APP非小程序

背景需求 需要在uniapp中接入google地图,研究了一番,都没有找到合适的,现在说一下教程。 效果图 前期工作 这两点缺一不可,否则你啥也看不到。 1、电脑安装L-O-U梯 用于访问G-OO-G-LE的API或者创建google map key。 2、手机安装L-O-U梯 用于显示google地图。我就是手…

SpringCloud从零开始简单搭建 - JDK17

文章目录 SpringCloud Nacos从零开始简单搭建 - JDK17一、创建父项目二、创建子项目三、集成Nacos四、集成nacos配置中心 SpringCloud Nacos从零开始简单搭建 - JDK17 环境要求&#xff1a;JDK17、Spring Boot3、maven。 那么&#xff0c;如何从零开始搭建一个 SpringCloud …

DNS攻击频发,打造防劫持DNS需强化“数据治理”理念

数字化转型时代&#xff0c;“一物多址&#xff0c;万物互联”正依托于DNS&#xff08;域名系统&#xff09;实现&#xff0c;DNS的重要性不言而喻。然而传统DNS协议存在诸多安全隐患&#xff0c;整个明文传输过程几乎没有认证与保护&#xff0c;导致DNS报文易被篡改&#xff0…

VSCode调试Unity准备工作

一.Unity设置VSCode为默认编辑器 Unity编辑器中Edit-Preferences-External Tools中选择VSCode 二.VSCode安装Unity插件 三.Unity的Visual Studio Editor升至最新 Window->Package Manager->Visual Studio Editor 四.下载配置.Net 8.0 安装之前VSCode会提示你下载.Net …

maxwell 输出消息到 redis

文章目录 1、maxwell 输出消息到 redis1.1、启动一个Maxwell容器&#xff0c;它会连接到指定的MySQL数据库&#xff0c;捕获变更事件&#xff0c;并将这些事件以Redis发布/订阅的形式发送到指定的Redis服务器1.2、在已运行的 Redis 容器中执行 Redis 命令行界面&#xff08;CLI…

【2023工业异常检测文献】SimpleNet

SimpleNet:ASimpleNetworkforImageAnomalyDetectionandLocalization 1、Background 图像异常检测和定位主要任务是识别并定位图像中异常区域。 工业异常检测最大的难题在于异常样本少&#xff0c;一般采用无监督方法&#xff0c;在训练过程中只使用正常样本。 解决工业异常检…

【uni-app】小兔鲜项目-基础架构-请求和上传文件拦截器

注意事项 uni.request 请求封装 请求和上传文件拦截器 uniapp 拦截器&#xff1a; uni.addInterceptor 接口说明&#xff1a;接口文档 实现需求 拼接基础地址设置超时时间添加请求头标识添加 token 参考代码 // src/utils/http.ts// 请求基地址 const baseURL https://pca…

IM项目-----语音识别子服务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、搭建思想二、服务器搭建1.继承speechService类,重写业务代码2.编写语音识别服务器类3.建造者类编写 三.测试 前言 语音转换子服务&#xff0c;用于调用语音…

字节跳动算法岗面试亲历:高效流程大公开,通关诀窍全掌握

最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 个人情况 985 本硕项目一个论文一篇无实习经历 时间节点 7.2 技术面一面 …