Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB > Images
Images Forum d'entraide sur le traitement d'images en MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2011, 19h48   #1
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : décembre 2011
Messages : 38
Points : 3
Points : 3
Par défaut Détection de mouvement

Bonjour, je suis sur un projet de logiciel de vidéosurveillance. Celui-ci doit inclure 2 modes : enregistrement manuel ( au clic ) et enregistrement automatique ( lorsqu'un événement se produit devant la webcam ).

Cependant lors de l’exécution de l'algorithme correspondant au bouton "Enregistrement automatique", la détection fonctionne 1 seconde et il faudrait cliquer en continu sur le bouton pour que celle-ci fonctionne en temps réel et non 1 sec après le clic.

Code du bouton :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
% --- Executes on button press in activer_detection_mouvement.
function activer_detection_mouvement_Callback(hObject, eventdata, handles)
% hObject    handle to activer_detection_mouvement (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of activer_detection_mouvement

set(handles.vid,'TriggerRepeat',Inf);
handles.vid.FrameGrabInterval = 5;
start(handles.vid);
try
    
    while(handles.vid.FramesAcquired<=30) % Détéction d'un mouvement
        IM = getdata(handles.vid,2);
        i1=IM(:,:,:,1);
        i2=IM(:,:,:,2);
        i1=rgb2gray(i1(:,:,1:3));
        i2=rgb2gray(i2(:,:,1:3));
        m=abs(double(i1)-double(i2))/256;
        imshow(m);title('Détection en cours')
        B = zeros (120, 160);
        if m<B+0.2
          
        else  load gong.mat;  % Avertissement 
            sound(y, 5*Fs);
            %enregistrer images preuves
            axes(handles.axes1)
            numframes=30;
            V=moviein(numframes); % create the movie matrix
            for i=1:numframes
            snapshot=getsnapshot(handles.vid);
            image(snapshot);
            set(gca, 'XTick', []);
            set(gca, 'YTick', []);
            V(:,i)=getframe;
   end


save auto.mat V

        end      
        
   end
    stop(handles.vid);
catch
    stop(handles.vid);
end
Comment puis-je arranger cela ?
Merci d'avance
Maxime54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 17h51   #2
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : décembre 2011
Messages : 38
Points : 3
Points : 3
En fait, jusqu'a la ligne 23 l'algorithme se déroule bien et après à partir du if ça plante je ne sais pas pourquoi.
L'algorithme d'enregistrement ( l28 à 36 se déroule correctement lorsque je commente le if donc c'est bien de là que vient le problème mais je ne comprend pas )

J'ai vraiment besoin d'aide.

Merci d'avance.
Maxime54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 18h14   #3
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 596
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 596
Points : 6 823
Points : 6 823
Bonjour,

Cela veut dire quoi pour toi:
Citation:
Envoyé par Maxime54 Voir le message
ça plante
?
  • Tu obtiens une erreur?
  • Cela ne fait pas ce que tu veux?
  • Autre: ...
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 18h20   #4
Membre confirmé
 
Homme Thomas Pegot
Étudiant
Inscription : janvier 2012
Messages : 195
Détails du profil
Informations personnelles :
Nom : Homme Thomas Pegot
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 195
Points : 299
Points : 299
Bonjour,

En ce qui concerne le code.
Je ne vois pas à quoi sert la matrice B en espérant qu'elle est de la même dimension que m (i1,i2) sinon erreur ligne 23 de dimension de matrice incompatible.

Si B ne sert qu'à la comparaison et est de même taille que m.
Alors tu peux remplacer:
Code :
1
2
3
B = zeros (120, 160);
 if m<B+0.2
par

et donc enlever ta variable B.

Après il faut savoir que l'instruction dans if ne sera exécuté que lorsque dans ton cas tous les éléments de la matrice seront inférieur à 0.2.

Vu qu'il n'y a pas d'instruction après la condition tu peux remplacer ton code précédent par:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        if m>=0.2
            load gong.mat;  % Avertissement 
            sound(y, 5*Fs);
            %enregistrer images preuves
            axes(handles.axes1)
            numframes=30;
            V=moviein(numframes); % create the movie matrix
            for i=1:numframes
            snapshot=getsnapshot(handles.vid);
            image(snapshot);
            set(gca, 'XTick', []);
            set(gca, 'YTick', []);
        end
En espérant que c'était ce que tu cherchais.
Gakusei est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 17h07   #5
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : décembre 2011
Messages : 38
Points : 3
Points : 3
Merci de votre aide. Maintenant l'enregistrement fonctionne mais il n'est pas sauvegarder ( cf l'erreur ci dessous ). Pourtant je ne vois pas quoi mettre de plus que


Erreur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
??? Error using ==> load
Unable to read file auto.mat: No such file or directory.

Error in ==>
videosurveillance>visualiser_les_evenements_enregistres_Callback at
176
load auto.mat V

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> videosurveillance at 42
    gui_mainfcn(gui_State, varargin{:});

Error in ==>
@(hObject,eventdata)videosurveillance('visualiser_les_evenements_enregistres_Callback',hObject,eventdata,guidata(hObject))

 
??? Error while evaluating uicontrol Callback
Merci d'avance.
Maxime54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 17h41   #6
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 596
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 596
Points : 6 823
Points : 6 823
La ligne save auto.mat V est (d'après le code de ton premier message) exécutée seulement si la condition (que tu as du changer depuis j'imagine) if m<B+0.2 est fausse. Tu as donc du passer par une condition vraie, ou ne pas appuyer sur le bouton dont le Callback est la fonction activer_detection_mouvement_Callback.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 18h06   #7
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : décembre 2011
Messages : 38
Points : 3
Points : 3
Voici à quoi ressemble mon code actuel :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
set(handles.vid,'TriggerRepeat',Inf);
handles.vid.FrameGrabInterval = 5;
start(handles.vid);
try

    while(handles.vid.FramesAcquired<=30) %
        IM = getdata(handles.vid,2);
        i1=IM(:,:,:,1);
        i2=IM(:,:,:,2);
        i1=rgb2gray(i1(:,:,1:3));
        i2=rgb2gray(i2(:,:,1:3));
        m=abs(double(i1)-double(i2))/256;
        imshow(m);title('Détection en cours')
        B = zeros (120, 160);
        if m>=0.2

            load gong.mat;
            sound(y, 5*Fs);
            %enregistrer images preuves
            axes(handles.axes1)
            numframes=20;
            W=moviein(numframes); % create the movie matrix
            for i=1:numframes
                snapshot=getsnapshot(handles.vid);
                image(snapshot);
                set(gca, 'XTick', []);
                set(gca, 'YTick', []);
                W(:,i)=getframe;
            end

            save auto.mat W

        end

    end
    stop(handles.vid);
catch
    stop(handles.vid);
end
Maxime54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 18h21   #8
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 596
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 596
Points : 6 823
Points : 6 823
Donc toujours la même remarque avec la condition if m>=0.2.

PS: Pense à indenter ton code Ctrl+A, Ctrl+I sur l'éditeur de MATLAB, c'est beaucoup plus visible de cette façon.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 18h52   #9
Invité de passage
 
Homme
Étudiant
Inscription : décembre 2011
Messages : 38
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : décembre 2011
Messages : 38
Points : 3
Points : 3
J'ai essayé de placer la commande d'enregistrement après le "end" correspondant au "if". Sauf que dans ce cas là, l'algorithme d'enregistrement ne se déroule même pas jusqu'au bout. Si je le sors carrément du "while", il ne se passe rien de plus qu'à la base.
Maxime54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 19h36   #10
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 596
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 596
Points : 6 823
Points : 6 823
Citation:
Envoyé par Maxime54 Voir le message
Sauf que dans ce cas là, l'algorithme d'enregistrement ne se déroule même pas jusqu'au bout.
C'est à dire? Tu obtiens une erreur (en récupérant l'exception dans le catch)?
As-tu essayé de voir par où l'exécution passait (breakpoints, ...)?
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h07.


 
 
 
 
Partenaires

Hébergement Web