ADD file via upload

master
hnu202178020123 3 years ago
parent a2ca665f0c
commit 4028d0e3a7

@ -0,0 +1,415 @@
# '''防疫系统''' #
#2022年5月16日版本
########################################
# 库引用
from PIL import Image
import xlwings as xw
import pandas as pd
import numpy as np
import collections
import datetime
import time
import cv2
import os
########################################
# 定义颜色范围
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['red']=color_list
# 红色2
lower_red = np.array([0, 43, 46])
upper_red = np.array([10, 255, 255])
color_list = []
color_list.append(lower_red)
color_list.append(upper_red)
dict['red2'] = color_list
#黄色
lower_yellow = np.array([26, 43, 46])
upper_yellow = np.array([34, 255, 255])
color_list = []
color_list.append(lower_yellow)
color_list.append(upper_yellow)
dict['yellow'] = 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['green'] = color_list
return dict
########################################
# 健康码识别系统
#截图功能
img = Image.open('F://xsj//yssb//jkmhm.jpg')
box=(210,460,650,900)
jt=img.crop(box)
jt.save('F://xsj//jkm1.jpg')
filename="F:\\xsj\\jkm1.jpg"
########################################
#处理图片
def get_color(frame):
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
maxsum = -100
color = None
color_dict = getColorList()
for d in color_dict:
mask = cv2.inRange(hsv,color_dict[d][0],color_dict[d][1])
cv2.imwrite(d+'.jpg',mask)
binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
binary = cv2.dilate(binary,None,iterations=2)
contours, hierarchy = cv2.findContours(binary.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
sum = 0
for c in contours:
sum+=cv2.contourArea(c)
if sum > maxsum :
maxsum = sum
color = d
return color
########################################
#颜色识别函数
def yssb():
frame = cv2.imread(filename)
a=get_color(frame)
if a == 'green':
return '0'
if a== 'yellow':
return '1'
if a == 'red':
return '2'
########################################
rq=datetime.date.today().day
df=pd.read_excel("社区信息表 .xlsx")
#初始界面函数
def csjm():
print(">>>欢迎进入防疫系统<<<")
print('现在时间是:', time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
print("#####################")
print("输入1 您将进入社区端")
print("输入2 您将进入居民端")
print("输入3 您将进入外来人口端")
print("输入0 您将退出防疫系统")
csjm=input("请在这输入:")
return csjm
########################################
#社区端函数
def sqdhs():
print(">>>欢迎社区管理员<<<")
print("#####################")
print("输入1 您将获得所有居民当日的打卡信息")
print("输入2 您将获得所有外来人员信息")
print("输入3 您将获得所有未打卡的居民姓名以及人数")
print("输入0 您将退出社区端返回到初始界面")
sqdhs=input("请在这输入:")
return sqdhs
########################################
#居民端函数
def jmdhs():
print(">>>欢迎业主<<<")
print("#####################")
print("输入1 您将进入每日打卡系统")
print("输入0 您将退出居民端返回到初始界面")
jmdhs=input("请在这输入:")
return jmdhs
########################################
#外来人员端函数
def wlrk():
print('>>>欢迎来到外来人员端<<<')
print("#####################")
print("输入1 您将进入外来人员登记系统")
print("输入2 您将进入上传健康码进行系统分析系统")
print('输入3 您将查看进入社区审核结果')
print("输入0 您将退出外来人员系统")
wlrk=input('请在这输入:')
return wlrk
########################################
#创建每日表格
def mrdk():
rq=datetime.date.today().day
if not os.path.isfile(f'F://xsj//{rq}号打卡表.xlsx'):
dkb = xw.App(visible=True,add_book=False)#启动excel程序
workbook = dkb.books.add()
workbook.save(f'F://xsj//{rq}号打卡表.xlsx')
workbook.save(f'F://xsj//{rq}号外来人口表格.xlsx')
workbook.close()
dkb.quit()#程序退出
df1=pd.read_excel(f'D://vs2019pro//大作业////{rq}号打卡表.xlsx')
df2=pd.read_excel(f'F://xsj//{rq}号外来人口表格.xlsx')
df1['姓名']=df.loc[1:,('姓名')]
df1[['打卡情况','今日所在地','健康码状态','是否核酸','体温情况','是否隔离']]=''
df2[['外来人口','从哪来','来本社区的原因','联系电话','健康码状态','审核结果']]=None
df1.to_excel(f'F://xsj//{rq}号打卡表.xlsx',index = False,encoding = "utf-8")
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
print(">>>每日打卡表格创建完成<<<")
print(">>>每日外来人口表格创建完成<<<")
print("#####################")
print()
return True
########################################
#防疫系统社区端主体函数
def sqdzths():
mrdk()
while True:
y=sqdhs()
df1=pd.read_excel(f'F://xsj//{rq}号打卡表.xlsx')
df2=pd.read_excel(f'F://xsj//{rq}号外来人口表格.xlsx')
if y == '0':#返回到初始界面
print('>>>已退出社区端<<<')
print("#####################")
print()
break
if y == '1':#社区端函数功能
if os.path.isfile(f'F://xsj//{rq}号打卡表.xlsx'):
print(df1[['姓名','打卡情况','今日所在地','健康码状态','是否核酸','体温情况','是否隔离']])
print()
else:
print("请检修系统")
print()
if y == '2':
if os.path.isfile(f'F://xsj//{rq}号外来人口表格.xlsx'):
print(df2[['外来人口','从哪来','来本社区的原因','联系电话','健康码状态','审核结果']])
print()
else:
print("请检修系统")
print()
if y == '3':
if os.path.isfile(f'F://xsj//{rq}号打卡表.xlsx'):
print(len(df1[(df1.打卡情况.str[:]=='')]['姓名']),'人未打卡')
print(df1[(df1.打卡情况.str[:]=='')]['姓名'])
print()
else:
print('请检修系统')
print()
if y not in ['0','1','2','3']:
print('输入有误,请重新输入')
print()
########################################
#防疫系统居民端主体函数
def jmdzths():
while True:
y=jmdhs()
if y == '0':#返回到初始界面
print('>>>已退出居民端<<<')
print("#####################")
print()
break
if y == '1':#进入每日打卡系统
if os.path.isfile(f'F://xsj//{rq}号打卡表.xlsx'):
df1=pd.read_excel(f'F://xsj//{rq}号打卡表.xlsx')
print("欢迎来到每日打卡系统")
print("#####################")
print(">>>非常时期,感谢配合<<<")
nm=input('请输入姓名:')
xm=df1[(df1.姓名.str[:]==nm)].index
if nm in df1.姓名.values.tolist() and df1.loc[xm,('打卡情况')].tolist()==['']:
df1.loc[xm,('今日所在地')]=input("今日所在地:")
df1.loc[xm,('健康码状态')]=input("健康码状态 请填 绿/黄/红:")
df1.loc[xm,('是否核酸')]=input("是否核酸 请填 是/否:")
df1.loc[xm,('体温情况')]=input('体温情况(低于37.2属于正常体温) 请填 正常/异常:')
df1.loc[xm,('是否隔离')]=input("是否被隔离 请填 是/否:")
df1.loc[xm,('打卡情况')]=''
df1.to_excel(f'F://xsj//{rq}号打卡表.xlsx',index = False,encoding = "utf-8")
print(" >>>非 常 时 期,感 谢 有 你<<< ")
print("#####################")
print()
if nm in df1.姓名.values.tolist() and df1.loc[xm,('打卡情况')].tolist()==['']:
print(">>> 您今日已完成打卡 <<<")
print(">>>非 常 时 期,感 谢 有 你<<<")
print("#####################")
print()
if nm not in df1.姓名.values.tolist():
print('>>>请先返回初始界面<<<')
print('>>>进入外来人员端进行报备<<<')
print("#####################")
print()
break
else:
print(">>>正在等待管理员创建每日打卡表格<<<")
print(" >>>非 常 时 期,感 谢 有 你<<< ")
print("#####################")
print()
if y not in ['0','1']:
print('输入有误,请重新输入')
print()
########################################
#防疫系统外来人员端主体函数
def wlrkdzths():
while True:
y=wlrk()
if y == '0':#返回初始界面
print("已退出外来人口端")
print("#####################")
print()
break
if y == '1':#进入外来人口登记系统
if os.path.isfile(f'F://xsj//{rq}号外来人口表格.xlsx'):
df2=pd.read_excel(f'F://xsj//{rq}号外来人口表格.xlsx')
wz=len(df2)+1
df2.loc[wz,('外来人口')]=input('请输入您的名字:')
df2.loc[wz,('从哪来')]=input('请输入您从哪来:')
df2.loc[wz,('来本社区的原因')]=input("请输入您来本社区的原因:")
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
while True:
dh=input("请输入您的联系电话:")
if len(dh) == 11:
df2.loc[wz,('联系电话')]=dh
print(">>> 请等待管理员审核 <<<")
print(">>>非常时期,感谢配合<<<")
print("#######################")
print()
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
break
if len(dh) != 11:
print()
print("您的输入有误,请重新输入正确的电话号码")
print(">>>非常时期,感谢配合<<<")
print("#######################")
print()
else:
print(">>>正在等待管理员创建外来人口表格<<<")
print(" >>>非 常 时 期,感 谢 配 合<<< ")
print("#####################")
print()
if y == '2':#进入上传健康码分析系统
if os.path.isfile(f'F://xsj//{rq}号外来人口表格.xlsx'):
df2=pd.read_excel(f'F://xsj//{rq}号外来人口表格.xlsx')
nm=input("请输入您的名字:")
if nm in df2['外来人口'].tolist():
wz1=df2[(df2.外来人口.str[:]==nm)].index
if yssb() == '0':
df2.loc[wz1,('健康码状态')]='绿'
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
print(">>>非 常 时 期,感 谢 配 合<<<")
print("#############################")
print()
if yssb() == '1':
df2.loc[wz1,('健康码状态')]=''
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
print(">>>非 常 时 期,感 谢 配 合<<<")
print("#############################")
print()
if yssb() == '2':
df2.loc[wz1,('健康码状态')]=''
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
print(">>>非 常 时 期,感 谢 配 合<<<")
print("#############################")
print()
if nm not in df2['外来人口'].tolist():
print('请 先 登 记 信 息')
print("##################################")
print()
else:
print(">>>正在等待管理员创建外来人口表格<<<")
print(" >>>非 常 时 期,感 谢 配 合<<< ")
print("##################################")
print()
if y == '3':#进入查看审核结果系统
if os.path.isfile(f'F://xsj//{rq}号外来人口表格.xlsx'):
df2=pd.read_excel(f'F://xsj//{rq}号外来人口表格.xlsx')
nm=input("请输入您的名字:")
if nm in df2['外来人口'].tolist() :
wz2=df2[(df2.外来人口.str[:]==nm)].index
if df2.loc[wz2,('健康码状态')].tolist()==['绿']:
df2.loc[wz2,('审核结果')]='通过'
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
print('您的审核已通过')
print(">>>非 常 时 期,感 谢 配 合<<<")
print("#############################")
print()
if df2.loc[wz2,('健康码状态')].tolist()==['']:
df2.loc[wz2,('审核结果')]='不通过'
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
print('您的审核不通过')
print("如果您有七天三检且三检均为阴性的核酸证明")
print("请联系社区管理员")
print("社区管理员电话15174199895")
print(">>>非 常 时 期,感 谢 配 合<<<")
print("#############################")
print()
if df2.loc[wz2,('健康码状态')].tolist()==['']:
df2.loc[wz2,('审核结果')]='不通过'
df2.to_excel(f'F://xsj//{rq}号外来人口表格.xlsx',index = False,encoding = "utf-8")
print('您的审核不通过')
print("由于您是红码人员")
print("系统已经将您的信息上传至疫情防控中心")
print("建议您远离人群,就地等待")
print(">>>非 常 时 期,感 谢 配 合<<<")
print("#############################")
print()
else:
print("请先上传健康码,进行系统分析")
print(">>>非 常 时 期,感 谢 配 合<<<")
print("##############################")
print()
if nm not in df2['外来人口'].tolist():
print(' 请 先 登 记 信 息')
print("##############################")
print()
else:
print(">>>正在等待管理员创建外来人员登记表格<<<")
print(" >>>非 常 时 期,感 谢 配 合<<< ")
print("##################################")
print()
if y not in ['0','1','2','3']:
print('输入有误,请重新输入')
print()
########################################
#防疫系统主体函数
while True:
x=csjm()
if x == '1':
sqdzths()
if x == '2':
jmdzths()
if x == '3':
wlrkdzths()
if x == '0':
print('>>>已退出防疫系统<<<')
print(">>>非常时期,感谢有你<<<")
print("#####################")
break
if x not in ['0','1','2','3']:
print('输入有误,请重新输入')
print()
Loading…
Cancel
Save