GCN火车票识别项目 P3 PaddleOCR识别火车票信息

news2024/11/26 16:31:39

从这节开始,就正式进入GCN项目的代码环节,我们先使用PaddleOCR,识别出火车票上的文字信息,并提取文字所位置,整理后另存为一个csv文件。

项目的目的是要做信息抽取,所以对训练和测试数据,需要手动打上标签,供算法学习。

代码示例

1、新建文件

# process/ocr.py
from paddleocr import paddleocr, PaddleOCR
import pandas as pd
from glob import glob
import os
import cv2
from tqdm import tqdm
import logging

# 屏蔽调试错误
paddleocr.logging.disable(logging.DEBUG)

2、定义OCR识别类

主要功能是识别信息并存储csv文件,如果需要导出识别框标记的图片,则可以传入marked_path。

class OCR():
    def __init__(self):
        self.ocr = PaddleOCR()

    def scan(self, file_path, output_path, marked_path=None):
        # 文字识别
        info = self.ocr.ocr(file_path, cls=False)
        df = pd.DataFrame(columns=['x1', 'y1', 'x2', 'y2', 'text'])
        for i, item in enumerate(info[0]):
            # 保留左上和右下坐标
            ((x1, y1), _, (x2, y2), _), (text, _) = item
            df.loc[i] = list(map(int, [x1, y1, x2, y2])) + [text]
        # 保存识别结果
        df.to_csv(output_path)
        # 判断是否需要保存标记文件
        if marked_path:
            self.marked(df, file_path, marked_path)

    # 导出带标记的图片
    def marked(self, df, file_path, marked_path):
        # 加载图片
        img = cv2.imread(file_path)
        for x1, y1, x2, y2, _ in df.values:
            # 画矩形(注意坐标值必须为整数)
            cv2.rectangle(img, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=4)
        cv2.imwrite(marked_path, img)

3、识别测试和训练图片

if __name__ == '__main__':
    ocr = OCR()
    for file_path in tqdm(glob('../input/imgs/train/' + '*.*')):
        _, file_name = os.path.split(file_path)
        output_path = '../output/train/csv/' + file_name + '.csv'
        marked_path = '../output/train/imgs_marked/' + file_name
        ocr.scan(file_path, output_path, marked_path)

    for file_path in tqdm(glob('../input/imgs/test/' + '*.*')):
        _, file_name = os.path.split(file_path)
        output_path = '../output/test/csv/' + file_name + '.csv'
        marked_path = '../output/test/imgs_marked/' + file_name
        ocr.scan(file_path, output_path, marked_path)

4、手动打标签

a) 标签示例

,label
,ticket_num
,starting_station
,destination_station
,train_num
,other
,date
,seat_number
,ticket_price
,ticket_grade
,name

b) 标记后的csv文件示例

,x1,y1,x2,y2,text,label
0,814,41,1086,107,=检票:2,other
1,109,54,332,98,F049081,ticket_num
2,134,119,423,185,德州东站,starting_station
3,758,114,1053,184,温岭站,destination_station
4,530,128,660,183,G55,train_num
5,158,190,395,233,Dezhoudong,other
6,826,183,982,235,Wenling,other
7,94,247,634,289,2017年10月21日09:26开,date
8,741,244,962,288,06车08C号,seat_number
9,485,302,583,353,网折,other
10,822,300,960,350,二等座,ticket_grade
11,97,310,308,351,¥541.5元,ticket_price
12,98,369,412,408,限乘当日当次车,other
13,101,486,736,528,1329271981****0518崔厚良,name
14,223,559,751,590,买票请到12306发货请到95306,other
15,289,607,681,641,中国铁路祝您旅途愉快,other
16,105,670,749,712,66809300121022F049081德州东售,other

更多内容:请查阅「陈华编程官网」

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

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

相关文章

存储器(详解)

概念 存储器(Memory)是计算机系统中用于存储和检索数据的硬件设备或组件。它在计算机中扮演着重要的角色,允许计算机暂时或永久地存储程序、数据和中间结果。 存储器是许多存储单元的集合,按单元号顺序排列。每个单元由若干二进制…

专为个人打造专注工作的便签APP工具推荐哪个

工作中很多人都比较懒散,工作起来动力不足,常常拖延消极怠工,等到一天结束后进行工作盘点时才发现很多项任务都没有处理完;这和日常工作不能专注于工作有很大的关系。 专注工作,在日常办公时可以选择一些好用的手机便…

【Android】android studio 怎么下载NDK

序言 新版的android studio在【Project Structure】里面的NDK路径是灰色的,无法点击,导致找不到ndk路径,也无法添加ndk。 下载方法 去这里找,一定要点这个按钮才能出现ndk。 下载之后,要在这个文件里面添加ndk路径

【不良人7】源源死后,谁将接替成为新的BOSS?全季反派分析

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度解析,国漫精品《不良人》在历经6季的精彩演绎后,终于迎来了李嗣源的下线。这一消息对于广大《不良人》粉丝来说无疑是一个巨大的惊喜。而在即将到来的第7季中,剧情将由…

RPC 原理详解

