• No results found

Realtid. eda040project2010 MANUAL. - Christoffer Olsson. - Daniel Lehtonen

N/A
N/A
Protected

Academic year: 2022

Share "Realtid. eda040project2010 MANUAL. - Christoffer Olsson. - Daniel Lehtonen"

Copied!
9
0
0

Loading.... (view fulltext now)

Full text

(1)

Realtid

eda040project2010

MANUAL

dt08es7 - Emil Selinder dt08co0 - Christoffer Olsson dt08dm8 - David Meyer dt08dl4 - Daniel Lehtonen

(2)

Innehållsförtäckning

Introduktion

Hur man kör igång programmet Proxy

Server Client HTTPserver Hur systemet fungerar

Struktur Server Client GUI

(3)

Introduktion

I kursen Realtidsprogrammering ingår det ett projekt där man ska skapa ett övervakningssystem i vilket man kan koppla upp sig mot några nätverksanslutna kameror som finns utsatta i olika datorsalar i E:huset på LTH. Sedan ska man via ett gränssnitt på sin dator kunna se i realtid vad som sker i de olika datorsalarna. Det ska finnas två olika lägen på bildströmmen. I det ena läget får man bilder var femte sekund och i det andra läget ska en videoström med högre framerate visas. Programmet ska dessutom detektera om det sker någon rörelse och då automatiskt sätta igång videoläget. Kamerorna som används är från Axis och är av modell “Axis211A”.

Hur man kör igång programmet

Vi har två olika sätt att sätta upp systemet, dels genom att ansluta via en proxy och då låta servern köras lokalt på datorn och dels att ladda upp servern direkt på kamerorna med korskompilering.

Proxy

För att kunna ansluta en server till en kamera måste man först starta kameran. Detta gör man genom att telnet:a till en kamera, exempelvis:

telnet <kameranamn>.student.lth.se

där <kameranamn> är en kamera som finns på LTH, till exempel argus-1

och när man väl skrivit in rätt användarnamn och lösenord ska man köra CameraProxy som finns på kameran genom att skriva:

/etc/CameraProxy <nätverks-port>

Där nätverksporten är en port mellan 1024 och 65535. När du väljer en port så kommer den valda porten samt nästföljande port att reserveras åt kameran. Eftersom brandväggen blockerar vissa portar, tillåts endast portarna mellan 8081 och 8089

Ex. “ /etc/CameraProxy 8085 “ matas in, portarna 8085 och 8086 reserveras då åt kameran.

Systemet är byggt för att köra med två kameror så denna proceduren måste upprepas så att vi får två kameror.

Server

När det är klart kan man köra servern genom att först starta en ny terminal, bläddra till mappen där .jar-filerna ligger i och sedan skriva:

java -jar CameraServer <IP adress> <nätverks-port> <kamera-port>

Eftersom vår klient ansluter till två kameror behöver man starta två stycken servers, och därmed

(4)

göra instruktionerna två gånger. För att det ska fungera med två kameror måste vi ange olika portar för kamera och nätverk för de olika instanserna. För kameraporten krävs att man anger ett portnummer som är minst två steg större eller mindre.

Client

När väl servrarna är up and running är det dags att köra klienten. Den startar man genom att skriva:

java -jar CameraClient <kamera1> <kamera2>

<kamera#> ska vara localhost och <kameraport>

exempel: 127.0.0.1:6666

HTTP:servern

För att starta http-servern ska man göra som för proxy, fast man kör JPEGHTTPServer.jar istället och exempel på portnummer är:

argus-3.student.lth.se

<kamera-port> = 6666.

<nätverksport> = 8085.

Sedan kan man hämta bilder genom att i en webläsare skriva:

http://localhost:<kamera-port>/

För att uppdatera en bild kan man trycka på “uppdatera” i webläsaren, alternativt trycka ‘F5’

Hur systemet fungerar

När systemet väl är igång använder man sig enbart av GUI:t. Där använder man sig av de olika knapparna för att ansluta, synkronisera och trigga filmläget.

Till en början kommer 2 bildströmmar att skicaks till de olika bildrutorna där bilderna visas så fort klienten tar emot dem. Om man trycker på synkronisera-knappen kommer bilderna att synkroniseras, det vill säga att visas med gemensam fördröjning gentemot när bilderna togs.

