nrk.no

Lag din eigen trafikkstasjon, del 1

Kategorier: Forskning & Gadgets


Kva gjer du når Mesta ikkje vil byggje eit gangfelt på ei veldig trafikert strekning, berre pga. manglande statistikk?

For dei av dykk som har fulgt meg på Twitter, veit dykk nok at svaret er at du set sjølvsagt opp din eigen!

Gjennom denne serien vil eg forklare deg kva som må til for å registrere trafikkdata på ei strekning, samt korleis du kan presentere informasjonen på ein stilig måte til offentlegheita.

Introduksjon

OBS: Denne serien er antaglegvis nokre hakk meir avansert og nerdete enn det du vanlegvis er vant til å sjå på NRKbeta. Eg lovar, det skal ikkje skje for ofte. 😀

Mange vil nok lure på kvifor eg gjekk gjennom så mykje arbeid for å setje opp ein eigen trafikkstasjon.

Mine kjære svigers bur nært ei relativt trafikert strekning i Stordal, og har i årevis ergra seg over eit manglande gangfelt på strekket. Resten av vegen har tross alt gangfelt, og den er langt i frå like strak.

Dette prosjektet hadde difor som mål å gjere ein ting: Halde statistikk over kor mange biler som passerer det gitte punktet i døgnet.

Naudsynt inventar

Kabelrot, datamaskiner og kamera – nydeleg!
Kabelrot, datamaskiner og kamera – nydeleg!

For å få dette til å fungere, treng du å ha litt utstyr, samt ein god bit teknisk innsikt.
Svigerfar min er veldig teknologisk av seg for alderen, og er blant anna dagleg leiar og eigar av ein lokal breibandsleverandør.

Relatert til det kjøpte han for ei tid tilbake eit AXIS 214 PTZ IP-kamera, og dette kom veldig godt til nytte i dette prosjektet (men du treng nødvendigvis ikkje eit IP-kamera til NOK 10.000 – det er mange andre som kan gjere jobben.)

For å setje opp denne stasjonen er følgjande utstyr brukt:

  • AXIS 214 PTZ IP-kamera
  • Asus Eee PC
  • Linksys router
  • Slicehost 256 Slice (VPS)

Oppsett: IP-kameraet

AXIS 214 PTZ er eit avansert IP-kamera
AXIS 214 PTZ er eit avansert IP-kamera
Kameraet som er tatt i bruk er eit veldig solid og avansert IP-kamera, med UNIX i bunnen av systemet. Dette gjer det veldig enkelt for dei mindre teknisk handikappa av oss å justere systemet til å fungere som ønskja. Kameraet er også beregna for utendørsbruk, men i dette tilfellet har kameraet stått innendørs, og peika ut gjennom eit vindauge.

For at dette i det heile tatt skulle fungere, måtte kameraet stå på ein plass kor det enkelt kunne sjå vegen. Plasseringa vart eit vindage i husets kjellerstove.

Ei anna føreutsetnad for at dette fungerer, er at kameraet har ein bevegelsessensor. Axis 214 PTZ har ein veldig god og justerbar bevegelsessensor, som gjer det lettare å få nøyaktige målingar.

Bevegelsessensoren

Slik ser det ut når du aktiverer bevegelsessensoren ein sein kveld.
Slik ser det ut når du aktiverer bevegelsessensoren ein sein kveld.

Kameraets bevegelsessensor har mange innstillingar. Du kan skru på nattmodus ved gitte tider, stille inn objektsstorleik, sensorområde, sensitivitet og historielengde. Etter litt lesing på diverse fora fann eg ut at sensorområdet (det faktiske området sensoren observerer av biletet) bør vere så liten som mogleg, for å unngå duplikater. Objektstorleiken bør også vere minst 80% av sensorområdet, for å unngå lesing viss f.eks. eit menneske går forbi. Innstillingane vart til slutt som følgjer:

  • Sensorområde: Lite
  • Objekstorleik: 80%
  • Sensitivitet: 70%
  • Historie: 80%

Meldingfunksjonalitet

Dette er valgmulighetene du har når du oppretter en hendelse
Dette er valgmulighetene du har når du oppretter en hendelse

Dette kameraet har moglegheita til å sende ut meldinger når ein hendelse tek stad. Ved aktivering av bevegelsessensoren kan kameraet enten:

  • Laste opp biletet til ein FTP-server
  • Laste opp bildet til ein HTTP-server
  • Sende ei melding til ein TCP-server

I mitt tilfelle var det den siste som var aktuell – eg er ikkje interessert i å sjå eit bilete av kvar einaste bil, det einaste eg er interessert i er å vite kor mange biler som har passert. Dette alternativet gjev også mykje mindre bandbreiddebelastning for serverane våre. Det einaste IP-kameraet no gjer, er å sende meldinga «Ny» til serveren som har ansvaret for å formidle beskjeden vidare til serveren som var ansvarleg for lagring av informasjonen.

Serverproblemer

Dette var korleis eg trudde det skulle gjerast
Dette var korleis eg trudde det skulle gjerast

Når leverandøren av kameraet spesifikt annonserer dette som eit «IP-kamera», går eg ut i frå at det betyr at det har moglegheita til å sende beskjeder ut til verda. Whoops, feil! Kameraet har ikkje moglegheita til å prate med «hendelsesserverar» utanom det lokale nettverket. Eg er dermed nødt til å setje opp ein lokalserver som kan vidareformidle hendelsen til den faktiske serveren.

Eee PC-en blei brukt som mellomledd
Eee PC-en blei brukt som mellomledd
Eg måtte dermed finne fram min gamle Eee PC, som eg har skrevet om før her på NRKbeta, og setje den opp til å ta imot data frå IP-kameraet. For å gjere det enkelt installerte eg Twisted på maskina, og starta opp eksempelserveren med eit par små modifikasjoner. Denne lytta no etter tilkoplingar på port 8007, og sendte tilkoplinga vidare.

