核酸结果统计难?130行代码实现基于ocr的核酸截图识别存储Excel(复现代码核查核酸报告)

来源:

核酸结果统计难?复旦博士生的操作火了https://m.gmw.cn/baijia/2022-04/08/35644611.html

1 程序背景

学校要收核酸截图,汇总太麻烦了,故将OCR整合到数据中。

1.1 命名规范

20200250202003曹文举4.12阴性.jpg

1.2 EasyOCR

easyOCRhttps://github.com/JaidedAI/EasyOCR

pip install easyocr

2 程序

import timeit
import xlsxwriter
import cv2 as cv
import numpy as np
import os
import easyocr
import re
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'def load_file_name(file_name):# file_name = "201902811221邱江4.12阴性.jpg"file_result_date_no = re.findall(r"\d+", file_name)no = file_result_date_no[0]date = '2022-0' + file_result_date_no[1] + '-' + file_result_date_no[2]file_result_name_name_check = re.findall('[\u4e00-\u9fa5]', file_name)# print(file_result_name_name_check)check = file_result_name_name_check[len(file_result_name_name_check)-2] +file_result_name_name_check[len(file_result_name_name_check)-1] # 检测结果up = len(file_result_name_name_check)-2name = ''for i in range(up):name = name + file_result_name_name_check[i]# print("姓名:",name)# print("日期:",date)# print("学号:",no)# print("结果:",check)return name,date,no,checkdef load_image(path,name,date,check):# coding=utf-8# 当前目录读取一张图片,转化为灰色img = cv.imdecode(np.fromfile(path, dtype=np.uint8), 0)reader = easyocr.Reader(['ch_sim', 'en'])result = reader.readtext(img)# 拼接单个图片的识别结果result_str = ''for i in result :result_str = result_str+i[1]# print("包含无关文字:", result_str)temp = re.sub('[a-zA-Z]', '', result_str)# print("去掉无关文字:",temp)a = temp.find("若上述")result = temp[0:a]# print(result)# print("消除无用信息:",result)result = result.replace('\n', '')  # 去掉换行符result = result.replace(' ', '')  # 去掉空格result = result.replace(':', '')  # 去掉-result = result.replace(':', '')  # 去掉-result = result.replace("核酸检测结果为","")result = result.replace("核酸检测结果","")# print(result)# 姓名校正if result.find(name) == -1:# print("识别失败")name_ocr = "识别失败"check_ocr = "字体原因识别失败"else:# print("名字校正成功:",name)# name_ocr = namename_ocr = "姓名正确"# 阴性与阳性if result.find(check) == -1:# print("识别失败")check_ocr = "字体原因识别失败/"else:# print("识别结果与文件核酸结果相同")check_ocr = "核酸结果一致"result = result.replace('阴性', '')result = result.replace('阳性', '')# 检测机构if result.find("检测机构") == -1:# print("识别失败")organization_ocr = "字体原因识别失败"check_ocr = "字体原因识别失败/"else:index = result.find("检测机构")# print("检测机构:",result[index+4:])organization_ocr = result[index+4:]result = result[0:index]# 核酸检测时间if result.find("检测时间") == -1:date_ocr = "字体原因识别失败"check_ocr = "字体原因识别失败/"# print("识别失败")else:index = result.find("检测时间")# print("检测时间:",result[index + 4:])date_ocr = result[index + 4:]if date_ocr == date:date_ocr = "检测时间正确"result = result[0:index - 1]return name_ocr,check_ocr,organization_ocr,date_ocr# 读取函数,用来读取文件夹中的所有函数,输入参数是文件名
def read_directory(directory_name):for filename in os.listdir(directory_name):for filename_1 in os.listdir(directory_name+"/"+filename):# print(filename_1)  # 仅仅是为了测试name,date,no,check = load_file_name(filename_1)path = directory_name + "/" + filename+"/"+filename_1name_ocr,check_ocr,organization_ocr,date_ocr = load_image(path,name,date,check)print("提交数据:",name,date,check,no)print("OCR数据:",name_ocr,date_ocr,check_ocr,organization_ocr)result_list = [name,date,check,no,name_ocr,date_ocr,check_ocr,organization_ocr]result_list_total.append(result_list)if __name__ == '__main__':start = timeit.default_timer()# 保存excelresult_list_total=[["姓名","日期","核算结果","学号","姓名校对","时间校对","核酸状态校对","核酸医院"]]read_directory("./imge")#这里传入所要读取文件夹的绝对路径,加引号(引号不能省略!)# xlsxwriter只可以新建一个excel,不可以读取和更新# 创建一个workbook 和增加一个worksheet,默认为sheet1...,也可以直接为sheet命名,例如下边的testworkbook = xlsxwriter.Workbook('./data.xlsx')# 添加 sheetworksheet = workbook.add_worksheet("elite")  # 下方Sheet名worksheet.set_column(0,len(result_list_total),18) #全部列宽为18# 测试数据result_list_total = tuple(result_list_total)print(result_list_total)# 从首行、首列开始.row = 0col = 0# 通过迭代写入数据.for name,date,check,no,name_ocr,date_ocr,check_ocr,organization_ocr in (result_list_total):worksheet.write(row, col,     name)worksheet.write(row, col + 1, date)worksheet.write(row, col + 2, check)worksheet.write(row, col + 3, no)worksheet.write(row, col + 4, name_ocr)worksheet.write(row, col + 5, date_ocr)worksheet.write(row, col + 6, check_ocr)worksheet.write(row, col + 7, organization_ocr)row += 1# 只有此函数才可以生成excelworkbook.close()#中间写上代码块end = timeit.default_timer()print('一共耗时 %s 秒'%(end-start))total = len(result_list_total)print("处理完毕,共处理 %s 条学生信息"%total)

