From 4028d0e3a7b9045284fefd3a1883b07436ec6768 Mon Sep 17 00:00:00 2001 From: hnu202178020123 Date: Sat, 28 May 2022 19:58:46 +0800 Subject: [PATCH] ADD file via upload --- 代码项目程序/防疫系统plus.py | 415 +++++++++++++++++++++++++ 1 file changed, 415 insertions(+) create mode 100644 代码项目程序/防疫系统plus.py diff --git a/代码项目程序/防疫系统plus.py b/代码项目程序/防疫系统plus.py new file mode 100644 index 0000000..fb81385 --- /dev/null +++ b/代码项目程序/防疫系统plus.py @@ -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() \ No newline at end of file