PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Analyse Champ Caméra en temps réel
Analyse Champ Caméra en temps réel
Débuté par Philippe, 12 juin 2018 17:05 - 12 réponses
Posté le 12 juin 2018 - 17:05
Bonjour,
Je tente d'analyser en temps réel les images successives prises par une WEBCAM.
J'utilise vidéoCapture
Pour enregistrer les images les unes derrière les autres sur un fichier BMP.
Image que je charge ensuite, analyse modifie et affiche.
J'analyse l'image et la corrige avant de l'afficher dans un champ image...
Ca marche 2 seconde puis ça plante...
Je suppose que ce n'est pas bon d'enregistrer sur un disque dur un fichier à raison de 30 enregistrements différents par secondes.
Mais je ne connais pas d'autre moyen d'analyse avec WINDEV...
Ca fonctionne quelques secondes et ça plante...
Qui peut m'aider, svp?
Merci
Membre enregistré
950 messages
Popularité : +53 (63 votes)
Posté le 12 juin 2018 - 19:51
Bonjour,

qu'est ce que tu analyse sur tes images ?

peux tu nous montrer ton code stp

jordan
Posté le 22 mai 2021 - 16:01
cpt est un entier
départ , imageParSec sont des entiers
tps est une chaîne
ResCapture est un booléen =Vrai

ImMaxHor, ImMaxVer sont des entiers

CouleurPixel est un entier

CouleurPixelRouge est un entier
CouleurPixelVert est un entier
CouleurPixelBleu est un entier
img1EXPRESS est une Image



Info(CAM_SansNom1..EtatInitial)

IMG_SansNom1..Visible=Vrai

CAM_SansNom1..Visible=Vrai



cpt=0
tps=HeureSys()
départ=Val(tps[[1 À 2]])*360000+Val(tps[[3 À 4]])*6000+Val(tps[[5 À 6]])*100+Val(tps[[7 À 8]])


TANTQUE ResCapture=Vrai
ResCapture=VidéoCapture(CAM_SansNom1,"C:\TEMP\IMG2.JPG",viCaptureImage)
IMG_SansNom1..Valeur="C:\TEMP\IMG2.JPG"

ImMaxHor=IMG_SansNom1..Largeur
ImMaxVer=IMG_SansNom1..Hauteur
dDébutDessin(IMG_SansNom1)
POUR H = 1 À 15
POUR V =1 À 15
CouleurPixel = dPixelCouleur(IMG_SansNom1, H, V)
CouleurPixelRouge = modulo(CouleurPixel, 256)
CouleurPixelVert = modulo(CouleurPixel/256, 256)
CouleurPixelBleu = modulo(CouleurPixel/256/256, 256)
SI CouleurPixelRouge>125 ALORS
dPoint(H*2,V*2,TSL(270, 50,50))
SINON
dPoint(H*2,V*2,TSL(270, 0,0))
FIN
FIN
FIN
SI ResCapture=Vrai ALORS
MaFenêtre..Titre="COOL"
SINON
MaFenêtre..Titre="Tant pis"
FIN
cpt=cpt+1
tps=HeureSys()
imageParSec=cpt*100/((Val(tps[[1 À 2]])*360000+Val(tps[[3 À 4]])*6000+Val(tps[[5 À 6]])*100+Val(tps[[7 À 8]]))-départ)
LIB_SansNom1..Valeur=imageParSec
FIN
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 23 mai 2021 - 17:30
bonjour
pour info
tps=HeureSys()
départ=Val(tps[[1 À 2]])*360000+Val(tps[[3 À 4]])*6000+Val(tps[[5 À 6]])*100+Val(tps[[7 À 8]])

peut être remplacé par
tps = HeureVersEntier(HeureSys())


--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 23 mai 2021 - 17:40
CouleurPixelRouge = Modulo(CouleurPixel, 256)
CouleurPixelVert = Modulo(CouleurPixel/256, 256)
CouleurPixelBleu = Modulo(CouleurPixel/256/256, 256)

