PDA

Ver la Versión Completa : Alguién conoce una solución simple y confiable para la WebCam en Delphi ?


rolandoj
01-04-2013, 21:40:52
Hola amigos,

Llevo días investigando el tema de como hacer que me funcione el capturar video, y luego imágenes simples, desde una WebCam con Delphi.

En este mismo foro hay un montón de hilos al respecto, y lo mismo ocurre si buscamos con Google; pero, la solución simple, basada en AviCap32.Dll y ampliamente documentada aquí, definitivamente tiene un problema muy serio de estabilidad.

He conseguido que a veces me funcione; pero, en la mayoría de los casos la pantalla aparece en negro. Eso es algo que le pasa igualmente a la mayoría de personas que han tratado con esta solución, y por ello se sugieren alternativas; pero, lo que he visto no son soluciones faciles de usar y para mi es un problema porque en mi caso el video es solo un plus a una muy pequeña parte del proyecto; no es algo que me amerite dedicarle demasiado esfuerzo y recursos.

Sea porque existe un error o incompatibilidad de la librería; o porque en muchos casos debería usarse alguna opción de la misma que no está documentada (porqu la cámara funciona desde el aplicativo nativo de Windows), el caso es que no es una solución aceptable.

La pregunta es :

Alguno conoce una solución que :

A. Sirva con cualquier versión de Windows
B. Que sea confiable (funcione siempre, o casi siempre)
C. Que sirva con cualquier versión de Delphi
D. Que sea simple de implementar

Agradezco cualquier ayuda

gustavosv
01-04-2013, 23:21:30
Qué versión de Delphi tienes ?

Entiendo que con FireMonkey incluido desde XE2 es posible hacer directamente ese manejo ...

dec
01-04-2013, 23:31:30
Hola,

Yo uso DirectX Delphi Webcam (http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample) con buenos resultados en Windows XP SP3, WIndows 7 y Windows 8.

rolandoj
02-04-2013, 04:07:18
Qué versión de Delphi tienes ?

Entiendo que con FireMonkey incluido desde XE2 es posible hacer directamente ese manejo ...
Hola,

Muchas gracias por contestar.

Pués XE2 no es una de las versiones de que dispongo; pero, aún si lo fuera, como dije antes, necesito que sea una solución que funcione en casi todas las versiones.

rolandoj
02-04-2013, 04:14:49
Hola,

Yo uso DirectX Delphi Webcam (http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample) con buenos resultados en Windows XP SP3, WIndows 7 y Windows 8.

Hola,

Muchas gracias por el dato. Ese enlace ya lo conocía; pero, no lo había intentado porque tenía referencias de que con DirectX era bastante complicado.

Si consideras que no lo es, voy a probar por mi mismo y te cuento.

Muchos saludos

rolandoj
02-04-2013, 06:57:02
Hola,

Muchísmas gracias por el dato.

Bueno, me funcionó en Delphi 2007. En Delphi 4 no trabaja; pero, me puse a modificar el código de las librerías DirectX pedidas y me funcionó; aunque hay un par de rutinas que no pude duplicarles facilmente la funcionalidad. Toca probar más a ver que tan necesarias pueden ser y que tan estable resulta.

El proceso de adaptación no es tan facil; pero, el uso del objeto en si resulta muy sencillo. Creo que probablemente la opinión que leí al respecto pudo ser porque intentaron primero el ejemplo de DirectXDelphiWebcamCapture que es complejo; pero, si se trabaja con los ejemplos del otro archivo, el DirectXDelphiWebcamCaptureDemos, los demos son muy sencillos y se entiende super rápido el uso básico del objeto (si es que solo me tomó una hora y media probar en Delphi 2007, luego desarrollar mi propio ejemplo y migrar las librerías a Delphi 4)

Les estaré contando como me va con el resto de pruebas.

Muchos saludos

CCCP
27-05-2013, 01:45:08
procedure TForm1.FormCreate(Sender: TObject);
begin
VideoCamera := TCaptureDeviceManager.Current.DefaultVideoCaptureDevice;
if VideoCamera <> nil then Begin
VideoCamera.OnSampleBufferReady := SampleBufferReady;
VideoCamera.StartCapture;
End;
end;

procedure TForm1.SampleBufferReady(Sender: TObject; const ATime: TMediaTime);
begin
TThread.Synchronize(TThread.CurrentThread, SampleBufferSync);
end;

procedure TForm1.SampleBufferSync;
begin
VideoCamera.SampleBufferToBitmap(Image1.Bitmap, True);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if VideoCamera <> nil then VideoCamera.StopCapture;
end;

CCCP
27-05-2013, 01:45:50
esto con delphi xe 3

Casimiro Notevi
27-05-2013, 09:53:56
Recuerda poner los tags al código fuente, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)