3 结果

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

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

相关文章

ubuntu下面的git服务器搭建

1、安装相应的软件和依赖 ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client git-core是git版本控制核心软件安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传输文件然后中间有个确认操作,输…

实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

王康 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 系统调用:操作系统中,程序员通过封装好的库函数来实现系统调用 前提 1,用户态内核态中断: 1,用户态内核…

【Pytorch神经网络理论篇】 37 常用文本处理工具:spaCy库+torchtext库

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

海龟画图 python太阳花_python 简单的绘图工具turtle使用详解

目录 1. 画布(canvas) 1.1 设置画布大小 2. 画笔 2.1 画笔的状态 2.2 画笔的属性 2.3 绘图命令 3. 命令详解 4. 绘图举例 4.1 太阳花 4.2 绘制小蟒蛇 4.3 绘制五角星 python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics),turtle库是python的内…

【Pytorch神经网络实战案例】31 TextCNN模型分析IMDB数据集评论的积极与消极

卷积神经网络不仅在图像视觉领域有很好的效果,而且在基于文本的NLP领域也有很好的效果。TextCN如模型是卷积神经网络用于文本处理方面的一个模型。 在TextCNN模型中,通过多分支卷积技术实现对文本的分类功能。 1 TextCNN 1.1 TextCNN模型结构 TexCNN…

python怎么画出好看的统计图_用最简单的 Python ,画最好看的图 [简单数据可视化]...

