文字识别核酸检测结果并导出Excel

python下文字识别核酸检测报告信息并生成Excel数据表

前言:疫情下,隔几天就需要做一次核酸检测,核酸检测截图的收取工作称为部门工作的难点,参考最近热搜话题复旦大学辅导员用python搞定核酸检测核查难的问题,也自己动手打了几行代码,实现最基本的核酸检测结果审核问题。

文字识别代码:为了方便使用,我采取的方法是直接调用百度云中的文字识别的API接口,具体的代码参考了:https://blog.csdn.net/zhembrace/article/details/79779140这位大佬的代码,将识别到的图片中的数据写入txt文件,再通过python将txt文件转换成对应的Excel表格,即可完成核酸信息的基本统计

一、准备阶段

1.注册百度智能云账号

在这里插入图片描述

2.完成认证

在这里插入图片描述

3.点击搜索文字识别

在这里插入图片描述

4.点击领取免费资源

在这里插入图片描述

5.领取资源
在这里插入图片描述

6.点击创建应用

在这里插入图片描述

7.创建完成后查看这三个号码,待会会用到!

在这里插入图片描述

8.将准备好的核酸截图存入文件夹,并将文件夹命名为data

在这里插入图片描述
我们学校的核酸检测报告采用的是江苏省疾控预防控制中心的“新冠病毒核酸检测信息系统”
核酸检测结果如下,转换成的Excel文件也是根据图上内容为例
在这里插入图片描述

二、完成小项目

1.文字识别(可直接搬运上面大哥的源码)

# -*- coding: UTF-8 -*-

import os
from aip import AipOcr
import json

from time import *
begin_time = time()
# 输入自己的号码
APP_ID = '25926xxxx'
API_KEY = '4DRC53mkoBb4uwCQGw3vxxxxx'
SECRET_KEY = 'bbiN220ZM7KIgSaHTsQ4fndymfVxxxxx'
aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)

# 指定文件夹(更改成自己的数据文件夹)
os.chdir("/Users/chen/PycharmProjects/hesuanocr/data")
dirs = os.listdir()


def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()


options = {
    'detect_direction': 'true',
    'language_type': 'CHN_ENG',
}

print('开始处理,共' + str(len(dirs)) + "张图片。")
cnt = 0
for filePath in dirs:
    if filePath.split('.')[-1] == 'txt': continue
    cnt += 1
    print('正在处理第' + str(cnt) + '张图片')
    result = aipOcr.basicGeneral(get_file_content(filePath), options)
    with open(filePath.split('.')[0] + '.txt', 'w', encoding='utf-8') as ans:
        for i in result['words_result']:
            ans.write(i['words'] + '\n')
    print('处理完成')
print('全部处理完成!')
endtime = time()
print(endtime-begin_time)


2.识别出来的效果如图所示

在这里插入图片描述
请添加图片描述

3.将生成的多个txt文件转换成Excel文档,采用pandas将csv格式转换成Excel格式

#!/user/bin/env python
#coding=utf-8
"""
@author : wangchen
@email  : 3222738263@qq.com
@file   : change.py
@time   : 2022/4/8
@Desc   :
"""
import pandas as pd
import os


def name():
    '''获取当前目录下的CSV文件名'''

    file_name = []  # 创建一个空列表,存储当前目录下的CSV文件全称

    a = os.listdir('data/')
    for j in a:
        if os.path.splitext(j)[1] == '.txt':  # 判断是否为txt文件,如果是则存储到列表中
            file_name.append(j[:-4])
    return file_name

if __name__ == "__main__":
    # 获取csv文件名
    name_ = name()
    # 创建数据框
    df = pd.DataFrame()

    # 读取txt文件并汇总
    for i in name_:
        data = pd.read_csv('data/'+i+'.txt')
        df = pd.concat([data.T, df])


    df['姓名'] = df.index
    name_excel = ['报告是否完成', '检测单位', '检测日期', '样本类型', '查看详情', '姓名']
    df.columns = name_excel
    name_excel1 = ['姓名', '报告是否完成', '检测单位', '检测日期', '样本类型', '查看详情']
    df = df[name_excel1]
    df.iloc[:,2] = df.iloc[:,2].apply(lambda x: x[5:])
    df.iloc[:,3] = df.iloc[:,3].apply(lambda x: x[5:])
    df.iloc[:,4] = df.iloc[:,4].apply(lambda x: x[5:])
    print(df)
    df.to_excel('result.xlsx', index=None)

4.运行效果如下

在这里插入图片描述
在这里插入图片描述

三、总结

方法虽不难,但是还有很多需要优化的地方,也请各位大神批评指正!其中转换成excel的过程中必须使识别出来的数据格式严格符合txt文档中的格式要求,这一点容易在数据多的时候出问题,毕竟识别的准确度也一般!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值