Rapport de Stage
Analyse Multicapteur pour la Reconnaissance dActivits Humaines
Application au projet GERHOME :
Maintien domicile des personnes ges
Responsables du stage :
Franois Brmond
Monique Thonnat
Remerciements
Je tiens tout d'abord remercier Monique Thonnat, chercheur lInstitut National de
Recherche en Informatique et en Automatique (INRIA) Sophia Antipolis, et
responsable de lquipe ORION pour m'avoir accueilli au sein de son quipe et pour
son soutien pendant le stage. Je la remercie tout particulirement, pour mavoir permis
de raliser cette mission, aussi bien pour son aide tout au long de celle-ci, que pour sa
disponibilit et ses nombreux conseils judicieux.
Un grand merci Franois Bremond, chercheur lInstitut National de Recherche en
Informatique et en Automatique (INRIA) Sophia Antipolis, qui m'a encadr tout au
long de mon stage et qui ma aid dans lexcution de cette mission. Je le remercie
pour sa disponibilit, pour son soutien et pour ses prcieux conseils.
Un grand merci galement tout les doctorants et ingnieurs qui travaillent au sein de
lquipe ORION (Gabrielle Davini, Thinh Vu Van, Etienne Corve, Valery Valentin,
Bernard Boulay, Marcos Zuniga, Vincent Martin et Mohammed Bcha Kaniche)
pour leur disponibilit et la qualit de leurs explications et conseils tout au long de
mon stage.
Merci aussi Catherine Martin, l'assistante du projet ORION pour son aide prcieuse
au niveau administratif.
Plus gnralement, je remercie le reste de l'quipe pour leurs divers conseils, leur
disponibilit et leur soutien amical. Sans l'aide de toute l'quipe, ce travail n'aurait pas
pu saccomplir.
Un grand merci M. Alain Anfonsso responsable du projet Gerhome et ainsi qu M.
Eric Pascual qui mont permis de faire des acquisitions vido et autres capteurs dans
Gerhome.
Je tiens remercier aussi M. Jaime Lopez Krah responsable du Master Handi,
Nouvelles Technologies et Handicap, de lUniversit Paris Vincennes-Saint-Denis
Paris 8 pour ses conseils et la pertinence de ses remarques tout au long de ma
formation.
Je tiens ensuite adresser mes remerciements toutes les personnes qui ont contribu
de prs ou de loin la ralisation de ce stage.
Enfin, un remerciement tout particulier ma famille, mes parents, mes frres et surs,
qui mapportent leur soutien moral et leur force chaque moment de ma vie.
Je souhaite une bonne continuation tous.
Encore merci !
Sommaire
Introduction....................................................................................................................1
1. Prsentation du stage..............................................................................................2
1.1.
Prsentation du laboratoire daccueil.............................................................2
1.1.1.
Prsentation de lINRIA ........................................................................2
1.1.2.
Prsentation de lINRIA Sophia Antipolis ............................................2
1.2.
Prsentation de lquipe Orion.......................................................................2
1.3.
Description de la mission...............................................................................3
1.3.1.
Objectifs et motivation...........................................................................3
1.3.2.
Prsentation du projet Gerhome.............................................................3
1.4.
Description de la plateforme VSIP d'interprtation vido : ...........................5
1.5.
Planning du travail .........................................................................................6
2. Ltat de lArt........................................................................................................7
2.1.
Tlsurveillance mdicale domicile ............................................................7
2.2.
Interprtation automatique dactivits humaines par la vido .....................10
2.3.
Analyse multicapteurs..................................................................................11
2.4.
Fusion de donnes........................................................................................12
2.5.
Les capteurs et leurs utilisations ..................................................................13
2.5.1.
Capteurs de donnes physiologiques ...................................................13
2.5.2.
Capteurs dactivits..............................................................................13
2.5.3.
Capteurs environnementaux.................................................................14
2.5.4.
Exemples de systmes de capteurs ......................................................14
3. Premire vue de lapproche propose ..................................................................17
4. Evnement vido..................................................................................................18
4.1.
Dtection et suivi de personne .....................................................................18
4.2.
Reprsentation des vnements ...................................................................19
4.3. Evnements vido reconnus ............................................................20
5. vnement de contact dtect ..............................................................................21
6. vnements composs multimodaux reconnus ...................................................22
7. Rsultats et valuation .........................................................................................25
7.1.
Concept de fonctionnement .........................................................................25
7.2.
Prsentation du laboratoire dexprimentation ............................................26
Implantation des capteurs dans Gerhome (Figure 9) ...........................................27
7.3.
Rsultats de reconnaissance des vnements multimodaux ........................28
8. Conclusion ...........................................................................................................29
9. Travaux futurs ......................................................................................................29
Bibliographie................................................................................................................30
Annexes........................................................................................................................34
Abstract
In this work, we present a multimodal (video and contact sensors) monitoring system
for the automatic monitoring of elderly everyday activities. The specificity of our
approach consists in the integration of video analysis with other information resulting
from contact sensors installed in the habitat in order to improve the recognition of
observed activities.
Our main goal is to improve the techniques of automatic data interpretation using
complementary sensors installed in the apartment such as cameras, contact sensors
installed on the doors, on the windows, in the kitchen cabinets and the pressure
sensors installed on the chairs. Our system is composed of a vision module, a contact
event module and a scenario recognition module. The system takes three types of
inputs: (1) a video stream acquired by camera(s), (2) a data resulting from contact
sensors installed in the habitat, and (3) a priori knowledge concerning scenario models
predefined by medical experts and the 3D geometric and semantic information of the
observed environment. The output of the system is the set of recognized scenarios at
each instant.
Keywords: event recognition, scene understanding, multimodal behaviour analysis.
Introduction
Les personnes ges ou handicapes sont le plus souvent dsireuses de garder leur
indpendance, quels que soient les efforts qu'il leur faut fournir pour se dbrouiller
seules la maison. Malheureusement, faute de pouvoir garantir un niveau de confort
et de scurit suffisant, le placement dans des institutions spcialises se rvle
souvent tre la seule possibilit.
La mise en place de services de maintien domicile permet aux personnes de vivre
chez elles le plus longtemps et le plus indpendamment possible, dans un
environnement de confort et de scurit. Les admissions en hpital, maison de retraite
ou centres spcialiss sen trouvent rduites. Ces services concernent particulirement
les personnes ges, mais plus gnralement les personnes prsentant des risques
daffection motrice (chute, etc.) ou cognitive (dpression, dmence snile, etc.) ou
ncessitant des soins ou une attention particulire (diabtiques, asthmatiques, etc.).
Il est donc important de concevoir de nouveaux services pour dtecter, voire prvenir
loccurrence de situations inquitantes ou critiques par la gnration dun ensemble de
messages et dalarmes sur la situation de la personne.
Le system de monitorage propos, tel que dcrit sur la figure 3 dans la section 3,
prend 3 entres : (1) un flux vido issu de cameras, (2) les donnes issues des capteurs
de contact installs dans lhabitat, et (3) les connaissances priori qui concerne les
modles dvnements et les informations gomtrique et smantiques de
lenvironnement observ. La sortie du systme est la reconnaissance des vnements
chaque instant.
Pour atteindre notre but, nous avons utilis la plateforme VSIP dinterprtation vido
dcrite dans [1] et prsente plus loin dans le rapport, et nous avons inclut un
algorithme de reconnaissance dvnements qui est dcrit dans [2]. Pour
1
1. Prsentation du stage
1.1.
Mon stage se droule au sein de l'quipe ORION, une des quipes de l'unit de
recherche de l'INRIA (Institut National de Recherche en Informatique et en
Automatique) Sophia-Antipolis.
1.1.1. Prsentation de lINRIA
Cre en 1967 Rocquencourt en rgion parisienne, l'INRIA est un tablissement
public caractre scientifique et technologique plac sous la double tutelle du
ministre de la recherche et de l'industrie. L'INRIA est implante dans cinq rgions en
France:
- En les de France, une unit de recherche Rocquencourt.
- En Bretagne, une unit de recherche Rennes (cre en 1980).
- En Provence-Alpes-Cte-dAzur, une unit de recherche Sophia-Antipolis
(cre en 1982).
- En Lorraine, une unit de recherche Nancy (cre en 1984).
- En Rhne-Alpes, une unit de recherche Grenoble (cre en 1992).
1.1.2. Prsentation de lINRIA Sophia Antipolis
Cre au coeur du technople Sophia-Antipolis en 1983, l'unit de recherche regroupe
une trentaine d'quipes de recherche en partenariat avec le CNRS, plusieurs
universits et grandes coles. Leurs travaux portent sur la conception et la
programmation de systmes informatiques performants, la reprsentation et la
manipulation d'informations complexes, la cration, la modlisation et la simulation
d'expriences complexes. Ils permettent l'avance des connaissances dans quatre
grands domaines :
(1) rseaux et systmes, (2) gnie logiciel et calcul symbolique, (3) interaction homme
machine, (4) images, donnes, connaissances, simulation et optimisation des systmes
complexes.
1.2.
L'quipe ORION (INRIA Sophia-Antipolis) est une quipe multidisciplinaire dont les
comptences se situent la frontire de l'intelligence artificielle, du gnie logiciel et
de la vision artificielle. Une large part de ses activits est consacre l'interprtation
automatique d'images fixes et de squences vido.
Ce stage sinscrit dans le cadre des travaux du projet ORION sur l'interprtation
automatique de squences vido pour la reconnaissance de comportements humains.
Description de la mission
1.4.
Camera (s)
Dtection et
suivi des objets
mobiles
Reconnaissance
dtats
et vnements
Contexte
tats - vnements
Reconnaissance
de scnarios
Scnarios
Base de Connaissance
Alertes
1.5.
Planning du travail
tapes du projet
-
10/04/06 au 12/05/06
15/05/06 au 16/06/06
Recherche Bibliographique
tude de la plateforme VSIP
Premire acquisition de vidos Gerhome (le 13/03 /06)
Recherche dans le commerce de capteurs physiologiques utiliser dans
Gerhome (exemple : systme TRIDENT dvelopp au LETI Grenoble)
Envoie de commandes des capteurs choisis
Runion DANTE (projet franco-italien pour le maintien domicile des
personnes ges) Nice (le 27/03/06)
tat de lart sur la reconnaissance automatique dactivits humaines
tat de lart sur la tlsurveillance mdicale domicile
Acquisition de vidos GERHOME (le 10/04/06)
Traitement des vidos dans VSIP
Prise de contact avec monsieur Marcel WAJNBERG prsident
lassociation Seniors Handicaps Europens (SHE) Nice
12/04/06) pour simuler des scnarios dans gerhome.
Visite des laboratoires du LIRMM et du PROPARA (centre
Rducation et de Radaptation Spcialis pour Paraplgiques
Ttraplgiques) Montpellier (le 20/04/06)
de
(le
de
et
19/06/06 au 21/07/06
24/07/06 au 11/08/06
14/08/06 au 15/09/06
18/09/06 au 29/09/06
2. Ltat de lArt
Prambule : Ce chapitre prsente un tat de lart sur les diffrents dispositifs de
tlsurveillance existants, sur linterprtation automatique dactivits humaines et
enfin sur les diffrents projets utilisant diffrents capteurs pour la reconnaissance du
comportement humain. Dans cet tat de lart, les diffrents principes sont issus de
dveloppements de laboratoires franais et trangers ou de dveloppements
industriels rfrencs.
2.1.
2.2.
10
dutilisation voluent. Par exemple, il nexiste pas lheure actuelle de systme vido
capable de dtecter automatiquement des individus dans des environnements bruits
(e.g. brusque changement dillumination, forte pluies, pnombre) ou trs encombrs
(eg. lieux confins, prsence de foule).
2.3.
Analyse multicapteurs
11
2.4.
Fusion de donnes
La fusion de donnes, peut tre dfinie comme "un processus permettant de combiner
au mieux un ensemble de donnes multi-sources, ventuellement htrognes, pour
une meilleure qualit de linformation rsultante" [42]. La fusion de donnes (brutes
ou ventuellement prtraites) permet de grer une multitude dinformations,
complmentaires, redondantes et incompltes, issues de sources htrognes, afin
dobtenir la "meilleure" connaissance possible de lenvironnement de dcision tudi.
Un processus de fusion doit passer par quatre phases principales :
1. Reprsentation homogne et recalage des informations pertinentes : les donnes
fusionner sont souvent htrognes, il est impossible de les combiner sous leur forme
initiale. On est alors amen rechercher un espace de reprsentation commun dans
lequel les diffrentes informations pertinentes disponibles renseignent sur une mme
entit. Un premier traitement consiste donc transformer certaines de ces
informations initiales, en informations quivalentes dans un espace commun, dans
lequel seffectuera la fusion,
2. Modlisation des connaissances : une donne propre chaque source nest pas
forcment exploitable en tant que tel, notamment si linformation fournie est trs
imparfaite, et ne donne quun aspect de la ralit. Cependant, mme imparfaite, toute
information peut apporter une connaissance sur ltat du systme. Donc, une tape
essentielle du processus de fusion consiste modliser et valuer la connaissance
apporte par chaque source.
3. Fusion : cest ce niveau du processus que lopration de fusion proprement dite
est ralise. Les informations recales et modlises sont combines selon une rgle
de combinaison propre au cadre thorique choisi.
4. Dcision par choix dune stratgie : la fusion doit permettre de choisir
linformation la plus vraisemblable, au sens dun certain critre, parmi toutes les
hypothses possibles. Le critre de dcision dpend du cadre thorique dans lequel le
processus de fusion a t dvelopp, et de lobjectif atteindre.
La principale difficult de la fusion de donnes est de pouvoir modliser et valuer la
connaissance apporte par chaque source afin de tirer le meilleur parti des
informations disponibles. Cette opration consiste exprimer limperfection de
chaque information en fonction de la source dont elle est issue.
Il existe trois principales thories utilises dans la fusion de donnes : probabiliste,
videntielle et possibiliste.
12
2.5.
Prambule : Dans ce qui suit, nous allons prsenter quelques capteurs, destins au
maintien domicile.
2.5.1. Capteurs de donnes physiologiques
Les signes vitaux essentiels sont bien identifis depuis longtemps par les mdecins et
la liste des signaux accessibles depuis le domicile nest pas limite.
Le poids est la variable qui se prte le plus aisment une "auto mesure", les psepersonnes du commerce sont dune utilisation bien connue. Si le patient souffre de
certaines formes dhandicaps mentaux ou physiques, on peut envisager
lautomatisation de la prise de cette information, par exemple en pesant la personne
dans son lit [43] ou dans les toilettes [44].
Les valeurs extrmes de la tension artrielle (pressions systolique et diastolique), sont
accessibles avec des dispositifs bandeaux (sphygmomanomtres) qui se gonflent
automatiquement. Ils ncessitent de respecter certaines conditions lors de la mesure
(position de repos, compensation de la diffrence de hauteur entre le coeur et le site de
mesure).
La saturation en oxygne du sang (Oxymtrie) permet dvaluer la qualit de la
ventilation de manire non invasive. Le procd optique de la mesure value lopacit
du sang aux extrmits des doigts, des orteils ou du lobe de loreille. Si cette valeur en
instantan ne prsente pas rellement de sens mdical, son monitorage en continu, en
particulier pendant le sommeil, peut permettre de dtecter et de quantifier des
anomalies telles que les variations excessives de frquence ou les apnes obstructives
du sommeil qui engendrent une fatigue de lappareil respiratoire et cardiaque.
Le pouls, ou frquence cardiaque, sobtient de plusieurs manires. A partir du signal
lectrique cardiaque ("Electrocardiogramme") prlev depuis 3 12 lectrodes poses
sur la peau, en des endroits relativement prcis, on peut dterminer lintervalle de
temps sparant 2 signaux typiques (complexes "QRS"). La priode entre 2 battements
cardiaques est plus simplement mesurable sur le signal acoustique amplifi par un
stthoscope. Enfin, comme la fonction du coeur est de pousser priodiquement le sang
charg doxygne dans le systme vasculaire priphrique, on peut remonter la
frquence cardiaque soit en valuant la distance entre les instants successifs des
pressions artrielles systoliques et diastoliques (tensiomtre), soit entre les extremums
du taux doxygnation du sang (oxymtre).
Bien dautres capteurs, galement disponibles dans le commerce, permettent
daccder dautres paramtres plus spcifiques de certaines pathologies tels que le
taux de glycmie chez les diabtiques (Glucomtre) et la capacit respiratoire chez les
asthmatiques (PeakFlow meter).
2.5.2. Capteurs dactivits
Il sagit soit de dtecter les positions et les dplacements du sujet dans son
environnement, soit de dtecter ses postures et des vnements tels que la chute.
Le sujet peut tre repr par des dtecteurs volumtriques qui mesurent le
rayonnement Infrarouge mis par la surface du corps ou bien qui dtectent les ondes
ultrasonores rflchies. Dans le premier cas, seules des variations sont perues, donc
un sujet immobile nest plus dtect, ce qui nest pas le cas des ondes ultrasonores.
13
Il est noter que la prsence dans une zone peut tre confirme par labsence dans les
autres zones. Enfin, de simples dtecteurs de passages aux portes (contacts)
permettent aussi de localiser le sujet. Linstallation de capteurs au sol permet de situer
le sujet avec plus de prcision ("sols actimtriques") et de distinguer la prsence dun
animal de compagnie.
Les postures corporelles (debout, pench ou allong) peuvent tre dtermines
simplement avec un inclinomtre bille (lusage du mercure est maintenant prohib),
mais linformation dlivre par un acclromtre un ou plusieurs axes permet une
plus grande prcision sur linclinaison du corps, sa vitesse et son acclration et
permet mme de dtecter la chute de la personne.
2.5.3. Capteurs environnementaux
Il est enfin ncessaire de monitorer les grandeurs environnementales du domicile dans
la mesure o ces dernires ont dune part une influence sur dautres mesures (la
temprature extrieure peut modifier la temprature corporelle du patient) et nous
renseignent, dautre part, quant au mode de vie du sujet : la temprature dans les
pices (thermomtre), la pression atmosphrique (baromtre), lhumidit relative
(Hygromtre), la luminosit (luxmtre), le niveau de bruits (sonomtre).
14
Le Bracelet Aphycare
La socit AphyCare Technologies base Lannion, a dveloppe un "braceletscurit". Il sagit dun systme danalyse ambulatoire multicapteurs port au poignet,
qui acquiert et traite la fois des paramtres dactimtrie, des paramtres
physiologiques (frquence respiratoire, frquence cardiaque, temprature cutane), et
dtecte les chutes. Les donnes sont transmises par liaison radio scurise un
tltransmetteur branch sur une prise tlphonique au domicile. Les alertes sont
rceptionnes par un centre de tlassistance.
Vivago
Le bracelet Vivago (Finlandais) est un bouton-tlalarme, muni dun dtecteur de port
(si la personne lte, on sen aperoit), qui mesure la temprature cutane et des
paramtres dactivit. Lvolution dactivit quotidienne et les priodes de repos sont
suivies sur cran et transmise vers un centre, vers les familles, etc. Lorsquil dtecte
une immobilit prolonge il transmet une alarme.
Analyse de la voix
Lquipe GEOD du laboratoire CLIPS (Communication Langagire et Interactions
Personnes Systme), travaille sur le traitement des signaux acoustiques enregistrs par
plusieurs microphones disposs dans un appartement, afin den extraire le maximum
dinformation. Suite la dtection dun vnement sonore, le systme [47] lindexe
soit comme un bruit soit comme un signal de parole. Lorsquil sagit dun bruit, une
classification entre diffrentes classes prtablies indique sil sagit dun bruit normal
ou dun appels de dtresse ("au secours", " laide", ...).
La cravate Mobilthon
Mobilthon est un partenariat entre lA.F.M. (Association Franaise contre les
Myopathies) et France Tlcom R&D. Le Mobilthon se prsente sous la forme dun
foulard dot dun microphone, dun haut-parleur et de divers capteurs. Il a pour but la
gestion de la simplification des communications et de la scurit par des services
accessibles en mode volontaire soit vocalement, soit tactilement, soit en mode
automatique via les capteurs. Mobilthon permet de tlphoner quelles que soient les
limitations physiques de la personne ge quelle soit consciente ou non. Cette simple
possibilit a un effet rassurant et donc bnfique pour lutilisateur qui ne craint plus
de rester seul chez lui, ou de sortir seul.
LOCADYN 3D : Capture du mouvement
Le systme Locadyn3D est dvelopp par le CEA-LETI de Grenoble, il utilise des
mesures acclromtriques pour la capture de mouvement. Larchitecture utilise est
base sur un principe de conversion directe du phnomne physique en donnes
numriques de type Sigma Delta.
Le systme TRIDENT
Trident est un systme dvelopp par le CEA-LETI de Grenoble, il sagit dun
dispositif ambulatoire dacquisition et de mesure de mouvements en 3D, celui-ci est
compos de trois micro-centrales dattitude, combinant chacune six capteurs de type
MEMS : trois acclromtres et trois magntomtres. Ce dispositif permet de
rpondre des besoins divers tels que la mesure de lactivit des personnes ges
fragiles dans leur vie quotidienne afin de suivre lvolution de leur tat de
15
16
Composants vision
Vido 1
Vido 2
Dtection et suivi
des objets mobiles
Reconnaissance
dvnements vido
Vido m
Capteur 1
Capteur 2
Capteur 1 filtr
Capteur 2 filtr
Composants capteur
Reconnaissance
des vnements
multimodaux
Fichier
log
Reconnaissance
dvnements
contacts
Capteur n
Capteur n filtr
17
4. Evnement vido
4.1.
Cette tche consiste dtecter et suivre les objets mobiles. Pour la dtection des
objets mobiles, nous avons utilis lapproche par comparaison une image de
rfrence (Figure 5). Pour utiliser cette approche il est ncessaire de possder une
image de rfrence qui correspond limage du fond de la scne sans objet mobile.
Cette mthode consiste faire la diffrence entre limage courante et limage de
rfrence afin dobtenir les pixels en mouvement qui seront regroups en objet
mobile. On extrait de l'image courante les objets mobiles dans la scne observe qui
seront ensuite classifis en diffrentes catgories de classes correspondant leur taille
3D et leur forme, tels que la classe PERSON.
Un objet mobile est dcrit par ses paramtres 3D : le centre de gravit, la position, la
taille et la largeur.
Ltape de suivi associe un identificateur chaque objet mobile dtect et maintien
globalement son suivi dans la scne. La figure 6 illustre la dtection, la classification
et le suivi dune personne dans le laboratoire Gerhome.
18
Figure 6: Dtection, classification et suivi dune personne. La figure (a) reprsente l image
originale de la scne, sur la figure (b), les pixels en mouvement sont accentus en blanc et
regroups dans un carr orange (tape de segmentation). Sur la figure (c), lobjet mobile est
classifi en personne et un paralllpipde 3D qui entoure la personne permet dindiquer sa
position et son orientation. La figure (d) montre lidentificateur associ la personne suivie.
4.2.
Physical objects qui inclut les objets mobiles (e.g. individus), les quipements
ou les zones dintrts, etc.
Components correspond aux sous vnements qui composent lvnement.
Forbidden components qui correspondent aux vnements qui noccurrent pas
durant lvnement principal.
Constraints sont les conditions entre les objets physiques et / ou les composants
(les contraintes peuvent tres temporelle, spatiales ou logiques).
Action dcrit les actions prendre quand lvnement est reconnu.
Il y a quatre types dvnement : les tats primitifs (primitive states), les vnements
primitifs (primitive events) et enfin les vnements composs (composite events). Un
tat primitif dcrit une situation stable dans le temps qui caractrise un ou plusieurs
objets physiques. Un vnement est lactivit qui contient la liste des changements
des valeurs dtat entre deux instants successifs (e.g. la personne entre dans une zone
dintrt (la cuisine), elle est en dehors de la zone et ensuite de nouveau dans la zone).
Lvnement primitif correspond au changement des valeurs des tats primitifs et les
vnements composs sont la combinaison entre les tats et / ou les vnements. Un
exemple dun tat primitif est prsent dans la dfinition 1.
Pour dcrire les activits relatives au comportement dune personne ge, les modles
des vnements dintrt sont dfinis par des experts du domaine (par exemple des
experts mdicaux). Pour amliorer la dfinition des vnements dintrts, nous avons
utilis un langage dclaratif bas sur une librairie dvnements gnriques et sur une
ontologie dtaille dans [2],
PrimitiveState (Inside_zone,
PhysicalObjects ((p : Person), (z : Zone))
Constraints ((p in z))
Action (Priority Normal
Store_in_logfile))
Dfinition 1 : Exemple de ltat primitif Inside_zone
4.3.
20
21
Nous prsentons dans cet exemple, le modle des 2 tats primitifs qui relatent le statut
des tiroirs de cuisine (Dfinition 2). UpperCupboard est le tiroir de vaisselle et
LowerCupboard est le tiroir de la nourriture :
PrimitiveState (UpperCupboard_closed,
PhysicalObjects ((c: Equipment))
Constraints ((IsUpperCupboardClosed(c))) )
PrimitiveState (UpperCupboard_open,
PhysicalObjects ((c : Equipment))
Constraints((IsUpperCupboardOpen(c))) )
PrimitiveState (LowerCupboard_closed,
PhysicalObjects ((c: Equipment))
Constraints ((IsLowerCupboardClosed(c))) )
PrimitiveState (LowerCupboard_open,
PhysicalObjects ((c : Equipment))
Constraints((IsLowerCupboardOpen(c))) )
Dfinition 2 : Modle des deux tats primitifs, tiroir ferm et tiroir ouvert
Dans cette exprimentation, nous avons dfinis 10 tats et vnements primitifs :
Refrigerator_Open,
Refrigerator_Closed,
UpperCupboard_Closed,
UpperCupboard_Open,
LowerCupboard_Closed,
LowerCupboard_Open,
PersonClose_UpperCupboard,
PersonOpen_UpperCupboard,
PersonClose_LowerCupboard,
PersonOpen_LowerCupboard,
22
Le
traitement
des
donnes
recueillies
doit
ainsi
permettre
de :
mesurer plusieurs paramtres comportementaux avec des capteurs installs
dans lhabitat
et
identifier les modes de vie des personnes par apprentissage de leurs habitudes
relatives aux activits physiques ou environnementales en fonction du temps.
L'algorithme d'identification des vnements multimodaux (contact et vido)
reconnat quels vnements se produisent en utilisant des vnements visuels primitifs
dtects par le module de vision [section 4] et des vnements de contact dtects par
le module de dtection dvnements de contact [section 5].
Pour modliser les activits dintrts spcifis par les experts mdicaux, nous avons
dfinis 3 vnements composs qui sont : Using_food, Using_dishes et Prepare_meal.
Par exemple considrons la prparation dun repas Prepare_meal . La prparation
dun repas ncessite des mouvements dans la cuisine et lutilisation des tiroirs ou se
trouve les ingrdients, les plats et / ou les ustensiles de cuisine et quelque fois
lutilisation dappareils lectriques (micro-onde, frigidaire, etc.).
Nous avons dfini lalgorithme de lvnement Prparer un repas comme suit :
Si la personne est dans la cuisine ET ((la personne accde au tiroirs dingrdients
ET la personne accde aux plats et / ou aux tiroirs dustensiles) OU la personne
utilise le four) ALORS le repas se prpare
IF the resident is in the kitchen AND ((resident accesses meal ingredient cabinet
AND resident accesses plates or utensils cabinet) OR resident uses an appliance)
THEN a meal is prepared
La prsence dans la cuisine est indiqu par un mouvement (camra) dans la cuisine
qui persiste un certain temps, lutilisation des ingrdients est indiqu par lutilisation
des tiroirs ou ils sont stocks ou lutilisation du frigidaire (capteur de contact).
Nous dfinissons dabord quatre vnements primitifs :
personOpen_UpperCupboard,
personClose_UpperCupboard,
personOpen_LowerCupboard,
PersonClose_LowerCupboard
23
PrimitiveEvent(personClose_UpperCupboard,
PhysicalObjects((p: Person), (c : Equipment))
Components(
(uc_close: PrimitiveState UpperCupboard_closed(c)))
(p_far: PrimitiveState far_from(p, c))
Constraints((uc_close before_meet p_far) )
PrimitiveEvent(personOpen_UpperCupboard,
PhysicalObjects((p: Person), (c : Equipment))
Components(
(p_close: PrimitiveState Close_to(p, c))
(uc_open: PrimitiveState UpperCupboard_open(c)))
Constraints((p_close before_meet uc_open) )
PrimitiveEvent(personOpen_LowerCupboard,
PhysicalObjects((p: Person), (c : Equipment))
Components(
(p_close: PrimitiveState Close_to(p, c))
(lc_open: PrimitiveState LowerCupboard_open(c)))
Constraints((p_close before_meet lc_open) )
PrimitiveEvent(personClose_LowerCupboard,
PhysicalObjects((p: Person), (c : Equipment))
Components(
(lc_close: PrimitiveState LowerCupboard_closed(c)))
(p_far: PrimitiveState far_from(p, c))
Constraints((lc_close before_meet p_far) )
Dans ce qui suit nous prsentons le modle des vnements composs : Using_food,
Using_dishes et Prepare meal.
CompositeEvent(Using_dishes,
PhysicalObjects( (p: Person), (UpperCupboard: Equipment),
(Kitchen: Zone))
Components((p_inz: PrimitiveState inside_zone (p, Kitchen))
(p_open_uc: PrimitiveEvent personOpen_UpperCupboard(p,
UpperCupboard))
(p_close_uc: PrimitiveEvent personClose_UpperCupboard(p,
UpperCupboard)) )
Constraints((p_inz before_meet p_open_uc)
(p_open_uc Duration > 10)
(p_open_uc before_meet p_close_uc) ))
24
CompositeEvent(Using_food,
PhysicalObjects( (p: Person), (LowerCupboard: Equipment), (Kitchen: Zone))
Components((p_inz: PrimitiveState inside_zone (p, Kitchen))
(p_open_lc: PrimitiveEvent personOpen_LowerCupboard(p, LowerCupboard))
(p_close_lc: PrimitiveEvent personClose_LowerCupboard(p, LowerCupboard)) )
Constraints((p_inz before_meet p_open_lc)
(p_open_lc Duration > 10)
(p_open_lc before_meet p_close_lc) ))
CompositeEvent (Prepare_meal,
PhysicalObjects ((p: Person), (eq: Equipment))
Components(
(p_food: CompositeEvent Using_food (p, eq))
(p_dishes: PrimitiveEvent CompositeEvent Using_food (p, eq)))
Constraints ((p_food; p_dishes))
Action (Priority Normal, Text "the person prepares a meal))
7. Rsultats et valuation
Pour valider notre travail, nous avons simul un ensemble dvnements dans le
laboratoire dexprimentation Gerhome. Cette section dcrit les rsultats
exprimentaux obtenus. En premier lieu, nous dcrivons le laboratoire ou nous avons
simuls les scnarios. En second lieu, nous prsenterons les rsultats obtenus.
7.1.
Concept de fonctionnement
25
7.2.
26
27
7.3.
Dans cette section, nous prsentons les rsultats obtenus de la reconnaissance des
vnements multimodaux (vido et contact).
Quand le systme a correctement dtect une activit qui s'est produite, il a marqu un
vrai positif (TP); une dtection incorrecte dune activit a marqu un faux positif (FP).
Si une activit sest produite et que le systme ne la dtecte pas, il a marqu un faux
ngatif (FN). Les rsultats pour chaque identification des activits prdfinies dune
personne ge seront prsents sur le tableau 1. Nous avons alors employ deux
mtriques standard : la prcision (1) et la sensitivit (2).
- La prcision est le rapport entre le nombre de vrais positifs (reconnaissance
correcte) et la somme des nombres de vrais positifs et des faux positifs
dtects.
- La sensitivit est le rapport entre les vrais positifs dtects et la somme des
faux ngatifs et des vrais positifs dtects.
TP
TP + FP
Pr ecision =
Sensitivity =
vnement
Inside zone
(1)
TP
FN + TP
TP
(%)
100
(2)
FP FN Prcision Sensitivit
(%) (%)
0
0
1
1
Open cupboard
98
0,98
Close cupboard
98
0,98
Using food
94
0,959
0,979
Using dishes
94
0,959
0,979
Ltat primitif (Inside zone) est bien reconnu par les capteurs vido et les vnements
primitifs (Open /close cupboard) sont reconnu 98% par les capteurs de contact. Ces
vnements primitifs dfinissent deux vnements composs Using_food et
Using dishes , qui leur tour dfinissent le modle de lvnement Prepare
meal . La dfinition de ce modle utilise seulement les capteurs de contacts pour le
moment car les autres capteurs installs dans Gerhome (comme par exemple le
capteur install sur louverture du micro-onde, le capteur install sur la porte du
frigidaire, etc.) ne sont pas encore activs. Ces rsultats prliminaires nous encourage
28
8. Conclusion
Ce stage a t loccasion pour moi de travailler sur un projet concret qui ma permis
de comprendre les concepts fondamentaux du traitement automatique de squences
vido et de tester lintgration de nouvelles donnes issues dautres capteurs (capteurs
de contact) pour amliorer la dtection et la reconnaissance dactivits humaines.
Ce travail a permis une premire analyse de lapprentissage des habitudes de vie
dune personne domicile partir de la fusion de donnes enregistres par un
ensemble de capteurs (vido et contact). Tout cart par rapport ce profil
comportemental est susceptible de correspondre une situation inquitante ou
critique. La dmarche propose comprend (i) la dfinition du contexte et des objectifs
de la problmatique, (ii) la dfinition de la liste dvnements a reconnatre (iii) la
modlisation des vnements vido et contact reconnus et enfin (iiii) la modlisation
des squences de donnes multidimensionnelles et htrognes (vido et contact)
permettant didentifier les comportements rcurrents dune personne domicile dans
ses activits de la vie quotidienne.
Nous avons prsent un systme de monitorage des activits dune personne
domicile en utilisant des capteurs vido et des capteurs de contact. Lanalyse de la
qualit de la mthode et des rsultats a mis en vidence la fois les potentialits et la
complexit de mise en pratique de la combinaison dinformations issues de cameras et
des capteurs de contact. Le manque de donnes exprimentales issues dun systme
rel ou des personnes ges simulent des scnarios qui relatent leur activits
quotidiennes domicile na cependant pas permis une validation complte des
rsultats obtenus.
Une autre haute priorit du travail venir est de dfinir des vnements pour dtecter
la chute des personnes, monitorer dautres lments de lenvironnement de la
personne (exemple : temprature).
9. Travaux futurs
Il est envisag de continuer la validation en situation semi exprimentale (hpital,
clinique) et plus grande chelle (rsidences pour personnes ge, domicile) en se
basant sur la fusion et le traitement de donnes multicapteurs. Ce systme doit tre
capable de renforcer la scurit au logement des personnes dpendantes et de
prolonger la surveillance et le suivi mis en uvre par les aidants familiaux et
professionnels. Il sera mis en place par des quipements domotiques permanents,
dautres faisant appel des quipements mobiles de manire largir les conditions
d'utilisation.
29
Bibliographie
[1]
30
[13] Celler, B. G., Earnshaw, W., Ilsar, E. D., Betbeder- Matibet, L., Harris, M. F.,
Clark, R., Hesketh, T. et Lovell, N. H. (1995). "Remote monitoring of health
status of the elderly at home". A multidisciplinary project on aging at the
University of New South Wales. Int J Biomed Comput, 40(2):14755.
[14] Chan, M., Hariton, C., Ringeard, P. et Campo, E. (1995). "Smart house
automation system for the elderly and the disabled". In IEEE International
conference on Systems, Man and Cybernetics, pages 15861589.
[15] Roth, A., Carthy, Z. et Benedek, M. (1997). "Telemedicine in emergency home
carethe Shahal experience". J Telemed Telecare, 3 Suppl 1:5860.
[16] Leikas, J., Salo, J. et Poramo, R. (1998). "Security alarm system supports
independent living of demented persons". Stud Health Technol Inform,
48:402-5.
[17] Mozer, M. (1998). "The neural network house : An environment that adapts to
its inhabitants". In AAAI Spring symposium on intelligent Environments, pages
110114.
[18] Williams, G., Doughty, K. et Bradley, D. A. (1998a). "A systems approach to
achieving CarerNetan integrated and intelligent telecare system". IEEE Trans
Inf Technol Biomed, 2(1):19.
[19] Doughty, K., Isak, R., King, P., Smith, P. et Williams, G. (1999). "Midasminiature intelligent domiciliary alarm system: A practical application of
telecare". In 1st Joint BMES/EMBS Conf. Serving Humanity, Advancing
Technology, volume 2, Atlanta.
[20] Elger, G. et Furugren, B. (1998). ""smartbo" - an ict and computer-based
demonstration home for disabled people". In 3rd TIDE Congress : Technology
for Inclusive Design and Equality Improving the Quality of Life for the
European Citizen, Helsinki, Finland.
[21] Bonner, S. G. (1998). "Assisted interactive dwelling house". In 3rd TIDE
Congress : Technology for Inclusive Design and Equality Improving the Quality
of Life for the European Citizen, Helsinki, Finland.
[22] Berlo, A. V. (1998). "A "smart" model house as research and demonstration
tool for telematics development". In 3rd TIDE Congress : Technology for
Inclusive Design and Equality Improving the Quality of Life for the European
Citizen, Helsinki, Finland.
[23] Sixsmith, A. J. (2000). "An evaluation of an intelligent home monitoring
system". J Telemed Telecare, 6(2):6372.
[24] Noury, N., Herv, T., Rialle, V. et Virone, G. (2000). "Monitoring behavior in
home using a smart fall sensor and position sensors". In IEEEEMBS
"Microtechnologies in Medicine & Biology, pages 607610, Lyon, France.
[25] Rialle, V., Noury, N. et Herv, T. (2001). "An experimental health smart home
and its distributed internet-based information and communication system : first
steps of a research project". Medinfo, 10(Pt 2).
[26] H. Pigot, B. Lefebvre, J.-G. Meunier, B. Kerherv, A. Mayers, S. Giroux. "The
role of intelligent habitats in upholding elders in residence", in Proc. of the 5th
International Conference on Simulations in Biomedicine, Slovenia, April 2003,
pp. 497506.
[27] Steenkeste, F., Bocquet, H. et M Chan, E. C. (2001). "La mise en place dune
technologie pour observer le comportement nocturne des personnes ges en
institution". ITBM-RBM, 22(1): 2530.
31
[28] Noury, N. (2005). "Ailisa: experimental platforms to evaluate remote care and
assistive technologies in gerontology". In Healthcom2005, pages 155 160,
Busan-Korea.
[29] Kerr, K., White, J., Barr, D. et Mollan, R. (1997). "Analysis of the sit-stand-sit
movement cycle in normal subjects". Clin Biomech (Bristol, Avon), 12(4):236
245.
[30] Intille, S. S., Kukla, C., Stigge, B. et Bonanni, L. (2001). "Merging the physical
and digital in ubiquitous computing environments". Rapport technique,
Massachusetts Institute of Technology, Cambridge, MA, MIT Dept. of
Architecture House_n Project.
[31] Kautz, H., Arnstein, L., Borriello, G., Etzioni, O. et Fox, D. (2002). "An
overview of the assisted cognition project". In AAAI-02 Worskhop on
Automation as Caregiver : The Role of Intelligent Technology in Elder Care,
pages 6065.
[32] Avanzi, F. Bremond, C. Tornieri and M. Thonnat. "Design and Assessement of
an Intelligent Activity Monitoring Platform". EURASIP Journal on Applied
Signal Processing, Special Issue on .Advances in Intelligent Vision Systems:
Methods and Applications., Vol. 2005:14, pp. 2359-2374, 11/08/2005.
[33] N. Chleq, F. Bremond, M. Thonnat. "Advanced Video-based Surveillance
Systems", C.S. Regazzoni, G. Fabri, and G. Vernazza, Kluwer A.P. , Hangham,
MA, USA, November, 1998, Image Understanding for Prevention of Vandalism
in Metro Stations, p. 108-118.
[34] [Khoudour et al. 2001]. L. Khoudour, J. Hindmarsh, D. Aubert, S. Velastin and
C. Heath (2001). "Enhancing security management in public transport using
automatic incident detection". In L. Sucharov and C. Brebbia, editors, Urban
Transport VII: Proceeding of the 7th International Conference on Urban
Transport and the Environment for the 21st Century, pages 619-628,
Southampton, United Kinkdom. WIT Press.
[35] [Cuppilard et al. 2004]. F. Cuppilard, A. Avanzi, F. Bremond and M. Thonnat
(2004). "Video understanding for metro surveillance". In Proceedings of the
IEEE International Conference on Networking, Sensing and Control, Special
Session on Intelligent Transportation Systems (IC-NSC04), Taipei, Taiwan.
[36] V.T. Vu, F. Bremond, G. Davini, M. Thonnat (2006). "Audio-Video Event
Recognition System for Public Transport Security", ICDP 2006.
[37] Borg M., Thirde D., Aguilera J., Fernandez G., Ferryman J., and Kampel M.,
"Robust People and Vehicle Tracking for Visual Surveillance", submitted to:
"European Conference on Computer Vision", Graz, Austria, May 7th - 13th,
2006.
[38] Duchne, F. (2004). "Fusion de donnes multicapteurs pour un systme de
tlsurveillance mdicale de personnes domicile", Thse de doctorat,
Universit Joseph Foruier de Grenoble.
[39] Glascock, A. et Kutzik, D. (2000). "Behavioral telemedicine : A new approach
to the continuous nonintrusive monitoring of activities of daily living".
Telemedicine journal, 6(1):3344.
[40] K. Takahashi, H. Yamasaki. ''Audio-Visual Sensor Fusion System for Intelligent
Sound Sensing''. Proceedings of the 1994 IEEE International Conference on
Multisensor Fusion and Integration for Intelligent Systems (MFI94) Las Vegas,
NV Oct. 2-5, 1994.
32
33
Annexes
Voici une partie du code source de notre application.
/>
<Zone_list>
<Zone ident="1" name="Kitchen" plane_name="ground">
<Ref_distance_list />
<Properties_list>
<Property name="In_out_zone:Strict" />
</Properties_list>
<Outline_list>
<Point x="0" y="-577" z="0" />
<Point x="0" y="-310" z="0" />
<Point x="185" y="-310" z="0" />
<Point x="185" y="-577" z="0" />
</Outline_list>
</Zone>
<Zone ident="2" name="KitchenCupboards" plane_name="ground">
<Ref_distance_list />
<Properties_list>
<Property name="Problem_zone" />
</Properties_list>
<Outline_list>
<Point x="125" y="-577" z="0" />
<Point x="125" y="-366" z="0" />
<Point x="185" y="-366" z="0" />
<Point x="185" y="-577" z="0" />
</Outline_list>
</Zone>
<Zone ident="3" name="Livingroom" plane_name="ground">
<Ref_distance_list />
<Properties_list>
<Property name="In_out_zone:Strict" />
</Properties_list>
<Outline_list>
<Point x="0" y="-310" z="0" />
<Point x="0" y="0" z="0" />
<Point x="374" y="0" z="0" />
<Point x="374" y="-310" z="0" />
</Outline_list>
</Zone>
<Zone ident="4" name="tablechair" plane_name="ground">
<Ref_distance_list />
<Properties_list>
<Property name="In_out_zone:Strict" />
</Properties_list>
<Outline_list>
<Point x="0" y="-366" z="0" />
<Point x="0" y="-180" z="0" />
<Point x="125" y="-180" z="0" />
<Point x="125" y="-366" z="0" />
</Outline_list>
</Zone>
<Zone ident="5" name="Hall" plane_name="ground">
35
<Ref_distance_list />
<Properties_list>
<Property name="In_out_zone:Strict" />
</Properties_list>
<Outline_list>
<Point x="185" y="-577" z="0" />
<Point x="185" y="-310" z="0" />
<Point x="374" y="-310" z="0" />
<Point x="374" y="-577" z="0" />
</Outline_list>
</Zone>
<Zone ident="6" name="Bathroom" plane_name="ground">
<Ref_distance_list />
<Properties_list>
<Property name="In_out_zone:Strict" />
</Properties_list>
<Outline_list>
<Point x="374" y="-577" z="0" />
<Point x="374" y="-310" z="0" />
<Point x="625" y="-310" z="0" />
<Point x="625" y="-577" z="0" />
</Outline_list>
</Zone>
<Zone ident="7" name="Bedroom" plane_name="ground">
<Ref_distance_list />
<Properties_list>
<Property name="In_out_zone:Strict" />
</Properties_list>
<Outline_list>
<Point x="374" y="-310" z="0" />
<Point x="374" y="0" z="0" />
<Point x="625" y="0" z="0" />
<Point x="625" y="-310" z="0" />
</Outline_list>
</Zone>
</Zone_list>
<Area_list>
<Area name="GERHOME">
<Area_zones_list>
<Area_zone zone_name="Kitchen" />
<Area_zone zone_name="KitchenCupboards" />
<Area_zone zone_name="Livingroom" />
<Area_zone zone_name="tablechair" />
<Area_zone zone_name="Hall" />
<Area_zone zone_name="Bathroom" />
<Area_zone zone_name="Bedroom" />
</Area_zones_list>
</Area>
</Area_list>
<Wall_list>
36
<Outline_list>
<Point x="125" y="-426" z="0" />
<Point x="125" y="-366" z="0" />
<Point x="165" y="-366" z="0" />
<Point x="165" y="-426" z="0" />
</Outline_list>
</Equipment_obj>
<Equipment_obj ident="13" name="Chair" plane_name="objects" height="50">
<Properties_list />
<Outline_list>
<Point x="30" y="-280" z="0" />
<Point x="30" y="-240" z="0" />
<Point x="70" y="-240" z="50" />
<Point x="70" y="-280" z="50" />
</Outline_list>
</Equipment_obj>
<Equipment_obj ident="14" name="Refrigerator" plane_name="objects" height="85">
<Properties_list />
<Outline_list>
<Point x="125" y="-460" z="0" />
<Point x="125" y="-366" z="0" />
</Outline_list>
</Equipment_obj>
<Equipment_obj ident="15" name="Toilet" plane_name="objects" height="50">
<Properties_list />
<Outline_list>
<Point x="170" y="-180" z="0" />
<Point x="170" y="-100" z="0" />
<Point x="240" y="-100" z="50" />
<Point x="240" y="-180" z="50" />
</Outline_list>
</Equipment_obj>
<Equipment_obj
ident="16"
name="Electric_plates"
plane_name="objects"
height="50">
<Properties_list />
<Outline_list>
<Point x="170" y="-180" z="0" />
<Point x="170" y="-100" z="0" />
<Point x="240" y="-100" z="50" />
<Point x="240" y="-180" z="50" />
</Outline_list>
</Equipment_obj>
<Equipment_obj ident="17" name="Tap" plane_name="objects" height="50">
<Properties_list />
<Outline_list>
<Point x="170" y="-180" z="0" />
<Point x="170" y="-100" z="0" />
<Point x="240" y="-100" z="50" />
<Point x="240" y="-180" z="50" />
</Outline_list>
40
</Equipment_obj>
<Equipment_obj
ident="18"
name="ContactSensor_1"
plane_name="objects"
height="50">
<Properties_list />
<Outline_list>
<Point x="125" y="-530" z="0" />
</Outline_list>
</Equipment_obj>
</Equipment_list>
</_3D_EMPTY_SCENE>
<EXPECTED_OBJECTS>
<Expected_obj
name="PERSON"
model="C3DReliabilityModel"
plane_name="ground">
<Found_in_list>
<Found_in name="GERHOME" />
</Found_in_list>
<Parameter name="width3D" type="function" value="CGaussianFunction">
<Parameter name="mean" type="numeric" value="60.0" />
<Parameter name="sigma" type="numeric" value="35.0" />
<Parameter name="min" type="numeric" value="35.0" />
<Parameter name="max" type="numeric" value="120.0" />
</Parameter>
<Parameter name="width3D.weight" type="numeric" value="1.0" />
<Parameter name="width3D.threshold" type="numeric" value="1.0" />
<Parameter name="height3D" type="function" value="CGaussianFunction">
<Parameter name="mean" type="numeric" value="165.0" />
<Parameter name="sigma" type="numeric" value="56.0" />
<Parameter name="min" type="numeric" value="118.0" />
<Parameter name="max" type="numeric" value="220.0" />
</Parameter>
<Parameter name="height3D.weight" type="numeric" value="1.0" />
<Parameter name="height3D.threshold" type="numeric" value="1.0" />
<Parameter name="depth3D" type="function" value="CGaussianFunction">
<Parameter name="mean" type="numeric" value="20.0" />
<Parameter name="sigma" type="numeric" value="20.0" />
<Parameter name="min" type="numeric" value="10.0" />
<Parameter name="max" type="numeric" value="30.0" />
</Parameter>
<Parameter name="depth3D.threshold" type="numeric" value="1.0" />
<Parameter name="depth3D.weight" type="numeric" value="1.0" />
</Expected_obj>
</EXPECTED_OBJECTS>
</CONTEXT_DESCRIPTION>
41
main_GERHOME .cpp :
application
Reprsente
le
programme
principal
de
notre
#include "CPythonInterface.h"
#include "CDisplayActionImplementations.h"
#include "ObjectRegistration.h"
//#include "CVsipBehavior.h"
#include "CParameterReader.h"
#include <sys/dir.h>
#include "CAction.h"
#include <time.h>
//#include "CXMLOutputInd.h"
#include "imagegrab.h"
#include "CDisplay3DAction.h"
#include "ContactSensorEvent.h"
class CoutAction : public CAction
{
public:
CoutAction() : m_nbFrames(0){}
bool execute(CPythonInterface *i_pApplication,
i_compositeModuleName)
{
std::cout << m_nbFrames << std::endl;
const
std::string&
const
std::string&
std::cout.flush();
m_nbFrames++;
return true;
}
private:
int m_nbFrames;
};
class StepAction : public CoutAction
{
public:
bool execute(CPythonInterface
i_compositeModuleName)
{
*i_pApplication,
42
CoutAction::execute(i_pApplication, i_compositeModuleName);
getchar();
};
return true;
};
}
private:
int m_index;
int main()
{
registerObjects(); //Register objects of the library
registerActions(); //Register display action to be used in the generic
application
//
CTObject::m_DisplayMessage = TTRUE;
//
//
//
//Here we get a reference to the application. We cannot allocate a new
CPythonInterface. The way to obtain
//an object of this type is to used the PythonInterface::instance static method.
Wherever you are in the code,
//you always have access to the application since PythonInterface is a class not
an object.
CPythonInterface& pythonInterface = PythonInterface::instance();
43
//Now that we have a reference to the application, we can play with it.
//First of all we have to add a composite module. A composite module is the
new way to create Analyse and
//Behaviour classes. Actually, Analyse is simply a composite module before
fusion and Behaviour is a composite
//module after fusion.
//Next line create adds a composite module with name "Camera1" and
associates the parameter file
//The false (or 0) parameter indicates that this composite module is a pre
fusion composite module.
//pythonInterface.insertCompositeModule("Camera1",
"../../../dataFiles/RELIABILITYCLASSIFICATION/Gerhome/param_gerhome_cam1.dat");
pythonInterface.insertCompositeModule("Camera1",
"../../../dataFiles/RELIABILITYCLASSIFICATION/Gerhome/param_gerhome_cam2.dat");
//pythonInterface.insertCompositeModule("Camera1",
"../../../dataFiles/RELIABILITYCLASSIFICATION/Gerhome/param_gerhome_cam3.dat");
false,
false,
false,
//Now that we have added a composite module to the application, we can add
some modules.
//Using the insertModule method, we can do the job.
//How does it work ?
//The first parameter specifies the name of the composite module to which
adding the module.
//The second parameter specifies the name of the module to add. The name of
the module is directly the name
//of the module class.
// Camera 1
pythonInterface.insertModule("Camera1", "ContextModule");
pythonInterface.insertModule("Camera1", "AcquisitionModule");
pythonInterface.insertModule("Camera1", "BackgroundInitialisationModule");
pythonInterface.insertModule("Camera1", "SegmentationModule");
pythonInterface.insertModule("Camera1", "ReliabilityClassificationModule");
pythonInterface.insertModule("Camera1", "MergeBlobModule");
pythonInterface.insertModule("Camera1", "AdaptChangesModule");
pythonInterface.insertModule("Camera1", "BlobSeparationModule");
pythonInterface.insertModule("Camera1", "BlobFilteringModule");
//pythonInterface.insertModule("Camera1", "BlobPosCorrectionModule");
44
//pythonInterface.insertModule("Camera1",
"BlobPositionCorrectionModule");
pythonInterface.insertModule("Camera1", "Blob2MobileConversionModule");
pythonInterface.insertModule("Camera1", "F2FTrackingModule");
pythonInterface.insertModule("Camera1", "PersonDetectionModule");
pythonInterface.insertModule("Camera1", "NoiseTrackingModule");
pythonInterface.insertModule("Camera1", "GhostRemoverModule");
pythonInterface.insertModule("Camera1", "DoorDetectionModule");
pythonInterface.insertModule("Camera1", "NoiseFeaturesModule");
//pythonInterface.insertModule("Camera1", "BackgroundUpdatingModule");
//Here we set the number of executions of the application --> 0 for infinity
pythonInterface.setNumberOfExecutions("Camera1", 0);
//All the modules are registered, we can now attach some display to the
application calling attachDisplayAction.
//The first parameter specifies the name of the composite module to which
attaching the display.
//The second parameter specifies when we want to display information.
//The third parameter specifies what we want to display. Here
CDisplayCurrentImage. The string we pass
//here is the name of one of the classes registered in the
CDisplayActionImplementation.cpp.
//pythonInterface.attachDisplayAction("Camera1",
"BackgroundInitialisationModule-end-execution", "DisplayBackground", false, 0, 0);
//pythonInterface.attachDisplayAction("Camera1",
"BackgroundUpdatingModule-end-execution", "DisplayBackground", false, 0, 0);
//pythonInterface.attachDisplayAction("Camera1",
"BackgroundUpdatingModule-end-execution", "DisplayCurrentImage", false, 0, 0);
pythonInterface.attachDisplayAction("Camera1", "SegmentationModule-endexecution", "DisplayForeground", false, 1, 0);
//pythonInterface.attachDisplayAction("Camera1",
"SegmentationModuleend-execution", "DisplaySegmentationRepair", false, 1, 0);
pythonInterface.attachDisplayAction("Camera1", "SegmentationModule-endexecution", "DisplayBlobsWithType", false, 1, 0);
pythonInterface.attachDisplayAction("Camera1",
"ReliabilityClassificationModule-end-execution", "DisplayCurrentImage", false, 2, 0);
pythonInterface.attachDisplayAction("Camera1",
"ReliabilityClassificationModule-end-execution", "DisplayBlobsWithType", false, 2,
0);
pythonInterface.attachDisplayAction("Camera1",
"ReliabilityClassificationModule-end-execution",
"DisplayBlobsWith3DVersion",
false, 2, 0);
45
//pythonInterface.attachDisplayAction("Camera1",
"ReliabilityClassificationModule-end-execution", "DisplayContextZones", false, 2,
0);
//pythonInterface.attachDisplayAction("Camera1",
"ReliabilityClassificationModule-end-execution", "DisplayContextObjects", false, 2,
0);
//pythonInterface.attachDisplayAction("Camera1",
"ReliabilityClassificationModule-end-execution", "DisplayFocalPoint", false, 2, 0);
//pythonInterface.attachDisplayAction("Camera1",
"ReliabilityClassificationModule-end-execution", "Display3DAxis", false, 2, 0);
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayCurrentImage", false, 0, 1);
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayBlobsWithType", false, 0, 1);
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayBlobsWith3DVersion", false, 0, 1);
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayContextZones", false, 0, 1);
//pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayContextWalls", false, 0, 1);
"MergeBlobModule-end"MergeBlobModule-end"MergeBlobModule-end"MergeBlobModule-end"MergeBlobModule-end-
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayCurrentImage", false, 2, 1);
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayBlobsWithType", false, 2, 1);
"BlobFilteringModul-end-
pythonInterface.attachDisplayAction("Camera1",
end-execution", "DisplayCurrentImage", false, 2, 1);
pythonInterface.attachDisplayAction("Camera1",
end-execution", "DisplayBlobs", false, 2, 1);
"BlobSeparationModule-
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayCurrentImage", false, 1, 1);
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayBlobsWithType", false, 1, 1);
pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayMobiles", false, 1, 1);
//pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayLinks", false, 1, 1);
//pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayContextZones", false, 1, 1);
//pythonInterface.attachDisplayAction("Camera1",
execution", "DisplayContextObjects", false, 1, 1);
"BlobFilteringModul-end-
"BlobSeparationModule-
"F2FTrackingModule-end"F2FTrackingModule-end"F2FTrackingModule-end"F2FTrackingModule-end"F2FTrackingModule-end"F2FTrackingModule-end-
46
CoutAction action;
pythonInterface.attachPythonScript("Camera1", "BlobSeparationModule-endexecution", action);
//Insert composite module after fusion
pythonInterface.insertCompositeModule("Fusion",
"../../../dataFiles/RELIABILITYCLASSIFICATION/Gerhome/param_gerhome_fusion.dat");
true,
pythonInterface.insertModule("Fusion", "SynchronisationModule");
pythonInterface.insertModule("Fusion", "FusionTrackingModule");
//pythonInterface.insertModule("Fusion",
"XMLOutputFromInstancesModule");
pythonInterface.insertModule("Fusion", "IndividualAnalyseModule");
pythonInterface.insertModule("Fusion", "ScenarioRecognitionModule");
pythonInterface.attachDisplayAction("Fusion", "FusionTrackingModule-endexecution", "DisplayFusionImage", false, 1, 1);
pythonInterface.attachDisplayAction("Fusion", "FusionTrackingModule-endexecution", "DisplayIndividuals", false, 1, 1);
pythonInterface.attachDisplayAction("Fusion",
"IndividualAnalyseModuleend-execution", "DisplayFusionImage", false, 1, 2);
pythonInterface.attachDisplayAction("Fusion",
"IndividualAnalyseModuleend-execution", "DisplayIndividualAnalyse", false, 1, 2);
//
pythonInterface.attachDisplayAction("Fusion", "ScenarioRecognitionModuleend-execution", "DisplayFusionImage", false, 2, 2);
pythonInterface.attachDisplayAction("Fusion", "ScenarioRecognitionModuleend-execution", "DisplayIndividuals", false, 2, 2);
pythonInterface.attachDisplayAction("Fusion", "ScenarioRecognitionModuleend-execution", "DisplayScenario", false, 2, 2);
//
CDisplay3DAction display3DAction;
pythonInterface.attachPythonScript("Camera1",
initialisation", display3DAction);
SaveImageAction saveImage;
pythonInterface.attachPythonScript("Fusion",
end-execution", saveImage);
"ContextModule-end-
"ScenarioRecognitionModule-
//CXMLOutputInd outputInd;
//pythonInterface.attachPythonScript("Fusion", "FusionTrackingModule-endexecution", outputInd);
47
pythonInterface.setNumberOfExecutions("Fusion", 0);
//Start the application in threaded (true or 1) or not threaded mode (false or 0).
//If you pass true to this method, the application is launched automaticly.
pythonInterface.start(false);
//Call this method if you pass false to start
pythonInterface.runOnce();
time_t startTime = time(NULL);
//Call run method until it returns false.
while(pythonInterface.run())
{
// getchar();
}
time_t endTime = time(NULL);
std::cout << "Total time is " << (endTime-startTime) << " seconds" <<
std::endl;
}
return 0;
Language:
a description language, proposed by VU Van Thinh.
============================================}
List(SR_StateDefinitions,
include("../models/sr.function.model")
# State: a person is "inside" a zone
# PhysicalObjects; person p and zone z
PrimitiveState(inside_zone,
PhysicalObjects((p : Person), (z : Zone))
Constraints((p in z))
48
Alarm(AText(z's Name)
AType("NOTURGENT")
APos2D(p->Pos2D)
APos3D(p->Position))
49
50
Language:
a description language, proposed by VU Van Thinh.
============================================}
List(SR_FunctionDefinitions,
#
Define Function(InitMotor__()
#
(Debug(TRUE))
)
#
Define Function(InitMotor()
#(Debug(TRUE))
#(Print("Initiating the motor ", CurrentMotor()'s Name, "\n"))
#(Sqrt(4.0) = 2.0)
#(Print("Exp3(", 2, ") = ", Exp3(2), "\n"))
#(Debug(ON))
51
#
#
)
Define Function(EndFrame_()
(Print("\n"))
(Print("======================= Motor ", CurrentMotor()'s
Name, " starts frame ", Now, "====================\n"))
(PrintListObjectsPos(CurrentMotor()'s Persons)) # Print all persons
# Display all alarms
Vars(lAlarms : Var)
((Holds(lAlarms, CurrentMotor()'s Alarms)) &
(While(lAlarms, ((Print("Alarm (", lAlarms's First's APos3D's x,
lAlarms's First's APos3D's y, ") : ",
lAlarms's First's ARef's Actors's First's Name, " <-> ",
lAlarms's First's AText, " (",
lAlarms's First's ARef's Model, ").\n")) &
(Holds(lAlarms, lAlarms's Tail))))) )
#
#Vars(Test : CTest2)
#(Test's A1 <- "Attribute 01")
#(Test's A2 <- "Attribute 02")
#(Test's i_ <- 100)
#(Print("Class = ", Test's Class, ", i_ = ", Test's i_, ", A1 = ", Test's A1,
", A2 = ", Test's A2, "\n"))
#
#(Pause())
)
#
Define Function(Exp3(i) (i*i*i) )
#
Define Function(Fac(n)
(Print("Fac(", n, ")-> "))
(Fac1(n)) )
#
Define Function(Fac1(n)
(Print("Fac1(", n, ")-> "))
((n < 2) ? 1 : (n * Fac1(n-1))) )
#
Define Function(Fac2(n)
(Print("Fac2(", n, ")-> "))
(((n < 2) & 1) | (n * Fac2(n-1))) )
#
Define Function(Fac3(n)
(Print("Fac3(", n, ")-> "))
Vars(res : Int, i : Int)
((n <= 1) ? 1 : ((i <- n) & (res <- 1) & While((i > 1), ((res <- res*i) & (i
<- i-1) & res))) ) )
54
#
Define Function(Dec(n)
(n-1) )
#
Define Function(Inc(n)
(n+1) )
# Print a list of objects
Define Function(PrintListObjects(l)
#
((l & (Print("(", l's First's Name, " : ", l's First's Class, ") = ", l's First,
"\n")) &
((l & l's First & (Print("(", l's First's Name, " : ", l's First's Class, ") \n"))
&
(PrintListObjects(l's Tail)) ) |
TRUE) )
Define Function(PrintListObjectsPos(l)
((l & (Print("(", l's First's Name, " : ", l's First's Class, ") = ", "(", l's
First's Position's x, ", ", l's First's Position's y, ")\n")) &
(PrintListObjectsPos(l's Tail)) ) |
TRUE) )
# Print a list of objects
Define Function(WhilePrintListObjects(l)
Vars(pList : Var) # Or Holder
( ((Holds(pList, l)) &
(While(pList, ((Print("(", pList's First's Name, " : ", pList's
First's Class, ") = ", pList's First, "\n")) &
(Holds(pList, pList's Tail))))) ) |
TRUE) )
# Generate an alarm for an opened door
Define Function(IsUpperCupboardOpened_(uc)
Vars(NewAlarm : alarm)
((uc's State = Opened) ?
((NewAlarm's AText <- Name of uc + " is opened") &
(SetValue(NewAlarm's APos2D, 100., 100.)) &
(CurrentMotor()'s Alarms add Export(NewAlarm)) ) :
TRUE) )
Define Function(IsLowerCupboardOpened(lc)
#
(Print("Sate of the cupboard is: ", lc->State, ". "))
#
((lc->State = Closed_Opened) ? (Print("Closed_Opened = TRUE.\n")) :
(Print("Closed_Opened = FALSE.\n"))) )
)
55
{
#
#
#
#
}
Define Function(EndFrame()
(Debug(TRUE))
(Print("Current recognized scenarios\n"))
(PrintArrayObjects(CurrentMotor()'s Scenarios))
(Print(CurrentMotor()'s Scenarios's Length))
(Debug(FALSE))
)
Define Function(PrintArrayObjects(_A)
Vars(index : Int)
( ((Holds(index, 0)) &
(While((index < (_A's Length)), ((Print("(", (_A @ index)'s Name,
")")) & (Holds(index, index+1)))))) |
TRUE
)
)
)
56