可以直接修改参数使用,非常的方便。import numpy as np import pandas as pd import holoviews as hv hv.extension(bokeh) macro_df pd.read_csv(http://assets.holoviews.org/macro.csv, \t) key_dimensions [(year, Year), (country, Country)] value_dimensio…

combobox之下拉宽度自适应

效果对比 先看下优化前后的效果,再看实现过程. 优化前 优化后 从上图中可看到,combobox优化后可以自适应不同长度的字符串,保证每个字符串都能够显示完整。 实现过程 当我们触发CBN_DROPDOWN事件时,不再使用默认的实现&#xff0c…

Python工具:将文件夹下的视频按照帧数输出图片文件(含代码)

1、描述 将一个视频流按帧数截取大量的图片 2、用途 AI的数据集制作,得到大量的图片,之后将其打标签 3、案例文件截图 4、代码实现: import cv2 import argparse import os# 边里该文件夹下的文件名称 def read_directory(directory_nam…

用Python语言对任意图像进行m*n的均匀分块(思路非常清晰,步骤简单)

主要用途:处理图片数据集 1 对单个图片进行分块 import numpy as np import matplotlib.pyplot as plt import cv2def divide_method1(img,m,n):#分割成m行n列print(img.shape)h, w img.shape[0],img.shape[1]gx np.round(h).astype(np.int)gy np.round(w).asty…

python爬虫用什么软件写_python爬虫怎么写

如今很多有编程能力的小伙伴已经不满足手动搜索内容了,都希望通过编写爬虫软件来快速获取需要的内容,那么如何使用python制作爬虫呢?下面小编给大家讲解一下思路 工具/原料 python 方法/步骤 1 首先我们需要确定要爬取的目标页面内容&#xf…

花书《深度学习》代码实现:01 线性代数:基本概念+代码实现基本运算

1 标量、向量、矩阵和张量 2 矩阵和向量相乘 3 单位矩阵和逆矩阵 3.0 单位矩阵 a np.identity(3) # 三行三列单位矩阵 3.1 矩阵的逆 A [[1.0,2.0],[3.0,4.0]] A_inv np.linalg.inv(A) print("A 的逆矩阵", A_inv) 3.1 转置 A np.array([[1.0,2.0],[1.0,0…

【Pytorch神经网络理论篇】 38 Transformers:安装说明+应用结构+AutoModel类

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

clone是深拷贝还是浅拷贝_Python中的浅拷贝和深拷贝

本文翻译自copy in Python (Deep Copy and Shallow Copy),讲述了在Python语言中浅拷贝与深拷贝的不同用法。全文系作者原创,仅供学习参考使用,转载授权请私信联系,否则将视为侵权行为。码字不易,感谢支持。以下为全文内…

【Pytorch神经网络实战案例】32 使用Transformers库的管道方式实现:加载指定模型+文本分类+掩码语言建模+摘要生成+特征提取+阅读理解+实体词识别

管道方式是Transformers库中高度集成的极简使用方式。使用这种方式来处理NLP任务,只需要编写几行代码就能实现。通过本例的练习可以使读者对Transformers库的使用快速上手。 1 在管道方式中指定NLP任务 Transfomers库的管道方式使用起来非常简单,核心步…

jqprint获取打印页数_如何将每张打印多页PPT的PDF变成常规课件

在工作和学习中,经常会收到各种 PDF 文件,尤其是老师的课件。为了防止学生大量上传到各种文库网站赚积分,或者为了方便学生打印出来预习复习。通常,会在每页 PDF 里面,打印多张 PPT 内容。一般是 6 张或 9 张&#xff…

vba 判断文本框内容是否为空_【VBA】 数据输入 Inputbox 基本语法

在使用Excel 的过程中,如果需要用户输入简单的数据,作为“已知数”,那么可以使用inputbox 函数显示一个对话框,供用户在对话框中输入数据。 Inputbox 函数语法在一对话框来中显示提示,等待用户输入正文或按下按钮&…

无向图的深度优先遍历非递归_LeetCode0429: N叉树的层序遍历

题目介绍描述:给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。例如,给定一个 3叉树 :返回其层序遍历:[[1],[3,2,4],[5,6] ]说明:树的深度不会超过 1000。 树的节点总数不会超过 5000。解题思路:★ …

一条龙操作有效解决PermissionError: [WinError 5] 拒绝访问的问题

1 问题描述 当在使用pip install 安装包时,如:pip install scrapy scrapyd scrapyd-client spiderkeeper出现报错:PermissionError: [WinError 5] 拒绝访问。: ‘c:\programdata\anaconda3\lib\site-packages\dateutil\easter.py’ 2 解决办…

预订态势图

//预订态势图JS//根据日期得到对应星期几 function getWeekByDay(riqi){//2017-01-23;var getWeek "";var arys1 new Array(); arys1riqi.split(-); //日期为输入日期,格式为 2013-3-10var ssdatenew Date(arys1[0],parseInt(arys1[1]-1),arys1…

altera fpga sdi输出方案_FPGA在电力电子中的应用有哪些?

大家好,很抱歉上周末没有及时更新公众号,本来这期想聊聊IGBT的拖尾电流,但是由于周末去深圳高交会(高新技术成果交易会)逛了一天,时间给耽搁了,感觉要想把拖尾电流讲清楚也不太容易,还得需要点时间&#xf…