来源:

核酸结果统计难?复旦博士生的操作火了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 结果

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

  1. 【Python】核酸结果统计难?复旦博士生的操作火了......

    来源:中国青年报 编辑:学妹 人工核查核酸报告费时费力又易出错,怎么办? 4月7日,复旦大学官微发文,自三月初以来,学校启动常态化核酸筛查工作,要求班级辅导员必须核查学生"健康云" ...

  2. 10几行代码,用python打造实时截图识别OCR

    你一定用过那种"OCR神器",可以把图片中的文字提取出来,极大的提高工作效率. ! 今天,我们就来做一款实时截图识别的小工具.顾名思义,运行程序时,可以实时的把你截出来的图片中的文 ...

  3. 基于matlab的汽车牌照识别程序 (完整的代码+数据集+报告毕业设计)

    设计一个基于matlab的汽车牌照识别程序,能够实现车牌图像预处理,车牌定位,字符分割,然后通过神经网络对车牌进行字符识别,最终从一幅图像中提取车牌中的字母和数字,给出文本形式的车牌号码. 关键词:车 ...

  4. bp神经网络matlab代码_基于Matlab的BP神经网络识别26个英文字母

    一.设计思想 字符识别在现代日常生活的应用越来越广泛,比如车辆牌照自动识别系统,手写识别系统,办公自动化等等.本文采用BP网络对26个英文字母进行识别.首先将待识别的26个字母中的每一个字母都通过长和 ...

  5. 人体模型 java代码_【人体分析-人体关键点识别】-Java示例代码

    接口说明:http://ai.baidu.com/forum/topic/show/497747 人体关键点识别,即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中的所有人体的14个关键点, ...

  6. 核酸扫码登记体验有感(如何提高OCR的文字正确识别率)

    近几年,新冠疫情持续反复,核酸检测已成为了我们日常生活的一部分,甚至有人开玩笑说朋友邻居见面问候语从"吃了吗你?"变成了"今儿核酸了?".核酸检测全员常态化,需 ...

  7. createprocess失败代码2_DevOPS | 基于sonarqube、jenkins和gitlab的持续集成代码检查

    在持续集成过程中,针对代码的静态检查一般有两个时间点:一是提交代码的时候.二是提交merge request的时候,如果代码检查不通过,则可以直接拒绝此次代码提交或者合并.下面我们介绍下在常见的dev ...

  8. python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...

    1 #-*- coding: utf-8 -*- 2 from __future__ importunicode_literals3 #操作文件 4 importos5 #科学计算 6 importn ...

  9. [基础代码仓库]基于STM32C8T6的库函数ADC模拟+DMA多通道转运代码

    目录 导言 理论部分 STM32F103C8T6最小系统板 代码初始化步骤 代码部分 一.1个通道PA0 二.2个通道PA0.PA1 三.3个通道PA0.PA1.PA2 四.4个通道PA0~PA3 五 ...

最新文章

  1. 你会不会用mysql查询近7个月的数据?没有记录默认为空
  2. matlab graphminspantree
  3. 数据结构排序学习总结
  4. 中国男子足球运动员及男足国家队的评价
  5. Kali-linux安装设置
  6. Hadoop大数据分布式文件系统hdfs的工作机制
  7. 生成验证码图片的Java代码
  8. ag 搜索工具参数详解
  9. 流媒体应用程序Mobdro或存在安全隐患
  10. linux 最大磁盘 16t,linux ext4无法使用超过16T磁盘的解决办法
  11. NPAPI中返回一个字串的正确做法
  12. 数字电路-逻辑函数化简
  13. kotlin入门教程
  14. 【安卓】设置界面为横屏的设置方法
  15. vue中实现图片预览功能
  16. 2021年G2电站锅炉司炉最新解析及G2电站锅炉司炉作业考试题库
  17. 那时候的漫画【怀旧贴】
  18. 大唐波斯将军 机器人_波斯被灭,王子来大唐求援,唐高宗拒绝派兵,但让他做了禁军将领...
  19. 节点网络计划图计算机,工程网络计划(网络图)
  20. cayina计算机主板怎么改路线,七彩虹计算机主板biOs设置(图文).doc

热门文章

  1. Oracle的列转行问题
  2. 第 8 章 配置listener监听器
  3. python标准库os中的方法_python中OS常用方法
  4. Logstash入门简介
  5. HTML中Head头
  6. 解决pycharm运行Flask指定ip、端口更改无效
  7. models.ForeignKey( ,on_delete=models.CASCADE)    # 关联外键
  8. 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
  9. 【原】webpack--文件监听的原理
  10. 关于bc中小数点length,scale,(())以及进制转换