火车票OCR读取及结构化处理,Gradio编写界面,代码及说明

文章介绍了作者如何使用百度的PaddleOCR进行火车票信息的OCR识别,通过Python编写数据结构化功能,结合Gradio创建交互式界面,展示识别结果。用户上传车票图片,系统能识别并提取始发站、到站、车次、乘车时间等关键信息。
摘要由CSDN通过智能技术生成

前一段时间用到火车票OCR处理,因为要求不高就自己简单写了一个。首先是模型选择,初步对比了几个开源的OCR产品后,选择了百度的PaddleOCR。自己用Python开发了一个简单的数据结构化功能,并用Gradio写了一个简答的界面。效果如下(火车票图片来自于网络):

代码如下:

import gradio as gr

import os
import cv2
from PIL import Image
from paddleocr import PaddleOCR, draw_ocr
from IPython import display
import re
import numpy as np
import matplotlib.pyplot as plt

# 简单的数据结构化处理,主要思路就是利用关键字
def extract_train(result):
    station=0
    cc=0
    output=[]
    for line in result:
        if '站' in line[1][0]:
            if station==0:
                output.append(['始发站',line[1][0]])
            elif station==1:
                output.append(['到站',line[1][0]])
            station=station+1
        if (line[1][0][0] in ['C','D','G','Z','T','K','L','A','Y'])&(len(line[1][0])==4):
            output.append(['车次',line[1][0]])
        if ('年' in line[1][0])&('月' in line[1][0])&('日' in line[1][0]):
            output.append(['乘车时间',line[1][0]])
        if '****' in line[1][0]:
            output.append(['乘车人',line[1][0]])
        if '¥' in line[1][0]:
            output.append(['票价',line[1][0]])
        if '售' in line[1][0]:
            output.append(['售票处',line[1][0]])
    return output

# OCR处理,包括OCR调用,简单结构化处理以及图像处理
def train_ticket(image,choice):
    ocr = PaddleOCR(use_angle_cls=True, lang="ch",gpu=False) 
    result = ocr.ocr(image, cls=True)
    extracted = extract_train(result)
    
    boxes = [line[0] for line in result]
    txts = [line[1][0] for line in result]
    scores = [line[1][1] for line in result]
    im_show = draw_ocr(image, boxes, txts, scores)
    im_show = Image.fromarray(im_show)
    return result,extracted,im_show

# Gradio界面
image = gr.Image(label="请上传车票图像")
result = gr.Textbox(label="原始内容")
extracted = gr.Textbox(label="结构化处理")
result_image = gr.Image(label="处理后图像")
demo = gr.Interface(fn=train_ticket, inputs=image, outputs=[result,extracted,result_image], api_name="ocr_ticket")
demo.launch()

运行后显示界面:

选择车票图片并点击submit后即可看到效果:

如果您觉得对您有帮主请点个关注,方便看其他内容,谢谢。

代码为本人原创,未经允许,不得转载。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gradio是一个用于快速构建自定义界面Python库,它可以帮助开发者轻松地将机器学习模型、数据可视化和其他功能集成到交互式应用程序中。而RadioGradio的一个子模块,它提供了一组用于构建用户界面的组件,包括文本输入框、滑块、复选框等。 使用Gradio和Radio,你可以通过几行代码创建一个交互式应用程序,无需编写复杂的前端代码。你可以定义输入和输出的类型,并为它们提供相应的处理函数。Gradio会自动为你生成一个用户界面,用户可以通过界面与你的模型或功能进行交互。 Gradio支持多种输入和输出类型,包括文本、图像、音频和视频。你可以根据自己的需求选择适合的输入和输出类型,并使用Gradio和Radio创建一个定制化的交互式应用程序。 使用Gradio和Radio的步骤如下: 1. 安装Gradio库:可以使用pip命令进行安装:`pip install gradio` 2. 导入Gradio库:在Python脚本中导入Gradio库:`import gradio as gr` 3. 定义输入和输出函数:根据你的需求定义输入和输出函数,输入函数接收用户输入并返回结果,输出函数将结果展示给用户。 4. 创建界面:使用Gradio的`Interface`类创建一个界面,指定输入和输出函数。 5. 运行应用程序:使用`launch`方法运行应用程序,Gradio会自动为你生成一个交互式界面。 下面是一个使用Gradio和Radio创建一个简单的交互式应用程序的示例代码: ```python import gradio as gr def greet(name): return f"Hello, {name}!" iface = gr.Interface(fn=greet, inputs="text", outputs="text") iface.launch() ``` 这个示例中,我们定义了一个名为`greet`的函数,它接收一个名字作为输入,并返回一个问候语。然后,我们使用Gradio的`Interface`类创建一个界面,指定输入类型为文本,输出类型也为文本。最后,我们使用`launch`方法运行应用程序,Gradio会自动为我们生成一个交互式界面。 希望以上信息对你有帮助!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值