8. Webcam

Webcam
Preliminars


Connectem la càmera.
Per obtenir tota la informació sobre la càmera en un terminal fem

v4l-info

Si no tenim el programa instal·lat, doncs l'instal·lem.

A la primera línia trobarem el "video device name", que normalment és /dev/video0.
Si tenim mes d'una càmera aleshores el 0 s'incrementa...
A "general info" trobarem el nom del driver que fa ser Debian per a controlar la càmera, i a "inputs" trobarem quin nom assigna Debian a la càmera. Aquest nom és important pel que ve a continuació.
De vegades el nom assignat a la càmera coincideix amb el nom del driver.
També ens apareix informació referent la màxima resolució que pot proporcionar la càmera.

Per a comprovar que la càmera funciona bé en el nostre sistema, podem fer servir el programa cheese.
Aquest programa reconeixerà automàticament la càmera i ens permetrà fer fotos i vídeos.

La següent prova la podem fer amb el programa vlc, doncs ens proporcionarà més informació sobre el funcionament del sistema.
Entrem en el programa, Media -> Open Capture Device, a "Capture Mode" triem "Video for Linux 2" i a "video device name", el que ens hagi aparegut a v4l-info, és a dir /dev/video0. Cliquem al play i ens hauria d'aparèixer una imatge de vídeo.

Cliquem al botó de la dreta del ratolí damunt de la imatge de vídeo i anem a Interface -> Codec Information.
Aquí ens apareixeran els còdecs de vídeo i àudio, resolució, sample rate, etc.



El Programa Webcam

El programa webcam ens permet automatitzar la presa periòdica d'imatges i permet enviar-les via ftp.
A més incorpora un detector de moviment que permet, si volem, enregistrar imatges només quan hi ha algun canvi entre una imatge i la següent.
Podem instal·lar el programa webcam a través del synaptic.

A la carpeta home obrim el fitxer .webcamrc (que conté la configuració) i a dins hi posem:


[ftp]
host = localhost
user = nobody
pass = xxxxxx
dir = /home/eduard/Pictures
file = webcam.jpg
tmp = imageup.jpg
local = 1

[grab]
device = /dev/video0
text = "webcam %Y-%m-%d %H:%M:%S"
width = 320
height = 240
delay = 1
input= zc3xx
#norm = pal
quality = 75
trigger = 180
archive = /home/eduard/Pictures/Webcam/%Y-%m-%d %H:%M:%S.jpeg

Si obrim un terminal i fem

man webcam

trobarem una senzilla explicació dels paràmetres.
També trobareu informació a Debian Linux Web Cam Server Configuration.
A "input" cal especificar el nom de la càmera tal i com apareix a vl4-info.
Si fem norm = pal de vegades es produeix un error, que es subsana simplement posant-ho com a comentari (afegint #).
El programa sembla que es capaç de detectar el paràmetre norm per ell mateix.

Si executeu el programa, començareu a obtenir imatges cada segon (corresponents a archive) i a la carpeta dir hi trobareu la ultima imatge presa, en un determinat moment, per la càmera.

Si el programa us dona l'error "can't get rgb24 data", aleshores proveu d'executar el programa de la manera següent:

LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so webcam

i segurament tot anirà bé... i si no, comproveu si la vostra càmera s'adapta a aquesta solució o alguna altre de les que trobareu en aquest enllaç.



El programa motion

Aquest programa és força més sofisticat, però relativament fàcil d'utilitzar i és una passada!!!.
No dona els mateixos problemes que el programa webcam amb certes càmeres.

Es configura a través d'un fitxer de configuració motion.conf on s'especifiquen totes les opcions, que no son poques.
Aquest fitxer és força auto-explicatiu i val la pena fer-li una bona ullada.
El trobareu a la carpeta /etc/motion.

Podeu fer-vos una versió curta d'aquest fitxer, doncs hi ha moltes opcions que ja les agafa per defecte i no cal canviar-les.
Aquesta versió més reduïda la podeu guardar a la carpeta des d'on crideu al programa.
La meva versió està adaptada a les següents especificacions.

i) Enregistrar vídeo en format swf només quan es detecti algun canvi a un cert nombre de píxels de la imatge.
ii) Imatges de 1280x960, dues per segon.
iii) Hi hagi moviment o no, guardar una imatge jpeg cada 60 segons.
iV) Guardar els fitxers a una determinada carpeta (mireu cap al final la variable target_dir).

