0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用Python识别停车位?

电子工程师 来源:lq 2019-01-29 10:30 次阅读

【导语】今天这篇文章的选题非常贴近生活。营长生活在北京,深知开车出门最怕的就是堵车和找不到停车位。记得冬至那个周末,几个小伙伴滑雪回来找了一家饺子馆吃饺子,结果七拐八拐,好不容易才找到一个停车位。看到这篇技术文章,马上就想要学习一下,分享给大家,希望有助于解决大家这个痛点问题,春节出行没准就可以用得上了。

作者通过相机结合深度学习算法,基于 Python 语言建立一个高精度的停车位的通知系统,每当有新停车位时就会发短信提醒我。听起来好像很复杂,真的方便实用吗?但实际上所使用的工具都是现成的,只要将这些工具进行有机的组合,就可以快速、简便的实现。

下面我们就开始学习整个工程流程:

分解问题

解决一个复杂的问题,首先第一步是要把问题分解成几个简单子任务。然后,针对每个子任务,运用机器学习中不同的方法来分别解决每个问题。最后把这些子任务贯穿起来,形成整套解决方案。

下面是检测开放停车位的流程图:

输入:普通摄像头采集的视频

有了输入数据后,接下来我们需要知道图像的哪一部分是停车位,而且停车位是没有人使用的。

第一步:检测视频帧中所有可能的停车位。

第二步:检测每一帧视频中的所有车辆。可以跟踪每辆车从一帧到另一帧的运动。

第三步:确定目前有哪些停车位被占用,哪些没有被占用。这需要结合第一步和第二步的结果。

最后一步:当停车位变成可用时,系统发出通知。

其实可以使用多种不同的方法来完成这些步骤。不同的方法将具有不同的优势和缺点。接下来具体来看:

一、探测停车位

相机视图如下图所示:

需要扫描图像,并得到有效停车区域,如下面黄色标识出来的位置:

一个懒办法是程序写死每个停车场的位置,而不是自动检测停车场。但是如果移动摄像机,探测不同街道上的停车位,就必须再次手动定位停车位置。这样看来这个方法一点都不好,还是要采用自动检测停车位的方法。

其中一个想法是识别停车计时器并假设每个计时器旁边都有一个停车位:

但是这种方法也有一些问题。首先,并不是每个停车位有一个停车计时器,而且我们最想先找到免费停车位。第二,知道停车计时器的位置还不能告诉我们确切的停车位置点。

另一个想法是搭建一个目标检测模型,找到在马路上画的停车位记号,就像下图标识出来的:

这种方法也有两个难点。首先,从远处看,停车位线的标志很小,很难看到,增加了识别难度;其次,道路上还有各种交通标记线,比如车道线、人行道斑马线,这也给识别增加了难度。

或许还可以换个思维方式,回避一些技术挑战。重新思考停车位到底是什么呢?无非是一个车需要停放一定时间的位置。所以我们可能根本不需要检测停车位,只要检测出长时间不动的车,并假设它们的位置就是停车位。

所以,如果我们能检测出汽车,并找出哪些车在视频帧之间没有移动,就可以推断停车位的位置。

二、在图像中检测汽车

在视频中检测车辆是一个经典的目标检测问题。有很多机器学习方法可以实现。下面列出了一些最常见的目标检测算法:

1、通过 HOG(梯度方向直方图)目标检测器检测出所有的车。这种非深度学习方法运行起来相对较快,但它无法处理汽车在不同方向上的旋转问题。

2、通过 CNN(卷积神经网络)目标检测器检测所有的车。这种方法是准确的,但是效率比较低,因为同一张图像必须扫描多次,以检测到所有的汽车。虽然它可以很容易地对不同旋转方向的汽车定向,但是比 HOG 方法需要更多的训练数据。

3、使用新的深度学习方法,如 Mask R-CNN,Faster R-CNN 或者 YOLO 算法,兼容准确性和运行效率,大大加快了检测过程。一旦有大量的训练数据,在 GPU 上运行也很快。

通常来说,我们希望选择最简单可行的算法和最少的训练数据,而不是一定要用那些流行的新的算法。基于目前这种特殊场景下,Mask R- CNN 是一个不错的选择。

Mask R-CNN 架构就是在整个图像中检测对象,不使用滑动窗口的方式,所以运行速度很快。有了 GPU 处理器,我们能够每秒处理多帧的高分辨率视频,从中检测到车辆。