文章目录 什么是 RPCRPC 基本原理RPC核心功能服务寻址数据编解码网络传输一次RPC的调用过程 实践基于HTTP协议的RPC基于TCP协议的RPC 什么是 RPC RPC(Remote Procedure Call),即远程过程调用,它允许像调用本地服务一样调用远程服…

思路视野杂志思路视野杂志社思路视野编辑部2023年第24期目录

公共文化 公共图书馆文旅融合实践与模式思考 白雪1-3 公共图书馆管理与服务创新路径分析 陈静4-6 提升办公室文书档案管理工作的实践探讨 黄强7-9 《思路视野》投稿邮箱:cn7kantougao163.com(注明投稿“《思路视野》”) 崔编辑Q Q :296078736 微信号&am…

STL-set和map

目录 一、pair和make_pair 1. pair 2. make_pair 二、set (一)set的模板参数列表 (二)set的构造 (三)set的插入 1. 测试1 2. 测试2 (四)low_bound和upper_bound&#xff…

mediapipe流水线分析 一

object detection Graph 以目标检测为例分析mediapip流水线处理机制 一 流水线上游输入处理 1 Calculator 算子 它是在MediaPipe框架中用于创建插件/算子 机制的基础 在MediaPipe中,插件是一种可扩展的计算模块,可以用于实现各种不同的计算功能。calc…

路由器基础(九):防火墙基础

防火墙 (Fire Wall) 是网络关联的重要设备,用于控制网络之间的通信。外部网络用户的访问必须先经过安全策略过滤,而内部网络用户对外部网络的访问则无须过滤。现在的防火墙还具有隔离网络、提供代理服务、流量控制等功能。 一、三种防火墙技术 常见的…

努努之歌:英雄联盟外传 SongOfNunu(单人冒险游戏) 免安装中文版下载

《努努之歌:英雄联盟外传》是一款由Tequila Works开发的单人冒险游戏。置身于弗雷尔卓德的未知之地,探索扣人心弦的故事,一步步揭开努努和威朗普的过去,了解背后的真相。 游戏介绍 建立深厚友谊 扮演小男孩努努,在好朋…

WebGL:基础练习 / 简单学习 / demo / canvas3D

一、前置内容 canvas:理解canvas / 基础使用 / 实用demo-CSDN博客 WebGL:开始学习 / 理解 WebGL / WebGL 需要掌握哪些知识 / 应用领域 / 前端值得学WebGL吗_webgl培训-CSDN博客 二、在线运行HTML 用来运行WebGL代码,粘贴--运行&#xff…

Flutter 06 动画

一、动画基本原理以及Flutter动画简介 1、动画原理: 在任何系统的Ul框架中,动画实现的原理都是相同的,即:在一段时间内,快速地多次改变Ul外观;由于人眼会产生视觉暂留,所以最终看到的就是一个…

算法:弗洛里德算法Floyd

弗洛里德算法 简介 英文名Floyd 作用:寻找图中任意两点之间的最短路径 数据结构:邻接矩阵(二维数组) 思想 如果说从start到end之间转个弯能使得路径变短,那么就记录更短的路径, 对所有弯都试一下没到最后取最短的&am…

Zabbix监控联想服务器的配置方法

简介 图片 随着科技的发展,对于数据的敏感和安全大部分取决于对硬件性能、故障预判的监测,由此可见实时监测保障硬件的安全很重要,从而衍生了很多对硬件的监测软件,Zabbix就一个不错的选择。开源 开源 开源! zabbix是…

SpringCloud(八) Gateway网关路由详解

目录 一, Gateway服务网关 1.1 为什么需要网关 1.2 网关的实现方式 1.3 Gateway快速入门 1. 创建gateway服务,引入依赖 2. 编写启动类 3. 编写基础配置和路由规则 4. 重启测试 5. 网关路由的流程图 6. 总结 二, Gateway断言工厂 三, 过滤器工厂 3.1 路由过滤器…

【Mysql】Mysql中表连接的原理

连接简介 在实际工作中,我们需要查询的数据很可能不是放在一张表中,而是需要同时从多张表中获取。下面我们以简单的两张表为例来进行说明。 连接的本质 为方便测试说明,,先创建两个简单的表并给它们填充一点数据: …

【Truffle】三、可视化测试报告的生成

在truffle中,我们可以引入第三方插件,对truffle的测试进行更好的提升,这里介绍两个插件,分别是mocha-junit-reporter和mochawesome两个插件。 一、mocha-junit-reporter插件 mocha-junit-reporter是一个用于Truffle测试框架的插件…

随机森林算法的加速:OpenMP方法

使用OpenMP加速随机森林 前言使用OpenMP对RF训练的加速代码加速效果 对特征重要性评估的加速代码 加速效果附录Windows中使用OpenMPLinux中使用OpenMP 项目主页:randomforest C implementation of random forests classification, regression, proximity and variab…

【德哥说库系列】-Oracle 19C PDB创建大全

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

双绞线(寻线仪,测线仪),光纤测试工具(红光笔,OTDR,光功率计)

网络测试方式: 根据测试中是否向被测网络注入测试流量,可以将网络测试方法分为主动测试和被动测试。 主动测试:利用测试工具有目的地主动问被测网络注入测试流量,根据测试流量的传送情况分析网络技术参数。优点是具备良好的灵活…