|
|
|
@ -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()
|