最近复旦大学一博士生写Python脚本去核查核酸截图的故事,被人民日报公众号报道出来,夸赞用所学贡献青春力量!
![](https://img.haomeiwen.com/i13723999/dbe2d8480a02e23c.png)
首先非常肯定这位博士学以致用的精神,虽然技术不难,但是能帮助到疫情,还是值得学习。
看到知乎上很多人在酸说博士用这么简单的东西,也能上人民日报?
我想说技术不在于难易,只要能解决眼前之急,帮助到他人,那就是有价值的。
所以也想和看到这篇文章的小伙伴说一句,永远不要为实现NB的技术而沾沾自喜,真正让你骄傲的是这项技术是否改变了这世界,哪怕只有微不足道的变化。
![](https://img.haomeiwen.com/i13723999/d56cc5b6614c582d.png)
看人民日报报道的细节,是用Python做的脚本,我来梳理下这个过程,以及实现的技术。
1、导入Python的OCR库来识别图片,生成文本字符串
细心观察便可发现,身边到处都是OCR的身影,文档扫描、车牌识别、证件识别、银行卡识别、票据识别等等。
OCR本质是图像识别,其包含两大关键技术:文本检测和文字识别。
先将图像中的特征的提取并检测目标区域,之后对目标区域的的字符进行分割和分类。
Python中OCR第三方库非常多,比如PaddleOCR、cnocr、easyocr等等。一般安装好后,可以直接import导入,传入图片路径参数,直接调用接口函数即可识别该图片。
比如书像PaddleOCR里的接口调用
from paddleocr import PaddleOCR, draw_ocr
# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
img_path = './imgs/test.jpg'
result = ocr.ocr(img_path, cls=True)
for line in result:
print(line)
你只需要传入核酸截图的路径地址,就可以直接输出文本信息
![](https://img.haomeiwen.com/i13723999/684dc18de73965fc.png)
输出:
17:28
检测结果查询
检测结果【阴性】
姓名 朱卫军
采样时间 2022-04-08 12:28
试剂编码 48
检测项目 新冠抗原
通过ocr的图片文本识别,会出现上面的结果,可以看到时间、姓名、检测结果等各种各样的信息
2、通过正则表达式来识别文本信息,提取关键词
我们得到上面的文本信息,还需要进行整理提取,分别别类填到excel表里
这里就需要用到正则表达式来处理文本,把关键文本提取出来,这里要提取的是时间、姓名、检测结果、试剂编码、检测项目等.
说到正则表达式,正则表达式(Regular Expression)通常被用来检索、替换那些符合某个模式(规则)的文本。
此处的Regular即是规则、规律的意思,Regular Expression即“描述某种规则的表达式”之意。
那我们来提取下上面的文本信息
# 导入re模块
import re
strs = '''17:28
检测结果查询
检测结果【阴性】
姓名 朱卫军
采样时间 2022-04-08 12:28
试剂编码 48
检测项目 新冠抗原'''
name = re.findall('(?<=姓名 ).*',strs)
time = re.findall('(?<=采样时间 ).*',strs)
result = re.findall('(?<=【).*(?=】)',strs)
print(name)
print(time)
print(result)
输出结果:
['朱卫军']
['2022-04-08 12:28']
['阴性']
3、将结果输出到excel表格
当用正则表达式提取出关键信息后,再用pandas将数据输出到excel中,这里需要对数据进行适当调整即可
import pandas as pd
import numpy as np
info1 = name + time + result
info1 = np.array(info1).reshape(1,3)
df = pd.DataFrame(info1,columns=['姓名','时间','检测结果'])
df.to_excel('核酸结果.xlsx', index=False)
大家也可以拿自己的核酸结果去试试
![](https://img.haomeiwen.com/i13723999/ddd7d6c72d2b6520.png)
网友评论