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

本文涉及的产品
票证核验,票证核验 50次/账号
通用文字识别,通用文字识别 200次/月
小语种识别,小语种识别 200次/月
简介: 核酸结果统计难?130行代码实现基于ocr的核酸截图识别存储Excel(复现代码核查核酸报告)

来源:


核酸结果统计难?复旦博士生的操作火了

https://m.gmw.cn/baijia/2022-04/08/35644611.html

1 程序背景


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

1.1 命名规范


20200250202003曹文举4.12阴性.jpg

1.2 EasyOCR


easyOCR

https://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)-2
    name = ''
    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,check
def 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 = name
        name_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_1
            name_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()
    # 保存excel
    result_list_total=[["姓名","日期","核算结果","学号","姓名校对","时间校对","核酸状态校对","核酸医院"]]
    read_directory("./imge")#这里传入所要读取文件夹的绝对路径,加引号(引号不能省略!)
    # xlsxwriter只可以新建一个excel,不可以读取和更新
    # 创建一个workbook 和增加一个worksheet,默认为sheet1...,也可以直接为sheet命名,例如下边的test
    workbook = xlsxwriter.Workbook('./data.xlsx')
    # 添加 sheet
    worksheet = 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 = 0
    col = 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
    # 只有此函数才可以生成excel
    workbook.close()
    #中间写上代码块
    end = timeit.default_timer()
    print('一共耗时 %s 秒'%(end-start))
    total = len(result_list_total)
    print("处理完毕,共处理 %s 条学生信息"%total)


3 结果


04376be8dda84b12a7268b294f978fe4.png


目录
相关文章
|
3月前
|
人工智能 文字识别 自然语言处理
熊猫 OCR 识别软件下载,支持截图 OCR、PDF 识别、多语言翻译的免费全能工具,熊猫OCR识别
本文介绍了几款实用的图文识别软件,包括熊猫OCR、Umi-OCR和天若OCR_本地版。熊猫OCR功能强大,支持多窗口操作、AI找图找色、OCR识别等;Umi-OCR免费且高效,具备截图OCR、批量处理等功能;天若OCR界面简洁,适合快速文字识别。文章还提供了下载链接及软件特点、界面展示等内容,便于用户根据需求选择合适的工具。
317 36
|
9月前
|
JSON 文字识别 数据可视化
Qwen2-VL微调实战:LaTex公式OCR识别任务(完整代码)
《SwanLab机器学习实战教程》推出了一项基于Qwen2-VL大语言模型的LaTeX OCR任务,通过指令微调实现多模态LLM的应用。本教程详述了环境配置、数据集准备、模型加载、SwanLab集成及微调训练等步骤,旨在帮助开发者轻松上手视觉大模型的微调实践。
|
6月前
|
机器学习/深度学习 文字识别 开发者
使用OCR库Pix2Text执行p2t.recognize()时出现list index out of range的错误信息(附有Pix2Text识别图片内容和laTex公式的代码)
有时候报错并不是你代码有问题,源码出错也是很常见的情况,比如之前使用mxgraph也出现了不知名bug,最后也是修改的源码解决的。有疑问欢迎交流~ 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
785 5
|
7月前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
784 8
|
9月前
|
文字识别 测试技术 API
实战阿里通义灵码极速编程-截屏-OCR-Ollama篇代码
该代码实现了一个截屏测试工具,结合了鼠标事件监听、屏幕截图和OCR功能。用户可通过拖动鼠标选择屏幕区域进行截图,并将截图转换为Markdown格式的文本内容。具体步骤包括:初始化大模型客户端、编码图像为Base64格式、捕获指定屏幕区域并保存截图、调用大模型API进行OCR识别并输出Markdown格式的内容。
359 9
|
人工智能 文字识别 开发工具
印刷文字识别使用问题之是否支持识别并返回文字在图片中的位置信息
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
人工智能 JSON 文字识别
印刷文字识别使用问题之如何数电发票进行识别
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
文字识别 数据安全/隐私保护 iOS开发
印刷文字识别使用问题之如何识别礼品册上的卡号、密码信息
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
文字识别 API 数据处理
印刷文字识别使用问题之对于带钢印的VIN图片如何提高识别准确率
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。