Mask R-CNN 为我们提供了很多检测到的信息。大多数目标检测算法只返回每个对象的边框。但是 Mask R-CNN 不仅会给我们每个对象的位置,也会给出一个对象的轮廓,像这样:

为了训练 Mask R-CNN 模型,我们需要很多这类检测物体的图片。可以花几天的时间出去拍摄照片,不过已经存在一些汽车图像的公共数据集。有一个很流行的数据集叫做COCO(Common Objects In Context的缩写),它里面已经有超过 12000 张汽车的图片。下面就是一个 COCO 数据集中的图像:

这些数据可以很好的训练 Mask R-CNN 模型,而且已经有很多人使用过 COCO数据集,并分享了训练的结果。所以我们可以直接使用一些训练好的模型,在本项目中使用 Matterport的开源模型。

不仅能识别车辆,还能识别到交通灯和人。有趣的是,它把其中一棵树识别成“potted plant”。对于图像中检测到的每个对象,我们从 MaskR-CNN 模型得出以下 4 点:

(1)不同对象的类别,COCO 模型可以识别出 80 种不同的物体,比如小轿车和卡车。

(2)目标识别的置信度,数字越大,说明模型识别对象的精准度越高。

(3)图像中物体的边界框,给定了 X/Y 像素的位置。

(4)位图“mask”说明了边框内哪些像素是对象的一部分,哪些不是。使用“mask”数据,我们也可以算出物体的轮廓。

下面是 Python 代码,使用 Matterport 的 Mask R-CNN 的训练模型和 OpenCV 来检测汽车边框:

1importos 2importnumpyasnp 3importcv2 4importmrcnn.config 5importmrcnn.utils 6frommrcnn.modelimportMaskRCNN 7frompathlibimportPath 8 9 10#ConfigurationthatwillbeusedbytheMask-RCNNlibrary 11classMaskRCNNConfig(mrcnn.config.Config): 12NAME="coco_pretrained_model_config" 13IMAGES_PER_GPU=1 14GPU_COUNT=1 15NUM_CLASSES=1+80#COCOdatasethas80classes+onebackgroundclass 16DETECTION_MIN_CONFIDENCE=0.6 17 18 19#FilteralistofMaskR-CNNdetectionresultstogetonlythedetectedcars/trucks 20defget_car_boxes(boxes,class_ids): 21car_boxes=[] 22 23fori,boxinenumerate(boxes): 24#Ifthedetectedobjectisn'tacar/truck,skipit 25ifclass_ids[i]in[3,8,6]: 26car_boxes.append(box) 27 28returnnp.array(car_boxes) 29 30 31#Rootdirectoryoftheproject 32ROOT_DIR=Path(".") 33 34#Directorytosavelogsandtrainedmodel 35MODEL_DIR=os.path.join(ROOT_DIR,"logs") 36 37#Localpathtotrainedweightsfile 38COCO_MODEL_PATH=os.path.join(ROOT_DIR,"mask_rcnn_coco.h5") 39 40#DownloadCOCOtrainedweightsfromReleasesifneeded 41ifnotos.path.exists(COCO_MODEL_PATH): 42mrcnn.utils.download_trained_weights(COCO_MODEL_PATH) 43 44#Directoryofimagestorundetectionon 45IMAGE_DIR=os.path.join(ROOT_DIR,"images") 46 47#Videofileorcameratoprocess-setthisto0touseyourwebcaminsteadofavideofile 48VIDEO_SOURCE="test_images/parking.mp4" 49 50#CreateaMask-RCNNmodelininferencemode 51model=MaskRCNN(mode="inference",model_dir=MODEL_DIR,config=MaskRCNNConfig()) 52 53#Loadpre-trainedmodel 54model.load_weights(COCO_MODEL_PATH,by_name=True) 55 56#Locationofparkingspaces 57parked_car_boxes=None 58 59#Loadthevideofilewewanttorundetectionon 60video_capture=cv2.VideoCapture(VIDEO_SOURCE) 61 62#Loopovereachframeofvideo 63whilevideo_capture.isOpened(): 64success,frame=video_capture.read() 65ifnotsuccess: 66break 67 68#ConverttheimagefromBGRcolor(whichOpenCVuses)toRGBcolor 69rgb_image=frame[:,:,::-1] 70 71#RuntheimagethroughtheMaskR-CNNmodeltogetresults. 72results=model.detect([rgb_image],verbose=0) 73 74#MaskR-CNNassumeswearerunningdetectiononmultipleimages. 75#Weonlypassedinoneimagetodetect,soonlygrabthefirstresult. 76r=results[0] 77 78#Thervariablewillnowhavetheresultsofdetection: 79#-r['rois']aretheboundingboxofeachdetectedobject 80#-r['class_ids']aretheclassid(type)ofeachdetectedobject 81#-r['scores']aretheconfidencescoresforeachdetection 82#-r['masks']aretheobjectmasksforeachdetectedobject(whichgivesyoutheobjectoutline) 83 84#Filtertheresultstoonlygrabthecar/truckboundingboxes 85car_boxes=get_car_boxes(r['rois'],r['class_ids']) 86 87print("Carsfoundinframeofvideo:") 88 89#Draweachboxontheframe 90forboxincar_boxes: 91print("Car:",box) 92 93y1,x1,y2,x2=box 94 95#Drawthebox 96cv2.rectangle(frame,(x1,y1),(x2,y2),(0,255,0),1) 97 98#Showtheframeofvideoonthescreen 99cv2.imshow('Video',frame)100101#Hit'q'toquit102ifcv2.waitKey(1)&0xFF==ord('q'):103break104105#Cleanupeverythingwhenfinished106video_capture.release()107cv2.destroyAllWindows()

