Python使用Tesseract-OCR识别图片指定范围内的文字并重命名图片

1. 背景

        出差后需要进行出差时上下班打车费的报销,提供的微信支付凭证截图是默认命名,财务姐姐需要根据支付凭证的支付时间进行命名,因临近年底,财务姐姐也比较忙(非常理解),所以我就要自己动手去重命名,我点开文件夹一看,83张支付截图,我得改到猴年马月(夸张一点~其实也不太多),而且都是一些重复性的工作,自己改的话太耗时了,我相信各位程序员都有一个优点,就是“懒”  懒人才会去将复杂的问题简单化,当然我也比较懒, 所以就手撸了文字自动识别的代码将识别到的文字作为图片名称进行重命名。(批量识别修改,太爽了)

2. 具体实现

        2.1 首先下载 Tesseract-OCR  并且安装中文识别包

                参考文章  Tesseract-OCR下载和安装,Python-OCR使用-CSDN博客

        2.2 下载 pip install pillow pytesseract
 

        2.3 代码实现

import os
from PIL import Image
import pytesseract

# 设置 Tesseract 执行文件的路径
# 修改为你的路径
pytesseract.pytesseract.tesseract_cmd = r'D:\Tesseract\tesseract.exe'  

def extract_text_from_image(image_path, start_x, start_y, end_x, end_y):

    # 打开图像文件
    image = Image.open(image_path)

    # 裁剪指定区域
    cropped_image = image.crop((start_x, start_y, end_x, end_y))

    # 使用 Tesseract 进行文字识别
    text = pytesseract.image_to_string(cropped_image,lang='chi_sim')

    return text

def rename_images_with_text(folder_path, start_x, start_y, end_x, end_y):

    # 获取文件夹中的所有文件
    files = os.listdir(folder_path)

    for filename in files:
        # 只处理图像文件
        if filename.endswith('.jpg') or filename.endswith('.png') or filename.endswith('.jpeg'):  
            image_path = os.path.join(folder_path, filename)
            extracted_text = extract_text_from_image(image_path, start_x, start_y, end_x, end_y)

            # 将识别到的\n换行符进行替换
            extracted_text = extracted_text.replace('\n', '')

            # 以下操作都是因为OCR识别有误,对识别错误的文字进行替换
            # 检查字符串中是否包含'卫FE'
            if '卫FE' in extracted_text:
                # 将'卫FE'替换为'年'
                extracted_text = extracted_text.replace('卫FE', '年')

            if '卫' in extracted_text:
                extracted_text = extracted_text.replace('卫', '年')

            if 'F' in extracted_text:
                extracted_text = extracted_text.replace('F', '')

            if '卫F' in extracted_text:
                extracted_text = extracted_text.replace('卫F', '年')

            #因我识别的文字中包含特殊字符":"  windows系统不支持":"特殊字符作文文件名,所以进行替换
            if ':' in extracted_text:
                extracted_text = extracted_text.replace(':', '.')

            new_filename = f"{extracted_text.strip()}.png"
            new_path = os.path.join(folder_path, new_filename)
            os.rename(image_path, new_path)
            print(f"重命名 {filename} 为 {new_filename}")

# 设定文件夹路径和文字识别区域的坐标
#这里的坐标可以打开电脑自带的画图工具进行测量
folder_path = 'D:\carFare'  # 修改为你的文件夹路径
start_x = 188  # 修改为你的文字区域起始横坐标
start_y = 766  # 修改为你的文字区域起始纵坐标
end_x = 629    # 修改为你的文字区域结束横坐标
end_y = 826    # 修改为你的文字区域结束纵坐标

rename_images_with_text(folder_path, start_x, start_y, end_x, end_y)

3.  效果演示

       

物联沃分享整理
物联沃-IOTWORD物联网 » Python使用Tesseract-OCR识别图片指定范围内的文字并重命名图片

发表评论