El codec corresponent a l'input de la càmera el podeu esbrinar amb el programa VLC.
De tota manera el programa es capaç d'auto-detectar opcions errònies i corregir-les.


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

###########################################################
# Capture device options
###########################################################

videodevice /dev/video0

# INPUT CODEC
# v4l2_palette Values :
# V4L2_PIX_FMT_SN9C10X : 0  'S910'
# V4L2_PIX_FMT_SBGGR8  : 1  'BA81'
# V4L2_PIX_FMT_MJPEG   : 2  'MJPEG'
# V4L2_PIX_FMT_JPEG    : 3  'JPEG'
# V4L2_PIX_FMT_RGB24   : 4  'RGB3'
# V4L2_PIX_FMT_UYVY    : 5  'UYVY'
# V4L2_PIX_FMT_YUYV    : 6  'YUYV'
# V4L2_PIX_FMT_YUV422P : 7  '422P'
# V4L2_PIX_FMT_YUV420  : 8  'YU12'
v4l2_palette 6

# Output 'normal' pictures when motion is detected (default: on)
# Activa o desactiva la presa d'imatges jpeg

output_normal off

# Rotate image this number of degrees. The rotation affects all saved images as
# well as mpeg movies. Valid values: 0 (default = no rotation), 90, 180 and 270.

rotate 0

# Image width (pixels). Valid range: Camera dependent, default: 352
# Image height (pixels). Valid range: Camera dependent, default: 288

width 1280
height 960


###########################################################
# Capture options
###########################################################

# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).

framerate 2

# Minimum time in seconds between capturing picture frames from the camera.
# Default: 0 = disabled - the capture rate is given by the camera framerate.
# This option is used when you want to capture images at a rate lower than 2 per second.

minimum_frame_time 0

# Specifies the number of pre-captured (buffered) pictures from before motion
# was detected that will be output at motion detection.
# Recommended range: 0 to 5 (default: 0)
# Do not use large values! Large values will cause Motion to skip video frames and
# cause unsmooth mpegs. To smooth mpegs use larger values of post_capture instead.

pre_capture 2

# Number of frames to capture after motion is no longer detected (default: 0)

post_capture 2

# Gap is the seconds of no motion detection that triggers the end of an event
# An event is defined as a series of motion images taken within a short timeframe.
# Recommended value is 60 seconds (Default). The value 0 is allowed and disables
# events causing all Motion to be written to one single mpeg file and no pre_capture.

gap 60

# Aixo vol dir que si durant 60 segons no passa res, inicia un nou
# fitxer de vídeo (si és que estem fent vídeo)


####################################
# VIDEO
####################################

# Use ffmpeg to encode mpeg movies in realtime (default: off)
# Aquesta opció a d'estar a "on" per a que el programa enregistri vídeo.
ffmpeg_cap_new on

# OUTPUT CODEC to used by ffmpeg for the video compression.
# Timelapse mpegs are always made in mpeg1 format independent from this option.
# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.
# mpeg1 - gives you files with extension .mpg
# mpeg4 or msmpeg4 - gives you files with extension .avi
# msmpeg4 is recommended for use with Windows Media Player because
# it requires no installation of codec on the Windows client.
# swf - gives you a flash film with extension .swf
# flv - gives you a flash video with extension .flv
# ffv1 - FF video codec 1 for Lossless Encoding ( experimental )
# mov - QuickTime ( testing )

ffmpeg_video_codec swf


#### Use ffmpeg to encode a timelapse movie
# Default value 0 = off - else save frame every Nth second
ffmpeg_timelapse 0


############################################################
# Motion Detection Settings:
############################################################

# Threshold for number of changed pixels in an image that
# triggers motion detection (default: 1500)
#  1500  per  320x240, es adir, un pixel per cada 50 aprox.
#  6000  per  640x480
# 24000  per 1280x960

threshold 12000

############################################################
# Snapshots (Traditional Periodic Webcam File Output)
############################################################

##### Make automated snapshot every N seconds (default: 0 = disabled)
snapshot_interval 60


############################################################
# Output Files
############################################################

# The quality (in percent) to be used by the jpeg compression (default: 75)
quality 75

############################################################
# Text Display
# %Y = year, %m = month, %d = date,
# %H = hour, %M = minute, %S = second, %T = HH:MM:SS,
# %v = event, %q = frame number, %t = thread (camera) number,
# %D = changed pixels, %N = noise level, \n = new line,
# %i and %J = width and height of motion area,
# %K and %L = X and Y coordinates of motion center
# %C = value defined by text_event - do not use with text_event!
# You can put quotation marks around the text to allow
# leading spaces
############################################################

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /home/eduard/Pictures/Webcam