运行该脚本后,将会看到在图像中识别到的汽车和边框:

同时会得到检测的每辆车的像素坐标:

这样我们已经成功地在图像中检测到了汽车。接下来到了下一个步骤。

三、探测空车位

知道图像中每辆车的像素位置后,通过观察连续多帧视频,可以很容易地算出哪帧里汽车没有移动。但我们如何检测到汽车何时离开停车位?经观察,图像中汽车的边框部分有所重叠:

如果假设每个边界框代表一个停车场空间,这个区域即使有车开走了,但是仍可能被另外汽车部分占据。因此我们需要一种方法来测量重叠,检查出“大部分为空”的框。我们使用的度量方法称为 Intersection Over Union(IoU)。通过计算两个物体重叠的像素量,然后除以两个物体所覆盖的像素:

有了这个值,接下来就可以很容易确定一辆车是否在停车位。如果 IoU 测量值低,比如 0.15,表示汽车并没有占据大部分的停车位空间。但是如果测量值很高,比如 0.6,就表示汽车占据了大部分的停车位,因此可以确定停车位已被占用。

IoU 是计算机视觉中常用的一种测量方法,提供了现成的代码。Matterport 的Mask R-CNN 库可以直接调用这个函数 mrcnn.utils.compute_overlaps()。假设我们有一个表示停车位边界框的列表,要检识别到的车辆是否在这些边界内框很简单,只需添加一两行代码:

1#Filtertheresultstoonlygrabthecar/truckboundingboxes2car_boxes=get_car_boxes(r['rois'],r['class_ids'])34#Seehowmuchcarsoverlapwiththeknownparkingspaces5overlaps=mrcnn.utils.compute_overlaps(car_boxes,parking_areas)67print(overlaps)

结果显示为:

在二维数组中,每一行表示一个停车位边界框。同样的,每一列表示停车场被汽车所覆盖的程度。1.0 分意味着汽车完全占据了,而 0.02 这样的低分数,意味着有重叠区域,但不会占据大部分空间。

要找到无人使用的停车位,只需要计算出这个数组。如果所有的数都是 0 或者很小,也就表示空间没有被占用,因此一定是空停车位。

尽管 Mask R-CNN 非常精确,但目标检测并不能做到完美。有时也会在一段视频中漏掉一两辆车。所以在定位到一个空车位时,还应该检测在一段时间内都是空的,比如 5或10帧连续视频。这也可以避免视频本身出现故障而造成误检。一旦看到几个连续视频中都有空车位,马上发送提醒通知!

四、发送消息

最后一步是发送 SMS 提醒消息。利用 Twilio 通过 Python 发送 SMS 消息非常简单,基本上几行代码就可以实现。当然,Twilio 只是这个项目中用到的方法,你也可以用其他方式实现。

要使用 Twilio,先要注册一个试用帐户,创建一个 Twilio 电话号码并获取您的帐户凭证。然后,您需要安装 Twilio Python 客户端库:

