Web cam caputras y envio para web

Iniciado por Mr.Blue, 16 Septiembre 2010, 23:29 PM

0 Miembros y 1 Visitante están viendo este tema.

Mr.Blue

Hola gente bueno les comento cual es mi idea.
Tengo el siguiente programa en VB con el cual ago la caputra de mi web cam en tiempo real.

FROM

Código (vb) [Seleccionar]
   Option Explicit
   Dim temp As Long
 
   ' botón que inicia la captura
   '''''''''''''''''''''''''''''''''''''''
   Private Sub Command1_Click()
   Dim temp As Long
 
    hwdc = capCreateCaptureWindow("CapWindow", ws_child Or ws_visible, _
                                       0, 0, 320, 240, Picture1.hwnd, 0)
     If (hwdc <> 0) Then
       temp = SendMessage(hwdc, wm_cap_driver_connect, 0, 0)
       temp = SendMessage(hwdc, wm_cap_set_preview, 1, 0)
       temp = SendMessage(hwdc, WM_CAP_SET_PREVIEWRATE, 30, 0)
       temp = SendMessage(hwdc, WM_CAP_SET_SCALE, True, 0)
       'esto hace que la imagen recibida por el dispositivo se ajuste
       'al tamaño de la ventana de captura (justo lo que yo buscaba)
       DoEvents
       startcap = True
       Else
       MsgBox "No hay Camara Web", 48, "Error"
     End If
 
   End Sub
 
   ' botón para detener la captura
   '''''''''''''''''''''''''''''''''''''''
   Private Sub Command2_Click()
 
       temp = DestroyWindow(hwdc)
       If startcap = True Then
           temp = SendMessage(hwdc, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
           DoEvents
          startcap = False
       End If
 
   End Sub
 
   ' Botón que abre el dialogo de formato
   ''''''''''''''''''''''''''''''''''''''''''''
   Private Sub Command3_Click()
           If startcap = True Then
 
               temp = SendMessage(hwdc, WM_CAP_DLG_VIDEOFORMAT, 0&, 0&)
               DoEvents
           End If
   End Sub
   ' Mostrar dialogo de Configuracion de la WebCam
   ''''''''''''''''''''''''''''''''''''''''''''''''''''
   Private Sub Command4_Click()
    Dim temp As Long
       If startcap = True Then
           temp = SendMessage(hwdc, WM_CAP_DLG_VIDEOCONFIG, 0&, 0&)
           DoEvents
       End If
   End Sub
 
   Private Sub Form_Load()
       Command1.Caption = "Iniciar"
       Command2.Caption = "Detener"
       Command3.Caption = "Formato"
       Command4.Caption = "Configurar"
       Me.Caption = "Capturador de Web Cam"
   End Sub
 
   Private Sub Form_Resize()
       On Error Resume Next
       Move (Screen.Width - Width) \ 29, (Screen.Height - Height) \ 29
   End Sub
 
   Private Sub Form_Unload(Cancel As Integer)
 
       temp = DestroyWindow(hwdc)
       If startcap = True Then
           temp = SendMessage(hwdc, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
           DoEvents
           startcap = False
       End If
   End Sub


MODULE

Código (vb) [Seleccionar]
    Option Explicit
    ' declaraciones Api, constantes, variables
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Const ws_child = &H40000000
    Public Const ws_visible = &H10000000
    Public Const WM_USER = 1024
    Public Const wm_cap_driver_connect = WM_USER + 10
    Public Const wm_cap_set_preview = WM_USER + 50
    Public Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
   Public Const WM_CAP_DRIVER_DISCONNECT = WM_USER + 11
   Public Const WM_CAP_DLG_VIDEOFORMAT = WM_USER + 41
   Public Const WM_CAP_DLG_VIDEOCONFIG = WM_USER + 42
   Public Const WM_CAP_SET_SCALE = WM_USER + 53
 
   'Api para crear la ventana de captura
   Public Declare Function capCreateCaptureWindow Lib "avicap32.dll" _
       Alias "capCreateCaptureWindowA" ( _
       ByVal lpszWindowName As String, _
       ByVal dwStyle As Long, _
       ByVal x As Long, _
       ByVal y As Long, _
       ByVal nWidth As Long, _
       ByVal nHeight As Long, _
       ByVal hwndParent As Long, _
       ByVal nID As Long) As Long
 
   Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
       ByVal hwnd As Long, _
       ByVal wMsg As Long, _
       ByVal wParam As Long, _
       lParam As Any) As Long
 
   Public Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean
   'Solo 16 Bits (vb2, vb3 y vb4  de 16)
   'Declare Function SendMessage Lib "User" ( _
       ByVal hWnd As Integer, _
       ByVal wMsg As Integer, _
       ByVal wParam As Integer, _
       lParam As Any) As Long
   'Api para crear la ventana de captura
   'Declare Function capCreateCaptureWindow Lib "avicap.dll" ( _
       ByVal lpszWindowName As String, _
       ByVal dwStyle As Long, _
       ByVal x As Integer, _
       ByVal y As Integer, _
       ByVal nWidth As Integer, _
       ByVal nHeight As Integer, _
       ByVal hwndParent As Integer, _
       ByVal nID As Integer) As Long
   'Declare Function DestroyWindow Lib "User" (ByVal hndw As Integer) As Integer
   Public hwdc As Long
   Public startcap As Integer

 
 
Bueno con esto tengo algo o una idea, pero lo que quiero hacer es poner esto en mi web, osea poder entrar en cualquier maquina y ver que sucede en mi casa o donde apunte mi webcam. Similar a un sistema de vigilancia.

Ahora bueno como ago para mandar esto a un servidor? debere usar socket?
No se si me explico bien, puede ser tambien q este codigo no me sirva, ya que enrealidad lo de tiempo real no sirve, tendria que ser como fotos o capturas de imagenes guardarlas y enviarlas, y hacer un refresh en la web y que vaya actualizadon, creo que es lo mas correcto. pero no se estoy medio en las nueves son nuevo en la prog.

Mas que nada este post esta destinado a que me den sugerencias, e ideas, de por donde encarar el problema.
Desde ya gracias.

Aca dejo lo q seria el codigo en html para la visualizacion de la cam.
Código (html4strict) [Seleccionar]
<HTML>
<HEAD>
<TITLE>Webcam</TITLE>

<META HTTP-EQUIV="Refresh" CONTENT="30">
</HEAD>
<BODY>

<IMG SRC="ImagesWebCam.gif">
<FONT FACE=Verdana SIZE=6 COLOR=#0011AA><B>Actualizacion cada minuto</B></FONT><BR><BR>
<FONT FACE=Verdana SIZE=2 COLOR=#9911AA><B>viendo nuestra vida en directo.</B></FONT><BR><BR>
<CENTER><IMG SRC="(aqui ira la ruta de la imagen la cual se refrescara cada minuto)">&" BORDER=1></CENTER><BR>
<CENTER><HR WIDTH=75% HEIGHT=2px COLOR=#0011AA></CENTER><BR>

</BODY>
</HTML>


Saludos

BlackZeroX

#1
.
Debes usar Sockets en un puerto X

Saber manejar los Header del protocolo HTTP

Saber como convertir Onthe Fly (preferiblemente)  el hDC a JPG o BMP segun desees y mandar la captura (por hay en mi disco duro tenia un codigo alrato lo busco y te lo pongo es de hDC a BMP, ya despues toca a usar algunas cosillas como GDI++ para convertirla a otro formato, me aprece que LeandroA hizo algo asi!¡.)

En codigo del HTML ponerle un Refresh X Tiempo [   <meta http-equiv="refresh" content="5; url=http://infrangelux.sytes.net/">   ]

Para haci realizar la nueva peticion de la captura X y mandarla por  el protocolo HTTP:

y esto seria "On The Fly" es decir sin Tocar el HD.

Esto que te digo es par ano instalar el APACHE o algun Soft para uns ervidor Web, aun que tambien podrias usar algun servidor web y solo guardar la imagen en alguna carpeta X... pero es mejor el metodo que te menciono arriba (en lo personal).

Dulces Lunas!¡.

The Dark Shadow is my passion.

Mr.Blue

Gracias BZX por tu respuesta, osea haber si me a quedado claro el metod, lo q decis es q tendria que hacer capturas com mi cam de determidados tiempos ejemplo cada 30 seg y comvertir esta en un archivo JPG, la comvercion a JPG tengo un codigo ya por ahi en algun lugar de mi maquina jeje, tendria q usar sockets? para mandar esto a un servidor, tengo un host creado supongo q puede servir? o no? corregime si me equivoco. pero la la idea esta, es tener algun servicio donde pueda guardar estas capturas, otra cosa tmb seria guardar la nueva captura en la anterior (ir sobreescribiendola). y realizar el refresh correspondiente para ir actualizando.


PD: lo del host no estoy totalmente seguro, y creo estar mandando cualquier verdura. o por ahi no
El tema es q ahora q lo pienso un poco mejor tengo varios datos q poner como mi user y pass. y esas cosas. y esto no va con lo que seria sockets. Puede ser?

Saludos

BlackZeroX

.
Mi idea es solo Tomar una captura cada vez que se visite la pagina, y el programa SOLO y UNICAMENTE va a Tomar capturas en cada peticion y te las mandara por Socket con el Protocolo HTTP.

Por otro lo que dices de que tome cada X tiempo y los ponga en una carpeta pues es otra alternativa no te la recomiendo ya que no le veo caso el que trabaje la WebCam cuando no se nesesita, por ello el metodo independiente TODO EN EL EXE sin depender de uns ervidor Web u otros Soft es mejor!¡.

Por dejarlo mas claro:

Tu haces el programa con Sockets y el protocolo HTTP

El ejecutable final SIMPLE no te pesara mas de 200 kb's seguro es mas no creo que ni llegue a 100kb's y ademas el rendimiento y Optimizacion serian muchisimo mejor

Por otro lado si tomas Cada X tiempo y guardas la Imagen en el HD, instalas un servidor Web, lo configuras, etc... el rendimiento y su optimización es de lo peor ya que Tu WebCam trabajaria en momentos que nadie utilizaria es decir se puede quedar tomando 24/7 en todo el año una captura y en esas miles de capturas solo viste digamos 42... no es apropiado no crees xP

El metodo que te doy es que solo en cada visita tomara una captura y te la enviaria y sin tocar el HD bueno eso si lo haces asi!¡.

Dulces Lunas!¡.
The Dark Shadow is my passion.

ranslsad

Bueno amigo aca te dejo un ejemplo que me descargue hace mucho y lo tengo en li libreria espero que te sirva porque es exactamente lo que intentas de hacer sin servidor ni menos.

http://www.filefront.com/17296676/WebCam Online en Web.zip

El programa posee un webserver propio en la misma aplicacion con lo cual con ese programa simplemente lo abres ingresas la url en tu buscar y wala...

Espero que te sirva de ejemplo ya que es una idea de 10...

Salu2

Ranslsad!


ssccaann43 ©

Cita de: ranslsad en 17 Septiembre 2010, 14:30 PM
Espero que te sirva de ejemplo ya que es una idea de 10...

Yo creo que en si es totalmente todo lo que el requiere...! No necesita mas...! Acabo de testearlo y funciona perfectamente bien...!
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

BlackZeroX

The Dark Shadow is my passion.