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 jsonfrom 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': continuecnt += 1print('正在处理第' + 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 osdef 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_nameif __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.indexname_excel = ['报告是否完成', '检测单位', '检测日期', '样本类型', '查看详情', '姓名']df.columns = name_excelname_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文档中的格式要求,这一点容易在数据多的时候出问题,毕竟识别的准确度也一般!