Home

Final Project Report

image

Contents

1. could not run at the same time as the Motion stream leading to our abandonment of this method OpenCV as discussed above in the Video Processing section is the open source video processing library we used in our system To include this library in our python code it needed to be compiled directly on the Raspberry Pi The compilation process drew from this example http robertcastle com 2014 02 installing opencv on a raspberry pi with our own modifications OpenCV 2 4 8 was the version we installed options we changed from the above example were including C and Python examples to get an idea of the Pi processing power Other changes included switching version numbers around to coincide with newer dependencies installed before compiling and including the QT library in case we wanted to make a GUI at any point on device Compilation took around 10 hours due to the limited processing power of the Pi and the final library size was roughly 1 6 GB Virtual desktop access was a fairly simple process when compared to OpenCV compilation but we grew to find the functionality extremely important As the Pi only has 2 USB ports and 1 is usually in use from the WiFi adaptor having a mouse and keyboard accessible at all times without swapping plugs constantly was a huge time saver The package installed on the Pi is tightVNC and once logged into the board to start the virtual desktop the command is vncserver X where X is the port number to
2. lt body gt lt html gt lt h3 gt Camera Control lt h3 gt lt button id up type button gt Up lt button gt lt br gt lt button id left type button gt Left lt button gt lt button id right type button gt Right lt button gt lt br gt lt button id down type button gt Down lt button gt File home bshenk potctest2 public js client js IlIvar socket io connect http localhost 5000 var socket io connect http potc ee nd edu 5000 socket on pong function data console log pong document ready function up click function socket emit ping1 duration 2 Hleft click function socket emit ping2 duration 2 right click function socket emit ping3 duration 2 down click function socket emit ping4 duration 2 8 3 Raspberry Pi Model B Schematic Schematic from http www adafruit com blog 201 2 10 22 raspberry pi model b revision 2 0 schematics raspberrypi raspberry pi Pi Specs CPU 700 MHz ARM1176JZF S core Video Broadcom VideoCore IV 58 OpenGL ES 2 0 1080p30 h 264 MPEG 4 AVC high profile decoder Memory 512 MB shared with GPU USB ports 2 Video Outputs Composite RCA PAL amp NTSC HDMI rev 1 3 amp 1 4 Audio Outputs 3 5 mm jack HDMI Onboard Storage SD Card Slot Networking 10 100 Ethernet RJ45 Power Rating 700 mA 5 V Dimensions 8
3. var ctx canvas getContext 2d ctx fillStyle 444 ctx fill Text Loading canvas width 2 30 canvas height 3 Il Setup the WebSocket connection and start the player var client new WebSocket ws potc ee nd edu 8085 var player new jsmpeg client canvas canvas Il Show loading notice var canvas document getElementByld videoCanvas2 var ctx canvas getContext 2d ctx fillStyle 444 ctx fill Text Loading canvas width 2 30 canvas height 3 Il Setup the WebSocket connection and start the player var client new WebSocket ws potc ee nd edu 8089 var player new jsmpeg client canvas canvas Il Show loading notice var canvas document getElementByld videoCanvas3 var ctx canvas getContext 2d ctx fillStyle 444 ctx fill Text Loading canvas width 2 30 canvas height 3 Il Setup the WebSocket connection and start the player var client new WebSocket ws potc ee nd edu 8093 var player new jsmpeg client canvas canvas Il Show loading notice var canvas document getElementByld videoCanvas4 var ctx canvas getContext 2d ctx fillStyle 444 ctx fill Text Loading canvas width 2 30 canvas height 3 Il Setup the WebSocket connection and start the player var client new WebSocket ws potc ee nd edu 8097 var player new jsmpeg client canvas canvas lt script gt lt br gt lt br gt lt br gt
4. I delay 1000 File home bshenk potctest2 public index html IDOCTYPE html html lt head gt lt meta name viewport content width 320 initial scale 1 gt lt script src js jquery 2 1 0 min js gt lt script gt lt script src js socket io js gt lt script gt lt script src js client js gt lt script gt lt title gt jsmpeg streaming lt title gt lt style type text css gt body background 555 text align center margin top 0 lt style gt lt head gt lt body gt lt h2 gt Video Surveillance lt h2 gt lt button type button gt lt a href http potc ee nd edu 3000 gt Zone Status lt a gt lt button gt lt br gt lt lt input class btn type button value Video 1 gt lt input class btn type button value Video 2 gt lt input class btn type button value Video 3 gt lt input class btn type button value Video 4 gt gt lt table align center gt lt tr gt lt td gt lt h4 gt Camera 1 lt h4 gt lt canvas id videoCanvas1 width 200 height 160 gt lt p gt Please use a browser that supports the Canvas Element like lt a href http www google com chrome gt Chrome lt a gt a href http www mozilla com firefox gt Firefox lt a gt lt a href http www apple com safari gt Safari lt a gt or Internet Explorer 10 lt p gt lt canvas gt lt td gt lt td gt lt h4 gt Camera 2 lt h4 gt lt canvas id video
5. a gt lt td gt tableContent lt tr gt Il Inject the whole content string into our existing HTML table driveby table tbody html tableContent Dr 5 Fill table with data function populateLotTable Il Empty content string var tableContent Il jQuery AJAX call for JSON getJSON zonetotal function data Il For each item in our JSON add a table row and cells to the content string each data function tableContent lt tr gt tableContent lt td gt lt a href class linkshowuser rel this zone tittle Show Details gt this zone lt td gt tableContent lt td gt this zone lt td gt tableContent lt td gt this number lt td gt tableContent lt tr gt Il Inject the whole content string into our existing HTML table lotstatus table tbody html tableContent ph Il Add User function addUser event event preventDefault Il Super basic validation increase errorCount variable if any fields are blank var errorCount 0 addUser input each function index val if this val errorCount 5 Check and make sure errorCount s still at zero if errorCount 0 Il If it is compile all user info into one object var newUser pi addUser fieldset input inputpi val dir addUser fieldset input inputdir val Il Use AJA
6. could be easily fixable with more tuning of the system through which we transmitted video which we provided purely for testing and surveillance purposes and was not used for video processing in any way We had envisioned allowing these cameras to pan and tilt in order to give the devices a degree of versatility By allowing the cameras some degree of motion the garage managers or perhaps even the algorithm itself could tune the position of the camera to best detect vehicle movement In addition we saw a system in which these cameras could serve a dual function as a crude security camera This system did not reach a level of function to be considered operational as there were issues with interfacing our board s input output pins with the servos to operate the pan tilt functionality 2 System Requirements 2 1 System Intelligence 2 1 1 Video Processing For video processing each node has to be able to receive a video of everything passing in front of the camera determine whether the passing object is a motor vehicle or non motor vehicle using edge detection and object size analysis video processing functions Also if multiple vehicles are crossing a point at the same time the processor must be able to which direction both vehicles are travelling Also the processor must be able to determine objects that stop in the zone or that move at varying speeds through the zone If the object passing is determined to be a motor vehicle t
7. Interfaces In a parking garage implementation we would display the number of spots available in each zone on a screen at the front of the parking lot We would also want to display this information to a website which we would host on our server This website should display the number of cars available in each zone so that a user can easily find a zone with available spaces The website should be optimized for mobile devices as that is the most common type of use that would access the website 2 5 Usage and installation Video input sources will be placed at entrances and exits to zones or parking garages where traffic passes through A zone is defined as any area with a limited number of ways in which to enter exit so as to be easily monitored These devices will network with a central processor which analyzes data and outputs to the display system s Installation of a system will be somewhat different for each garage as increased granularity will be provided by cutting the area in to more zones Raspberry Pi modules will have to be placed in an area where they could monitor the choke points for each zone at a range where the camera can properly view passing vehicles 2 6 Safety Considerations Our devices do not operate at voltages or currents that are considered dangerous to human users but there are safety concerns inherent in the installation of the system into the wiring system of the parking garage as that voltage or current c
8. access usually 1 After installing a VNC viewer on your own machine we used xTightVNCviewer for Ubuntu Linux the Pi desktop can be seen and interacted with exactly as if you are directly controlling it Other major modifications were tested on the Pi and discarded after it was determined they did not suit our needs or didn t work These include External USB webcam access in OpenCV Compilation and installation of video library FFMPEG Installation and configuration of ServoBlaster and RPIO packages to control servos Attempts to overclock the processor and RAM on the board Finally full schematics of the Raspberry Pi model B are included in the Appendix 3 5 Web Application and Database Setup The creation of a website was needed to display the current occupancy of a parking zone in a format that can be viewed easily from any browser whether on a laptop or mobile device Also the site would allow for the 4 video streams from the Raspberry Pi s to be viewed in real time To accomplish this a Debian Linux server on campus with a host name of potc ee nd edu was setup with 10 GB of storage space Node js was chosen as the platform for development of the web application and MongoDB was selected as the database software that would track all traffic events that would later be processed to determine occupancy Both Node js and MongoDB are relatively new tool s but are quickly growing in popularity The fact that they are both JavaScript ba
9. blob i trackassigned 1 return findNextContour i 2 blob car deltaP After determining the direction the Pi will send either a 1 or 1 as well as its ID to the database data pi 1 dir 1 data json dumps data url http potc ee nd edu 3000 adduser req urllib2 Request url data Content Type application json f urllib2 urlopen req response f read f close Finally the Pi deletes all car objects that did not find a new blob for a set number of consecutive frames as well as creates new objects for newly detected blobs k 0 for i in range len car if car i newtrackfound 1 car k car i car k ID k k k 1 elif car i invisiblecount lt 15 car k car i car k ID k k k 1 car car 0 k add new car for i in range len currentblob if currentblob i trackassigned 0 car append MovingObject k currentblob i circle 0 0 np zeros 2 np zeros 2 0 0 0 0 0 0 0 0 k k 1 reset newtrackfound for i in range len car car i newtrackfound 0 A simple block diagram of how the algorithm works is shown below Previous Frame After Each loop previous Frame Blob Objects Blobs in previous frame current frame becomes Current Frame Y current frame from previous frame Difference Image Created from subtracting Y Blob Detection maximum area Set threshold minimum distance minimum area Blob Objects Save bl
10. camera By utilizing a newer version of OpenCV or using a different video processing library we probably could have more accurately accomplished the task of vehicle detection The video processing hardware was not the only piece which we would have replaced given a bigger budget The WiFi chip we ended up using was inexpensive and the cost certainly reflected the performance of the part or lack thereof A future version of this project would have some sort of better integrated more powerful WiFi antenna which would make it easier for the project to communicate quickly and reliably over the sort of distances we could expect to see in a real size parking garage There are many additions which we would also choose to make to our product given a larger budget We would like to include more artificial intelligence in our algorithm allowing the algorithm to determine which parameters best detect vehicles across its point of view We would also like to include a security camera alternative function which would allow the management to increase the safety of their facility through the use of our system We would also foresee the addition of a backup battery system and independent lighting to assure functionality in low light power outage situations We believe that these additions and changes add more utility to our system and increase the robustness of our system 7 Conclusions The problem we set out to find a solution for is certainly one worth s
11. car j newtrackfound 1 car j circle2car j nextpos if car j circle O car j lastpos 0 lt 0 car j leftdirection car j leftdirection 1 if car j leftCounted 0 and car j leftdirection 10 car j leftCounted 1 carcount carcount 1 car j rightdirection 0 car j rightCounted 0 print carcount elif car j circle 0 car j l astpos 0 0 car j rightdirection car j rightdirection 1 if car j rightCounted 0 and car j rightdirection 10 car j rightCounted 1 carcount carcount 1 car j leftdirectionzO car j leftCounted 0 print carcount else Car j invisiblecount car j invisiblecount 1 This section iterates through each car object and attempts to find the same object in the next frame It does this by finding the closest blob along the x axis within 15 of the total frame width Next it determines the direction of motion by taking the difference between the two frames x positions If the difference is greater than 0 then the car is moving left If it is less than 0 it is moving right The function for finding the next blob findNextContour is shown below def findNextContour start blob car deltaP if len blob 0 return car blob elif start gt len blob return car blob else for i in range len blob if abs car circle 0 blob i circle 0 320 deltaP and blobl i trackassigned 0 car nextpos blobj i circle deltaP abs car circle 0 blob i circle 0 320 car newtrackfound 1 car invisiblecount 0
12. input the format is raw video and for the output it is mpeg 1video which internet browsers can see pix fmt is the pixel format which is grayscale for our purposes s is the size of the image which we were using at 200x160 r is the frame rate mpeg1video s minimum is 25 frames per second so avconv upscales this rate from the 5 at which the python program can process i is the input which we tell avconcv is coming from the linux pipe an means that no audio is encoded b is the bitrate at which we are sending the output data Finally we tell the program where to send the data which is the server port 8083 and tell it the password that the server is expecting The password is required so that no one can hijack the video stream or send data to the server that the server does not want The server listens on port 8083 for input data Once it gets data which matches the password it broadcasts the data on a websocket using port 8085 Any program that know the url and port number to listen too can then view the video feed Websockets are an internet protocol which allow for real time transfer of data without the client needing to constantly ask the server for updates This is perfect for streaming video because the server can constantly and in real time send out the video data to the client browser We also hosted the client browser site which showed all four video feeds from the four Raspberry Pi cameras This site w
13. js test path index fs readFile __dirname public path function error data if error res writeHead 500 return res end Error unable to load path res writeHead 200 Content Type text plain res end data else res writeHead 404 res end Error 404 File not found Il Web Socket Connection io sockets on connection function socket Il If we recieved a command from a client to tilt up do so socket on ping1 function data console log Tilt Up delay data duration Il Set a timer for when we should stop setTimeout function Il socket emit pong II delay 1000 H Il If we recieved a command from a client to pan left do so socket on ping2 function data console log Pan Left delay data duration Il Set a timer for when we should stop setTimeout function Il socket emit pong I delay 1000 Il If we recieved a command from a client to pan right do so socket on ping3 function data console log Pan Right delay data duration Il Set a timer for when we should stop setTimeout function Il socket emit pong II delay 1000 Il If we recieved a command from a client to tilt down do so socket on ping4 function data console log Tilt Down delay data duration Il Set a timer for when we should stop setTimeout function II socket emit pong
14. the video feeds to users who are authorized to view the feeds 3 2 System Block Diagram puenerzenzensescensessersesiencencereaze sezione III ion izz ion ez zine zz ezinio zio zionio io a Video Feed MM i Camera Box Camera Box e i y ON Raspberry Pi Board 4 Camera Display Website i Camera J Raspberry Pi Board f 4 wy EDI 4 Video Feeds IK b d And Occupancy Results Video Feeds Occupancy Data i sanata Server j i te Poster zizi pri Post Video Feed v AZ v I Post EEE MongoDB DataBase Node js Web Service ie Streaming Service i T Get Video Feed s peel Poster nnne N DOS i Camera Box Camera Box i A N i A ON i Raspberry Pi Board Camera i camera P Raspberry Pi Board fl d i b 4 Met I HI n n I II III I III III II IIIS Video Feed MSS T l Wireless Wired Park of the Covenant System Block Diagram The system block diagram shows four Raspberry Pi nodes Each can post an event to the web service which then stores that event into the database Each Raspberry Pi also sends its video feed to the server which then broadcasts that feed using websockets Users that know the correct websocket ports and password can then view the video feeds In our demonstration we bro
15. the website contained 3 separate functions that were designed to track occupancy in a few of the most common parking lot garage setups The first setup is that were each parking lot is distinct and has only one entrance exit A camera would be stationed at this one entrance for each of the parking lots and a vehicle entering the lot is recorded by sending a document to the database listing the number of the camera corresponding to the parking lot and a 1 indicating the direction A vehicle exiting the lot is recorded in the same way only with a 1 indicating the direction The total number of vehicles in each distinct parking lot is calculated by adding all the direction values corresponding to a particular lot The second setup was the one used for the final project demonstration in Stinson Remick In this setup the parking lot or other space has multiple entrances to the same space The total occupancy is computed by adding up all the direction values In this case it does not matter which camera records an event All that matters is that the Raspberry Pi is setup so that a 1 is sent when the camera tracks a vehicle or person entering a space and a 1 is sent when the camera tracks a vehicle or person exiting the space The third and final setup is slightly more involved and is well suited for a multiple floor parking garage where each zone being monitored is one floor of the garage An illustration of this setup is shown below where camera 1 i
16. 5 60 x 53 98 mm 3 370 x 2 125 in Weight 45 g 1 6 oz
17. Canvas2 width 200 height 160 gt lt p gt Please use a browser that supports the Canvas Element like lt a href http www google com chrome gt Chrome lt a gt lt a href http www mozilla com firefox gt Firefox lt a gt lt a href http www apple com safari gt Safari lt a gt or Internet Explorer 10 lt p gt lt canvas gt lt td gt lt tr gt lt tr gt lt td gt lt h4 gt Camera 3 lt h4 gt lt canvas id videoCanvas3 width 200 height 160 gt lt p gt Please use a browser that supports the Canvas Element like lt a href http www google com chrome gt Chrome lt a gt a href http www mozilla com firefox gt Firefox lt a gt lt a href http www apple com safari gt Safari lt a gt or Internet Explorer 10 like lt p gt lt canvas gt lt td gt lt td gt lt h4 gt Camera 4 lt h4 gt lt canvas id videoCanvas4 width 200 height 160 gt lt p gt Please use a browser that supports the Canvas Element lt a href http www google com chrome gt Chrome lt a gt a href http www mozilla com firefox gt Firefox lt a gt lt a href http www apple com safari gt Safari lt a gt or Internet Explorer 10 lt p gt lt canvas gt lt td gt lt tr gt lt table gt lt script type text javascript src jsmpg js gt lt script gt lt script type text javascript gt Il Show loading notice var canvas document getElementByld videoCanvas1
18. Final Project Report Park of the Covenant Rob Mustak Alex Wentzel Jack Moore Ben Shenk Bryce Persichetti DO NOD Table of Contents Introduction 1 1 Description of Competing Solutions 1 2 Park of the Covenant System Overview 1 3 Summary of Results System Requirements 2 1 System Intelligence 2 1 1 Video Processing 2 1 2 Networking 2 2 Security Camera 2 3 System Power 2 4 User Interfaces 2 5 Usage and Installation 2 6 Safety Considerations Project Description 3 1 System Theory of Operation 3 2 System Block Diagram 3 3 Operation of Video Processing Algorithm 3 4 Raspberry Pi Computer 3 5 Web Application and Database Setup 3 6 Database Querying and Occupancy Calculations 3 7 Streaming the Live Video Subsystem Integration Testing 4 1 Subsystem Testing 4 2 Meeting System Requirements User Manual 5 1 Installation 5 2 Setup 5 3 Is the System Working 5 4 Troubleshooting To Market Design Considerations Conclusions Appendices 8 1 Occupancy Website Code 8 2 Video Streaming Website Code potc ee nd edu 5000 8 3 Raspberry Pi Model B Schematic 1 Introduction Cities everywhere see issues with traffic Congestion pollution and convenience are all problems plaguing highly trafficked population centers The focus that this group chose to tackle was parking Crowded city centers struggle constantly with using most efficiently the space allocated to them for parking The parking garage design has not seen many changes s
19. X to post the object to our adduser service ajax type POST data newUser url adduser dataType JSON done function response Il Check for successful blank response if response msg Il Clear the form inputs addUser fieldset input val Update the table populateT able Il Update Lot table populateLotTable else Il lf something goes wrong alert the error message that our service returned alert Error response msg else Il If errorCount is more than 0 error out alert Please fill in all fields return false y File home bshenk potctest public stylesheets style css body padding 30px font 14px Lucida Grande Helvetica Arial sans serif background color 819FF7 h2 margin 0 0 5em 0 af color 00B7FF wrapper padding left 312px position relative driveby margin 0 0 30px 0 driveby table border collapse separate border spacing 1px background CCC driveby table th background EEE font weight 1200 padding 10px 20px text align center driveby table tbody padding 0 margin 0 border collapse collapse border spacing Opx driveby table td background ZFFF padding 5px 10px text align center lotstatus margin 0 0 30px 0 lotstatus table border collapse separate border spacing 1px background CCC lotstatus table th background EEE f
20. adcast all of the video feeds on a website hosted on our server but we could make this more secure for an actual implementation The web service also gets all the entries in the database and queries them to find the number of cars in each zone It then displays this information in a table on a website which is also hosted on our server 3 3 Operation of Video Processing Algorithm The video processing was an integral part of the project It required the detection of cars moving across the camera s field of view and being able to differentiate which direction each car was traveling This allows for an accurate count of cars in and out of each zone in a parking lot The algorithm was written in Python which is the native language used on the Raspberry Pi so we assumed we would be able to integrate the code onto the Pi easier The video processing was done through an open source computer vision library called OpenCV found here http opencv org The installation of this on the Pi will be discussed in Section 5 4 In order to properly demonstrate that video processing could be a viable solution we used a tutorial and example from MathWorks for MATLAB http Awww mathworks com help vision examples motion based multiple object tracking html This was able to give us a rough idea of the approach we should take for the algorithm The first step was to create an object that would assigned to each moving car as well as one for the current blo
21. addition the data needed to be stored in the same directory as the web application files This was accomplished by navigating to the configuration file at vim etc mongodb conf The file was edited so that the first 2 lines of code read as follows below After this modification MongoDB was restarted dbpath home bshenk potctest data rest true The beginning framework for the website was created by referencing the following sites http cwbuecheler com web tutorials 2013 node express mongo and http cwbuecheler com web tutorials 2014 restful web app node express mongodb Several modifications and additions were made to this framework with the final code viewable in the appendix Much effort was spent on editing the user js file The function shown below is included here to illustrate how Node js accesses the database J GET all the documents in the driveby collection and put into an array exports driveby function db return function req res db collection driveby find toArray function err items res json items y This function is passed the database as a parameter and is told to return data in JSON format driveby is the collection table in the database where all the events are stored The find toArray function err items command returns all documents in the collection as an array and this array is stored in items The res json items command finally sends the array as a JSON o
22. as hosted on our virtual private server The website was written in HTML 5 and used a video canvas to show the video HTML 5 can interpreted by most major internet browsers Each stream required a different port for the video feed from the Raspberry Pi and the websockets The ports that we used were the odd ports from 8083 to 8097 The browser can get the data from the server using a javascript script that is included on the website We used the javascript video interpreter we found on this GitHub depository https github com phoboslab jsmpeg We had to use linux piping and then streamed to our server which then broadcast the videos using websockets The video streams were very close to being live and all four streams could be seen in one browser window 4 Subsystem Integration Testing 4 1 Subsystem Testing As the server was being setup the main subsystems on the server that needed to be tested were between Node js and MongoDB First testing was done to confirm that Node js could read from the database which was demonstrated by creating a table on the website that displayed all the contents of the database When a document was added directly to MongoDB via an SSH connection to the server the table on the website would also show the added document The display is listed as a separate component in the block diagram because there must be testing to make sure that Node js shows the contents of the database in an understandable format Th
23. b contours class MovingObject object def __init__ self ID circle ynewtrackfound lastpos nextpos invisiblecount leftdirection rightdire ction leftCounted rightCounted self circle circle self newtrackfound newtrackfound self lastpos lastpos self nextpos nextpos self invisiblecount invisiblecount self leftdirection leftdirection self rightdirection rightdirection self leftCounted leftCounted self rightCounted rightCounted class Blob object def init self distance circle size trackassigned self distance distance self circle circle self size size self trackassigned trackassigned Next the blob detection object was created The tutorial for this we found here http nbviewer ipython org github mantaraya36 201A ipython blob master Computer 20vision ipynb set the blob detection parameters params cv2 SimpleBlobDetector_Params params minDistBetweenBlobs 5000 0 params filterByInertia False params filterByConvexity False params filterByColor False params filterByCircularity False params filterByArea True params minArea 75 0 params maxArea 500 0 params minThreshold 40 blobdetect cv2 SimpleBlobDetector params The important things to note are minDistBetweenBlobs being set to 5000 Because of the chokehold that the Pi placed on the processing power we had trouble correcting the problem when a the algorithm would see multiple blobs on a single person We set this parameter high to mitigat
24. bject The array can then be displayed on the on the webpage to show the contents of the database in a much more visually appealing format The function below demonstrates the part of the code located in the global js file This code segment is the beginning of the populateTable function Fill table with data function populateTable Il Empty content string var tableContent Il jQuery AJAX call for JSON getJSON driveby function data The final line of code segment shown above is where the JSON is received after it was sent by the previous function discussed The code goes on to actually add data to an html table that was created and formatted in the index jade file For each item in the JSON object a table row and the appropriate number of cells are added The final website showing occupancy of a zone and the event log making up the database is shown below The occupancy and event log is updated on each page refresh Zone Number Stinson 44 Camera Direction Timestamp RESET 37 Fri May 02 2014 16 42 49 4 1 Fri May 02 2014 16 43 11 4 1 Fri May 02 2014 16 43 14 3 1 Fri May 02 2014 16 44 01 1 1 Fri May 02 2014 16 44 03 1 1 Fri May 02 2014 16 44 05 1 1 Fri May 02 2014 16 44 17 2 1 Fri May 02 2014 16 44 32 1 1 Fri May 02 2014 16 44 43 1 Fri May 02 2014 16 46 33 1 1 Fri May 02 2014 16 46 34 4 1 Fri May 02 2014 16 46 50 3 6 Database Querying and Occupancy Calculations The user js file of
25. btnAddLeft Left Il addRight Il button btnAddRight Right Il Left amp Right h9 addDown II button btnAddDown Down Il Down Il WRAPPER File home bshenk potctest views layout jade doctype html html head title title link rel stylesheet href stylesheets style css body block content lt script src http ajax googleapis com ajax libs jquery 2 0 3 jquery min js gt lt script gt lt script src javascripts global js gt lt script gt File home bshenk potctest routes index js E GET home page n exports index function req res res render index title Park of the Covenant File home bshenk potctest routes user js JE GET driveby page exports driveby function db return function req res db collection driveby find toArray function err items res json items y GET zone total exports zonetotal function db return function req res F Il Il Individual parking lots with one access point Il db collection driveby count pi 1 dir 1 function err pi1Positive db collection driveby count pi 1 dir 1 function err piNegative db collection driveby count pi 2 dir 1 function err pi2Positive db collection driveby count pi 2 dir 1 function err pi2Negative db collection driveby count pi 3 dir 1 function err pi3Positive db collection drive
26. btract the occupancy in zone from the capacity in each zone to get the spots available in each zone All of this happens in real time so there is little latency between when the Raspberry Pi module sees the motion and when the website displays the updated count Along with sending the motion detection data we also send each frame that the video processing program sees to the server which then broadcasts the video for security purposes For an actual parking lot implementation this would be an optional subsystem and would only be used if the parking lot had reliable wireless internet capable of sending multiple video feeds The end user of the security footage would likely be a security guard for the parking lot At each frame we pipe the video frame data out of the processing program to the command line where the AVCONVERTER program converts the image to a usable video format then sends the data to a listening port on our server The server gets this information and then broadcasts the video feed using websockets We broadcast the video from the server rather than the Raspberry Pi because if multiple users tried to directly access the video feed from the Raspberry Pi the processing unit of the Raspberry Pi would become overwhelmed and slow down considerably We host the website that shows the video feeds on our server so that anyone with access to the internet can view the video feeds In an actual parking lot implementation we would only broadcast
27. by count pi 3 dir 1 function err pi3Negative db collection driveby count pi 4 dir 1 function err pi4Positive db collection driveby count pi 4 dir 1 function err pi4Negative pi1 Count pi1Positive pif Negative pi2Count pi2Positive pi2Negative pi3Count pi3Positive pi3Negative pi4Count pi4Positive pi4Negative var items zone 1 number pi1 Count zone 2 number pi2Count zone 3 number pi3Count zone 4 number pi4Count res json items ki Il Il One parking lot with one multiple access points Il db collection driveby distinct dir pi RESET function err initial db collection driveby count pi 1 dir 1 function err pi1Positive db collection driveby count pi 1 dir 1 function err pi1Negative db collection driveby count pi 2 dir 1 function err pi2Positive db collection driveby count pi 2 dir 1 function err pi2Negative db collection driveby count pi 3 dir 1 function err pi3Positive db collection driveby count pi 3 dir 1 function err pi3Negative db collection driveby count pi 4 dir 1 function err pi4Positive db collection driveby count pi 4 dir 1 function err pi4Negative initial initial 0 pi1Count pi1Positive pi1Negative pi2Count pi2Positive
28. ct like a human based off of the size of the object that it detected moving Then it keeps track of the moving object s position over several frames to determine the direction that the object is moving Whenever the video processing program determines that an object has either entered or exited the zone it sends an HTTP post to a web service that is continuously listening for posts on an external virtual private server The post contains 2 fields the id of the Raspberry Pi node and the direction that the motion was determined to be going If the motion was in a direction that was exiting the zone a 1 is sent for direction If the motion is in a direction that was entering the zone a 1 is sent The database also attaches a timestamp to each entry so that total traffic could be queried over a certain amount of time Once the web service receives the post from the camera it sends the information it received to the database The web service also contains a get all function which can get all of the entries into the database The web service gets all of the entries and calculates how many cars are in each zone by using the data that was sent from the individual nodes Section 5 6 explains more in depth how the database is queried to calculate the number of cars in each zone A website hosted on the same server then displays the occupancy information that the web service calculated If we had a parking lot where we knew the capacity we could just su
29. e this as the generated blobs would be too far apart to be a single person This did however make detecting multiple people crossing at the same time more of an issue but we felt this was less frequent than the other problem The minimum and maximum area are set here for the detection of persons in our demonstration however this could be changed accordingly depending on the size of a moving car or for the tracking of other objects Capture frame by frame ret frame cap read frame cv2 cvtColor frame cv2 COLOR BGR2GRAY color_image cv2 GaussianBlur frame 0 0 19 cv2 accumulateWeighted frame accum 0 320 difference cv2 absdiff frame accum astype np uint8 keypoints blobdetect detect difference This section captures the current frame and creates a difference image using the background from the previous frame It then detects all of the blobs and saves them in the variable keypoints currentblob Blob 0 np zeros 2 0 0 len keypoints i 0 for kp in keypoints draw the circles and set the center points to the currentblob method cv2 circle difference int kp pt 0 int kp pt 1 int kp size 255 0 0 1 currentblobl i circle 0 int kp pt 0 currentblob i circle 1 int kp pt 1 i i 1 Next the currentblob object is set to all of this frame s detected blobs for easy use for j in range len car car j lastpos car j circle car j currentblob findNextContour 0 currentblob car j 15 if
30. event and what the event was The same web service must then place all of these events into a database The Database should be able to store a very large amount of events Another web service must be able to query the database to determine the number of cars in each zone 2 2 Security Camera Another function of our system besides tracking cars is that it can be used as a security camera system Because we are already taking video of strategic choke points in a parking garage we could also send this video to an end user such as a security guard In order to do this we must send the video that the processing algorithm is seeing to the server which can then broadcast it to users who are authenticated to view it The security feed should be at a high enough resolution and frame rate so that a human user could identify individuals The system also should stream the video as close to live as possible so that security personnel have an accurate idea of what is going on in the parking garage 2 3 System Power The Raspberry Pis and can be powered from the wall outlets that would be standard inside any parking garage The Raspberry Pis require 5 V to run but they re power supply converts the 120 V AC to 5 V DC required to run The camera and Wi Fi dongle are all powered from the Raspberry Pi board If necessary we could also power the Raspberry Pi with 5 V batteries but this would require changing or recharging the batteries intermittently 2 4 User
31. h facility Oftentimes a garage will use this information in a binary fashion through a red green availability indicator light or the like to indicate parking spot vacancies This method of solution means that if a 10 story parking garage containing 500 spaces has 498 spaces the customer is left with the fatiguing task of locating that spot making it less likely that driver will bother going to that garage again to find parking This information is not granular enough to information useful enough to fit the expectations of today s tech enabled consumer There is an alternative that some garages have utilized in the form of spot by spot occupancy monitoring these parking garages go to great lengths to install sensors in each spot that allows them to determine the presence of cars above each individual spot This method often leads to a consumer being able to determine which 1 spotina row of 20 is available to them The shortfall of this approach is the cost often involving actually altering the existing structure through boring holes for sensors networking those sensors together purchasing infrastructure for each individual spot and maintaining the large and complex system The relative benefit of this type of system does not make up for the prohibitive cost of installation and maintenance 1 2 Park of the Covenant System Overview The solution that Park of the Covenant has embraces a middle of the road solution Rather than telling a consumer wh
32. he number of open spots in each zone 5 3 Is the System Working It is very simple to tell if the system is functioning correctly since it will be set up to detect only vehicles and not people if you walk in front of a module you will not be counted and you can see that with the database display If a car drives into the zone the count will increase by 1 going back down if that vehicle leaves the zone or staying the same if the car parks If the video surveillance feature is active in your parking structure you should be able to see the system working in real time at each zone feeding all information to the central database 5 4 Troubleshooting If the system is not functioning correctly as described above the user has a few simple troubleshooting options to attempt 1 Reboot each module by remote SSH using the IP address given to you and the password raspberry Once in type the command sudo reboot 2 Reset the database take count of all the vehicles in the zone and reset the database to this value using the commands listed below after logging into the server via SSH mongo use potc db driveby remove db driveby insert pi RESET dir XX Replace XX by the number of vehicles you want to reset the zone to 3 Reset the cameras sometimes when there is heavy motion activity the surveillance camera functionality begins to distort so SSH into the raspberry pi and type the command python FinalProgram py a
33. hen the video processing system needs to determine the direction in which the motor vehicle is moving To do this the algorithm must be able to determine whether an object is the same object through multiple frames Also if instead people are to be tracked inside a certain area the parameters should be adjustable so that people can be tracked instead of cars If the system is tracking people it must be able to determine how many people are passing whether they are moving in opposite directions or the same direction To be effective the algorithm must be able to make these calculations whether the people passing are close in proximity or far apart from each other In order to accomplish this the camera and processor must be able to handle an adequate resolution and frame rate A higher frame rate allows for more accurate determinations of motion A higher resolution allows for more determination of whether there are multiple objects moving in the camera s field of view as there will be more pixels between different moving objects so the parameters to detect objects can be more finely tuned The larger the image is and the faster the frame rate the more processing power is required 2 1 2 Networking In order to determine how many cars are in each zone we also need to network the different processing units Each Raspberry Pi node must communicate to a central server via a post to a web service which tells the web service which pi saw an
34. ich specific 3 spots in 20 are vacant with a system cost of 400 per spot we think it more appropriate from a cost benefit perspective to be able to tell you that out of 20 given spots there are 3 available By guiding the driver to a zone of available spots the consumer can be given information as to where to find the spot for a tenth of the cost of a slightly more granular information system The way in which we have chosen to provide the consumer with this information is through isolating zones of occupancy through monitoring choke points in and out of each zone By counting incoming and outgoing cars in each zone this system can provide as granular an approach as is needed by isolating smaller or larger zones Through utilizing mounted cameras and video processing we can intelligently determine the presence and motion of vehicles entering or leaving an area of a parking facility Although less granular than monitoring each spot individually through this sensor method the consumer can still be provided with an acceptably complete picture of the total availability of parking spots within the entire garage In addition to just gathering information Park of the Covenant also set out to come up with a simple way in which these devices could be networked together in order to provide a complete picture of our data to the consumer Our design had our devices connected through a WiFi connection wherein the video processing happened p
35. ince its invention but one major change that has taken hold to some degree is giving people the opportunity to best understand the occupancy of the garage and therefore the availability of parking Parking garage managements do a serviceable job of instituting systems which serve their needs of monitoring traffic in and out of their parking garage Counting the number of transactions in and out of the entrances and exits of a facility allows for accounting of the number of cars in and out of the garage at any one time but does not excel at serving the needs of the consumer In the current model for most parking facilities information gathered is not distributed to the consumer in fact the systems are often not designed to benefit the consumer to any significant degree Many of the modes of transportation that compete with parking structures serve their customer by providing highly detailed information on availability In New York City alone a commuter can find apps for Citibike the subway system or Zipcars to help them gather options as to the availability of these methods of transportation Driving one s car has less utility if the average driver has to search locally for a parking garage with availability then has to further search each garage for an available spot 1 1 Description of Competing Solutions The form of solution or lack thereof that many parking garages pursue takes the form of maintaining a total count of the occupancy of eac
36. is integration was tested by viewing the website on multiple computers and on various ND networks In addition mobile devices were successfully able to pull up the website for both the occupancy results and the video streams The successful integration between the pi cameras and the server was confirmed by sending all 4 video streams to potc ee nd edu 5000 and viewing these streams in real time The server listens for the streams on 4 separate ports and then broadcasts the streams Camera mounting orientation could also be tested by viewing these streams 4 2 Meeting System Requirements The testing showed that the camera feed could be both processed on the Raspberry Pi s and sent to a streaming service simultaneously This satisfied the requirement of having a security camera system where multiple areas can monitored on one screen by a security guard This also met the requirement that all the Raspberry Pi s be networked to one central server The program processing the camera feed on the Raspberry Pi could access Node js on the server which in turn could access MongoDB This satisfied the requirement of being able to log all traffic events in a database The final website met the requirement that the user interface display the occupancy of the zone s This information is also easily viewable on a mobile device which adds convenience for users 5 User Manual 5 1 Installation Installing our system in your own parking structure is si
37. json app use express urlencoded app use express methodOverride app use app router app use express static path join __dirname public an Il development only if development app get env app use express errorHandler app get routes index app get driveby user driveby db app get zonetotal user zonetotal db app post adduser user adduser db http createServer app listen app get port function console log Express server listening on port app get port D File home bshenk potctest package json name application name version 0 0 1 private true scripts start node app js ependencies express 3 5 1 jade mE mongodb ge mongoskin File home bshenk potctest views index jade extends layout block content n1 title Wrapper wrapper h1 Occupancy lotstatus table thead th Zone th Number tbody Lot Status ADD Event h2 Add Event addUser I fieldset Il inputZinputpi type number placeholder pi Il inputZinputdir type number placeholder dir I br II button btnAddUser Add Event I br II br I br II ADD USER Il driveby h2 Event Log driveby table thead th Camera th Direction th Timestamp Ilth Delete tbody Il Parking Status Il driveby h2 Test Buttons addUp II button btnAddUp Up Il Up h9 II addLeft II button
38. mple provided you have the necessary infrastructure in place A strong WiFi connection is recommended if taking advantage of the surveillance option if not any wireless network connection should work fine as long as it is reliable First the optimal choke points of your structure should be determined a POTC representative will help you in this process Once these points are established a node setup consisting of our processing board camera and WiFi chip should be deployed at each location Before the system is in place IP addresses of the various nodes will be determined by temporarily connecting a display to each module and these IP addresses will be sent to you Our servers will be configured for your structure configuration and the web addresses and credentials will be sent to you for viewing of the database and live surveillance streams 5 2 Setup Once the system is in place and all the IP addresses of the Pi s are known the processing code of each module will be tweaked Depending on such factors as the distance from the camera to the target zone size and foot traffic parameters in the motion detection code will be changed to fit your specific configuration for optimal performance Once these parameters are set the system will be tested and individual nodes may be tweaked again Current zone occupancy will be noted and input into the database and then the system will begin functioning indefinitely counting and displaying t
39. ng of Ethernet cable or WiFi Compiled and installed OpenCV video processing library Installed PiCamera library to allow Python OpenCV access to camera Installed VNC server on Pi to allow for remote virtual desktop access Installed AVconv package to stream video to server through websockets while encoding Removed Motion library Connected to WPA2 WiFi NDsecure with PEAP authentication Some of these modifications were trivial connecting to SDNet installing packages and this documentation will not cover the methods utilized However configuration of Motion compilation of OpenCV and virtual desktop access will be discussed below Motion http www lavrsen dk foswiki bin view Motion was the video streaming solution for our system until the piping method through AVconv was developed as documented in section 5 7 After installing the package the program was configured based heavily from this http www instructables com id Raspberry Pi as low cost HD surveillance camera ALLSTEPS tutorial with our own tweaks Framerate and resolution were adjusted for streaming as close to live as possible and the video was sent to a local IP address in MJPEG format viewable on the local network as long as you were in a browser that supported MJPEG we used Firefox This stream was suitable for our implementation at the time but as we discovered only one program could access the Pi camera at a time which meant that the video processing algorithm
40. nt right past camera 4 Total amount of cars that went left past camera 4 3 7 Streaming the Live Video On the Raspberry Pi only one program can access the video feed at one time OpenCV also does not have any built in functionality to send the video feed to a server or website So to get the video feed for the security camera purposes we had to pipe each frame out of the python program that was running on the Raspberry pi to a program called avconv which can convert the raw video from the python program to an mpeg1video which web browsers can display In the python program after we convert the camera image to grayscale we pipe out the video using the following command sys stdout write image tostring Here is the grayscale image from the camera which the python program will process using OpenCV libraries What this line does is sends the video to the Linux command line of the Raspberry Pi Then in order to stream the program we start the video processing program from the Raspberry Pi s command line using the following command python FinalProgram py avconv f rawvideo pix_fmt gray s 200x160 r 5 i pipe 0 an f mpeg1video b 600k r 25 http potc ee nd edu 8083 secret 200 160 Here is the linux pipe symbol which means the output from one program is the input to another Here the other program is avconv whose documentation can be found at http libav org avconv html f means format for the
41. obs detected in each frame Blob Comparer gt Match blobs from current frame to previous frame Motion Detector If blobs are matched for previously determined determine direction of motion en p number of frames Post to Database Post direction and raspberry pi ID to database 3 4 Raspberry Pi Computer The Raspberry Pi platform was chosen as our main hardware device The main advantage of this platform was being an inexpensive versatile ready designed device which allowed us to concentrate on the main subsystems of our project Video Processing and Server Operations rather than spend significant time designing and constructing our own boards The hardware included in each system node consisted of 1 Raspberry Pi Model B 1 Raspberry Pi camera module 1 WiFi usb adapter 1 5V MicroUSB wall power supply A large amount of effort went into configuring the Raspberry Pi and getting it to work the way we wanted for our project Thanks to its open source community of developers and hobbyists many of the tasks we wanted to accomplish had been done in whole or in part From our initial fresh install of the Raspbian OS this is a list of our major modifications in use in the final Pi iteration Enabled WiFi and connected to a network with WPA encryption SDNet Installed and configured Motion software our first live streaming solution Modified network interfaces to allow hotswappi
42. olving Any city dweller with a driver s license can testify to the headache caused by having to scour and scan a parking garage to find the one open space all the while eating up and being charged for precious time We believe that any customer driven business can benefit from decreased frustration necessitating some sort of system to make parking easier but these businesses need not pay extravagant amounts of money implementing extra granular occupancy monitoring systems but can make their customers lives simpler by implementing our system A tunable algorithm that can easily process a camera feed sending data digitally to the customer can easily speed up flow of traffic decrease customer frustration and ultimately increase the success of a parking structure 8 Appendices 8 1 Occupancy Website Code potc ee nd edu 3000 File home bshenk potctest app js JE Module dependencies var express require express var routes require routes var user require routes user var http require http var path require path Il Database var mongo require mongoskin var db mongo db mongodb potc ee nd edu 27017 potc native_parser true var app express Il all environments app set port process env PORT 3000 app set views path join __ dirname views app set view engine jade app use express favicon app use express logger dev app use express
43. ont weight 1200 padding 10px 20px text align center lotstatus table tbody padding 0 margin 0 border collapse collapse border spacing Opx lotstatus table td background FFF padding 5px 10px text align center userlnfo width 250px position absolute top 0 left 0 userlnfo p padding 15px border 1px solid CCC background rgba 80 120 255 0 05 fieldset border 0 padding 0 margin 0 8 2 Video Streaming Website Code potc ee nd edu 5000 The following code does not include some of the much larger files that were necessary for the application to run properly These other files that are not listed here did not require modification and can be found at https github com jaredwolff nodejs websocket example File home bshenk potctest2 app js var app require http createServer handler io require socket io listen app url require url fs require fs app listen 5000 Il Http handler function function handler req res Il Using URL to parse the requested URL var path url parse req url pathname Il Managing the root route if path index fs readFile __dirname public index html function error data if error res writeHead 500 return res end Error unable to load index html res writeHead 200 Content Type text html res end data Il Managing the route for the javascript files else if A
44. ould possibly be considered dangerous to humans so caution should be exercised in the installation of our system Other safety concerns involve the distraction of drivers in the garage the system cannot pose as a significant distraction to drivers To avoid this the information display will be placed in a location where drivers will have to be stopped in order to see it at a location such as an entry gate or other speed inhibiting choke point This will prevent any traffic incidents due to driver distraction caused by our system We cannot stop drivers from looking at the website when they are driving but hope that they only access it when they are at a stop We hope that this website is no more distracting than any navigational system that they would be using The information that the user sees would not be complex so it would not take long to process and would not be a major distraction The system sensors will also be placed in locations that are inconspicuous and will not have to be avoided by drivers and will not cause any sort of noises or output any light signal which could be distracting to drivers passing the system sensors 3 Project Description 3 1 System Theory of Operation In designing our system we decided that the information of which precise parking spots are available is not much more useful than knowing how many spots are available in a certain area The figure below shows an example of this Knowing which two spots are a
45. p track of servo commands Il var verPosition 0 Il var horPosition 0 var d var date Il DOM Ready document ready function Il Populate the driveby table on initial page load populate T able Populate the lotstatus table on initial page load populateLotTable Il Add User button click btnAddUser on click addUser Il Add Up botton click Il btnAddUp on click addUp Il Add Down button click Il btnAddDown on click addDown Il Add Left button click Il btnAddLeft on click addLeft Il Add Right button click Il btnAddRight on click addRight D Functions Fill table with data function populateTable Il Empty content string var tableContent Il jQuery AJAX call for JSON getJSON driveby function data Il For each item in our JSON add a table row and cells to the content string each data function tableContent lt tr gt IltableContent lt td gt lt a href class linkshowuser rel this pi title Show Details gt this pi lt td gt tableContent lt td gt this pi lt td gt tableContent lt td gt this dir lt td gt d new Date parselnt this id toString slice 0 8 16 1000 date d toString slice 0 24 tableContent lt td gt date lt td gt IltableContent lt td gt lt a href class linkdeleteuser rel this id gt delete lt
46. pi2Negative pi3Count pi3Positive pi3Negative pid Count pi4Positive pi4Negative totalCount pi1Count pi2Count pi3Count pi4Count var items zone Stinson number initial totalCount res json items p D D y Il Il Parking garage with multiple levels and one access point between levels Il db collection driveby count pi 1 dir 1 function err pi1Positive db collection driveby count pi 1 dir 1 function err piNegative db collection driveby count pi 2 dir 1 function err pi2Positive db collection driveby count pi 2 dir 1 function err pi2Negative db collection driveby count pi 3 dir 1 function err pi3Positive db collection driveby count pi 3 dir 1 function err pi3Negative i db collection driveby count pi 4 dir 1 function err pi4Positive db collection driveby count pi 4 dir 1 function err pi4 Negative pi1 Count pi1Positive pi1 Negative pi2Count pi2Positive pi2Negative pi3Count pi3Positive pi3Negative pid Count pi4Positive pi4 Negative zone1 Total pi1Count pi2Count zone2Total pi2Count pi3Count zone3Total pi3Count pi4Count zone4Total pi4Count var items zone 1 number zone1 Total zone 2 number zone2T otal zone 3 number zone3T otal zone 4 h
47. rior to transmission of data allowing for a simpler WiFi subsystem to be put in place than would be needed to stream video from multiple devices By doing processing at the camera side we can send a very simple packet of information to the user which can be integrated with a database containing information of the parking garage s layout By querying the database from a website or mobile application any customer can easily access the availability data from anywhere This information can also be used at the garage level to guide drivers to spots within the structure allowing them to decrease congestion and speed up transit time and decrease frustration at a cost that is accessible to any parking facility management 1 3 Summary of Results We set out to design a system that could accurately determine traffic left and right across the field of view We created a system of 4 video processing nodes and used them to monitor traffic in and out of the area where the senior design projects were being presented in order to indicate the occupancy of the poster session area We developed an algorithm that could be tuned to detect objects of varying size which allowed us to tune it to the human traffic that was passing across its field of vision during our live test We then networked the cameras together over WiFi to send the information to our server and database allowing us to analyze the information and display it on a web accessible table indicating occ
48. s located at the main floor entrance camera 2 is located at the ramp between floors 1 and 2 and the following cameras are located between the remaining floors Camera 3 Camera 4 Theory of Operation Whenever a car passes a camera the raspberry pi computer sends to the database the id of the camera and which direction the camera detected motion A 1 corresponds to motion right or entering the zone while a 1 corresponds to motion left or leaving the zone The database stores each entry and also timestamps the entry Total Quantity in Each Zone The total amount of cars is calculated by totaling the amount of cars that entered a zone minus the amount of cars that left a zone For each zone this corresponds to Zone 1 Total amount of cars that went right past camera 1 Total amount of cars that went left past camera 1 Total amount of cars that went left past camera 2 Total amount of cars that went right past camera 2 Zone 2 Total amount of cars that went right past camera 2 Total amount of cars that went left past camera 2 Total amount of cars that went left past camera 3 Total amount of cars that went right past camera 3 Zone 3 Total amount of cars that went right past camera 3 Total amount of cars that went left past camera 3 Total amount of cars that went left past camera 4 Total amount of cars that went right past camera 4 Zone 1 Total amount of cars that we
49. sed made for simpler integration Using SSH to access the server Node js version 0 10 16 and Express were first installed on the server following the instructions as seen in the link below The section regarding the installation of Socket io was skipped https www digitalocean com community articles how to install express a node js framework and set up socket io on a vps The website created through these instructions is listening on port 3000 Later on our final website continues to be viewable on the ND network on port 3000 at potc ee nd edu 3000 After logging into the server and navigating to the desired project directory the web application is started with the following commands nvm use 0 10 16 node app js Once the application development was coming to a close we needed to have the web application running even when we were not logged into the server The following commands were used to install the necessary software run an app indefinitely and stop it npm install forever g forever start app js forever stop app js MongoDB version 2 4 9 was then installed following the instructions at http docs mongodb org manual tutorial install mongodb on debian To use MongoDB the commands issued to access the created database are mongo use potc Because the database needed to be always accessible to the Raspberry Pi s that would access it through the server the REST interface needed to be enabled In
50. umber zone4 Total res json items D bs POST to adduser exports adduser function db return function req res db collection driveby insert req body function err result res send err null msg 3 msg err Vi POST up button event 3 J exports addup function db return function req res db collection driveby update ver exists true req body function err result res send err null msg msg err y exports adddown function db return function req res db collection driveby update ver exists true req body function err result res send err null msg msg err y exports addleft function db return function req res db collection driveby update hor exists true req body function err result res send err null msg msg err y exports addright function db return function req res db collection driveby update hor exists true req body function err result res send err null msg 3 msg err y pi File home bshenk potctest public javascripts global js Il driveby data array for filling in info box var drivebyData Il lotstatus data array for filling in info box var lotstatusData Il counter to kee
51. upancy and recent activity in the system There were some shortfalls in the system when applied to a real application such as the one we set out to tackle The video processing algorithm would sometimes fail to process motion in either direction across its field of view leading to unaccounted traffic and inaccuracies in our measurements We found that the system is somewhat sensitive to placement and tuning and that the algorithm was somewhat difficult to adapt to a specific location through tuning the specific parameters of the algorithm which lead to some inaccuracy in measurement Our one camera that did operate well was placed differently from the other three in that it had a wider field of view and more opportunity to pick up moving objects crossing in front of it In addition to this the algorithm itself has some shortfalls In a parking garage environment one can expect to have some degree of crossing and obstruction where one car passes in front of another or when two cars pass each other in opposite directions In our testing we found that the developed algorithm could sometimes accomplish the task of detecting objects moving in this fashion but it was not quite as accurate as we had hoped it to be Other errors although minor that we encountered were some issues in transmitting images to our server from the cameras The video feeds experienced glitches at times that we did not foresee prior to the day of our testing and we expect
52. vailable is no more useful to the user than knowing that two of those ten spots are available So the best way to determine how many spots are available in any given zone is to set up choke points at the beginning and end of each zone in order to monitor traffic in and out of each zone If we can calculate how many cars entered and exited any zone then we can determine the total occupancy of any zone If we know the capacity of each zone then we can determine the number of parking spots available in a zone by subtracting the occupancy from the capacity The goal of the system then is to determine the occupancy of any zone by monitoring the choke points of each zone To accomplish this we place a Raspberry Pi computer and a Raspberry Pi camera at the entrance and exit of each zone The camera is placed in a position that it can capture all of the motion in both directions past the choke point it is monitoring The camera then will see any motion past it The Raspberry Pi computer is constantly running a video processing algorithm that detects motion in the video feed of the camera The reason that we decided to do the processing locally rather than on an external server is that we are not confident that most parking lots would have the wireless capabilities to stream multiple video feeds at high enough resolutions to accomplish our goals If the video processing algorithm detects motion it determines whether it is a car of some other obje
53. vconv f rawvideo pix_fmt gray s 200x160 r 5 i pipe 0 an f mpeg 1video b 500k r 25 http potc ee nd edu XXXX secret 200 160 Replace the XXXX with the port number you are streaming to 8083 for zone 1 8087 for zone 2 8091 for zone 3 and so on 4 If these methods do not solve your problem first make sure all modules are still intact and have power running to them and if so contact a POTC representative the detection algorithm parameters may need to be changed or a module may have physically failed 6 To Market Design Considerations Due to budget and time constraints our group was not able to provide a product which we could consider to be market ready There are some vital changes we would make to our parts processes and design before taking it to market We found that a large shortfall in our solution was the bottleneck posed by video processing through the Raspberry Pi board The inexpensive Linux platform hamstrung the rate at which the algorithm could process frames of the live video meaning that the algorithm had less of an opportunity to detect movement in front of it A market ready version of this product would absolutely feature a more powerful method of video processing which would give us more power to do the various processes we would like to do In addition we would probably pursue an alternate form of video processing algorithm to accomplish the task of detecting vehicle motion across the

Download Pdf Manuals

image

Related Search

Related Contents

ND80ZⅢ 附属CDROM取扱説明書 附属CDROM取扱説明書  ( 4 in 1) USER MANUAL LED BAR  

Copyright © All rights reserved.
Failed to retrieve file