peut être remplacé par
CouleurPixelRouge = RVBRouge(CouleurPixel)
CouleurPixelVert = RVBVert(CouleurPixel)
CouleurPixelBleu = RVBBleu(CouleurPixel)


--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Posté le 26 mai 2021 - 12:04
Bonjour,
Merci pour votre réponse et vos recommandations...
J'ai effectué les modifs que vous m'avez suggérée...
Malheureusement, ça ne change rien au problème...
^^
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 26 mai 2021 - 15:37
bonjour Avec ce code je n'ai aucun blocage

Bouton de lancement
cpt est un entier = 0
départ , imageParSec sont des entiers
ResCapture est un booléen = True

départ = HeureVersEntier(HeureSys())
myPicture..Visible = True
WHILE ResCapture _AND_ myPicture..Visible
ResCapture = VideoCapture(myCam,"d:\TEMP\image_cam.JPG",viCaptureImage)
myPicture = "d:\TEMP\image_cam.JPG"
dDébutDessin(myPicture, dSansEffacer)
FOR H = 1_TO_ 15
FOR V = 1 _TO_ 15
IF RVBRouge(dPixelCouleur(myPicture, H, V)) > 125 THEN
dPoint(H*2, V*2, TSL(270, 50, 50))
ELSE
dPoint(H*2, V*2, TSL(270, 0, 0))
END
END
END

cpt++
imageParSec = cpt*100/(HeureVersEntier(HeureSys()) - départ)
MaFenêtre..Titre = (ResCapture ? "COOL : " + imageParSec ELSE "Tant pis : " + imageParSec)
Multitâche(-1)
END


Bouton d'arret
myPicture..Visible = False


--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Posté le 26 mai 2021 - 19:05
Merci beaucoup.
Effectivement ça fonctionne sans interruption...
Par contre ça sollicite énormément le disque dur qui sont me semble-t-il limités en nombre de lectures écritures...
Et je ne parle pas des temps d'accès...
Existe t il une solution en WLangage pour créer un disque dur virtuel ou bien peut-on "sauvegarder l'image en mémoire" au lieu de la sauver sur un disque réel avec videoCapture?
Posté le 26 mai 2021 - 22:54
pas testé, mais tu peux essayer, au lieu d'utiliser la capture vidéo, de faire un dCopieImageEcran dans une variable de type image... tu peux sépcifier les coordonnées de la capture pour ne copier QUE l'image de la caméra, donc en théorie, ca devrait faire ce dont tu as besoin sans passer par le disque dur
Membre enregistré
3 889 messages
Popularité : +227 (347 votes)
Posté le 27 mai 2021 - 06:23
Bonjour,
Tu as toujours la possibilité de créer un RAM DISK via des outils tels que imDisk Toolkit, ROG RAMdiks ou autres.

Où est le bon vieux temps où :
device=C:\DOS\ramdrive.sys 2048 512 1024 /e

créait un disque RAM de 2 Mo ;(

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
3 889 messages
Popularité : +227 (347 votes)
Posté le 27 mai 2021 - 06:51
Tu peux aussi tenter d'augmenter ton nombre de fichier sur le disque
sNomFichier est chaîne
....
sNomFichier=ChaîneConstruit("d:\TEMP\image_cam_%1.JPG",Modulo(cpt,24)) //On se base sur du 24 image/s (format cinéma)
ResCapture = VideoCapture(myCam,sNomFicher,viCaptureImage)
...


--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 27 mai 2021 - 13:22
Bonjour
Si vous désirez faire du traitement sur un flux vidéo sans passer par l'écriture sur disque vous devriez jeter un coup d'oeil à OpenCV
https://opencv.org/releases/

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Posté le 29 mai 2021 - 19:42
Super.
Merci beaucoup pour vos précieux coups de pouces.
Ca ne servira pas qu'à moi, je crois...
J'essaye ça dès que l'occasion me revient...
;-)