Serverkrav

Sjølv om dette er ganske langt ute på “bondebygda”, er det likevel ei strekning med ein del trafikk. Om det passerer 1000 biler i døgnet på den gitte strekninga, blir dette 30.000 i månaden. Dette gjer at serveren får tilsendt ganske store deler data, og å bearbeide dette set litt krav til både programmeraren og serveren.

Serveren som tek seg av bearbeidinga av denne datamengda er eit produkt frå amerikanske hostingleverandøren Slicehost, som tilbyr VPS-serverar (Virtual Private Server). Dette betyr i praksis at eg har tilgang til eit fullverdig linux-miljø kor eg kan setje opp alt sjølv, utan å vere avhengig av at leverandøren vil ha ting gjort “på sin måte”. Anbefaler forresten Slicehost til alle som er nysgjerrig på ein VPS. 🙂

Sjølv er eg ganske interessert i programmering og dataoptimalisering (…noko som eg burde vere, sidan – ja – eg lev av det), og teknologivalet mitt er gjerne deretter:

  • Ubuntu (operativsystem)
  • Apache (applikasjonsserver)
  • Nginx (reversert proxy og medieserver)
  • Python (programmeringsspråk)
  • Django (rammeverk)
  • MySQL (databaselagring)
  • memcached (datacache)

Alt av dette var allereie installert på VPS-en min, så det som måtte gjerast var å skrive applikasjonen.

Slutten på del éin

Det var alt for del éin av dette eksperimentet – no må vi vente på at kameraet får tatt nok bilete til at vi kan ta for oss den faktiske applikasjonen som tek for seg framvisninga av informasjonen vår. 🙂

19 kommentarer

  1. Spennende prosjekt. Hvordan skiller du mellom forskjellige typer trafikanter, mtp at det både gir bedre stats om du kan si hvor mange semitrailere som passerte vs hvor mange personbiler, og at du sannsynligvis ønsker å fjerne for eksempel syklister og gående fra regnestykket.

    Svar på denne kommentaren

  2. Hein Haraldson Berg

    Hehe, du hadde lurt meg en våt lørdagskveld! 😉

    Venter spent på neste del – blir spennende å se om alt fungerer som forventet. Statistikken vet jeg at du får presentert på en genial måte.

    Svar på denne kommentaren

  3. Øyvind Solstad (NRK)

    Her er et forslag til NRK og NRK Trafikk: Lag dette som et kit i samarbeid med en nettbutikk og selg det. Kanskje i en billigere variant også. Hehe.

    Og så lar dere alle som kjøper det rapportere inn til en egen nettside, ala den som Los Angeles Times har for trafikken i Los Angeles:

    latimes.com/news/traffic/la-news-traffic,1,3920785.framedurl?ctrack=1&cset=true

    I starten vil jo dette bli helt ubrukelig, med to målere i Oslo, en i Sauda og en på Lillehammer. Men så kan man koble inn de offisielle målingene fra de som har trafikkamera i byene, og etterhvert blir dette riktig brukanes.

    Svar på denne kommentaren

  4. Jesper Haug Karsrud

    Stilig, Henrik! Gleder meg virkelig til del to, håper du viser oss litt fin-fin Python- og Django-kode i den delen! Denne artikkelen fikk meg til å slenge inn RSSen til NRKBeta i NetNewsWire, håper virkelig at det kan komme flere slike artikler på denne siden, da blir jeg nok en fast leser 😉

    Svar på denne kommentaren

  5. Henrik Lied (NRK)

    Jørgen: Kameraet har dessverre ikkje moglegheita til å filtrere ut objekt som er større enn sensorområdet, så å skilje mellom lastebiler og vanlege biler er vanskeleg i samme sensor. Det hadde derimot vore mogleg å kun registrere lastebiler for seg, ved å sette objektstorleiken til 100% av eit større sensorområde på ein ekstra sensor. Men det blir fort mykje kluss – og er eigentleg ikkje så frykteleg relevant for dette prosjektet. 🙂
    Forgjengarar blir skilja ut uansett, sidan dei er for “små” til å bli registrert i sensorområdet.

    TrondA: Du har heilt rett – denne delen er slettes ikkje så vanskeleg å forstå, og den notisen hadde nok passa betre i den komande del to, kor vi skal sjå meir på sjølve koden som tek seg av bearbeidinga av informasjonen.

    Hein Haraldson Berg: Du må slettes ikkje overvurdere mine grafiske kunnskaper – det gjenstår å sjå korleis den grafiske framstillinga blir. 🙂

    Terje Reite: Du får ringje meg om nokre veker, så skal vi få til det!

    Resten: Takk for respons. 🙂

    Svar på denne kommentaren

  6. Hein Haraldson Berg

    Hein Haraldson Berg: Du må slettes ikkje overvurdere mine grafiske kunnskaper – det gjenstår å sjå korleis den grafiske framstillinga blir. 🙂

    Eneste måten jeg kom på som kunne legge litt press på deg! 😉

    Svar på denne kommentaren

  7. Ville det ikke være billigere (og evt enklere) å brukte ir-sender/mottaker med refleks på andre sida av veien for å detektere kjøretøyet? Har vært inne på tanken om å bytte noe slikt selv, men det blir fort litt arbeid å bygge slikt.

    Svar på denne kommentaren

Legg igjen en kommentar til Jesper Haug Karsrud Avbryt svar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *. Les vår personvernserklæring for informasjon om hvilke data vi lagrer om deg som kommenterer.