SELECCIONRA UN CONTROLADOR (DRIVER) DE WEBCAM DESDE VFP

182 views
Skip to first unread message

adem adem

unread,
Mar 6, 2024, 8:42:49 PM3/6/24
to publice...@googlegroups.com
¡Hola a todos!
Espero que estén bien. Quisiera pedirles su ayuda con un problema que estoy enfrentando.
Estoy utilizando un programa de terceros que requiere el uso de la webcam del PC y lo estoy ejecutando desde Visual FoxPro.. Cada vez que ejecuto este programa, Windows muestra un cuadro de diálogo (como se muestra en la imagen adjunta) solicitando la selección del controlador de la webcam. ¿Existe alguna manera de integrar los nombres de los controladores disponibles en un ComboBox en mi formulario para que pueda seleccionar una opción de forma predeterminada durante el proceso? O, ¿hay alguna forma de registrar la opción seleccionada en un archivo init, de modo que cada vez que se inicie el programa, se seleccione automáticamente la opción previamente elegida? Estoy buscando una solución para evitar tener que seleccionar manualmente el controlador cada vez que ejecuto el programa.
Para proporcionar un contexto, he estado trabajando en un código que puede identificar los controladores disponibles para la webcam en mi sistema. Aquí está parte del código que he utilizado:

LOCAL lcMessage
lcMessage  = ""
loWMI = Getobject("winmgmts:\\.\root\cimv2")
loDevices = loWMI.ExecQuery("SELECT * FROM Win32_PnPEntity WHERE Caption LIKE '%camera%'")
For Each loDevice In loDevices
If loDevice.Present
lcMessage = SPACE(40)+ "** The following drivers were found **" + Chr(13)
For Each loDevice In loDevices
If loDevice.Present
lcMessage = lcMessage + SPACE(20)+ "---------------------------------------------------------------------------------------" + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Name:................." + loDevice.Name + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Description:......." + loDevice.Description + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Device ID:..........." + loDevice.DeviceID + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "PNP Device ID:.." + loDevice.PNPDeviceID + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Class:................." + loDevice.PNPClass + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Manufacturer:...." + loDevice.Manufacturer + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Service:.............." + loDevice.Service + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Present:............." + "Yes" + Chr(13) + Chr(13)
Endif
Endfor
Exit
Endif
Endfor
If Empty(lcMessage)
lcMessage = SPACE(30)+ "No driver detected, information not available...!" + Chr(13) + Chr(13)
lcMessage = lcMessage + SPACE(20)+ "---------------------------------------------------------------------------------------" + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Name:................."+ Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Description:......." + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Device ID:..........." + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "PNP Device ID:.." + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Class:................." + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Manufacturer:...." + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Service:.............." + Chr(13)
lcMessage = lcMessage + SPACE(5)+ "Present:............." + "No" + Chr(13) + Chr(13)
Else
    Thisform.Edit1.Value = lcMessage
Endif


                                              Image.bmp       Agradecería mucho cualquier ayuda al respecto. ¡Gracias!
Message has been deleted
Message has been deleted

Zarlu

unread,
Mar 16, 2024, 2:00:01 PM3/16/24
to Comunidad de Visual Foxpro en Español
Buenas tardes 76xademx76 !

Te comento de mis pruebas con ZBARCAM.
Debo aclarar que hice pruebas con mi laptop que sólo tiene una cámara.

Si se le puede pasar como parámetro el nombre del dispositivo.
El problema es que, en mi caso, el nombre es diferente al que se encuentra en la lista de dispositivos  y no se como obtenerlo.
Mi dispositivo aparece como: "USB2.0 VGA UVC WebCam" y lo pasé así: zbarcam "dev/Microsoft WDM Image Capture (Win32)"

Te sugiero probar  zbarcam desde línea de comandos y observar los primeros valores devueltos.
Sólo deja una cámara habilitada , prueba con estos parámetros y observa el valor devuelto por zbar_video_open

zbarcam "/dev/video0" --verbose=1

Después con todas las cámaras habilitadas quizá cambiando ..video0 a ...video1... funcione

Comentas

Suerte
zarlu
Chetumal, Quintana Roo, México

