lunedì 9 luglio 2012

Camera SMT-SNP-3120 con PTZ

Recentemente mi e' capitato di lavorare con la telecamera in oggetto che ha uno zoom ottico di 12x con una risoluzione di 795x596 Pixel (reale 704x576 quindi niente di che rispetto alle comuni e economiche webcam 640x480) , autofocus

L'alimentazione viene fornita tramite Ethernet via POE
La rotazione e' di 360° sull'asse orizzontale e di 180° su quello verticale

Il sistema di gestione principale e' costituito da un programma in Silverlight che ovviamente non funziona via Linux (a meno di non rischiare la via Moonlight che francamente ho scartato) .. fortunatamente ci sono un po' di sostituzioni

Per la visualizzazione delle immagini si puo' tranquillamente usare VLC collegato in modalita' rtsp all'indirizzo

rtsp://192.168.1.100/profile2/media.smp

per utilizzare la modalita' PTZ ovvero la possibilita' di muovere la telecamera le cose sono piu' complicate
Sono disponibili dei comandi http

http://192.168.1.100/cgi-bin/ptz.cgi?movepan=100 (il parametro e' un angolo da 0° a 359°)
http://192.168.1.100/cgi-bin/ptz.cgi?movetilt=90 (il parametro e' un angolo da -5° a 185°)
http://192.168.1.100/cgi-bin/ptz.cgi?movezoom=3 (il parametro e' un valore da 1 a 12)

il problema grosso e' che non si puo' creare uno script (per esempio in Python) per muovere la telecamera in quanto in sistema monta un sistema di autenticazione via http che NON e' possibile disattivare (almeno su questo modello di camera)

Di seguito un esempio di codice Python per inviare comandi http che  NON funziona a causa del sistema di autenticazione
--------------------------------------------------------------------
import pygame
import urllib


from pygame import *
pygame.init()
pygame.display.set_mode((500,500),OPENGLBLIT|OPENGL|DOUBLEBUF)
exitt = 0
inte = 4096
while not exitt:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exitt = True
        if event.type == pygame.KEYDOWN and event.key == pygame.K_a:

        params = urllib.urlencode({'movepan': '100'})
         url = "http://192.168.1.4//cgi-bin/ptz.cgi?%s" % params
        f = urllib.urlopen(url)
      
if event.type == pygame.KEYDOWN and event.key == pygame.K_s:
        params = urllib.urlencode({'movepan': '200'})
         url = "http://192.168.1.4//cgi-bin/ptz.cgi?%s" % params
        f = urllib.urlopen(url)

--------------------------------------------------------------------


Come workaround ho installato apache sulla macchina ed ho creato una pagina  fatta di soli link su http://localhost/index.html alle varie funzioni della camera
per esempio

<a href http://192.168.1.100/cgi-bin/ptz.cgi?movepan=100> Pan 100</a>
<a href http://192.168.1.100/cgi-bin/ptz.cgi?movepan=120> Pan 120</a>
<a href http://192.168.1.100/cgi-bin/ptz.cgi?movepan=140> Pan 140</a>



cliccando sul link, se non autenticati, la camera richiede l'autenticazione
In questo modo si sfrutta il browser per gestire il lato autenticazione http