|
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é 951 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 898 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 898 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)) 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...
|
| |
| |
| | | |
|
| | | | |
| | |
|