下面是发送 SMS 消息的 Python 代码(需用自己的帐户信息替换这些值):

1fromtwilio.restimportClient 2 3#Twilioaccountdetails 4twilio_account_sid='YourTwilioSIDhere' 5twilio_auth_token='YourTwilioAuthTokenhere' 6twilio_source_phone_number='YourTwiliophonenumberhere' 7 8#CreateaTwilioclientobjectinstance 9client=Client(twilio_account_sid,twilio_auth_token)1011#SendanSMS12message=client.messages.create(13body="ThisismySMSmessage!",14from_=twilio_source_phone_number,15to="Destinationphonenumberhere"16)

在添加 SMS 发送功能时要注意,不要连续发送已经识别过的空车位信息。可以用一个 flag 来跟踪已经发过的短信,除非是设定一段时间后再次提醒或是检测到新的空车位。

五、把所有流程串在一起

现在将每个步骤集成一个Python脚本。下面是完整代码,要运行这段代码,需要安装Python 3.6+,Matterport的 Mask R-CNN 和 OpenCV:

1importos 2importnumpyasnp 3importcv2 4importmrcnn.config 5importmrcnn.utils 6frommrcnn.modelimportMaskRCNN 7frompathlibimportPath 8fromtwilio.restimportClient 9 10 11#ConfigurationthatwillbeusedbytheMask-RCNNlibrary 12classMaskRCNNConfig(mrcnn.config.Config): 13NAME="coco_pretrained_model_config" 14IMAGES_PER_GPU=1 15GPU_COUNT=1 16NUM_CLASSES=1+80#COCOdatasethas80classes+onebackgroundclass 17DETECTION_MIN_CONFIDENCE=0.6 18 19 20#FilteralistofMaskR-CNNdetectionresultstogetonlythedetectedcars/trucks 21defget_car_boxes(boxes,class_ids): 22car_boxes=[] 23 24fori,boxinenumerate(boxes): 25#Ifthedetectedobjectisn'tacar/truck,skipit 26ifclass_ids[i]in[3,8,6]: 27car_boxes.append(box) 28 29returnnp.array(car_boxes) 30 31 32#Twilioconfig 33twilio_account_sid='YOUR_TWILIO_SID' 34twilio_auth_token='YOUR_TWILIO_AUTH_TOKEN' 35twilio_phone_number='YOUR_TWILIO_SOURCE_PHONE_NUMBER' 36destination_phone_number='THE_PHONE_NUMBER_TO_TEXT' 37client=Client(twilio_account_sid,twilio_auth_token) 38 39 40#Rootdirectoryoftheproject 41ROOT_DIR=Path(".") 42 43#Directorytosavelogsandtrainedmodel 44MODEL_DIR=os.path.join(ROOT_DIR,"logs") 45 46#Localpathtotrainedweightsfile 47COCO_MODEL_PATH=os.path.join(ROOT_DIR,"mask_rcnn_coco.h5") 48 49#DownloadCOCOtrainedweightsfromReleasesifneeded 50ifnotos.path.exists(COCO_MODEL_PATH): 51mrcnn.utils.download_trained_weights(COCO_MODEL_PATH) 52 53#Directoryofimagestorundetectionon 54IMAGE_DIR=os.path.join(ROOT_DIR,"images") 55 56#Videofileorcameratoprocess-setthisto0touseyourwebcaminsteadofavideofile 57VIDEO_SOURCE="test_images/parking.mp4" 58 59#CreateaMask-RCNNmodelininferencemode 60model=MaskRCNN(mode="inference",model_dir=MODEL_DIR,config=MaskRCNNConfig()) 61 62#Loadpre-trainedmodel 63model.load_weights(COCO_MODEL_PATH,by_name=True) 64 65#Locationofparkingspaces 66parked_car_boxes=None 67 68#Loadthevideofilewewanttorundetectionon 69video_capture=cv2.VideoCapture(VIDEO_SOURCE) 70 71#Howmanyframesofvideowe'veseeninarowwithaparkingspaceopen 72free_space_frames=0 73 74#HavewesentanSMSalertyet? 75sms_sent=False 76 77#Loopovereachframeofvideo 78whilevideo_capture.isOpened(): 79success,frame=video_capture.read() 80ifnotsuccess: 81break 82 83#ConverttheimagefromBGRcolor(whichOpenCVuses)toRGBcolor 84rgb_image=frame[:,:,::-1] 85 86#RuntheimagethroughtheMaskR-CNNmodeltogetresults. 87results=model.detect([rgb_image],verbose=0) 88 89#MaskR-CNNassumeswearerunningdetectiononmultipleimages. 90#Weonlypassedinoneimagetodetect,soonlygrabthefirstresult. 91r=results[0] 92 93#Thervariablewillnowhavetheresultsofdetection: 94#-r['rois']aretheboundingboxofeachdetectedobject 95#-r['class_ids']aretheclassid(type)ofeachdetectedobject 96#-r['scores']aretheconfidencescoresforeachdetection 97#-r['masks']aretheobjectmasksforeachdetectedobject(whichgivesyoutheobjectoutline) 98 99ifparked_car_boxesisNone:100#Thisisthefirstframeofvideo-assumeallthecarsdetectedareinparkingspaces.101#Savethelocationofeachcarasaparkingspaceboxandgotothenextframeofvideo.102parked_car_boxes=get_car_boxes(r['rois'],r['class_ids'])103else:104#Wealreadyknowwheretheparkingspacesare.Checkifanyarecurrentlyunoccupied.105106#Getwherecarsarecurrentlylocatedintheframe107car_boxes=get_car_boxes(r['rois'],r['class_ids'])108109#Seehowmuchthosecarsoverlapwiththeknownparkingspaces110overlaps=mrcnn.utils.compute_overlaps(parked_car_boxes,car_boxes)111112#Assumenospacesarefreeuntilwefindonethatisfree113free_space=False114115#Loopthrougheachknownparkingspacebox116forparking_area,overlap_areasinzip(parked_car_boxes,overlaps):117118#Forthisparkingspace,findthemaxamountitwascoveredbyany119#carthatwasdetectedinourimage(doesn'treallymatterwhichcar)120max_IoU_overlap=np.max(overlap_areas)121122#Getthetop-leftandbottom-rightcoordinatesoftheparkingarea123y1,x1,y2,x2=parking_area124125#Checkiftheparkingspaceisoccupiedbyseeingifanycaroverlaps126#itbymorethan0.15usingIoU127ifmax_IoU_overlap< 0.15:128                # Parking space not occupied! Draw a green box around it129                cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 3)130                # Flag that we have seen at least one open space131                free_space = True132            else:133                # Parking space is still occupied - draw a red box around it134                cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 1)135136            # Write the IoU measurement inside the box137            font = cv2.FONT_HERSHEY_DUPLEX138            cv2.putText(frame, f"{max_IoU_overlap:0.2}", (x1 + 6, y2 - 6), font, 0.3, (255, 255, 255))139140        # If at least one space was free, start counting frames141        # This is so we don't alert based on one frame of a spot being open.142        # This helps prevent the script triggered on one bad detection.143        if free_space:144            free_space_frames += 1145        else:146            # If no spots are free, reset the count147            free_space_frames = 0148149        # If a space has been free for several frames, we are pretty sure it is really free!150        if free_space_frames >10:151#WriteSPACEAVAILABLE!!atthetopofthescreen152font=cv2.FONT_HERSHEY_DUPLEX153cv2.putText(frame,f"SPACEAVAILABLE!",(10,150),font,3.0,(0,255,0),2,cv2.FILLED)154155#Ifwehaven'tsentanSMSyet,sentit!156ifnotsms_sent:157print("SENDINGSMS!!!")158message=client.messages.create(159body="Parkingspaceopen-gogogo!",160from_=twilio_phone_number,161to=destination_phone_number162)163sms_sent=True164165#Showtheframeofvideoonthescreen166cv2.imshow('Video',frame)167168#Hit'q'toquit169ifcv2.waitKey(1)&0xFF==ord('q'):170break171172#Cleanupeverythingwhenfinished173video_capture.release()174cv2.destroyAllWindows()

