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