Om bildströmmarna har allt för lång fördröjning kommer synkroniseringen automatiskt att stängas av och bilderna blir asynkrona.

Om någon kamera detekterar att en rörelse har skett, kommer videoläget att triggas ifall den inte redan är igång.

Gränssnitt

Gränssnittet består av ett fixt fönster med två mindre fönster som vart och ett visar bilder från en övervakningskamera. Det finns också tre stycken knappar; “Connect” (för att ansluta till kamerorna), “Movie Mode” (för att sätta kamerorna i videoläge och skicka ca 25 bilder per sekund) och Synchronize (för att synkronisera bilderna så att det visas nästan samtidigt i fönstren). Under de två fönstren med bilderna visas bildernas fördröjning, från det att dem togs till det att dem visas i gränssnittet. Runt fönstren har vi en svart ram som då vi trycker

(5)

på “Connect” blir grön istället, och på så vis visar att vi är uppkopplade mot kamerorna.

Knapparna “Synchronized” och “Movie Mode” går inte att trycka på förrän man har anslutit till kamerorna med knappen “Connect”.

Struktur

Server

Servern begär bilder från kamerorna i olika takt beroende på om om movieMode är aktiverat eller inte. Det finns en periodisk tråd för varje läge som tar bilderna. När bilderna är tagna skickas de över till klientsidan. Detta kallas push och överföringen sker via TCP/IP. Servern tar även emot kommandon från clienten för att movieMode skall startas sammtidigt för båda kamerorna.

Klasser

CameraThread:

Är en tråd som anropar den angivna kamera var femte sekund för att få en ny bild.

När bilden har mottagits skickas vektorn med data till tillhörande CamServer för att sedan skickas över nätverket till klienten. Denna tråd hör till läget Idle-mode.

CamServer:

(6)

Är vår klass för att hantera all överföring av data från server till klienten. De två huvudsakliga uppgifterna för CamServer är att tillhandahålla de två metoderna sendImage och

sendCommand så att servern kan skicka bilder och kommando.

Input_Manager:

Den stora klassen på serversidan som först och främst lagrar objekt av de andra klasserna för att sedan kunna tillhandlahålla dessa. Dennes ansvar ligger sedan i att hantera indata från klienten som endast kommer bestå av diverse kommando. Dessa kommando tolkas och Input_Manager kommer sedan manipulera de olika trådarna beroende på vilket kommando det var.

Main:

Det enda denna gör är läsa in ip-adress, kamera-port och nätverksport och sedan skapa en CamServer, en instans av en Axis211A och en Input_Manager. Sedan vidarebefodras informationen till Input_Manager.

MotionThread:

Är en tråd som läser av hur mycket rörelse det är i bilden med ett intervall på en sekund.

Tråden kommer bara köras då vi är i Idle-mode eftersom då man är i Movie-mode har vi ingen nytta av denna informationen.

MovieThread:

Är en tråd som anropar den angivna kamera med ett intervall på 40 milisekunder för att få en ny bild. När bilden har mottagits skickas vektorn med data till tillhörande CamServer för att sedan skickas över nätverket till klienten. Denna tråd hör till läget Movie-mode.

Client

Clienten är uppbyggd så att den tar emot bilder och kommandon som byte listor via en tråd.

Därefter behandlas bilderna olika beroende på om det är synkront eller asonkront läge. Är det synkront läge fördröjs alla bilder så det blir 200ms fördröjning. I asynkront läge visas bara bilderna direkt. Clienten kollar efter två kommandon det ena är PICTURE och betyder att den förjande datan är en bild. Det andra kommandot är MOVIE_MODE och det kommer från server sidan då en kamera detekterat rörelse. När detta kommando kommit in broadcastar vi ut det till båda servrarna.

Klasser

(7)

Main:

Innehåller mainmetoden som startar en instans av Client

Client:

Client är kärnan av programmet på clientsidan. Klassen väver samman alla klasser och startar instanser av PictureQueue, PictureUpdateThread, SyncHandler, GUI. När användaren trycker på connect i guit starats två instanser av Connection i denna klass, detta för att de etablera anslutningen. Efter anslutning är det denna klass som har hand om output till serversidan.

Connection:

Ansvarar för socket objekt mellan klienten och servern. Skapar en instans av ClientInput och observerar klienten för att kunna stänga ner anslutningen.

ClientInput:

Denna klass läser hela tiden av data från en InputStream med tillhörande id,

efter hand sätts data samman till antingen en bild eller ett kommando. BIder skickas till respektive PictureQueue. Denna klass kontollerar vilket kommando som skickas och anropar beroende på detta rätt metod i Client. Anledningen till att klienten observeras är att denna tråd skall terminera då anslutningen avbryts.

Picture:

Picture klassen representarar en bild och innehåller data för bilden samt ett id som anger vart bilden kommer från. Från ett bildobjekt kan man sedan få reda på timestamp, aktuell fördröjning

(8)

samt få hela bilden som en array med bytes.

Picture Queue:

Denna klass är en monitor som modellerar en smart kö för bilder. Detta för att möjligöra synchronize funktionen för programmet. Det skapas en instans av denna klass för varje kamera och klassen innehåller ett object av SyncHandler för att kön ska kunna avgöra om det är synchronisering eller inte. Det är en instans av ClientInput och en instans av

PictureUpdateThread som opererar på varje PictureQueue objekt. ClientInput lägger till bilder i kön och PictureUpdateThread hämtar bilder i kön och visar dem i guit. PictureQueue gör så att PictureUpdateThread sover lagom länge i synchriniserat läge för att fördröjningen ska bli 200ms. När programmet är i asynkront läge fördröjs inte PictureUpdateThread alls och bilderna visas direkt.

PictureUpdateThread:

PictureUpdateThread är en simpel tråd vars uppgift är att uppdatera guit med bilder. getNextPic i PictureQueue anropas för att få nästa bild. PictureQueue gör så att denna tråd sover lagom länge för att fördröjningen ska bli 200ms i synkront läge.

SyncHandler:

SyncHandlers uppgift är att hålla koll på om vi är i synkront eller asynkront läge och skriva ut information om detta i guit.

GUI

Paketet med GUI har funktionalitet för att låta användaren interagera med programmet.

Klasser

(9)

GUI:

Ritar upp programmets grafiska användargränssnitt. Innehåller också metoder för att hämta ImagePanel-objekt, ändra ifall vi är anslutna eller inte, sätta på och av “Movie Mode” samt ändra delayen som visas under kamera-fönstren.

ConnectButton:

Skapar en knapp som detekterar ifall användaren tryckt på connect.

ImagePanel:

Skapar ett fönster i vilket en bild från kameran kan visas. Innehåller också en metod “refresh”

som används för att uppdatera bilderna som visas.

ModeButton:

Skapar en knapp för att avgöra om vi är i movie-läge eller idle-läge.

SynchronizeButton:

Skapar en knapp som kommunicerar med klassen SyncHandler i surveillance-paketet.

WindowCloser:

Försöker att stänga ner anslutningarna och sedan GUIt då man trycker på “krysset” i fönstret för att avsluta.

References

Related documents

Och självklart: mitt exempel på ett välfungerande byråd är hämtat från Kerala för att jag visste att lokaldemokra- tin med indiska mått fungerar allt bättre där.. Hade

Med det i fokus så betyder det att sjuksköterskan har en betydande roll, inte bara för att föräldrar ska ta makten över situationen utan även att familjen skall kunna

I den här undersökningen har ungdomars egna tankar kring sexting samt hur de tror att andra i deras ålder uppfattar sexting undersökts och synliggjorts. Det har

Detta medför, om det finns en påfågel som har blivit bättre anpassad till sin omgivning, men som inte har lika fina stjärtfjädrar så kommer denna påfågeln inte förbättra

”Många tror att bara för att man är kriminell så uppfostrar man sina barn till att bli kriminella men jag tror inte det finns någon förälder, kriminell eller inte som vill se

Undersökningens didaktiska syfte är att synliggöra ungdomars relation till den visuella kulturen, och på vilket sätt den kan kopplas till dagens bildundervisning.. I den

Tryck och håll nere knappen i 1 sekund eller längre för att utföra avsökning med uppspelning av allt då du är i läget MP3/WMA..

Armaturen lyser endast med dimrat normalljus (sk. grundljus) när ingen rörelse är detekterad och inställd efterlystid har löpt ut..