这段代码写的比较简洁,实现了基本的功能。大家也可以试着修改代码以适应不同的场景。仅仅更改一下模型参数,出现的效果就可能完全不同,在不同应用中尽情发挥想象力!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8116

    浏览量

    130550
  • python
    +关注

    关注

    51

    文章

    4674

    浏览量

    83464
  • 深度学习
    +关注

    关注

    73

    文章

    5236

    浏览量

    119900

原文标题:春节停车难?用Python找空车位

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    想实现停车位的联网监控,路边停车乱象如何破?

    近年来,随着路边停车位使用率的上升,路边停车纠纷不断:就停路边打了个电话也要收费;交了停车费怎么又被交警贴了违章停车罚单;收费员不按规则乱计费;车主拒交
    的头像 发表于 08-31 10:56 2.5w次阅读

    停车位管理系统带程序及仿真

    停车位管理系统带程序及仿真
    发表于 06-02 02:16

    5天建造完成的立体停车位

    `5天建造完成的立体停车位,2台车位的面积,可停放15台车`
    发表于 10-19 14:39

    请问如何用labview来实现一个街道停车位

    本帖最后由 一只耳朵怪 于 2018-6-12 11:38 编辑 怎么用labview来实现一个街道停车位
    发表于 06-11 15:41

    FRAM助力你快速找到停车位

    厌倦了在街区或停车场兜了五个圈,只为找一个空的停车位? 您是否知道电磁传感器可能是消除您困扰的方法之一? 这些传感器可置于地上或路面下,用于检测车辆在停车位的时间。 借助这些传感器形成的系统,您可以获得空
    发表于 09-10 11:47

    毫米波雷达感应模组,智慧停车位探测技术方案,提升停车空位利用率

    ,给居民出行带来了极大的阻碍。相关数据显示,我国新建停车位发展缓慢,停车位缺口越来越大;停车位利用率极低,一个车位的全天利用率平均值在30%左右,与国际先进水平80%相差甚远。在这样的
    发表于 10-14 17:01

    怎样快速实现基于物联网技术的共享停车位联网方案?

    怎样快速实现基于物联网技术的共享停车位联网方案?
    发表于 01-18 07:33

    停车传感器是什么?智能停车场如何实现

    ,管理员可以通过它来监视和监控停车场,从而确保正确的停车管理。  智能停车传感器主要用于识别汽车的占用情况。这种接近设备通常用于简单地验证特定停车位
    发表于 11-15 17:52

    共享停车位项目商业计划书

    共享停车位项目商业计划书
    发表于 12-12 15:05 0次下载

    卡耐基梅隆大学研究人员推出一个AI系统 可实时预测停车位的占用情况

    大家都经历过这种情况:驱车数英里到达目的地却发现,所有的停车位都被占满了。虽然谷歌地图(Google Maps)等应用程序可根据历史数据,预测停车位情况,但是该方法仍具有局限性。据外媒报道,美国
    发表于 01-25 11:47 953次阅读

    特斯拉部分快充站的停车位安装智能地锁

    据外媒报道,中国特斯拉部分快充站的停车位在近日安装了智能地锁,通过这套设备可以避免燃油车占用充电车位的现象。
    的头像 发表于 01-27 10:14 8679次阅读

    2019智慧共享停车位APP解决方案开发市场如何?看完这4点你就明白了

    城市车辆的不断增多,让停车难、停车贵成为了有车一族最困扰的事。而智慧共享停车位APP解决方案开发是一款能给人们提供错时停车的APP软件。从本质上看,它确实能解决目前市面上存在的车多位少
    发表于 03-29 17:06 430次阅读

    停车位管理系统方案可以解决什么问题

    停车位管理系统是通过计算机、网络设备、车辆感知传输设备、客户终端设备等搭建的一套对停车场车辆出入、场内车流引导、车位状态信息发布、收取停车费进行管理的综合管理平台。
    发表于 06-24 11:39 1770次阅读

    创新的绿色停车位,为人们停车提供了极大便利

    近日,不少细心的市民注意到,杭州拱墅区叶青兜路边出现了一条绿色停车位,并喷有限时20分钟标志。这些绿色车位主要分布在早餐店、便利店、药店、公共厕所等附近。 设立这样的绿色限时停车位,是杭州交警部门
    发表于 07-14 13:41 1097次阅读

    浅谈物联卡/流量卡之智慧停车位

    停车位都满了,又得排着队还得慢慢的堵着出来,转了好几圈发现还是找不到停车位,眼看时间都不早了,跟人家约的时间都快到了,着急恨不得车子长着翅膀就飞出去。休息原因其实是因为停车位比较少,而且利用是不均匀
    的头像 发表于 03-12 18:06 1943次阅读