智能停车场[简易版]
智能停车场[简易版]
- 项目简介
- 开发环境
- 功能简介
- 停车场收费管理
- 停车场停车位管理
- 网页端
- 功能实现
- Socket通信
- 数据库相关知识
- 本地数据库操作
- pymysql数据操作
- web开发中的数据库操作
- 代码介绍
- 改进
- 最后
项目简介
项目来源于大四上的物联网设计实验课程,是智能交通大项目的一部分,该项目主要完成的功能是识别车牌号进行收费和统计空闲停车位进行发布。由于实验室设备简陋以及项目实现时间较短,项目代码简化为控制一个摄像头以及实现一个停车位的监控。
开发环境
硬件 树莓派、PC、摄像头、红外传感器
编程语言 Python/PHP/H5
开发环境 Raspbian/win10
功能简介
停车场收费管理
该项目使用一个直接与PC机相连的摄像头连续抓拍,识别车辆车牌,将识别到的车牌号以及进入停车场的时间或者离开停车场的时间存入数据库,倘若是离开停车场,则还需计算停车总时长以及需缴费用,也存入数据库。
停车场停车位管理
停车位通过红外传感器进行监控,与树莓派连续通信是否检测到障碍物,树莓派通过socket将数据传送至PC,PC决策是否有车辆停入该停车位,将停车位空闲情况存入数据库。
网页端
网页端只依赖数据库,网页端主要完成用户登录、车位管理、缴费信息三个功能。
此界面为用户登录界面,用户需在此界面登录后方可查看缴费信息,若是管理员登录,可查看所有车辆的缴费信息。
此界面为缴费信息界面,显示登录用户的车牌号、进场时间、出场时间、停车时长以及需缴费用。
此界面为车位管理界面,显示停车场的停车位空闲情况,无论用户是否登录,都可以在此界面进行停车位空闲情况的查看。
功能实现
项目所有代码已放入github,下面介简单记录几个我认为有用的部分。
Socket通信
Python中的socket模块封装了TCP/IP的内部细节。代码实现了在PC(服务器端)和树莓派(客户端)连续传输"0"或"1"。
下面是服务器端
#socket通信
import socket
host_ip = "192.168.137.1" #服务器地址
host_port = 8001 #服务器端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((host_ip, host_port))
print("listening......")
sock.listen(5)
connection, adress = sock.accept()
a = connection.recv(1) #a为传过来的数组
下面是客户端
import socket
import time
import RPi.GPIO as gpioHost = "192.168.137.1"
Port = 8001
print("connecting......")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((Host, Port))gpio.setmode((gpio.BCM))
gpio.setup(6, gpio.IN)while 1:data = gpio.input(6)if data == 0:data_p = '0'else:data_p = '1'sock.send((data_p).encode("utf-8"))time.sleep(1)sock.close()
print("closed")
gpio与树莓派的输入输出有关,因为树莓派与红外传感器通过gpio通信。
数据库相关知识
在该项目中的数据库知识分为三类,一类是本地数据操作,一类是与Python相依赖的数据库的操作,一类是与web开发相关的数据库操作。本地数据库的操作主要负责创建数据库、创建表,使用的是mysql;与Python相依赖的数据库操作主要实现项目中实际数据的写入,使用的是pymysql;与web开发相关的数据库操作主要实现数据库数据的提取便于在网页端发布用户需要的信息。下面我将记录简单的可以完成该项目的数据库操作。
本地数据库操作
首先是本地数据库操作,这个操作通常需要管理员模式打开cmd,当然前提是你需要下载安装mysql。
登录mysql
mysql -u root -p
"-u"后面接登录用户,之后会要求输入密码
如上图所示表示登录成功,之后创建数据库。
create database parking_system;
在mysql中不区分大小写,且以分号作为单个语句的结束,一定要注意。
若想查看当前有多少个数据库,则
show databases;
进入某个数据库才可以创建表
use parking_system;
对表进行创建
create table table_parking_toll(car_id varchar(20),in_time datetime,out_time datetime,park_time int(11)toll int(11));
查看某数据库的表
show tables;
详细描述某一个表
describe table_parking_toll;
删除表
drop table table_parking_toll;
删除数据库
drop databse parking_system;
退出登录
exit
pymysql数据操作
在Python中使用数据时,需要安装pymysql包进行引用,然后进行连接,再执行增删查改。
import pymysql#数据库连接登录
db = pymysql.connect(host = 'localhost', user = 'root', password = 'yangx', database = 'parking_system', port = 3306)
cursor = db.cursor() #获取游标#增
sql = """insert into table_parking_toll(id, in_time) values ('%s', '%s')"""%(str_text, cur_time)
try:cursor.execute(sql) #执行db.commit() #提交
except:db.rollback() #提交失败回退#查
sql = """select * from table_parking_toll where id = '%s'"""%(str_text)
if(cursor.execute(sql)): #查询到记录result = cursor.fetchall() #获取记录db.commit()#改
sql = """update table_parking_toll set out_time = '%s' where id = '%s'"""%(cur_time, str_text)
cursor.execute(sql)
db.commit()#关闭数据库
db.close()
web开发中的数据库操作
该项目的web开发使用的是PHP和H5,数据库使用PHP进行操作,主要是查询操作。
$con = mysqli_connect('localhost','root','yangx');
if (!$con)
{die('Could not connect: ' . mysqli_error($con));
}
// 选择数据库
mysqli_select_db($con,"parking_system");// 查询
$sql="SELECT * FROM table_parking_toll WHERE id = {$pl}";$result = mysqli_query($con,$sql);// 逐条显示记录
while($row = mysqli_fetch_array($result))
{echo $row['id'] . "<br/>";
}
代码介绍
在该项目中代码主要分为3个部分。一个是PC端代码,PC端代码又分为整个系统的运行代码以及tensorflow神经网络的训练代码;一个是web服务器代码,使用apache服务器,使用PHP嵌入H5中,H5为网页界面开发代码;一个是树莓派端socket通信的客户端代码。
下面是PC端字符识别部分的流程图
改进
完成这个项目的时间较短,项目还处于简易阶段,可以改进的地方挺多的。单从代码本身来说,可调参数的值可能影响最终效果;神经网络搭建不够好加上摄像头图片抓拍的模糊性使得识别效果不完美,因此可以改进神经网络的搭建,并且在识别之前可通过算法排除模糊的不清晰的照片;web端需要完善用户注册和登录的功能;对于车牌的定位也过于简单,仅仅靠颜色提取并不适用于停车场实际情况,也可以通过神经网络训练来进行改进;无法对多次识别到同一车辆进行有效处理。从设计来看,摄像头一直处于连续抓拍状态是对资源的浪费,可以在摄像头附近放置红外摄像头来监控是否有车辆在抓拍范围内,监控到有障碍物后再进行抓拍。暂时想到的就这么多,后续想到再补上。
最后
文章为原创,若转载请注明出处。该项目的部分代码是经别人代码修改得到,因为时间原因未找到当时下载代码的出处,若项目中部分代码侵犯了您的权益,请联系我,我一定将出处加上。如有冒犯,烦请谅解。
代码下载地址
智能停车场[简易版]相关推荐
- 停车场管理系统python_Python简易版停车管理系统
本文实例为大家分享了Python简易版停车管理系统的具体代码,供大家参考,具体内容如下 import time # 最大停车数 max_car = 100 # 当前停车数,初始为0 cur_car = ...
- mysql智能停车场,jsp357智能停车场管理系统 双数据库版 mysql
资料介绍 提 示: 电脑 先解压,暴风影音 看 电脑 先解压,暴风影音 看 电脑 先解压,暴风影音 看 论文编号: jsp357 语言+数据库: jsp+sql2008+mysql 论文字数: 125 ...
- 基于STM32单片机的智能停车场车位管理系统设计
摘 要 通过调查发现,现有的许多公共场所的停车位管理落后,智能化程度不高.为顺应现代自动化狂潮的发展趋势,本项目以STM32单片机为主控芯片,基于RFID智能识别技术,设计了一个具有IC识别的智能停 ...
- 用 Java 语言,写一个植物大战僵尸简易版!
作者 | 林Lychee 来源 | 程序员小灰 前言 有谁没玩过植物大战僵尸吗? 小灰的一位读者,用Java语言开发了自己的植物大战僵尸游戏.虽然系统相对简单,但是麻雀虽小五脏俱全,对游戏开发感兴趣的 ...
- JAVA计算机毕业设计智能停车场管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
JAVA计算机毕业设计智能停车场管理系统Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计智能停车场管理系统Mybatis+源码+数据库+lw文档+系统+调试部署 本源码技 ...
- 计算机毕业设计Java智能停车场管理系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java智能停车场管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java智能停车场管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S ...
- RFID车辆管理|RFID智能停车场管理系统应用
RFID车辆管理|RFID智能停车场管理系统应用 一.行业背景 目前停车场都是依靠人工管理的,当有车辆进出时,都需要人工控制自动伸缩门,并且每当有外来车辆出入时,管理员只能逐个登记,十分费时费力,而且 ...
- 基于微信小程序的智能停车场管理系统的设计与实现
要] 计算机网络如果结合使用信息管理系统,能够提高管理员管理的效率,改善服务质量.优秀的智能停车场管理系统能够更有效管理用户预约停车业务规范,帮助管理者更加有效管理用户预约停车,可以帮助提高克服人工管 ...
- 【计算机毕业设计】智能停车场管理系统
一.系统截图(需要演示视频可以私聊) 摘 要 本论文主要论述了如何使用JAVA语言开发一个智能停车场管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开 ...
最新文章
- 【Python】ubuntu14安装pycaffe环境:python2.7及依赖库
- bzoj 1061: [Noi2008]志愿者招募【最小费用最大流】
- 第6章 Selenium2-Java 自动化测试模型
- C++成员函数中的const修饰符
- cnn stride and padding_Tensorflow学习笔记- 模型建立与训练篇(CNN)
- 七十一、去重交换排序链表、 求链表的中间结点
- 数据库压力变大,读写分离吧
- RTMP之后,SRT与QUIC
- solr4.6本地数据提交异常
- Method Swizzle黑魔法,修改 ios 系统类库方法(转载)
- hdu 2037 今年暑假不AC (java)
- [二叉树|深搜|dfs] leetcode 404 左叶子之和
- 华为高管涉嫌受贿已被带走调查
- 强烈推荐!PPT实战技巧精华归纳,有这一篇就够啦!
- 高通Q888内核源码分析--概述篇
- 亚马逊AVS开发--树莓派3麦克风配置
- Git简明入土教程2.4万字-转自廖雪峰Git
- Linux下Socket编程一 socket 基础
- 数学建模——多元统计分析例题及程序
- 页面嵌入 微软播放器-播放控件