adem adem

unread,
Mar 16, 2024, 11:21:22 PM3/16/24
to publice...@googlegroups.com
Hola Sr ANGEL; Estoy muy muy agradecido por tu apoyo, y te comento que he solucionado el problema con lo siguiente:
He modificado el Archivo batch , haciendo un bucle, de manera que si el usuario cancela la ventana o acepta sin seleccionar ningún controlador, se vuelva a ejecutar el proceso una y otra vez,
tomando la idea desde el último form WebCam que te mande. tal como muestra el video.


Te adjunto el ejemplo corregido.

Por otro lado te dejo este código de un archivo batch, donde te permite seleccionar el controlador desde el cmd, junto con varias opciones que permite el programa Zbar. por si lo necesitas...  
@echo off

REM Listar controladores de cámara disponibles
echo Controladores de cámara disponibles:
wmic path Win32_PnPEntity where "Caption like '%%Camera%%'" get Caption /value | findstr /i /c:"Caption"

REM Solicitar al usuario seleccionar un controlador de cámara
set /p CAM_DRIVER="Seleccione el driver de la cámara: "

REM Agregar el controlador de cámara seleccionado al PATH
set "PATH=%PATH%;C:\Program Files (x86)\ZBar\bin"

REM Menú principal
:menu
cls
echo Opciones disponibles:
echo 1. Escanear y decodificar códigos de barras desde un flujo de video (640x480)
echo 2. Escanear y decodificar códigos de barras desde un flujo de video (320x240)
echo 3. Ayuda
echo 4. Versión
echo 5. Salir
echo.
set /p OPCION="Seleccione una opción: "

if "%OPCION%"=="1" (
    call :escanear_640x480
) else if "%OPCION%"=="2" (
    call :escanear_320x240
) else if "%OPCION%"=="3" (
    zbarcam.exe -h
    pause
    goto menu
) else if "%OPCION%"=="4" (
    zbarcam.exe --version
    pause
    goto menu
) else if "%OPCION%"=="5" (
    exit
) else (
    echo Opción no válida. Intente de nuevo.
    pause
    goto menu
)

:escanear_640x480
cls
echo Escaneando y decodificando códigos de barras desde un flujo de video (640x480)...
zbarcam.exe --prescale=640x480 >StrCapt.txt
pause
goto menu

:escanear_320x240
cls
echo Escaneando y decodificando códigos de barras desde un flujo de video (320x240)...
zbarcam.exe --prescale=320x240 >StrCapt.txt
pause
goto menu


Por último, preguntó, de cómo ves este ejemplo de clase , y me refiero la clase del Qr y BarCode juntos integrando el programa Zbar, me interesa tu opinión, y si sirve de algo, y si la comparto en el grupo.
por si alguien lo aprovecha, (teniendo en cuenta que lo he hecho según mi necesidad). digo esto, me gustaría ayudar tal como me ayudan  a mi.  (Compartir es Vivir)
Un gran saludo y gracias, espero tus comentarios...

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/d956c6c9-1a15-444e-a5a3-54a9bdba4a4an%40googlegroups.com.

Zarlu

unread,
Mar 18, 2024, 4:20:54 PM3/18/24
to Comunidad de Visual Foxpro en Español
Buenas tardes 76xademx76 !

Creo que sería mejor que, en el caso de varias cámaras, se configurará en la aplicación previamente el dispositivo a usar por zbarcam.
Es decir evitar la interacción del usuario para elegir y que zbarcam se ejecute con la cámara previamente elegida.
Crea que esto se lograría con "loWMI.ExecQuery("SELECT * FROM Win32_PnPEntity..." y "zbarcam "/dev/video0"..1, 2,.."

En Win32_PnPEntity usa mejor "PNPClass" en lugar de" Caption". En mi caso el caption es WebCam y no funciona con "Caption", en cambio la clase es para todos "Camera"

En el bat que tienes para elegir no tienes la opción para elegir dispositivo sino la resolución de la pantalla de Zbarcam.

Suerte
zarlu
Chetumal, Quintana Roo, México


Reply all
Reply to author
Forward
0 new messages