# File path for snapshots (jpeg or ppm) relative to target_dir
# Default: %v-%Y%m%d%H%M%S-snapshot
# Default value is equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-snapshot
# File extension .jpg or .ppm is automatically added so do not include this.
# Note: A symbolic link called lastsnap.jpg created in the target_dir will always
# point to the latest snapshot, unless snapshot_filename is exactly 'lastsnap'
snapshot_filename %v-%Y%m%d_%T-snapshot

# File path for motion triggered images (jpeg or ppm) relative to target_dir
# Default: %v-%Y%m%d%H%M%S-%q
# Default value is equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H/%M/%S-%q
# File extension .jpg or .ppm is automatically added so do not include this
# Set to 'preview' together with best-preview feature enables special naming
# convention for preview shots. See motion guide for details
jpeg_filename %v-%Y%m%d_%T-%q

# File path for motion triggered ffmpeg films (mpeg) relative to target_dir
# Default: %v-%Y%m%d%H%M%S
# Default value is equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d/%H%M%S
# File extension .mpg or .avi is automatically added so do not include this
# This option was previously called ffmpeg_filename
movie_filename %v-%Y%m%d_%T

# File path for timelapse mpegs relative to target_dir
# Default: %Y%m%d-timelapse
# Default value is near equivalent to legacy oldlayout option
# For Motion 3.0 compatible mode choose: %Y/%m/%d-timelapse
# File extension .mpg is automatically added so do not include this
timelapse_filename %Y%m%d-timelapse


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


Webcam server


Si a més a més volem que l'ordinador actuï com a "webcam server", en el port 8081, afegim les següents opcions (que controlen a banda la velocitat de presa i la qualitat de les imatges):

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
###################################################################
# Live Webcam Server  --->  The video stream is in mjpeg format.
###################################################################

# The mini-http server listens to this port for requests (default: 0 = disabled)
webcam_port 8081

# Quality of the jpeg (in percent) images produced (default: 50)
webcam_quality 50

# Output frames at 1 fps when no motion is detected and increase to the
# rate given by webcam_maxrate when motion is detected (default: off)
webcam_motion on

# Maximum framerate for webcam streams (default: 1)
webcam_maxrate 2

# Restrict webcam connections to localhost only (default: on)
webcam_localhost off

# Limits the number of images per connection (default: 0 = unlimited)
# Number can be defined by multiplying actual webcam rate by desired number of seconds
# Actual webcam rate is the smallest of the numbers framerate and webcam_maxrate
webcam_limit 0


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


En l'ordinador client mirem la webcam amb el firefox, accedint la pàgina web,

http://192.168.1.18:8081

Heu de substituir 192.168.1.18 per la IP del vostre servidor.

Si enlloc del firefox volem utilitzar el propi programa motion per processar les imatges i el video streaming, simplement li hem de dir al programa a quina url es troba la càmera en l'ordinador client:



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


# URL to use if you are using a network camera, size will be autodetected (incl http:// ftp:// or file:///)
# Must be a URL that returns single jpeg pictures or a raw mjpeg stream. Default: Not defined

netcam_url value  http://192.168.1.18:8081



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


Control remot de la webcam

Si volem controlar la càmera instalada al servidor des de l'ordinador client a través del port 8080, necessitem que el servidor tingui activades les seguents opcions:

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

############################################################
# HTTP Based Control
############################################################

# TCP/IP port for the http server to listen on (default: 0 = disabled)
control_port 8080

# Restrict control connections to localhost only (default: on)
control_localhost off

# Output for http server, select off to choose raw text plain (default: on)
control_html_output on


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


En l'ordinador client podem accedir al control de la càmera accedint a la pàgina web,

http://192.168.1.18:8080

Heu de substituir 192.168.1.18 per la IP del servidor.
Ens sortira un menu molt senzill on podem canviar el valor de qualsevol paràmetre.
No es pot canviar la grandària de les imatges per aquest procediment, tot i que el navegador us ho deixi fer.


Motion Daemon

Podem iniciar el programa com a  daemon afegint la opció

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

############################################################
# Daemon
############################################################

# Start in daemon (background) mode and release terminal (default: off)
daemon on

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


Com veieu el programa és molt versàtil i encara conté moltes més opcions de configuració.


Si necessiteu resoldre algun dubte, poseu-vos en contacte a través d'aquest enllaç.