在PyCharm中运行《智能停车场车牌识别计费系统》即可进入如图1所示的系统主界面。
说明:在运行程序前,先将当前的计算机连接互联网,并且需要先申请百度AI开放平台的图片识别需要的Key,并且复制该Key到项目根目录下的file子目录的key.txt文件中替换相应的内容即可。替换时需要注意不要把原来的单引号删除。
具体的操作步骤如下:
(1)识别车牌,并实现车辆入场和出场。当有车辆的车头或车尾对准摄像头后,管理员单击“识别”按钮,系统将识别该车牌,并且根据车牌判断入场或出场,显示不同信息。车辆入场时效果如图2所示,车辆驶出时效果如图3所示。
(2)收入统计。单击“收入统计”按钮,系统会根据车辆进出记录汇总出一个的收入信息,并且通过柱型图显示出来,效果如图4所示。
(3)满预警。系统会根据以往的数据自动判断一周中的哪一天会出现车位紧张的情况,从而在前一天给出预警提示,方便管理员提前做好调度,效果如图5所示。
运行方法
说明:在运行程序前,先将当前的计算机连接互联网,并且需要先申请百度AI开放平台的图片识别需要的Key,并且复制该Key到项目根目录下的file子目录的key.txt文件中替换相应的内容即可。替换时需要注意不要把原来的单引号删除。
打开PyCharm开发环境,然后在主菜单上选择File→Open菜单项,在打开的Open File or Project对话框中,选择项目CarNumber,如图1所示。
单击OK按钮,将弹出 Open Project对话框,在该对话框,如果想要在新的窗体中打开项目,则选中Open in new window单选按钮,否则在当前窗体中打开,则选中Open in current window单选按钮。这里在新窗体中打开文件,如图2所示。
打开项目后,在右侧的Project面板中选中程序的主文件main.py,并且单击鼠标右键,在弹出的快捷菜单中选择“Run ‘main’”菜单项运行项目,如图3所示。
程序运行效果如图4所示。
说明:在运行程序时,如图出现如图5所示的异常信息,那么可能是没有连接摄像头,或者摄像头出现异常。
部分源码如下,其余完整详见下载,可忽略。
# 定义颜色 BLACK = ( 0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) BLUE = (0, 120, 215) GRAY = (96,96,96) RED = (220,20,60) YELLOW = (255,255,0) DARKBLUE = (73, 119, 142) BG = DARKBLUE # 指定背景颜色 #信息内容 txt1='' txt2='' txt3='' # 窗体大小 size = 1000, 484 # 设置帧率(屏幕每秒刷新的次数) FPS = 60 # 一共有多少车位 Total =100 # 月收入统计分析界面开关 income_switch=False # 获取文件的路径 cdir = os.getcwd() # 文件路径 path=cdir+'/datafile/' # 读取路径 if not os.path.exists(path): # 根据路径建立文件夹 os.makedirs(path) # 车牌号 日期 时间 价格 状态 carnfile = pd.DataFrame(columns=['carnumber', 'date', 'price', 'state']) # 生成xlsx文件 carnfile.to_excel(path+'停车场车辆表' + '.xlsx', sheet_name='data') carnfile.to_excel(path+'停车场信息表' + '.xlsx', sheet_name='data') # 读取文件内容 pi_table = pd.read_excel(path+'停车场车辆表.xlsx', sheet_name='data') pi_info_table = pd.read_excel(path+'停车场信息表.xlsx', sheet_name='data') # 停车场车辆 cars = pi_table[['carnumber', 'date', 'state']].values # 已进入车辆数量 carn =len(cars) # pygame初始化 pygame.init() # 设置窗体名称 pygame.display.set_caption('智能停车场车牌识别计费系统') # 图标 ic_launcher = pygame.image.load('file/ic_launcher.png') # 设置图标 pygame.display.set_icon(ic_launcher) # 设置窗体大小 screen=pygame.display.set_mode(size) # 设置背景颜色 screen.fill(BG) try: cam = cv2.VideoCapture(0) except: print('请连接摄像头') # 背景文图案 def text0(screen): # 底色 pygame.draw.rect(screen, BG, (650, 2, 350, 640)) # 绘制横线 pygame.draw.aaline(screen, GREEN, (662, 50), (980, 50), 1) # 绘制信息矩形框 pygame.draw.rect(screen, GREEN, (650, 350, 342,85),1) # 使用系统字体 xtfont = pygame.font.SysFont('SimHei', 15) # 重新开始按钮 textstart = xtfont.render('信息', True, GREEN) # 获取文字图像位置 text_rect = textstart.get_rect() # 设置文字图像中心点 text_rect.centerx = 675 text_rect.centery = 365 # 绘制内容 screen.blit(textstart, text_rect) cars = pi_table[['carnumber', 'date', 'state']].values if len(cars)>0: longcar=cars[0][0] cartime =cars[0][1] # 使用系统字体 xtfont = pygame.font.SysFont('SimHei', 15) # 转换当前时间 2018-12-11 16:18 localtime = time.strftime('%Y-%m-%d %H:%M', time.localtime()) htime = timeutil.DtCalc(cartime, localtime) # 重新开始按钮 textscar = xtfont.render('停车时间最长车辆:'+str(longcar), True, RED) texttime = xtfont.render("已停车:" + str(htime) + '小时', True, RED) # 获取文字图像位置 text_rect1 = textscar.get_rect() text_rect2 = texttime.get_rect() # 设置文字图像中心点 text_rect1.centerx = 820 text_rect1.centery = 320 text_rect2.centerx = 820 text_rect2.centery = 335 # 绘制内容 screen.blit(textscar, text_rect1) screen.blit(texttime, text_rect2) pass