You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

415 lines
17 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# '''防疫系统''' #
#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()