复旦博士生写Python脚本识别核酸截图,是如何做出来的?

2022-04-10  本文已影响0人  python大数据分析

最近复旦大学一博士生写Python脚本去核查核酸截图的故事,被人民日报公众号报道出来,夸赞用所学贡献青春力量!

首先非常肯定这位博士学以致用的精神,虽然技术不难,但是能帮助到疫情,还是值得学习。

看到知乎上很多人在酸说博士用这么简单的东西,也能上人民日报?

我想说技术不在于难易,只要能解决眼前之急,帮助到他人,那就是有价值的。

所以也想和看到这篇文章的小伙伴说一句,永远不要为实现NB的技术而沾沾自喜,真正让你骄傲的是这项技术是否改变了这世界,哪怕只有微不足道的变化。

看人民日报报道的细节,是用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)

你只需要传入核酸截图的路径地址,就可以直接输出文本信息

输出:

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)

大家也可以拿自己的核酸结果去试试

上一篇下一篇

猜你喜欢

热点阅读