FACULTEIT INDUSTRIELE INGENIEURSWETENSCHAPPEN TECHNOLOGIECAMPUS DE NAYER
Kennisgestuurde beveiligingsapplicatie
Steven BLOMMAART
Promotor:
ing. Floris De Smedt
Masterproef ingediend tot het behalen van de graad van master of Science in de ¨ wetenschappen: Elektronica-ICT industriele afstudeerrichting ICT
Academiejaar 2014 - 2015
FACULTEIT INDUSTRIELE INGENIEURSWETENSCHAPPEN TECHNOLOGIECAMPUS DE NAYER
Kennisgestuurde beveiligingsapplicatie
Steven BLOMMAART
Promotor:
ing. Floris De Smedt
Masterproef ingediend tot het behalen van de graad van master of Science in de ¨ wetenschappen: Elektronica-ICT industriele afstudeerrichting ICT
Academiejaar 2014 - 2015
c Copyright KU Leuven
Zonder voorafgaande schriftelijke toestemming van zowel de promotor(en) als de auteur(s) is over¨ nemen, kopieren, gebruiken of realiseren van deze uitgave of gedeelten ervan verboden. Voor aanvragen i.v.m. het overnemen en/of gebruik en/of realisatie van gedeelten uit deze publicatie, kan u zich richten tot KU Leuven Technologiecampus De Nayer, Jan De Nayerlaan 5, B-2860 SintKatelijne-Waver, +32 15 31 69 44 of via e-mail
[email protected]. Voorafgaande schriftelijke toestemming van de promotor(en) is eveneens vereist voor het aanwenden van de in deze masterproef beschreven (originele) methoden, producten, schakelingen en programma’s voor industrieel of commercieel nut en voor de inzending van deze publicatie ter deelname aan wetenschappelijke prijzen of wedstrijden.
Dankwoord Graag had ik even de mensen willen bedanken die mij hebben geholpen bij het tot stand brengen van deze thesis. In eerste instantie zou ik mijn promotor, ing. Floris De Smedt, willen bedanken. Hierbij kon ik met al mijn vragen terecht om deze thesis tot een goed einde te brengen. Tevens wil ik hem ook bedanken voor het ter beschikking stellen van een aantal klasses waarop ik mijn werk heb kunnen baseren. Verder wil ik ook de onderzoeksgroep EAVISE willen bedanken om mij de kans te geven om aan dit onderwerp te kunnen beginnen. Dit had niet mogelijk geweest zonder dit onderwerp op te splitsen in twee delen. Tot slot wil ik ook mijn vrienden en ouders bedanken voor de morele steun en voor het nalezen van deze scriptie op spelfouten. Steven Blommaart Edegem, mei 2015
v
Abstract Deze masterproef heeft als doel het combineren van beeldverwerking en kennisrepresentatie. We werken deze combinatie uit aan de hand van een case study. Hierin wordt een beveiligingsdeur gecontroleerd en wordt met behulp van beeldverwerking en kennisrepresentatie bepaald of de persoon of personen die voor de beveiligingsdeur staan, naar binnen mochten gaan of niet. Van zodra de deur opengaat wordt er gecontroleerd met objectdetectie hoeveel mensen er in de buurt van de beveiligingsdeur staan. Tevens wordt er ook gecontroleerd of het gaat om personeel of bezoekers. In onze case study maken we dit onderscheid op basis van een lichtblauwe trui. Voor elke persoon nabij bij de deur wordt er gekeken van waar de personen komen met behulp van objecttracking. Afhankelijk van de zone, beveiligd of onbeveiligd, verwachten we ander gedrag. Dit gedrag wordt beschreven in het model met behulp van kennisrepresentatie. Met behulp van IDP maken we een model dat scenario’s beschrijft die worden toegelaten aan de hand van regels. Indien we uit de verzamelde beeldinformatie geen geldig model kunnen vinden, betekent dit dat er onrechtmatig toegang is verschaft via de beveiligingsdeur, wat tot een passende reactie, zoals een alarm, moet leiden. Trefwoorden: Objectdetectie, Objecttracking, Kennisrepresentatie
vii
Abstract The purpose of this thesis is to combine image processing and knowledge representation. We will achieve this by creating a case study where a security door will be monitored. With the help of image processing and knowledge representation, there will be decided if the person or people who were standing near the security door, were allowed to go in or not. As soon as the door opens, there will be checked how many people there are standing near the security door with the help of object detecion. At the same time, people will be verified if they are employees or visitors. In this case study, they can be distinguised by an electric blue sweater. After that, we will determine where people came from with object tracking. Depending on the zone, secure or unsecure, we are expecting different behaviour. This behaviour will be described in a model with the help of knowledge representation. With the help of IDP, we will create a model that describe different scenarios based on some rules. If we can’t find a valid model based on the data from the image processing algorithms, it would mean that people had illegal access through the security door. This should lead to an appropriate response, like an alarm. Keywords: Object Detection, Object Tracking, Knowledge Representation
ix
Short summary General In this thesis, we will be researching ways to combine image processing together with knowledge representation. To do this, we will provide a case study. A security door will be monitored and as soon as the door is opened, image processing algorithms will interpret data from the video footage. This data will then be used to build a model, which will be validated using knowledge representation. The image processing part will happen in a C++ environment, together with the OpenCV library. For the knowledge representation part, we will make use of the IDP software.
Literature There is a lot of literature on the internet describing object detection and object tracking. After studying some of the most commonly used object detectors, we came to the conclusion that the HOG method provides good results and is easy to implement with OpenCV functions. We also did some research on some object trackers, the Kalman Filter and the Particle Filter. We decided to use the Kalman filter because the linear tracker is rather easy to use and it is good enough for what we want to do with it.
Implementation The application consists of two phases. The first phase, the configuration phase, allows the user to set up some parameters which will be used in the second phase, the execution phase. The user can define the office hours and the starting point of the video/image stream. As we don’t have a sensor to detect when the security door is being opened, the user must also define when the door is being opened. After defining some parameters, he can mark some zones: the secure zone, the unsecure zone and the zone where the initial detections will happen. All these parameters will be stored in a file, which can easily be accessed by the execution phase. xi
xii
The execution phase can be split up into several of stages. The first stage is called the initialization stage. At this stage we will load the parameters from the configuration file. After that, a time will be generated to be placed on the images. We are doing this because our security images don’t have a time frame on them, but we will need that to decide if the door is being opened during or outside the office hours. The second stage is where we will wait until the door opens. All the images will be shown until that happens. The third stage occurs when the door is being opened. This will prompt the algorithm to look for people in the initial detection zone, as defined by the user in the configuration phase. These people will then be classified as a visitor or as an employee. We will be doing this by comparing a histogram of the detection with the histogram of a template from an employee. When the histograms have a lot of resemblances, the person is classified as an employee. Otherwise the person is classified as a visitor. Besides classifying people, the timestamp on the images determines if the door has been opened during or outside of office hours, using template matching. The fourth stage of our algorithm is to determine where the detected people came from by tracking them back in time. They will be followed until they reach the secure zone or the unsecure zone. If a person doesn’t reach one of those zones, they will automatically be classified as a person who came from the unsecure zone. The last stage of our algorithm is the knowledge representation part. We gathered all the data from the image processing stages to build a model to validate the situation. A different model will be built based on time and office hours. The big difference between models is that during the office hours, visitors are allowed to go through the security door when there is an employee with them. Outside the office hours only employees are allowed to go through.
Tests and results The results can be divided into four parts. A first part is the template matching part. To test this algorithm, we generated and chose a couple of timestamps and checked if they give the correct result. From the 12 timestamps we tested, we had a 100 % success rate. It is safe to conclude that this algorithm works. A second part is the object detection ratio. We are detecting on a multi scale level, where the difference between those levels can vary. We tested with four different scales: 2 %, 5 %, 10 % and
xiii
20 %. The lower the scale, the higher detection ration we had, but the more time it takes to process. We decided to choose for performance over time, so we will be working with a 2 % scale between levels. A third part of the results concerns the comparison of histograms. We need to set a threshold to distinguish visitors from employees. We have 5 different scenarios, with a total of 4 employees and 4 visitors. The highest score for a visitor is 0,6552, while the lowest score for an employee is 0,7604. We will be setting the threshold value to 0,75 or 75 %. The last part of the results is the model itself. We generated 15 different scenarios with 0 to 3 people and checked if the two models (outside and during office hours) are valid or invalid. We compared those results with what we would expect and encountered a 100 % success rate.
Conclusion We built an application to combine image processing with knowledge representation. We can say we have fulfilled our goals, but there’s still some room for improvement. The detection rate of people isn’t a big success when people are standing close to the camera. Another detector might be better. A second improvement could be to make the code a bit more modular so the user can decide which parts of the algorithm they want to use, for instance; the inclusion of time in the algorithm.
Inhoudsopgave 1 Situering en doelstellingen
1
1.1 Situering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2 Doelstellingen
1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Literatuurstudie
3
2.1 Objectdetectie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.1 Haar-like Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.2 Histogram of Oriented Gradients . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1.3 Integral Channel Features . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.4 Model Training . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.1.5 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2 Objecttracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.1 Kalman Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2.2 Particle Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2.3 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 Kennisrepresentatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.1 First-Order Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3.2 ID-logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3.3 IDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3.4 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3 Specificaties
15
4 Beeldverwerking
17
4.1 Configuratie
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Initialisaties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 xv
xvi
INHOUDSOPGAVE
4.2.1 Configuratie inlezen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2.2 Afbeeldingen inlezen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2.3 Andere initialisaties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3 Wachten op event 4.4 Eventtrigger
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.4.1 Tijdsbepaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.4.2 Persoonsdetectie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.4.3 Histogrammen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.5 Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5 Kennisrepresentatie
31
5.1 Model opstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.2 Model uitvoeren 6 Resultaten
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 37
6.1 Template Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.2 Objectdetectie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 6.3 Histogrammen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6.4 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 7 Besluit
43
7.1 Toekomstig werk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Lijst van figuren 2.1 Voorbeelden van mogelijke Haar features . . . . . . . . . . . . . . . . . . . . . . .
4
2.2 Oppervlakte berekenen van de aangeduide rechthoek . . . . . . . . . . . . . . . .
4
2.3 Resultaat van een HOG berekening . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.4 Voorbeeld van Integral Channel Features . . . . . . . . . . . . . . . . . . . . . . .
6
2.5 Flowchart van de particle filter [3] . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4.1 Gebruiker die de beveiligde zone aan het markeren is . . . . . . . . . . . . . . . . . 18 4.2 Voorbeeld van een configuratiebestand . . . . . . . . . . . . . . . . . . . . . . . . 19 4.3 Tijd die nodig is om een afbeelding in te laden van een video . . . . . . . . . . . . . 20 4.4 Tijd die nodig is om een afbeelding in te laden van een imagestream . . . . . . . . . 21 4.5 Template die gebruikt wordt om personeel te herkennen . . . . . . . . . . . . . . . 22 4.6 Standaard output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.7 Afbeelding uit een sequentie die gebruikt wordt in het Caviar Project . . . . . . . . . 24 4.8 Geschaalde templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.9 Gedetecteerde personen wanneer de deur geopend wordt . . . . . . . . . . . . . . 26 4.10 Histogrammen van bovenlichamen personen . . . . . . . . . . . . . . . . . . . . . 27 4.11 Genormaliseerde histogrammen van bovenlichamen personen . . . . . . . . . . . . 28 4.12 Het volgen van personen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.1 Controleren of tijdstip tijdens of buiten de kantooruren valt . . . . . . . . . . . . . . 32
xvii
Lijst van tabellen 2.1 Vaak gebruikte logische symbolen . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6.1 Resultaten template matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.2 Detectieresultaten met verschillende schalingsfactor die de grootte tussen twee lagen in de afbeeldingspiramide bepaalt . . . . . . . . . . . . . . . . . . . . . . . . . 38 6.3 Resultaten histogrammatching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.4 ID’s van verschillende personen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.5 Testresultaten van het model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
xix
Hoofdstuk 1
Situering en doelstellingen In dit hoofdstuk wordt een korte toelichting gegeven over de opdrachtgever en de verwachtingen van deze thesis.
1.1
Situering
EAVISE1 is een onderzoeksgroep die zich op Campus De Nayer in Sint-Katelijne-Waver bevindt. ¨ intelligentie. De onderzoeksgroep richt zich op enerzijds computervisie en anderzijds artificiele Het visiegedeelte van EAVISE is ge¨ıntegreerd in VISICS2 , een onderzoeksgroep aan de KU ¨ gedeelte is ge¨ıntegreerd met Leuven die zich focust op spraak- en beeldverwerking. Het artificiele DTAI3 . Deze onderzoeksgroep houdt zich ondere andere bezig met kennisrepresentatie, wat onder meer in deze thesis aan bod zal komen.
1.2
Doelstellingen
Er bestaan verschillende methoden om personen te kunnen detecteren in camerabeelden en dan te volgen doorheen verschillende beelden. Voor mensen is het eenvoudig te interpreteren wat er gebeurt op de beelden, voor een computer is dit al iets moeilijker. De computer kan in deze taak ondersteund worden aan de hand van een model dat de menselijke logica omvat. Het doel van deze masterproef is om kennisrepresentatie te koppelen aan beeldverwerking. Dit wordt gedaan aan de hand van een case study. Na een bepaald event wordt via beeldverwerking bepaald of er aan een opgegeven model voldaan wordt. 1
Embedded Artificially intelligent VISion Engineering VISion for Industry Communications and Services 3 ¨ Intelligentie Declaratieve Talen en Artificiele 2
1
2
1 Situering en doelstellingen
Een event, in dit geval een veiligheidsdeur in een bank die opengaat, is enkel toegestaan in bepaalde gevallen, zoals bijvoorbeeld een personeelslid dat binnenkomt, een personeelslid dat een klant binnenlaat, ... Van zodra het event gebeurd is, wordt er aan de hand van beeldverwerkingalgoritmes bepaald of dit event geldig of ongeldig is. Deze thesis zal ontwikkeld worden met behulp van C++, waarbij gebruik wordt gemaakt van OpenCV. Voor het kennisrepresentatiegedeelte zal gebruik worden gemaakt van IDP.
Hoofdstuk 2
Literatuurstudie In dit hoofdstuk worden de verschillende onderdelen besproken die kunnen gebruikt worden om deze thesis tot een goed einde te brengen. De literatuurstudie kan opgedeeld worden in drie delen: Objectdetectie (paragraaf 2.1), Objecttracking (paragraaf 2.2) en Kennisrepresentatie (paragraaf 2.3).
2.1
Objectdetectie
Objectdetectie is een technologie die gebruikt wordt bij beeldverwerking om semantische objecten uit beelden en video’s te halen. Deze objecten kunnen allerlei voorstellen, bijvoorbeeld auto’s, zonnebrillen of personen. Wij zullen het hier hebben over persoonsdetectie. In volgende paragrafen worden er enkele technieken besproken: Haar-like features (paragraaf 2.1.1), HOG (paragraaf 2.1.2) en ICF (paragraaf 2.1.3). Na de bespreking van deze technieken wordt in paragraaf 2.1.4 nog kort aangehaald hoe, aan de hand hiervan, een model kan getraind worden.
2.1.1
Haar-like Features
Een eerste manier om personen te herkennen is via Haar-like features. Deze techniek maakt gebruik van alternatieve kenmerken gebaseerd op Haar wavelets[11] in plaats van de intensiteit van de afbeelding. Viola en Jones[13] bouwden verder op dit idee en ontwikkelden de Haar-like features. Om de snelheid van deze techniek te verhogen, wordt er gewerkt met Integral Images en opgetelde oppervlaktetabellen. Hierbij is elke pixel de som van de een rechthoek, zoals te zien is in formule 2.1. Hierbij is I(x,y) de som van de pixels op plaats (x,y) en is i(x,y) de originele 3
4
2 Literatuurstudie
pixelwaarde op (x,y).
I(x, y) =
∑
i(x, y)
(2.1)
x0 ≤x,y0 ≤y
som = I(C) + I(A) − I(B) − I(D)
(2.2)
Op deze manier kan de som van elke rechthoek in een afbeelding bepaald worden door middel van vier getallen en met behulp van formule 2.2. Figuur 2.1 is hier een visualisatie van.
Figuur 2.1: Voorbeelden van mogelijke Haar features
Met behulp van rechthoekige features wordt dan over de afbeelding gegaan via het sliding window principe. Met deze features wordt er op zoek gegaan naar contrastverschillen in vlakken. Figuur 2.2 laat een aantal mogelijke features zien die kunnen gebruikt worden.
Figuur 2.2: Oppervlakte berekenen van de aangeduide rechthoek
Viola en Jones hadden deze methode ontwikkeld om gezichten te kunnen detecteren. De methode is uitgebreid door Siala, M et al.[12] om ook volledige personen te kunnen detecteren. Hiervoor zijn ook functies voorzien in OpenCV.
2.1.2
Histogram of Oriented Gradients
Histogram of Oriented Gradients (HOG) is een feature descriptor die gebruikt wordt om objecten, ¨ hier personen, te detecteren. Dit gebeurt op basis van contrastveranderingen (of gradienten)
2 Literatuurstudie
5
¨ tussen pixels. De gradienten in de afbeelding worden bepaald met behulp van convolutiefilters. Door de afbeelding te convolueren met de filter, zoals aangegeven in formule 2.3, bekomen we ¨ voor iedere pixel de horizontale gradient. Een convolutie met de getransponeerde matrix zal ¨ leiden tot de verticale gradient.
[1, 0, −1]
(2.3)
Het model dat gebruikt wordt door Dalal en Triggs [5] is getraind aan de hand van afbeeldingen van 64x128 pixels. Iedere afbeelding wordt opgedeeld in blokken van 16x16 pixels, met een ¨ overlap van 50 %. We hebben in het totaal dus 105 blokken. Van iedere pixel wordt een gradient bepaald. Voor ieder blok wordt een histogram opgebouwd aan de hand van de gevonden ¨ gradienten. Het gebruikte histogram heeft 9 histogramwaarden (of bins) die elk een verschillende richting aangeven. ¨ ¨ die we aan de De gradientvector wordt opgebouwd uit de horizontale en de verticale gradient hand van convolutiefilters hebben bepaald. De grootte van deze vector kan eenvoudig bepaald ¨ worden aan de hand van Pythagoras, terwijl de orientatie kan bepaald worden aan de hand van de inverse tangens. Nu de grootte en de richting bepaald zijn, kan deze waarde bij in het histogram gezet worden. Zoals al eerder aangehaald, heeft het histogram 9 bins. Deze bins maken een opdeling tussen 0 ¨ en 180 graden. De gradienten van de tegengestelde hoeken worden hierbij samenvoegd. Elke bin is dus 20 graden groot. De bijdrage die iedere pixel heeft in het histogram is in verhouding tot de ¨ grootte van de gradientwaarde van de pixel. De histogrammen van elke pixel van een blok worden bij elkaar opgeteld. Tot slot wordt het histogram nog genormaliseerd om robuster te zijn zijn tegen lokale belichtingsveranderingen. Dit gebeurt voor elk blok van de afbeelding. Op figuur 2.3 is het resultaat van een HOG berekening te zien. Om hier nu een persoon in te herkennen, moeten de features getraind worden in een model, wat in paragraaf 2.1.4 wordt uitgelegd.
2.1.3
Integral Channel Features
Een andere methode om personen te kunnen detecteren is via Integral Channel Features (ICF). Hierbij wordt een combinatie gemaakt van de nauwkeurigheid van HOG-features en de snelheid ´ et al. [6] hebben onderzoek gedaan naar van het cascade-framework van haar-features. Dollar wat de beste combinatie is om een zo hoog mogelijke detectioratio te verkrijgen. Hierbij zijn ze tot de conclusie gekomen dat er van elke afbeelding 9 features moeten berekend worden: zes
6
2 Literatuurstudie
Figuur 2.3: Resultaat van een HOG berekening
¨ verschillende gradienten, gebaseerd op HOG en 3 kleurkanalen (LUV). Iedere feature die berekend wordt, vormt een ”Channel”. Figuur 2.4 toont hiervan een resultaat. Gebaseerd op het cascade framework zoals gebruikt door Viola en Jones voor gezichtsdetectie, wordt hier ook een cascade gemaakt van rechthoekige zones. Voor iedere zone wordt de som van ¨ gebeuren door gebruik de featurewaarden berekend in het bijbehorende kanaal. Dit kan efficient te maken van integral images.
Figuur 2.4: Voorbeeld van Integral Channel Features
Net zoals HOG en Haar-like wavelets, is ICF ook ge¨ımplementeerd in de OpenCV-bibliotheek. Het ´ et al. niet dezelfde nadeel hierbij is dat de oorspronkelijke implementatie van Dollar nauwkeurigheid haalt in OpenCV. Hierdoor wordt deze implementatie minder bruikbaar.
2.1.4
Model Training
Om een persoon te kunnen detecteren, moet eerst een model worden getraind. Er worden honderden of duizenden samples van het object, in dit geval personen, ingelezen. Deze afbeeldingen worden allemaal geschaald naar dezelfde grootte. Naast samples van personen,
2 Literatuurstudie
7
moeten er ook tal van negatieve samples worden ingelezen die niets met personen te maken hebben. Om een idee te geven: voor HOG persoonsdetectie werden 460 positieve samples en 1218 negatieve samples gebruikt. Viola en Jones gebruikten voor hun gezichtsdetector ongeveer 5000 positieve samples en 9500 negatieve samples. Met behulp van features die berekend zijn, wordt een classifier getraind. Alle positive samples worden ingelezen en verwerkt. Wanneer dit gebeurd is, wordt er aan Hard-Negative Mining gedaan. Hierbij worden alle negatieve samples aan de classifier onderworpen. De bedoeling is dat er geen enkele detectie gebeurt bij de negatieve samples. Wanneer er toch een detectie is, spreken we over een false positive. In het geval van false positives, moet de classifier opnieuw getraind worden tot dat alle false positives verdwenen zijn. Vanaf dan is het model getraind en kunnen andere afbeeldingen onderworpen worden aan dit model.
2.1.5
Besluit
We hebben hier drie verschillende technieken aangehaald om aan persoonsdetectie te kunnen doen. De ICF methode is niet zo goed gedocumenteerd in OpenCV, dus zal deze methode niet worden toegepast in onze applicatie. We hebben gekozen om met HOG aan persoonsdetectie te doen omdat deze techniek voor persoonsdetectie dient, terwijl de Haar-like features methode eerder wordt gebruikt voor gezichtsdetectie.
2.2
Objecttracking
Met objecttracking kan een object worden gevolgd doorheen verschillende frames. Er zijn een aantal manieren om een object te volgen, waaronder de Kalman- en de Particle Filter. De gewone Kalman Filter kan gebruikt worden voor lineaire systemen, terwijl de Particle Filter ook gebruikt kan worden voor niet lineaire systemen.
2.2.1
Kalman Filter
De Kalman Filter werd in 1960 ontwikkeld door R. Kalman[8]. Het is een set van verschillende ¨ wiskundige vergelijkingen die op een efficiente en recursieve manier voorspellingen doen in het volgen van een object dat lineair beweegt. Er bestaat ook een niet-lineaire Kalmanfilter, maar daar gaan we in deze thesis niet verder op in. Omdat wiskundige formules op zichzelf niet zoveel vertellen, wordt de Kalmantracker uitgelegd a.d.h.v. een concreet voorbeeld: locatiebepaling van een rijdende auto met behulp van een GPS. Een GPS kan een locatie bepalen tot op een paar meter nauwkeurig, omdat er ruis op het
8
2 Literatuurstudie
GPS-signaal kan zitten. De locatie van de auto kan ook bepaald worden door middel van zijn versnelling, snelheid en richting. De Kalmantracker kan opgedeeld worden in twee delen: de predict- en updatefase. In de predictfase wordt er met behulp van de snelheid, versnelling, ... een voorspelling gedaan naar de nieuwe locatie op basis van de vorige locatie. Stel dat de auto rijdt tegen 20 m/s op een rechte lijn en er wordt elke seconde een nieuwe locatie bepaald, dan zal de nieuwe locatie 20 meter verder liggen. Maar binnen deze seconde kan er natuurlijk bijvoorbeeld iets veranderd zijn aan de snelheid. Daarom wordt er naast de nieuwe positie ook een nieuwe covariantie berekend. Bij een hogere snelheid is de nieuwe locatie onzekerder dan bij een lage snelheid. Een kleine afwijking bij een hoge snelheid kan voor een grote fout zorgen. Formule 2.4 geeft dit wiskundig weer. Hierbij is x¯t+1 de voorspelde volgende locatie, xt is de huidige locatie en ut stelt de beweging voor, in het voorbeeld 20 m/s. wx stelt de errorfactor of de covariantie voor van de meting. De matrices A en B leggen een verband tussen de vorige en de huidige locatie.
x¯t+1 = A.xt + B.ut + wx
(2.4)
In de updatefase komt de GPS terug in het spel. De GPS bepaalt de nieuwe locatie van de auto. Ook op deze waarde zit een foutmarge. Dit kunnen we zien in formule 2.5. Hierbij is z¯t+1 de nieuwe voorspelde GPS-locatie, xt is de huidige locatie, wz is de errorfactor of de covariantie van de GPS. Net zoals bij de predictfase is C een matrix die een verband legt tussen de vorige en de huidige stap.
z¯t+1 = C.xt + wz
(2.5)
Van zodra de predict- en updatefase gebeurd zijn, wordt aan de hand van beide waarden de nieuwe locatie bepaald met formule 2.6.
xt+1 = x¯t+1 + K.(zt+1 − z¯t+1 )
(2.6)
Hierbij is xt+1 de waarde waarmee de volgende locatiebepaling zal gebeuren. zt+1 is de effectieve, nieuwe gemeten GPS-waarde. K is de Kalman gainfactor, een correctieterm. Deze factor gaat een grotere rol spelen als de waarde van de predictfase veel verschilt met de waarde van de updatefase. Deze stappen zullen zich blijven herhalen zolang er nieuwe data komt.
2 Literatuurstudie
2.2.2
9
Particle Filter
Een andere manier om aan objecttracking te doen is door gebruik van de Particle Filter[7]. Ook deze filter zal uitgelegd worden aan de hand van een concreet voorbeeld. In dit voorbeeld hebben we een vliegtuig dat op een bepaalde hoogte vliegt. We kunnen meten hoe hoog het vliegtuig boven zeeniveau zit en we kunnen de afstand tot de grond bepalen. We hebben een kaart, maar we hebben geen idee waar we zitten.
Figuur 2.5: Flowchart van de particle filter [3]
Figuur 2.5 toont een flowchart die laat zien hoe de Particle Filter werkt. In een eerste stap worden er een aantal hypotheses gegenereerd waar het vliegtuig zich kan bevinden. Omdat we geen idee hebben waar het vliegtuig zich initieel bevindt, kan dit dus overal zijn. De gegenereerde hypotheses worden particles genoemd. In een tweede stap wordt aan elke particle een gewicht gegeven. Dit heeft te maken met de kans dat een bepaald particle de locatie is van het vliegtuig aan de hand van de metingen die gebeurd zijn. Hoe groter de kans is dat de particle de locatie van het vliegtuig is, hoe groter het gewicht van deze particle zal zijn. Vervolgens worden alle particles met een laag gewicht verwijderd aangezien de kans miniem is dat het vliegtuig zich daar zal bevinden.
10
2 Literatuurstudie
Een derde stap van de particle filter is het resamplen van de particles. Het resamplen gebeurt rond de particles met een hoog gewicht die behouden zijn. Na het resamplen heeft elke particle terug hetzelfde gewicht. Een laatste stap is het updaten. Het vliegtuig is een beetje verder gevlogen, maar we weten niet met welke snelheid. Samen met het vliegtuig worden ook de particles verplaatst. Omdat we niet weten met welke snelheid het vliegtuig zich verplaatst, zit er ook wat variatie op het verplaatsen van de particles. Hierdoor kan het zijn dat sommige particles een ander gewicht krijgen, omdat sommige snelheden niet realistisch zijn. Als dit gebeurd is, wordt er terug naar stap 2 gegaan en blijft dit algoritme zitten in een lus tot dat er geen nieuwe data meer komt.
2.2.3
Besluit
We hebben twee verschillende trackers besproken. Marron et al. [10] zijn tot het besluit gekomen dat de particle filter beter presteert in gevallen waarbij een groot aantal personen moet gevolgd worden in complexe situaties. De Kalmanfilter wordt eerder gebruikt bij het volgen van een beperkt aantal personen, zoals bijvoorbeeld bewakingsbeelden. Omdat in onze case maar een aantal personen moet gevolgd worden en omdat onze beelden ook bewakingsbeelden zullen voorstellen, hebben we beslist om de Kalmanfilter te gebruiken.
2.3
Kennisrepresentatie
¨ intelligentie waarbij informatie wordt voorgesteld Kennisrepresentatie maakt deel uit van artificiele zodat een computersysteem dit kan gebruiken om complexe taken uit te voeren. In onze doelstelling is opgegeven dat we gebruik zullen maken van de kennisrepresentatietaal IDP. IDP of Inductive Definition Programming[9] is een declaratieve oplossingsmethode in het programmeren. Dit betekent dat men het probleem beschrijft, in tegenstelling tot het imperatief programmeren, waarbij men beschrijft hoe het probleem opgelost moet worden. Bij declaratief programmeren zijn twee dingen belangrijk: de kwaliteit van de logica voor kennisrepresentatie en ¨ de efficientie van de logische conclusies. De taal die gebruikt wordt in IDP om te programmeren is ID-logic, een uitbreiding van de klassieke eerste orde logica met inductieve definities. Klassieke eerste orde logica, of FO, is een van de meest expressieve talen voor kennisrepresentatie. Het nadeel hierbij is dat niet alle kennis eenvoudig kan worden voorgesteld, zoals inductieve definities, wat bij ID-logic wel mogelijk is.
2 Literatuurstudie
2.3.1
11
First-Order Logic
First-Order Logic is redeneren in symbolen, waarbij elke zin wordt opgedeeld in een onderwerp en een gezegde. Het gezegde definieert of past de eigenschappen aan van het onderwerp. Bij eerste ´ enkel onderwerp. orde logica kan het gezegde maar verwijzen naar e´ en Symbolen ¨ de logische De symbolen van first order logic kunnen onderverdeeld worden in twee categorieen: symbolen en de niet-logische symbolen. Het verschil tussen beiden is dat de logische symbolen altijd dezelfde betekenis hebben. In tabel 2.1 staan een aantal courant gebruikte logische symbolen. Niet-logische symbolen kunnen op verschillende manieren ge¨ınterpreteerd worden. Deze symbolen stellen relaties, functies en constanten voor in de redenering. Symbool
Betekenis
∀
voor elke
∃
er bestaat
∧
AND
∨
OR
¬
NOT
→
als ... dan ...
⇐⇒
als en slecht als
Tabel 2.1: Vaak gebruikte logische symbolen
Formatieregels Formatieregels zijn regels om syntactisch in orde te zijn binnen first order logic. Deze worden ¨ termen, formules en de volgorde van symbolen. onderverdeeld in drie categorieen:
• Termen: de set van termen is gedefinieerd volgens deze twee regels. 1. Elke variabele is een term. 2. Elke expressie of functie van n argumenten is een term.
• Formules: de set van formules is gedefinieerd volgens deze vijf regels. 1. Als P een n-ary predikaatsymbool is, en t1 , ..., tn zijn termen, dan is is P(t1 , ..., tn ) een formule. 2. Als het gelijkheidsteken, =, een deel van de logica is en t1 en t2 zijn termen, dan is t1 =
t2 een formule.
12
2 Literatuurstudie
3. Als A een formule is, dan is ¬A ook een formule. 4. Als A en B formules zijn, dan is A → B ook een formule. Hetzelfde geldt voor alle andere binary connectives. 5. Als A een variabele is en x is een variabele, dan zijn ∀xA en ∃xA formules.
• Volgorde van symbolen: Hoe hoger in het lijstje, hoe hoger de prioriteit. 1. ¬ 2. ∧ en ∨ 3. ∀ en ∃ 4. →
2.3.2
ID-logic
In de vorige paragraaf is First-Order Logica kort besproken. ID-logica bouwt hierop verder. Een vocabulary ∑ is een set van predikaat- en functiesymbolen. Een voorbeeld hiervan is formule 2.7. Hierbij is φ een First Order formule over ∑. P(t) is het hoofd van de regel en φ is de body. De pijl is ¨ een definierende implicatie, geen als ... dan ... uitdrukking. Een predikaat dat in het hoofd van een regel van een definitie staat, is een gedefinieerd predikaat. Elk ander symbool is een open symbool van de definitie.
∀x
(P(t) ← φ)
(2.7)
Een ∑-structuur bestaat uit een domein DI . Voor elke n-ary predikaat P is er een relatie waarbij PI een deelverzameling is van DnI , en voor elke n-ary functiesymbool f geldt dat f I : DnI → DI . De semantiek van ID-logic bouwt verder op de First Order logic ’s welgefundeerde semantiek voor definities. Als deze definitie als basis wordt gebruikt, dan kunnen we dit uitbreiden tot alle FO(ID) zinnen bij de standaard inductieve regels voor de klassieke logische connectives.
2.3.3
IDP
De ID-logic theorie is gedefinieerd als een set van First Order zinnen en definities. De IDP taal is gebaseerd op een eerdere versie van ID-logic en is een getypeerde versie van deze logica. IDP kan voor tal van toepassingen gebruikt worden. Zo zijn er tal van voorbeelden[2] te vinden, zoals het opstellen van uurroosters, de kortste weg zoeken naar een plaats en het oplossen van Einstein’s puzzel.
2 Literatuurstudie
13
Een IDP programma is op te delen in drie verschillende delen.
• Vocabulary: hier worden alle symbolen gedefinieerd waarover we uitspraken zullen doen. • Theory: hier worden voorwaarden en regels opgesteld over de opgegeven Vocabulary. • Structure: hier worden de symbolen uit het Vocabulary gedeelte gespecifieerd.
Een IDP programma kan op drie verschillende manieren uitgevoerd worden. Een eerste manier is via modelexpansie. Hier worden verschillende modellen opgebouwd die voldoen aan de opgegeven regels. Een tweede manier is controleren of het model satisfiable is. Hierbij wordt gecontroleerd of een opgebouwd model voldoet aan de regels die zijn opgegeven. Een derde en laatste manier is een zo optimaal mogelijk model op te bouwen. Hierbij wordt er rekening gehouden met een aantal criteria, bijvoorbeeld een waarde die zo klein mogelijk moet zijn.
2.3.4
Besluit
Omdat wij in onze case study een situatie moeten valideren of deze geldig is of niet, zullen wij werken met de satisfiable manier. We zullen dus een volledig model opbouwen en dit model dan controleren.
Hoofdstuk 3
Specificaties De implementatie die we in komende hoofdstukken uitwerken, combineert twee kennisdomeinen: beeldverwerking en kennisrepresentatie. Om de nodige beeldverwerking uit te voeren, wordt er gebruikt gemaakt van C++ en de OpenCV bibliotheek. De programmeertaal C++ zorgt ervoor dat ¨ kunnen verwerkt worden. Voor een intelligenter gebruik van de videostreams snel en efficient resultaten die we bekomen van het beeldverwerkingsgedeelte, maken we gebruik van kennisrepresentatie. Dit laat de eindgebruiker toe om een aanpasbaar en interpreteerbaar model op te bouwen. Om zo’n model op te bouwen, wordt er gebruik gemaakt van de kennisrepresentatietaal IDP. De implementatie die hier gebruikt wordt, is opgebouwd op basis van fictieve scenario’s waarin volgende regels gelden:
• Een personeelslid mag tijdens de kantooruren door de beveilingsdeur. • Een personeelslid mag buiten de kantooruren door de beveilingsdeur, maar enkel als hij van de beveiligde zone komt.
• Een bezoeker mag tijdens de kantooruren door de beveilingsdeur, maar enkel als er een personeelslid bij is.
• Een bezoeker kan buiten de kantooruren nooit door de beveilingsdeur gaan. • Een bezoeker kan nooit uit de beveiligde zone komen. • Personeel kan herkend worden aan een licht blauwe trui.
Hieronder vindt u een opsomming van de verschillende scenario’s. Deze nummering zal gebruikt worden in hoofdstuk 6, waar de resultaten van het algoritme bespoken zullen worden. 15
16
3 Specificaties
1. Persoon 1 (personeelslid) gaat vanuit de onbeveiligde zone naar de beveiligingsdeur. 2. Persoon 1 (personeelslid) gaat vanuit de beveiligde zone naar de beveiligingsdeur. 3. Persoon 1 (bezoeker) gaat vanuit de onbeveiligde zone naar de beveiligingsdeur. 4. Persoon 1 (bezoeker) gaat vanuit de onbeveiligde zone naar de beveiligingsdeur en wordt binnengelaten door persoon 2 (personeelslid) die vanuit onbeveiligde zone komt. 5. Persoon 1 (bezoeker) gaat vanuit de onbeveiligde zone naar de beveiligingsdeur en wordt binnengelaten door persoon 2 (personeelslid) die vanuit beveiligde zone komt.
Om wat flexibiliteit te hebben bij de implementatie, maken we een onderscheid tussen een configuratiefase en een uitvoeringsfase. Zoals af te leiden uit de naam, wordt de configuratiefase gebruikt om een configuratie uit te voeren, zodat een aantal parameters, die specifiek zijn voor een bepaald scenario, kunnen ingesteld worden. Hierdoor kan de broncode van de uitvoeringsfase onveranderd blijven. Het bekomen configuratiebestand zal gebruikt worden tijdens de uitvoeringsfase. De uitvoeringsfase leest vervolgens alle parameters in die de gebruiker bepaald heeft. Op basis ¨ manier. De van deze parameters worden dan de algoritmes uitgevoerd op een sequentiele uitwerking die we hier voorstellen is eventgebaseerd. Hierdoor wordt de videostream overlopen zolang de beveiligingsdeur niet geopend wordt. Van zodra de beveiligingsdeur wordt geopend, maken we gebruik van beeldverwerkingalgoritmes om voldoende informatie over de scene die we observeren te verzamelen. De algoritmes waar wij hier mee werken zijn persoonsdetectie, persoonstracking en het vergelijken van histogrammen. De informatie, die we verzameld hebben met behulp van beeldverwerking, wordt gevalideerd aan de hand van een model. Dit model bevat een beschrijving van de toegelaten situaties, welke we eerder hebben beschreven. Dit model wordt dan uitgevoerd om te controleren of de situatie geldig is. De reden om te wachten met detecteren en tracken tot dat de deur geopend wordt heeft een aantal voordelen t.o.v. direct detecteren en tracken. Zo worden enkel personen getrackt die iets te maken hebben met het scenario en de beveiligingsdeur. Toevallige passanten worden hierbij genegeerd. Een ander voordeel is dat de zoekruimte verkleind kan worden. Er moet enkel maar in de regio nabij de beveiligingsdeur gezocht worden naar personen. In het andere geval moet elke ingang gecontroleerd worden. De tijd die we hier mee besparen, kan eventueel dienen om krachtigere algoritmes te gebruiken of real-time verwerking te bekomen.
Hoofdstuk 4
Beeldverwerking In dit hoofstuk wordt er dieper ingegaan op de algoritmes die worden toegepast op onze beelden. In paragraaf 4.1 komt de configuratie aan bod waarbij de gebruiker een aantal parameters kan instellen. In paragraaf 4.2 wordt alles ge¨ınitialiseerd om met het algoritme van start te kunnen gaan. Zo wordt hier o.a. het configuratiebestand ingelezen en wordt er dieper ingegaan op het openen van afbeeldingen. Tot slot wordt het beeldverwerkingsalgoritme besproken. Dat bestaat uit drie verschillende fases die in paragrafen 4.3 t.e.m. 4.5 uitgelegd zullen worden.
4.1
Configuratie
Zoals eerder vermeld, wordt de configuratiefase gebruikt om een aantal scenariospecifieke parameters in te stellen. De configuratie kan gebeuren aan de hand van een videobestand of een afbeeldingssequentie. Ondanks dat het openen van een deur aan de hand van beeldverwerking zou kunnen gebeuren, verwachten we dat het resultaat van een sensor een veel betrouwbaarder resultaat zal geven. Het gebruik van een sensor zal dus in de praktijk gebruikt worden. Gezien we in onze testopstelling niet over een dergelijke sensor beschikken, maakt het manueel aangeven van het frame waar de deur opengaat nog deel uit van de configuratie. Omdat we verschillend gedrag verwachten tijdens of buiten de kantooruren, wordt deze parameter ook ingesteld in de configuratie. Na het ingeven van voorgaande parameters, verschijnt er een afbeelding uit de video of afbeeldingssequentie. Op deze afbeelding moeten er nog een aantal zones worden aangeduid. Een eerste zone is de beveiligde zone waaruit enkel personeel kan komen. Een tweede zone, de onbeveiligde zone, waaruit zowel bezoekers als personeel kunnen komen. Als laatste wordt de 17
18
4 Beeldverwerking
Figuur 4.1: Gebruiker die de beveiligde zone aan het markeren is
zone rond de beveiligingsdeur aangeduid, waarbij initieel naar personen wordt gezocht. Tijdens het configureren van deze zones, worden deze gevisualiseerd aan de hand van gekleurde lijnen, zoals te zien is in figuur 4.1. Op deze figuur is de gebruiker bezig met de beveiligde zone aan te duiden. Om de manuele initialisatie te vereenvoudigen, geven we de gebruiker steeds de kans opnieuw te beginnen om eventuele fouten te corrigeren. De beveiligde en onbeveiligde zone worden bijgehouden als polygonen, terwijl de zone rond de beveiligingsdeur wordt bijgehouden ¨ detecties als een rechthoek. De zone rond de beveiligsingsdeur wordt namelijk gebruikt om initiele te doen. Hierdoor is het gebruik van een rechthoek veel praktischer. Gezien het gezichtspunt van de camera, zijn de beveiligde en onbeveiligde zone moeilijker te vatten in een rechthoek. Daarom kunnen deze zones specifieker worden ingesteld. Deze zones hebben ook enkel maar een ´ van deze zones afkomstig is. controlefunctie: controleren of een persoon uit e´ en
In figuur 4.2 kunt u het resultaat zien van een resulterend configuratiebestand. De twaalf asterisken bovenaan het bestand zijn een extra controle voor de uitvoeringsfase om te zien of het een geldig configuratiebestand is.
4 Beeldverwerking
19
Figuur 4.2: Voorbeeld van een configuratiebestand
4.2 4.2.1
Initialisaties Configuratie inlezen
Nadat het configuratiebestand is opgesteld, kan de uitvoeringsfase van start gaan. Dit is onder te verdelen in een aantal stukken. In 4.2.1 wordt het inlezen van het configuratiebestand besproken, dat in paragraaf 4.1 werd opgesteld. De opstart van het programma van de uitvoeringsfase dient te gebeuren op basis van een geldig ¨ configuratiebestand. Indien dit niet het geval is zal het programma vroegtijdig beeindigd worden. Het bestand, zoals voorgesteld in figuur 4.2, wordt vervolgens volledig ingelezen. Het pad naar de video of afbeeldingssequentie, het nummer van het startframe en het frame waar de deur opengaat, worden bijgehouden in constante parameters zodat deze niet meer overschreven kunnen worden. De kantooruren en de drie zones worden in hun respectievelijke vectoren weggeschreven. Van zodra dit gebeurd is, wordt de file gesloten en kan de initialisatie van het programma beginnen.
4.2.2
Afbeeldingen inlezen
Zoals eerder besproken, maken we een onderscheid tussen input aan de hand van een videobestand of afbeeldingssequentie. Dit verschil is te zien in listing 4.1.
20
4 Beeldverwerking
Listing 4.1: Openen van een afbeelding
/ / / Open t h e v i d e o f i l e / imagestream a t t h e s t a r t i n g frame VideoCapture ∗ c a p t u r e ; i f ( strcmp ( f i l e t y p e . c s t r ( ) , ” Video ” ) == 0) { c a p t u r e = new VideoCapture ( f i l e n a m e ) ; i f ( ! capture −>isOpened ( ) ) { c e r r << ” Unable t o open v i d e o f i l e : ” << f i l e n a m e << e n d l ; e x i t ( EXIT FAILURE ) ;
} capture −>s e t (CV CAP PROP POS FRAMES, s t a r t f r a m e ) ;
∗ c a p t u r e >> frame ; } else { frame = imread ( getImageFromFilestream ( f n p r e f i x , f n s u f f i x , c o u n t e r ) ) ;
} i f ( ! frame . data ) { c e r r << ” Unable t o open t h e image ” << e n d l ; e x i t ( EXIT FAILURE ) ;
}
Bij een video gebeurt het zoeken naar een specifiek frame telkens relatief ten opzichte van een frame. Bij een afbeeldingssequentie kan een frame direct gelezen worden op basis van het pad van het frame. Hier is er al meteen een duidelijk verschil qua tijd tussen de twee. Deze werden bepaald d.m.v. een tickcount die in het programma werd uitgevoerd. Op de grafiek van figuur 4.3 ziet u een aantal resultaten.
Figuur 4.3: Tijd die nodig is om een afbeelding in te laden van een video
4 Beeldverwerking
21
Al deze waarden zijn een gemiddelde van vijf afzonderlijke pogingen om een frame te openen. Een verband tussen de gevonden waarden is er niet echt. Wanneer we hier lineaire regressie op toepassen, zien we wel dat er een stijgend verloop is, maar dat er ook heel wat uitschieters zijn. Deze zijn te verklaren doordat er in de video een aantal referentieframes zijn. De punten onder de rechten zijn frames die dicht bij zo’n referentieframe liggen of een referentieframe zijn. De punten boven de as zijn frames die in het midden tussen twee verschillende referentieframes liggen. Als ¨ ¨ verwaarlozen, dan komen we aan een gemiddelde van 176,5 ms om we de richtingscoeffici ent een frame te openen. In tegenstelling tot een afbeeldingssequentie ligt deze waarde een pak hoger dan bij een video, zoals te zien is in figuur 4.4. Hier halen we een gemiddelde van ongeveer 15 ms om een frame te openen. Aan de hand van deze resultaten krijgt een afbeeldingssequentie de voorkeur.
Figuur 4.4: Tijd die nodig is om een afbeelding in te laden van een imagestream
4.2.3
Andere initialisaties
Tot slot zijn er nog twee initialisaties die moeten gebeuren. Ten eerste wordt er een tijd gegenereerd om rechtsonderaan op het frame te plaatsen. Normaal gezien zou deze tijd het huidige tijdstip moeten zijn, maar om beter te kunnen testen, hebben we beslist om hier een random gegenereerde tijd van te maken. Dit is ter vervanging van de tijd die normaal gezien op bewakingsbeelden staat. Het plaatsen van deze tijd op het frame staat compleet los van het algoritme. Op basis van de tijd die op het frame staat, wordt dan beslist welk model er zal opgesteld worden. Voor experimentele doeleinden in onze applicatie, kan een personeelslid herkend worden aan de hand van een blauwe trui die hij of zij aanheeft. Een template wordt ingelezen van een
22
4 Beeldverwerking
personeelslid zoals te zien is in figuur 4.5. Van deze template wordt enkel de bovenste helft gebruikt, aangezien dit een benadering is van het bovenlichaam van een persoon. Van dat gedeelte wordt dan een kleurenhistogram gemaakt. In paragraaf 4.4.3 wordt hier dieper op ingegaan.
Figuur 4.5: Template die gebruikt wordt om personeel te herkennen
4.3
Wachten op event
Alle initialisaties zijn gebeurd en dus kan het algoritme nu zijn werk gaan doen. Er zijn een aantal zaken die bij elk frame moeten gebeuren, eender waar het programma zich bevindt. Een Frame-object wordt aangemaakt aan de hand van een afbeelding, het tijdstip en het framenummer. Op de afbeelding, zoals in figuur 4.6, worden twee dingen toegevoegd. Linksbovenaan komt er een kader met het meegegeven framenummer, zodat de gebruiker een idee heeft waar de videostream ergens zit. Rechtsonderaan komt de tijd op de afbeelding te staan, welke dan kan worden bepaald wanneer dit nodig is. Het meegegeven framenummer wordt bijgehouden in het Frame-object, in tegenstelling tot de tijd die, indien nodig, bepaald kan worden via beeldverwerking. Het meegegeven framenummer wordt bijgehouden in het Frame object, in tegenstelling tot de tijd. Deze wordt indien nodig bepaald via beeldverwerking. Dit omdat het initieel de bedoeling was om camerabeelden te gebruiken waarop al een tijd staat aangeduid, aangezien het een veelvoorkomende methode is bij beveiligingsbeelden om de tijd aan te duiden op de afbeelding. Het plakken van het tijdstip op de afbeelding kan dus ook gezien worden als een soort van initialisatie. ´ voor e´ en ´ overlopen tot op het Vanaf hier begint dan de eigenlijke routine. De frames worden e´ en moment dat de deur opengaat.
4 Beeldverwerking
23
Figuur 4.6: Standaard output
4.4
Eventtrigger
Op een bepaald moment zal de deur geopend worden. Als dit het geval is, zitten we in een volgende state: de objectdetectie state. Hier worden een aantal zaken bepaald:
• Er wordt bepaald hoe laat het is, en of dit tijdens of buiten de kantooruren is. • Er wordt naar personen gezocht in de buurt van de deur. • De gevonden personen worden geclassificeerd als personeelslid of als bezoeker. De algoritmes die hiervoor gebruikt worden, zullen hier uitgebreid besproken worden.
4.4.1
Tijdsbepaling
Het algoritme dat hier uitgewerkt is, is enkel geldig voor onze tijdsaanduidingen op de afbeeldingen. Het is wel zo dat dit wel werkt op verschillende resoluties. Er zijn ook andere manieren om aan tijdsaanduiding te doen, zoals bijvoorbeeld bij het Caviar Project [1]. In figuur 4.7 is te zien dat zij bewakingsbeelden gebruiken waar tijd en datum linksbovenaan staan. Mits een kleine aanpassing zou het algoritme ook op deze beelden kunnen werken. Enkel de locatierechthoek van de tijd moet aangepast worden. Dit kan op twee manieren: de zone kan aangeduid worden in de configuratiefase of er moeten twee parameters in de uitvoeringsfase aangepast worden. De tijdsbepaling gebeurt hier op basis van template matching. Deze techniek wordt gebruikt om
24
4 Beeldverwerking
Figuur 4.7: Afbeelding uit een sequentie die gebruikt wordt in het Caviar Project
de tijd die op het scherm te zien is, te kunnen uitlezen. De locatie van de tijd op de afbeelding staat altijd op dezelfde plaats. De linkerbovenhoek van de rechthoek met de tijd bevindt zich op 85% van de breedte en 90% van de hoogte van het frame. De grootte van de rechthoek hangt af van de grootte van het frame. Als referentie worden er frames van 1280 bij 720 pixels gebruikt. Hierbij wordt een rechthoek gebruikt van 50 bij 100. Met behulp van formule 4.1 wordt een schalingsfactor bepaald. Indien deze niet gelijk is aan 1, betekent dit dat het frame een andere grootte heeft en dat de rechthoek met de tijd verkleind of vergroot moet worden. Deze herschaling gebeurt via het nearest-neighbor of dichtsbijzijnde buur methode.
r scale =
width ∗ height 1280 ∗ 720
(4.1)
Bij deze methode wordt elke pixel vervangen door meerdere pixels van dezelfde kleur als de afbeelding vergroot moet worden. Bij het verkleinen van de afbeelding worden er rijen en kolommen verwijderd. Figuur 4.8 laat een aantal resultaten zien. Hierbij is duidelijk te zien dat, als de schaal groter wordt, er niet veel verandert. Wanneer de schaal naar beneden gaat is er een duidelijk verlies aan kwaliteit te zien. Bij een schaal van 0.5 zijn de cijfers nog duidelijk herkenbaar. Bij een schaal van 0.25 zijn een aantal cijfers niet echt duidelijk herkenbaar meer. Normaal gezien zou deze schaal niet voorkomen. Om aan deze schalingsfactor te geraken, moeten de camerabeelden al 16 keer kleiner zijn dan de referentie van 1280 bij 720 pixels. Dit komt neer op beelden van 320 bij 180 pixels, wat beekdverwerkingalgoritmes altijd uitdagend zal maken. Het grote voordeel van de Nearest Neighbor methode is de snelheid. Er moet namelijk maar een beperkt aantal berekeningen gebeuren, in tegenstelling tot andere methoden zoals bilineair of bicubic interpolatie.
4 Beeldverwerking
25
Er wordt een object van de klasse Tijd aangemaakt waarbij het stuk afbeelding met het tijdstip wordt meegegeven. Deze afbeelding wordt binair gemaakt: de achtergrond wordt zwart gemaakt, ´ voor e´ en ´ terwijl het tijdstip wit wordt gemaakt. Vervolgens worden templates van elk cijfer e´ en ingeladen. Afhankelijk van de grootte van de afbeelding worden deze templates herschaald volgens formule 4.1. Aangezien de originele afbeelding en de ingelezen templates nog in RGB waarden staan, worden deze twee afbeeldingen omgezet naar grijswaarden. Hierdoor is er nog ´ kleurkanaal i.p.v. drie. Elke template wordt over de afbeelding geschoven. Alle maar e´ en gevonden punten worden vervolgens onderworpen aan een threshold. In dit geval is deze threshold 90%. Met behulp van de minMaxLoc functie uit de OpenCV-bibliotheek, worden de locaties bepaald waar er een match is gevonden. De afbeelding van de tijd wordt opgedeeld in vier vakken, aangezien er vier cijfers in het tijdstip staan. Dit zal worden bijgehouden in een array van vier integers die op -1 ge¨ınitialiseerd worden. Met het dubbelpunt wordt geen rekening gehouden omdat dit niet veel plaats inneemt en het algoritme anders moeilijker zou maken. Met behulp van formule 4.2 kan worden bepaald op welke plaats het gevonden cijfer moet komen. Tx stelt de breedte van de template voor. Ix stelt de breedte van het stuk afbeelding met de tijd op voor, zoals te zien is in figuur 4.8. Fx stelt de ¨ x-coordinaat van de locatie van de match voor. Dit is steeds de hoek linksonderaan. De correctiefactor Tx /2 is nodig om het midden van de detectie te bepalen. Zonder deze correctiefactor kan het zijn dat het cijfer op de verkeerde plaats gezet wordt.
L=
Fx + T2x Ix 4
, metL ∈ [0, 3]
(4.2)
Het algoritme kan vroegtijdig worden afgebroken als het vier cijfers heeft gevonden. Er wordt dan gecontroleerd of er op elke plaats wel een getal is ingevuld. Als dit het geval is worden het uur en de minuten naar het Time object weggeschreven. Als er een getal niet gevonden werd, dan zal er automatisch gewerkt worden met 00:00.
4.4.2
Persoonsdetectie
In het configuratiegedeelte kon de gebruiker de zone nabij de beveiligingsdeur selecteren. In deze zone wordt gezocht naar personen die vervolgens worden geclassificeerd als bezoeker of als personeelslid. In het Frame object wordt de opgegeven rechthoek uitgesneden uit de afbeelding. Met behulp een HOG detector wordt er gezocht naar personen. Aangezien het persoonmodel van HOG achtergrond bevat, moeten de detecties nog een beetje verkleind worden. Deze verkleinde
26
4 Beeldverwerking
(a) Origineel
(b) Schaal 1/2
(c) Schaal 2
(d) Schaal 1/4
Figuur 4.8: Geschaalde templates
detecties worden dan in het Frame object bijgehouden en kunnen ten allen tijde opgevraagd ¨ detectie te zien op het moment dat de deur geopend wordt. worden. In figuur 4.9 is een initiele
Figuur 4.9: Gedetecteerde personen wanneer de deur geopend wordt
In paragraaf 4.5 wordt er nog verder ingegaan op persoonsdetectie, maar dan in combinatie met het tracken van personen. De gevonden detecties worden vervolgens onderworpen aan een controle, waarbij een kleurenhistogram bepaalt welke rol (personeel of bezoeker) iedere detectie heeft.
4.4.3
Histogrammen
Zoals als te lezen was in paragraaf 4.2, werd er in het begin van het programma een template ingelezen van een personeelslid. Deze template wordt vergeleken met elke persoon die zich in de nabijheid van de deur bevindt.
4 Beeldverwerking
27
Van de template of detectie wordt het kleurdomein aangepast van RGB naar HSV. In het HSV ´ domein zit namelijk de kleur zelf maar op 1 kanaal, namelijk H. Hierdoor kunnen we met e´ en histogram werken in plaats van drie. Van de afbeelding wordt alleen maar met het bovenste gedeelte gewerkt: we controleren namelijk op de kleur van een trui. Het onderste gedeelte maakt niet uit en zou het algoritme alleen maar moeilijker maken. Vervolgens wordt het histogram voorbereid. Er wordt gewerkt met een array van 180x1. De 180 slaagt op de range van het H-domein dat in OpenCV gebruikt wordt. De array heeft geen tweede dimensie omdat er geen rekening gehouden wordt met de saturatie of de intensiteit van de kleur. Dit omdat de lichtinval soms anders kan zijn, wat dan een negatief effect heeft bij het vergelijken van twee histogrammen.
(a) 96x96 pixels
(b) 74x74 pixels
(c) 74x73 pixels
Figuur 4.10: Histogrammen van bovenlichamen personen
In figuur 4.10 zijn een aantal histogrammen te zien waarmee gewerkt wordt in het programma. Hier is al een duidelijk verschil te zien tussen een bezoeker en een personeelslid. Er is echter nog ´ probleem: de gebruikte afbeeldingen zijn niet even groot. Gezien de patches niet even groot e´ en zijn, maken we een oneerlijke vergelijking. Grotere patches hebben meer pixels, en zodoende de som van meer pixels opnemen in het resulterende histogram. Om dit tegen te gaan worden de histogrammen genormaliseerd zodat alle waarden van het histogram gelegen zijn tussen 0 en 1. Het bepalen van histogramwaarde gebeurt volgens formule 4.3. Hierbij is Vn,i de genormaliseerde waarde, Vi het aantal pixels met een bepaalde waarde en Vmax het aantal van de histogramwaarde die het meeste voorkomt. Het resultaat hiervan is te zien in figuur 4.11.
Vn,i =
Vi meti ∈ [0, 179] Vmax
(4.3)
28
4 Beeldverwerking
(a) 96x96 pixels
(b) 74x74 pixels
(c) 74x73 pixels
Figuur 4.11: Genormaliseerde histogrammen van bovenlichamen personen
Het vergelijken van histogrammen kan op verschillende manieren gebeuren. Dit kan gedaan worden volgens een aantal methodes zoals de correlatiemethode, de chi-kwadraatmethode of de Bhattacharyya-methode. We hebben ervoor gekozen om volgens de correlatiemethode te werken, aangezien we hier al wat voorkennis over hebben. Met behulp van formule 4.4 kan de ¨ ¨ berekend worden. correlatiecoeffici ent
ρ(X,Y ) =
E[(X − E(X))(Y − E(Y ))] σ(X).σ(Y )
(4.4)
Hierbij is de teller gelijk aan de covariantie van X en Y. De noemer is het product van de twee standaardafwijkingen. De uitkomst van deze deling geeft ons een getal tussen -1 en 1. De output van de OpenCV functie geeft een getal weer tussen 0 en 1. Hierbij wordt er dus enkel gekeken naar de absolute waarde van het getal. Hoe dichter dit getal bij 1 ligt, des te beter de twee histogrammen op elkaar lijken. Met de bekomen correlatiewaarde kunnen we nu gaan beslissen of de gedetecteerde persoon een personeelslid of een bezoeker is. Dit doen we door deze waarde te vergelijken met een threshold-waarde. Als de waarde boven deze threshold ligt, dan is de persoon een personeelslid. Bij een waarde kleiner dan de threshold, kunnen we besluiten dat het gaat om een bezoeker. Elke persoon heeft nu een rol toegewezen gekregen. Om aan backtracking te kunnen doen, moet er een tracker ge¨ınitialiseerd worden zodat de personen kunnen gevolgd worden doorheen verschillende frames.
4 Beeldverwerking
4.5
29
Backtracking
De tracker werd in de eventtrigger fase al ge¨ınitialiseerd op de posities waar personen zijn gedetecteerd. Op basis van deze detecties zal er aan backtracking gedaan worden. De personen zullen gevolgd worden tot dat ze in ofwel de beveiligde zone ofwel de onbeveiligde zone komen. Aangezien er altijd iets kan mislopen, zoals bijvoorbeeld een opeenvolging van voorspellingen die verkeerd zijn, is er een fail-safe mechanisme ingebouwd. Indien de tracker geen van deze zones bereikt op het einde van de video, zal er automatisch vanuit gegaan worden dat de persoon in kwestie uit de onbeveiligde zone komt. Het tracken van personen begint steeds met het terug zoeken van de persoon op het volgende frame, in ons geval het vorige frame aangezien we aan het backtracken zijn. Er wordt telkens maar op een deel van het frame gezocht. Het heeft namelijk geen zin om helemaal aan de andere kant van het frame naar dezelfde persoon te zoeken. De keuze voor de breedte van de detectiezone hangt samen met de zone die door de gebruiker aangeduid werd als de zone rond de beveiligingsdeur. De hoogte van de detectiezone heeft ook deels te maken met de zone rond ¨ de beveiligingsdeur: de bovengrens is namelijk de x-coordinaat van de linkerbovenhoek van de zone rond de beveiligingsdeur. De ondergrens van de detectiezone is standaard de onderkant van het frame, omdat de camera bijna recht naar de beveiligingsdeur kijkt. Van zodra een persoon zich van deze deur verwijdert, zal de detectierechthoek van deze persoon groter worden naar mate deze dichter bij de camera komt. In deze detectiezone wordt dus terug gezocht naar deze persoon. Hierbij zijn drie resultaten mogelijk, waarbij elk resultaat een andere aanpak vereist. 1. Er is geen enkele detectie ´ detectie 2. Er is e´ en 3. Er zijn meerdere detecties
In het eerste geval waarbij er geen detectie is gebeurd, is de oplossing simpel. Er wordt aan de tracker gevraagd om een voorspelling te doen waar de persoon zich zou moeten bevinden. ´ persoonsdetectie. Nu moet de vraag gesteld worden: is dit wel een In het tweede geval is er e´ en correcte detectie? Daarom wordt de analytische afstand bepaald tussen de huidige detectie en de voorgaande detectie. Indien deze afstand kleiner is dan een voorgedefinieerde waarde, dan kunnen we er vanuitgaan dat de detectie weldegelijk de detectie is die we zoeken. In dit geval wordt de tracker geupdatet met de gevonden waarde. In het andere geval wordt er aan de tracker ¨ gevraagd om een voorspelling te doen.
30
4 Beeldverwerking
In het derde en laatste geval zijn er meerdere detecties gebeurd. De oorzaak hiervan kan zijn dat ´ of meerdere detecties een false positive zijn, maar het kunnen evengoed 2 personen zijn die e´ en vlak bij elkaar staan. Ook hier wordt de analytische afstand bepaald tussen de vorige detectie en alle detecties op het huidige frame. Na deze berekening wordt er enkel nog rekening gehouden met de detectie die de kleinste afstand heeft en wordt deze afstand terug onderworpen aan een thresholdwaarde. Naargelang het resultaat doet de tracker een voorspelling of wordt de tracker geupdatet. ¨ Van zodra de tracker zijn werk heeft gedaan bij het huidige frame, wordt er gecontroleerd of dit punt in de beveiligde of onbeveiligde zone ligt. Van zodra dit gebeurt, wordt de tracker stopgezet en kan de locatie bepaald worden waarvan de persoon komt. De backtracking fase loopt teneinde van zodra alle personen in een zone zijn aangekomen of wanneer het startframe is bereikt. Wanneer een persoon niet in een zone is aangekomen, wordt er vanuitgegaan dat de persoon uit de onbeveiligde zone komt zoals in het begin van dit paragraaf werd vermeld. Om dit alles te visualiseren worden alle detectiepunten en, indien nodig, de voorspellingen van elke persoon bijgehouden en worden deze op een afbeelding aan de gebruiker getoond, zoals te ´ zien is in figuur 4.12. Hier werden in het begin twee personen gedetecteerd (zie figuur 4.9). Een persoon is al uit beeld verdwenen via de beveiligde zone. De andere persoon wordt nog steeds gevolgd.
Figuur 4.12: Het volgen van personen
Hoofdstuk 5
Kennisrepresentatie In dit hoofstuk gaan we dieper in op het kennisrepresenatatiegedeelte om zo ons model te kunnen opstellen (paragraaf 5.1) en uit te kunnen voeren (paragraaf 5.2).
5.1
Model opstellen
Alle beeldverwerkingsalgoritmes zijn uitgevoerd: alle personen hebben een locatie waarvan ze komen en zijn ge¨ıdentificeerd als bezoeker of personeelslid. In deze paragraaf wordt dieper ingegaan op het opstellen en uitvoeren van het model in IDP, dat voldoet aan de regels die zijn opgegeven in hoofdstuk 3. Aan de hand van de tijd die van het frame gehaald werd, wordt er een model opgesteld. Dit model kan opgedeeld worden in een vast en een variabel deel. Het vaste deel bestaat voornamelijk uit declaraties, zoals welke locaties en rollen er zijn. Het variabele deel bestaat voornamelijk uit het ¨ definieren van de gedetecteerde personen en het teovoegen van de regels aan het model. Eens het model is opgesteld kan dit worden uitgevoerd en kan er gecontroleerd worden of het model voldoet aan de opgegeven regels. In het vaste deel van het model worden vooral zaken aangemaakt en gedefinieerd. Als eerste wordt er een getal aangemaakt dat aanduidt hoeveel personen er kunnen zijn. Dit getal kan een waarde hebben tussen 0 en 9, maar dit kan zeer eenvoudig aangepast worden naar andere waarden. Het getal 0 wordt mee gedefinieerd aangezien er altijd iets kan misgaan met het detecteren van personen wanneer de deur geopend wordt. Vervolgens worden ook de locaties en rollen gedefinieerd. Locatie kan gelijk zijn aan Secure of Unsecure, een kortere versie van beveiligde of onbeveiligde zone. De rol van de persoon kan gelijk zijn aan Employee of Visitor, wat slaat op personeelslid of bezoeker. Tot slot worden nog een aantal types aangemaakt, maar nog niet gedefinieerd. De definitie hangt af van het model dat opgeroepen moet worden. Het gaat hier 31
32
5 Kennisrepresentatie
over welke mensen naar binnen mogen gaan en wie tot het personeel behoort. Buiten de kantooruren kan een personeelslid enkel maar naar binnen gaan als hij uit de beveiligde zone komt. Een personeelslid dat uit de onbeveiligde zone komt buiten de kantooruren, wordt niet tot het personeel gerekend. Om te beslissen welk model er opgeroepen moet worden, wordt de tijd die bepaald werd in paragraaf 4.4.1 vergeleken met de kantooruren die opgegeven werden door de gebruiker in 4.1. Hiervoor moeten de kantooruren eerst gesorteerd worden, de gebruiker moest namelijk de verschillende periodes in chronologische volgorde invoeren. Van zodra dit gebeurd is, wordt er gecontroleerd op welke plaats het tijdstip van het frame zou toegevoegd worden in de vector van kantooruren. Als de index even is, betekent dit dat het tijdstip buiten de kantooruren valt. Als de index oneven is, valt het tijdstip tijdens de kantooruren. Op figuur 5.1 wordt dit gevisualiseerd. De kantooruren zijn hier van 08u00 tot 12u00 en van 13u00 tot 17u00.
(a) Tijdens de kantooruren
(b) Buiten de kantooruren
Figuur 5.1: Controleren of tijdstip tijdens of buiten de kantooruren valt
Nu beslist is welk model er opgeroepen moet worden, kan het variabel gedeelte ingevuld worden. Vooraleer dit kan gebeuren moeten de personeelsleden gesorteerd worden. Dit is nodig omdat tijdens de kantooruren een bezoeker door de beveiligingsdeur kan gaan als er een personeelslid bij is. Om het model logisch op te bouwen, worden eerst alle personeelsleden die uit de beveiligde zone komen, ingelezen in het model. Op basis van de eerst ingelezen persoon worden dan regels toegevoegd voor de andere aanwezige personen. Bij een niet-gesorteerde reeks zou elke persoon met alle andere personen moeten vergeleken worden of hij al dan niet een personeelslid is. Het variabele gedeelte van de twee verschillende soorten modellen, tijdens en buiten de kantooruren, heeft grote gelijkenissen, maar bevat verschillende data. Voor beide worden ¨ detecties. Het verschil zit personen aangemaakt en gedefinieerd, afhankelijk van het aantal initiele in de regels. Buiten de kantooruren moet er alleen maar gekeken worden of alle personen die voor de beveiligingsdeur staan, personeelsleden zijn die uit de beveiligde zone komen. Tijdens de kantooruren moet de eerste persoon een personeelslid zijn en wordt deze regel telkens herhaald
5 Kennisrepresentatie
33
voor elke andere persoon. Het model is nu volledig opgebouwd. Er zou eventueel nog een extra controle kunnen ingebouwd worden in het model. Het moment waarop de beveiligingsdeur geopend wordt zou ook in IDP kunnen onderworpen worden aan de ¨ opgegeven kantooruren. We hebben beslist om dit niet te doen aangezien het effienter was om dit op voorhand te doen en aan de hand daarvan het model op te bouwen. Als dit toch in het model zou ge¨ımplementeerd worden, wordt het model iets uitgebreider en zal het bijgevolg ook langer duren om het model te kunnen valideren. Listing 5.1 en 5.2 zijn twee voorbeelden van modellen die zijn opgebouwd. Beide modellen bevatten 2 dezelfde personen: een bezoeker en een personeelslid die allebei uit de onbeveiligde zone komen. In het model buiten de kantooruren wordt er enkel gecontroleerd of elke persoon voldoet aan volgende regel: Enkel een personeelslid uit de beveiligde zone is toegelaten. In het model tijdens de kantooruren wordt er gecontroleerd of de eerste persoon een personeelslid is. De volgende personen worden gecontroleerd of ze geldig zijn en er wordt telkens teruggekeken of de eerste persoon een personeelslid is. Listing 5.1: model tijdens de kantooruren
Vocabulary myVoc { t y p e Amount i s a i n t t y p e Role type Location V a l i d ( Role , L o c a t i o n ) Workpeople ( Role , L o c a t i o n ) Number : Amount Person1 ( Role , L o c a t i o n ) Person2 ( Role , L o c a t i o n )
} Theory myTheory : myVoc { Number >= 1 . ! x [ Role ] y [ L o c a t i o n ] : Person1 ( x , y ) => Workpeople ( x , y ) . ! x [ Role ] y [ L o c a t i o n ] : ( Person2 ( x , y ) => V a l i d ( x , y ) ) & ( Person1 ( x , y ) => Workpeople ( x , y ) ) .
} S t r u c t u r e my S t r u c tu r e : myVoc { Amount = { 0 . . 9 } Number = 2
34
5 Kennisrepresentatie
Workpeople = { ( Employee , Secure ) ; ( Employee , Unsecure ) } V a l i d = { ( Employee , Secure ) ; ( Employee , Unsecure ) ; ( V i s i t o r , Unsecure ) } Person1 = { Employee , Unsecure } Person2 = { V i s i t o r , Unsecure }
} Listing 5.2: model buiten de kantooruren
Vocabulary myVoc { t y p e Amount i s a i n t t y p e Role type Location V a l i d ( Role , L o c a t i o n ) Workpeople ( Role , L o c a t i o n ) Number : Amount Person1 ( Role , L o c a t i o n ) Person2 ( Role , L o c a t i o n )
} Theory myTheory : myVoc { Number >= 1 . ! x [ Role ] y [ L o c a t i o n ] : Person1 ( x , y ) => V a l i d ( x , y ) . ! x [ Role ] y [ L o c a t i o n ] : Person2 ( x , y ) => V a l i d ( x , y ) .
} S t r u c t u r e my S t r u ct u r e : myVoc { Amount = { 0 . . 9 } Number = 2 V a l i d = { ( Employee , Secure ) } Person1 = { Employee , Unsecure } Person2 = { V i s i t o r , Unsecure }
}
5.2
Model uitvoeren
De laatste stap in het proces is het model uitvoeren. Vanuit het hoofdprogramma wordt er een nieuw proces opgestart om het model te kunnen valideren. Hierbij wordt het volledige model als een string meegegeven en zal IDP dit model uitvoeren.
5 Kennisrepresentatie
35
IDP zal vervolgens het model omzetten naar een model met enkel maar AND, OR en NOT. De variabelen worden ingevuld met TRUE en FALSE en tracht alle variabelen een eenduidige waarde te geven. Het kan niet dat een variabele in een bepaalde regel TRUE is en in een volgende regel FALSE. Als er voldaan wordt aan alle regels, dan is het model satisfied, anders is het model unsatisfied. Van zodra IDP zijn werk heeft gedaan, zal het hoofdprogramma de buffer inlezen waarin IDP het resultaat heeft in weggeschreven. Hierbij zijn twee uitkomsten mogelijk. Een eerste mogelijkheid is dat de buffer gevuld is met de Structure van het model. Hieruit kan afgeleid worden dat er wordt voldaan aan de opgegeven regels. Een tweede mogelijkheid is dat er ”nil” in de buffer staat. Dit wil zeggen dat er geen model is gevonden dat voldoet aan de regels. Om dit alles te visualiseren wordt, na het controleren van het model, opnieuw het beeld getoond waarbij de deur geopend wordt. Wanneer het opgegeven model niet voldoet, zal dit beeld een rode glans krijgen. Bij een model dat wel voldoet zal dit beeld een groene glans krijgen.
Hoofdstuk 6
Resultaten In de vorige twee hoofdstukken werd dieper ingegaan op de werking van alle verschillende algoritmes. In dit hoofdstuk zullen de resultaten van elk onderdeel apart besproken worden om dan te besluiten met het grote geheel. In totaal zijn er vijf verschillende scenario’s waarop de resultaten gebaseerd zijn. In hoofdstuk 3 werden deze opgesomd. De nummering die in sommige tabellen voorkomt slaat op de nummering van deze opsomming.
6.1
Template Matching
Zoals uitgelegd in paragraaf 4.4.1 wordt template matching gebruikt om de tijd in te lezen in het programma van de afbeeldingssequentie of video. Omdat er 1440 verschillende tijdstippen zijn, 24 uur x 60 minuten, wordt er een selectie gemaakt van een aantal voorgedefinieerde tijdstippen. Op deze manier zijn we zeker dat elk cijfer aan bod is geweest. Deze worden dan aangevuld met een aantal random waarden. De resultaten zijn terug te vinden in tabel 6.1. Tabel 6.1: Resultaten template matching
zelf gekozen tijdstippen
random tijdstippen
Tijdstip op frame
Uitgelezen tijdstip
Tijdstip op frame
Uitgelezen tijdstip
09:58
09:58
02:40
02:40
07:46
07:46
15:04
15:04
13:02
13:02
09:59
09:59
00:00
00:00
04:56
04:56
11:11
11:11
04:40
04:40
22:22
22:22
09:07
09:07
37
38
6 Resultaten
Alle uitgevoerde testen zijn correct uitgevoerd. We kunnen er dus vanuitgaan dat het algoritme werkt, al kunnen we niet 100 % zeker zijn, aangezien niet alle mogelijkheden zijn getest.
6.2
Objectdetectie
De resultaten voor objectdetectie kunnen opgesplitst worden in twee delen. Een eerste deel gaat over het aantal detecties. Deze zijn afhankelijk van de schalingsfactor. In tabel 6.2 staan de percentages van gevonden detecties van een persoon met een bepaalde schalingsfactor. Een eerste opvallend feit in deze resultaten is dat er een duidelijk verschil is in percentages tussen verschillende personen, aangeduid met een p (personeelslid) of b (bezoeker) in de detectieratiokolom. Met de schalingsfactor van 10 en 20 % wordt al zeker niet verdergewerkt, aangezien deze in twee gevallen een detectieratio hebben van 50 % of minder. Met 5 % kan eventueel wel verdergewerkt worden als de kwaliteit van de beelden even goed zijn als de testbeelden. Van zodra de resolutie kleiner wordt en de beelden gecomprimeerd worden, zal het aantal detecties ook naar beneden gaan. Daarom wordt er gekozen om met een schalingsfactor van 1,02 te werken. Het nadeel hiervan is wel dat het langer duurt om het algoritme uit te voeren. Tabel 6.2: Detectieresultaten met verschillende schalingsfactor die de grootte tussen twee lagen in de afbeeldingspiramide bepaalt
Scenario
Schalingsfactor
Tijd (gemiddeld)
detectieratio
1
2%
180 ms
89,1 % (p)
1
5%
90 ms
87,6 % (p)
1
10%
—
¨ detectie geen initiele
1
20 %
—
¨ detectie geen initiele
2
2%
180 ms
88,2 % (p)
2
5%
90 ms
69,8 % (p)
2
10%
65 ms
45,3 % (p)
2
20 %
—
¨ detectie geen initiele
3
2%
200 ms
98,0 % (b)
3
5%
90 ms
94,1 % (b)
3
10%
60 ms
91,1 % (b)
3
20 %
40 ms
65,6 % (b)
4
2%
135 ms
88,2 % (p) en 100 % (b)
4
5%
60 ms
87,8 % (p) en 100 % (b)
4
10%
40 ms
71,8 % (p) en 100 % (b)
4
20 %
25 ms
46,5 % (p) en 70,3 % (b)
6 Resultaten
39
Een volgende parameter die nog ingesteld moet worden is de parameter die beslist of het plausibel is dat de detectie op het huidige frame dicht genoeg ligt bij de detectie op het voorgaande frame. Deze afstanden zijn gebaseerd op een resolutie van 1280x720 pixels. Hier zal dus rekening mee gehouden moeten worden als er met een andere resolutie wordt gewerkt. Het eerste scenario,waarbij een personeelslid uit de onbeveiligde zone komt, werd getest zonder afstandsparameter, om zo alle afstanden te kunnen bekijken. Hier zijn we tot het besluit gekomen dat, wanneer de afstand groter dan 36 is, de tracker niet meer accuraat is. We stellen voorlopig dus de waarde 36 in als threshold. Na het testen van een tweede scenario, waarbij een een personeelslid uit de beveiligde zone komt, zijn we tot het besluit gekomen dat de threshold verlaagd moet worden naar 23. Deze waarde is voor het derde scenario iets te klein, waardoor er een aantal detecties weggefilterd worden. Dit weegt niet op tegen het feit dat het misloopt met de tracker bij een waarde groter dan 23 in het vorige scenario. Tot slot wordt deze waarde getest op de laatste twee scenario’s en deze geven een correct resultaat. Een opvallend feit is wel dat de tracker naar het einde toe een beetje achterloopt bij het personeelslid. Dit is te wijten aan het feit dat detector mindere resultaten geeft wanneer het personeelslid groter in beeld komt. Zoals eerder aangehaald, is deze threshold gebaseerd op een resolutie van 1280x720 pixels. Voor andere resoluties zal deze waarde niet correct zijn. Daarom moet deze nog aangepast worden met een factor. We bekomen dan formule 6.1. Hierbij is T de thresholdwaarde en Tn de thresholdwaarde die hierboven bepaald is, met name 23.
r T = Tn ∗
6.3
width ∗ height 1280 ∗ 720
(6.1)
Histogrammen
Het algoritme is uitvoerig besproken in paragraaf 4.4.3. Het enige wat we nog missen is een thresholdwaarde die bepaalt of de gedetecteerde persoon een bezoeker of een personeelslid is. In tabel 6.3 zijn een aantal resultaten te zien waarop het algoritme is toegepast. Hieruit kunnen we afleiden dat voor de gebruikte scenario’s het grensgebied, tussen de hoogste waarde van een bezoeker en de laagste waarde van een personeelslid, tussen 0,655204 en 0,760433 ligt. Tussen deze waarden moet dus onze threshold komen te liggen. Omdat het erger zou zijn moest een bezoeker als personeel beschouwd worden, kiezen we de thresholdwaarde die dichter bij de bovengrens ligt. Er is gekozen om een waarde van 0,75 te gebruiken.
40
6 Resultaten
Tabel 6.3: Resultaten histogrammatching
6.4
Scenario
Type
Waarde
1
Personeel
0,91152
2
Personeel
0,887422
3
Bezoeker
0,655204
4
Bezoeker
0,0776659
4
Personeel
0,799481
5
Personeel
0,760433
5
Bezoeker
0,313498
Model
Om de modellen te testen zijn een aantal testvectoren aangemaakt. Omdat de gegevens die via de beeldverwerkingalgoritmes gesorteerd worden, zijn de gegevens in de testvectoren eveneens gesorteerd. In tabel 6.5 staan alle uitgevoerde testen. In de kolom Personen staan de id’s van het type persoon. In tabel 6.4 vindt u de vertaling van deze id’s. In de resultatentabel is te zien dat alle tests geslaagd zijn. Dit zijn zeker niet alle mogelijkheden die getest zijn, maar wel de voornaamste. Wat opvalt in de tabel is, dat er bij 10 personen er geen resultaat wordt weergegeven. Dit komt omdat in het model gedefinieerd is dat het maximum aantal personen gelijk is aan 9. Als dit aantal overschreden wordt, zit er een syntax error in het model en zal er dus niet naar een model gezocht worden. Tabel 6.4: ID’s van verschillende personen
ID
Rol van de persoon
Locatie van de persoon
11
Personeel
Beveiligde zone
12
Personeel
Onbeveiligde zone
21
Bezoeker
Beveiligde zone
22
Bezoeker
Onbeveiligde zone
Hieruit kunnen we besluiten dat de modellen die opgebouwd worden, voldoen aan de regels die zijn opgegeven in hoofdstuk 3.
6 Resultaten
41
Tabel 6.5: Testresultaten van het model
Personen (ID’s uit tabel 6.4)
Tijdens kantooruren
Buiten kantooruren
Verwacht
Resultaat
Verwacht
Resultaat
geen
NOK
NOK
NOK
NOK
11
OK
OK
OK
OK
12
OK
OK
NOK
NOK
21
NOK
NOK
NOK
NOK
22
NOK
NOK
NOK
NOK
11 11
OK
OK
OK
OK
11 12
OK
OK
NOK
NOK
11 22
OK
OK
NOK
NOK
12 21
NOK
NOK
NOK
NOK
21 22
NOK
NOK
NOK
NOK
11 11 11
OK
OK
OK
OK
11 11 12
OK
OK
NOK
NOK
11 11 22
OK
OK
NOK
NOK
12 21 22
NOK
NOK
NOK
NOK
22 22 22
NOK
NOK
NOK
NOK
11 (10 keer)
NOK
empty
NOK
empty
Hoofdstuk 7
Besluit Het doel van deze thesis is een applicatie te ontwikkelen waarbij kennisrepresentatie gecombineerd wordt met beeldverwerking. Dit wordt gerealiseerd aan de hand van een case study. In deze case study wordt een beveiligingsdeur gemonitord. Van zodra de deur wordt geopend, wordt er teruggegaan in de tijd en worden een aantal beeldverwerkingalgoritmes toegepast. Er wordt o.a. nagegaan of een persoon een personeelslid of een bezoeker is en waar hij vandaan komt. Van zodra deze algoritmes uitgevoerd zijn, wordt er een model opgebouwd en ¨ wordt dit via kennisrepresentatie geevalueerd. In de literatuurstudie (hoofdstuk 2) hebben we ons verdiept in de mogelijke methoden om aan persoonsdetectie en -tracking te kunnen doen. Hier zijn we tot het besluit gekomen dat we met HOG en Kalman zullen werken. Verder hebben we ons ook verdiept in de werking van kennisrepresentatie, meer in het bijzonder IDP. In hoofdstuk 3 zijn alle specificaties neergeschreven om een applicatie te kunnen ontwikkelen. Deze worden In hoofdstuk 4 en 5 deze algoritmes ge¨ımplementeerd. De resultaten hiervan zijn te vinden in hoofdstuk 6. Hieruit kunnen we besluiten dat we onze doelstelllingen tot een goed einde hebben gebracht. We kunnen namelijk personen gaan detecteren en deze classificeren als bezoeker of als personeelslid met behulp van objectdetectie en het vergelijken van histogrammen. Vervolgens kan bepaald worden waar deze personen vandaan komen. Hierbij hebben we gebruik gemaakt van objecttracking. Alle verkregen data uit beeldverwerking hebben we dan samengevoegd in een model op basis van een aantal regels. Na validatie van dit model kunnen we dan een gepaste reactie voorzien: de beveiligingsdeur openen bij een geldig model of een alarm laten afgaan wanneer het model niet geldig is. Om dit te kunnen visualiseren hebben we het eventframe een groene of een rode glans gegeven om zo weer te geven of het model geldig is of niet. 43
44
7 Besluit
Als algemeen besluit kunnen we stellen dat we de doelstellingen gerealiseerd hebben, maar er zijn nog een aantal verbeteringen mogelijk. Deze zullen hieronder nog kort besproken worden.
7.1
Toekomstig werk
De applicatie die ontwikkeld is voor deze case study behaalt goeie resultaten, maar er zijn nog enkele verbeteringen mogelijk. Een eerste aanpassing zou zijn aan de persoonsdetector. We hebben ondervonden dat wanneer personen op de beelden groter worden naar mate ze dichter bij de camera komen, dat het aantal detecties drastisch naar beneden gaat. In plaats van volledige personen te detecteren, worden er vaak aparte lichaamsdelen gedetecteerd. Hierdoor kan de tracker ook in de problemen komen omdat de afstand tussen twee verschillende detecties te groot wordt. Een mogelijke oplossing zou zijn om via backgroundsubtraction te werken of met een andere objectdetector. ICF is veelbelovend, maar zal iets moeilijker te implementeren zijn. Een tweede mogelijke aanpassing is om op voorhand aan te geven waarmee rekening gehouden moet worden. Zo kan het bijvoorbeeld zijn dat er geen rekening moet gehouden worden met de kantooruren, en dus moet een deel van de code niet uitgevoerd worden.
Bibliografie [1] (2005). Caviar project. http://homepages.inf.ed.ac.uk/rbf/CAVIAR/. Accessed: 2015-05-19. [2] (2007). Dtai idp. https://dtai.cs.kuleuven.be/software/idp/. Accessed: 2015-05-24. [3] Bolic, M. (2004). Theory and implementation of particle filters. School of Information Technology and Engineering. [4] Breitenstein, M., Reichlin, F., Leibe, B., Koller-Meier, E., and Van Gool, L. (2009). Robust tracking-by-detection using a detector confidence particle filter. In Computer Vision, 2009 IEEE 12th International Conference on, pages 1515–1522. [5] Dalal, N. and Triggs, B. (2005). Histograms of oriented gradients for human detection. In Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society Conference on, volume 1, pages 886–893 vol. 1. [6] Dollar, P., Tu, Z., Perona, P., and Belongie, S. (2009). Integral channel features. BMVC. [7] Gustafsson, F. (2010). Particle filter theory and practice with positioning applications. Aerospace and Electronic Systems Magazine, IEEE, 25(7):53–82. [8] Kalman, R. E. (1960). A new approach to linear filtering and prediction problems. Journal of Fluids Engineering, 82(1):35–45. ¨ M., Wittocx, J., and Denecker, M. (2006). The idp framework for declarative problem [9] Marien, solving. Search and Logic: Answer Set Programming and SAT, pages 19–34. [10] Marron, M., Garcia, J., Sotelo, M., Cabello, M., Pizarro, D., Huerta, F., and Cerro, J. (2007). Comparing a kalman filter and a particle filter in a multiple objects tracking application. In Intelligent Signal Processing, 2007. WISP 2007. IEEE International Symposium on, pages 1–6. [11] Papageorgiou, C., Oren, M., and Poggio, T. (1998). A general framework for object detection. In Computer Vision, 1998. Sixth International Conference on, pages 555–562. 45
46
BIBLIOGRAFIE
[12] Siala, M., Khlifa, N., Bremond, F., and Hamrouni, K. (2009). People detection in complex scene using a cascade of boosted classifiers based on haar-like-features. In Intelligent Vehicles Symposium, 2009 IEEE, pages 83–87. [13] Viola, P. and Jones, M. (2001). Rapid object detection using a boosted cascade of simple features. In Computer Vision and Pattern Recognition, 2001. CVPR 2001. Proceedings of the 2001 IEEE Computer Society Conference on, volume 1, pages 511–518 vol.1.
FACULTEIT INDUSTRIELE INGENIEURSWETENSCHAPPEN TECHNOLOGIECAMPUS DE NAYER Jan De Nayerlaan 5 2860 SINT-KATELIJNE-WAVER, België tel. + 32 15 31 69 44
[email protected] www.iiw.kuleuven.be