# 核酸检测结果识别系统
HELLO,大家好。现在是2022年8月9日20:14:44。
在老师和伙伴的帮助下,我完成了**核酸检测结果识别系统1.0**。相信这套简单方便的系统,能够为大家提供便利。
## 产品介绍
### 产品功能
由于高校频繁的核酸检测,导致每次结果统计非常麻烦。这套系统可以极大减轻负责人(例如辅导员)的工作压力。同学们把检测后的图片上传到网站入口,在下方输入框内填上姓名即可。
![page](D:\pycharm\OCR\README_images\page.jpg)
后台会自动识别图片的检测结果、时间并写入数据库汇总,实时反馈提交情况并制作图标,反馈信息。
![show](D:\pycharm\OCR\README_images\show.jpg)
### 技术栈
开发工具:VSCode,PyCharm,sqlyog
前端技术:HTML+CSS+JS,jquery,echarts,bootstrap
后端技术:Python,OCR,opencv,SQL,numpy,pyecharts
### 使用说明
需要提供给网站管理员一份本班的学号+姓名表格作为数据库,生成的数据表格(result.xlsx)。
可视化数据界面实时更新提交和识别情况,属于私有界面,不会对外公开,只对班级的管理员开放,因此可以很大程度上保证使用者的信息安全。
## 技术算法讲解
### 组成部分
easyocr图像文字提取+opencv颜色识别+正则表达式结果匹配+Python写入Excel和数据库+pyecharts可视化界面 + schedule控制挂载运行;
HTML+CSS+JS+jquery+bootstrap(前端)+ PHP(后端)+ Nginx反向代理 + pm2(项目部署)
### easyocr
easyocr是python 2021年推出的第三方包,可以非常精准的识别、提取图片文字(亲测有效)。这项功能主要被用来提取学生的核酸检测时间。下面是easyocr的具体使用:
```python
f = open('result.txt', 'w')
for filename in os.listdir(directory_name):
reader = easyocr.Reader(['ch_sim', 'en'], gpu=False) # GPU or CPU
result = reader.readtext(directory_name + r'/' + filename, detail=0)
result = str.join(result)
f.write(result)
f.write("\n")
```
这里要注意两点,`['ch_sim', 'en']`是识别语言的列表(中、英文),如果需要其他语言可以去搜它对应的代码。`gpu=false` 表示我的电脑配置没有gpu,设置成用cpu跑深度学习的代码。
另外,`reader.readtext()` 是不支持中文路径的,读取的路径一定要注意!
读取完图片文字后,我们把他写入一个txt中,下面要从杂乱的文字中提取出学生的核酸检测时间:
```python
try:
timeresult = re.search('采集时间[\d,\-,:,.]*', result) # 获取采集时间
timeres.append(timeresult.group()[4:]) # 去掉前四个字“采集时间”
except Exception as err:
timeres.append("时间匹配失败")
```
这里我们一定要加入异常处理,防止因为匹配失败而直接报错中断运行。
### opencv
本身是打算用easyocr直接提取“阴性”这两个字,但是发现这两个字实在不好提取。所以决定用opencv的颜色识别解决结果的判断问题。首先我们列出一个颜色清单,命名为colorList.py。为了识别更加准确,我们只留下红绿两种颜色。
```python
import numpy as np
import collections
def getColorList():
dict = collections.defaultdict(list)
# 红色
lower_red = np.array([156, 43, 46])
upper_red = np.array([180, 255, 255])
color_list = []
color_list.append(lower_red)
color_list.append(upper_red)
dict[r'colorList/red'] = color_list
# 绿色
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
color_list = []
color_list.append(lower_green)
color_list.append(upper_green)
dict[r'coloList/green'] = color_list
return dict
if __name__ == '__main__':
color_dict = getColorList()
```
之后用opencv函数进行颜色判断;但`cv2.imwrite`函数只支持jpg图片,所以我们在网站收集图片时,可以将目标图片进行.jpg文件转换。之后import刚刚的colorList,使用opencv识别图片的颜色。
```python
import colorList
def get_color(frame):
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
maxsum = -100
color = None
color_dict = colorList.getColorList()
for d in color_dict:
mask = cv2.inRange(hsv, color_dict[d][0], color_dict[d][1])
cv2.imwrite(d + '.jpg', mask) # 这里一定要保证,读取的图片是jpg
binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
binary = cv2.dilate(binary, None, iterations=2)
cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
sum = 0
for c in cnts:
sum += cv2.contourArea(c)
if sum > maxsum:
maxsum = sum
color = d
return color
```
### excel表和数据库
为了方便管理者导出,我们用python将结果写入了excel表格;为了做出可视化界面,我们也需要将结果写入database。数据库的建立比较简单,分为四个字段:
| 字段 | 数据类型 |
| :-----------------: | :-----: |
| sno(学号) | varchar |
| sname(姓名) | varchar |
| time_result(时间检测结果) | varchar |
| test_result(检测结果) | varchar |
python写入excel表格的操作比较简单,另外,如果直接在浏览器输入.xlsx的文件地址,可以直接下载获取,也是十分方便。
在写入之前,我们需要先清理干净excel表格,我选择直接删除Sheet1,然后新建一张。做数据库也是一样,每次清理一次数据库,防止旧数据干扰新一次的检测。刷新后,写入本次的结果。
```python
db = pymysql.connect(host='localhost', user='root', passwd='root', port=3306, db='hesuan_result_collection')
cursor = db.cursor()
bg = op.load_workbook(r"result.xlsx") # 应先将excel文件放入到工作目录下
bg.remove(bg["Sheet1"])
bg.create_sheet("Sheet1", index=0)
sheet = bg["Sheet1"]
sheet.cell(1, 1, "学号")
sheet.cell(1, 2, "姓名")
sheet.cell(1, 3, "检测时间")
sheet.cell(1, 4, "检测结果") # 刷新excel表格的数据
sql_delete = "Update xinan set time_result = '' , test_result = '' "
cursor.execute(sql_delete)
db.commit() # 刷新数据库的数据
if len(timeres) == len(testres):
for i in range(1, len(timeres) + 1):
sql_fetch_name = "select sname from xinan where sno = '%s' " % student_sno[i - 1] # 获取学号对应的姓名
cursor.execute(sql_fetch_name)
sheet.cell(i + 1, 1, student_sno[i - 1])
try:
sheet.cell(i + 1, 1, student_sno[i - 1])
except Exception as err:
sheet.cell(i + 1, 1, "找不到姓名")
sheet.cell(i + 1, 3, timeres[i - 1])
sheet.cell(i + 1, 4, testres[i - 1]) # 分别写入学号、姓名、检测时间、检测结果
bg.save(r"result.xlsx") # 对文件进行保存
sql_update = "UPDATE `xinan` " \
"SET `time_result` ='%s' , `test_result` = '%s' " \
"WHERE sno = '%s'; " % (timeres[i - 1], testres[i - 1], student_sno[i - 1])
try:
sql_update_result = cursor.execute(sql_update)
db.commit() # 提交数据并保存
except Exception as err:
print("数据库写入失败:", err) # 这里同样也要加入异常处理
else:
print("长度不匹配")
print("finished")
```
### Pyecharts可视化界面
做好了算法部分,我们也要能够展示实时提交的情况。这样可以更方便班委管理,及时催促指定同学提交核酸检测报告。首先我们连接数据库,写好相关的sql语句:
```python
import pymysql
import main
db = pymysql.connect(host='localhost', user='root', passwd='root', port=3306, db='hesuan_result_collection')
cursor = db.cursor() # 数据库连�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
核酸检测结果识别系统,并获得软件著作权_COVID-19-OCR-system.zip (19个子文件)
COVID-19-OCR-system-main
result.html 16KB
result.xlsx 10KB
main.py 3KB
Web
hesuan.html 8KB
hesuan.php 2KB
testimg
IMG_20220811_105706.jpg 452KB
view.py 3KB
img
IMG_20220811_105706.jpg 452KB
colorList
red.jpg 42KB
yellow.jpg 32KB
run.py 1018B
sql.sql 1KB
requirements.txt 180B
README_images
page.jpg 68KB
page_picture.jpg 51KB
show.jpg 132KB
colorList.py 3KB
README.md 20KB
colorsystem.py 1KB
共 19 条
- 1
资源评论
好家伙VCC
- 粉丝: 2172
- 资源: 9145
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Delphi 12 控件之VclToFmxConvert.zip
- JAVA的SpringBoot+Vue学生管理系统源码数据库 MySQL源码类型 WebForm
- MySQL数据库标准安装文档-V2.0
- Delphi 12 控件之TMS WEB Core 2.6.1.3 Retail Setup for D11.rar
- html+css+js的我要去旅游之上海市
- Java使用SWT JFreeChart控件实现的小游戏.zip
- 核心资金业务是金融机构的关键业务领域,主要涉及资金的筹集、运用和管理等多个重要环节
- linuxShell脚本进阶.ppt
- AIX系统日常维护与故障排除
- java实现一个简单的植物大战僵尸游戏.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功