| |
Membre enregistré 92 messages Popularité : +2 (2 votes) |
|
Posté le 13 mai 2017 - 11:51 |
bonjour,
j'essaye de recupérer le signal video d'une caméra USB 2 IDS uEye.
Dans un premier temps j'ai utilisé le driver directshow dans un champ caméra. il permet de lire, enregistrer des vidéos et voir en live l'image;
Je voudrais aller un peu plus loin en particulier pouvoir enregistrer des images en sélectionnant une région (ROI region of interest ou AOI) Je n'ai pas trouvé (ou je ne sais pas) une solution avec le champ caméra de Windev.
Je m'oriented donc vers l'assemblage dotnet mais c'est pas facile à utiliser vu mon niveau.
Pouvez-vous m'aider au démarrage.
J'ai ajouter un champ dotnet à ma fenetre est instancié une "camera"
Voici la procédure d'utilisation de l'assemblage donnée par le fabricant
1.Create a uEye .NET object, e.g. uEye.Camera cam = new uEye.Camera(); 2.Now you can start working with the .NET interface. Capturing the first image 1.Initialize the camera: cam.Init(); 2.Allocate an default image memory: cam.Memory.Allocate(out s32MemId); You can also allocate an image memory by using: cam.Memory.Allocate(); 3.Capture a live image with cam.Acquisition.Capture(s32Wait); or a single image with cam.Acquisition.Freeze(s32Wait); With s32Wait = uEye.Defines.DeviceParameter.Wait the image acquisition waits until an image is captured and returns afterwards. With s32Wait = uEye.Defines.DeviceParameter.DontWait the image acquisition returns immediately. 4.Display the image on the screen: cam.Display.Render(uEye.Defines.DisplayRenderMode mode) mode selects different rendering modes, e.g. mode = uEye.Defines.DisplayRenderMode.FitToWindow.
J'ai fait :
clCam_Ueye est un uEye.Camera() clCam_Ueye.Init()
clCam_Ueye.Memory.Allocate()
clCam_Ueye.Display.Render(uEye.Defines.DisplayRenderMode.FitToWindow)
et j’obtiens le code erreur
Que s'est-il passé ? L'invocation de la méthode <Render(uEye.Defines.DisplayRenderMode)> du type <Status> a échoué Le framework .NET a renvoyé l'erreur suivante : La référence d'objet n'est pas définie à une instance d'un objet.
Pourriez-vous m'aider à traduire le démarrage de code svp
Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 13 mai 2017 - 16:41 |
hello,
d'après le message d'erreur tu passes à la méthode render une référence vide.
Je pense qu'il manque quelque chose à ta méthode display.render , comme l'identifiant renvoyé par cam.Memory.Allocate(out s32MemId) et le handle de ton champ où tu veux faire afficher les images.
A définir dans la structure mode attendu en paramètre ? mais ça c'est plus le mode d'affichage d'après ce que je comprends, as tu plus de doc ?
Peut être peux tu essayer ceci en ajoutant la phase capture :
mon_id est un entier système mon_handle est un entier ma_capture est un entier
clCam_Ueye est un uEye.Camera() clCam_Ueye.Init()
mon_id=clCam_Ueye.Memory.Allocate() mon_handle = handle(champimage)
ma_capture= = uEye.Defines.DeviceParameter.Wait // on attend pas
cam.Acquisition.Capture(ma_capture) // capture
clCam_Ueye.Display.Render(mon_id,mon_handle,uEye.Defines.DisplayRenderMode.FitToWindow)
vala |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 92 messages Popularité : +2 (2 votes) |
|
Posté le 14 mai 2017 - 08:42 |
hello,
j'ai essayé le code suivant car j'obtiens un message d'erreur avec mon_id et ma_capture (impossible d'affecter un objet dotnet à un entier)
mon_id est un entier système mon_handle est un entier système ma_capture est un entier système
clCam_Ueye est un uEye.Camera() clCam_Ueye.Init()
SELON clCam_Ueye.get_IsOpened() CAS Vrai Info("Caméra connectée") AUTRE CAS FIN
mon_handle = Handle(IMG_Cam)
clCam_Ueye.Acquisition.Capture(uEye.Defines.DeviceParameter.Wait) clCam_Ueye.Display.Render(clCam_Ueye.Memory.Allocate(),mon_handle,uEye.Defines.DisplayRenderMode.FitToWindow)
cela ne plante pas mais la capture n'est pas renvoyée vers le champ image.
Je me demande si je ne devrais pas chercher vers DirectShow.
Cordialement |
| |
| |
| | | |
|
| | |
| |
Posté le 14 mai 2017 - 17:49 |
Re,
je pense que tu n'es pas loin ...
A priori tout est ok, cela viendrait donc de windev ( il faut quand même vérifier ce que te renvoie display.render)
Plutôt que de récupérer l'identifiant du champ via la fonction handle(), essaie d'utiliser ddebutdessin qui va te permettre de récupérer l'identifiant du champ et indiquer à windev que tu vas dessiner / modifier un champ image.
comme ceci : mon_handle = ddebutdessin(IMG_Cam,deffacer).
Et regarde si en troisième paramètre de la méthode display.render qu'il me semble être le mode de rendu si il n'y a pas autre chose que uEye.Defines.DisplayRenderMode.FitToWindow
Bon courage ! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 92 messages Popularité : +2 (2 votes) |
|
Posté le 15 mai 2017 - 12:17 |
Bonjour,
j'ai essayé mais sans succès. Il y a bien plein de constantes Normal, MirrorUpDown,DownScale_1_2,PlanarColorBlue,Rotate_90... que j'ai essayées sans plus de succès.
Et pas de plantage ce qui est surprenant.
Peut être une autre piste ?
Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 15 mai 2017 - 14:34 |
Coucou,
3.Capture a live image with cam.Acquisition.Capture(s32Wait); or a single image with cam.Acquisition.Freeze(s32Wait); With s32Wait = uEye.Defines.DeviceParameter.Wait the image acquisition waits until an image is captured and returns afterwards. With s32Wait = uEye.Defines.DeviceParameter.DontWait the image acquisition returns immediately.
Te manques as sa ?
Que s'est-il passé ? L'invocation de la méthode <Render(uEye.Defines.DisplayRenderMode)> du type <Status> a échoué Le framework .NET a renvoyé l'erreur suivante : La référence d'objet n'est pas définie à une instance d'un objet
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 15 mai 2017 - 14:41 |
Coucou,
Tu devrais essayer d utiliser la variable d affectation
Le WLangage propose l'inférence de type à partir de la version 18. Par exemple le code :
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/163494-inference-type-soit-variable-valeur/read.awp
sPile est une chaîne sPile = dbgInfo(dbgPile) peut avantageusement être Remplace par :
soit sPile = dbgInfo(dbgPile)
Frédéric G A priori tout est ok, cela viendrait donc de windev - Non, pour l editeur UML -> oui, mais la non ;o
Plutôt que de récupérer l'identifiant du champ via la fonction handle(), essaie d'utiliser ddebutdessin qui va te permettre de récupérer l'identifiant du champ et indiquer à windev que tu vas dessiner / modifier un champ image.
comme ceci : mon_handle = ddebutdessin(IMG_Cam,deffacer).
-> Non. Et du coup pourquois ? parceque Handle renvent une reference, pas un identifiant.
Et regarde si en troisième paramètre de la méthode display.render qu'il me semble être le mode de rendu si il n'y a pas autre chose que uEye.Defines.DisplayRenderMode.FitToWindow
Putain, t es vraimment convaincu que c de la faute d un autre !
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trust |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 15 mai 2017 - 14:57 |
Coucou, je pense que c juste que tu t embrouille pour rien .-)
clCam_Ueye est un uEye.Camera() clCam_Ueye.Init()
soit mon_id=clCam_Ueye.Memory.Allocate()
clCam_Ueye.Acquisition.Capture(uEye.Defines.DeviceParameter.Wait)
soit mon_handle = Handle(IMG_Cam) clCam_Ueye.Display.Render(mon_id,mon_handle,uEye.Defines.DisplayRenderMode.FitToWindow)
-- Charly CanDo. Forg en Nouvelle-Zélande - In üs we trustMessage modifié, 15 mai 2017 - 15:11 |
| |
| |
| | | |
|
| | |
| |
Posté le 15 mai 2017 - 15:47 |
bonjour,
J'ai téléchargé un exemple en VB
Pour l'affichage la première valeur passée en paramètre à Display.render est obtenue via GetActive Camera.Memory.GetActive(out s32MemID); Camera.Display.Render(s32MemID, displayHandle, uEye.Defines.DisplayRenderMode.FitToWindow);
pour l'identifiant /reference / valeur du champ destination je pencherai plutôt pour ddebutdessin() que pour handle().
pour le displayrendermode essaie 1 (normal) :
à priori pour la capture Camera.Acquisition.Capture() suffit.
// Open Camera and Start Live Video if (Camera.Acquisition.Capture() == uEye.Defines.Status.Success) { bLive = true; }
tu peux également tester à ne récupérant qu'une image :
Voila tiens moi au courant c'est toujours sportif les assemblages .net ... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 92 messages Popularité : +2 (2 votes) |
|
Posté le 15 mai 2017 - 16:52 |
Merci beaucoup.
J'ai testé le code suivant qui fonctionne.
mon_handle est un entier système
pclCam_Ueye est un uEye.Camera dynamique
pclCam_Ueye = allouer un uEye.Camera
mon_handle = Handle(IMG_Cam)
pclCam_Ueye.Init(0,EntierSystèmeVersEntier(mon_handle)) pclCam_Ueye.Memory.Allocate() pclCam_Ueye.Acquisition.Capture(uEye.Defines.DeviceParameter.Wait) pclCam_Ueye.Display.AutoRender.SetEnable(True)
je peux maintenant aller plus loin.
merci |
| |
| |
| | | |
|
| | |
| |
Posté le 15 mai 2017 - 17:28 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 92 messages Popularité : +2 (2 votes) |
|
Posté le 16 mai 2017 - 14:20 |
Et quelques améliorations pour qu'il soit plus propre en intégrant la classe Status de la caméra.
mon_handle est un entier système mon_handle = Handle(IMG_Cam)
clStatusRet<-clCam_Ueye.Init(0,EntierSystèmeVersEntier(mon_handle)) IF (clStatusRet <> uEye.Defines.Status.SUCCESS) THEN Info("Camera initializing failed") END
clStatusRet<-clCam_Ueye.Memory.Allocate() IF (clStatusRet <> uEye.Defines.Status.SUCCESS) THEN Info("Allocate Memory failed") END
clStatusRet<-clCam_Ueye.Acquisition.Capture(uEye.Defines.DeviceParameter.Wait) IF (clStatusRet <> uEye.Defines.Status.SUCCESS) THEN Info("Start Live Video failed") ELSE gbLive = True clCam_Ueye.Display.Render(mon_handle,uEye.Defines.DisplayRenderMode.FitToWindow) clCam_Ueye.Display.AutoRender.SetEnable(True) END Message modifié, 16 mai 2017 - 14:21 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 92 messages Popularité : +2 (2 votes) |
|
Posté le 17 mai 2017 - 18:40 |
Bonjour
j'ai encore besoin d'un coup de main pour récupérer les paramètres de ma caméra. je n'arrive pas à traduire .
je ne parviens pas à déclarer un " range " Quand je liste l'explorateur d'objet de la classe uEye.types je vois l'objet Range<T> qui contient des membres get-Maximum() , get-Minimum
:uEye.Types.Range<Double> range;
statusRet = m_Camera.Timing.Framerate.GetFrameRateRange(out range);
Int32 s32Steps = Convert.ToInt32((range.Maximum - range.Minimum) / range.Increment);
Pouvez-vous m'aider svp. Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 17 mai 2017 - 23:26 |
hello,
l'aventure continue, on vise les J.O...
La classe Range à un constructeur qui ne prend aucun paramètre, normalement tu devrais t'en sortir comme ça :
mon_range est un "uEye.Types.Range<System.Double>"
et ensuite pointer sur son adresse (ou pas) avec la méthode GetFrameRateRange
statusRet = m_Camera.Timing.Framerate.GetFrameRateRange(&mon_range);
sur un malentendu ça peut marcher... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 92 messages Popularité : +2 (2 votes) |
|
Posté le 18 mai 2017 - 18:32 |
J'aimerais bien être un champion mais on ne fait pas un cheval de course avec un âne.
J'ai pas réussi avec le type Range mais heureusement il existe un autre méthode qui renvoie directement des rééls sur 4 octets MIN MAX et incrément.
Procedure Check_Exposure_Range()
clStatusRet<-clCam_Ueye.Timing.Exposure.GetRange(gtab_Exposure[1],gtab_Exposure[2],gtab_Exposure[3]) IF (clStatusRet <> uEye.Defines.Status.SUCCESS) THEN Info("Camera Get Exposure Range failed") END
clStatusRet<-clCam_Ueye.Timing.Exposure.Get(grExposure)
IF (clStatusRet <> uEye.Defines.Status.SUCCESS) THEN Info("Camera Exposure Get failed") END
Merci encore |
| |
| |
| | | |
|
| | |