PROJET AUTOBLOG


Nicolargo

source: Nicolargo

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Encore un effort pour la libération du cahier Debian

dimanche 2 juin 2013 à 17:54

Mise à jour du billet

La libération du livre est désormais acquise, merci à vous tous !

Il est cependant possible de continuer à y participer pour soutenir un peu plus le projet Debian.

===

Raphaël Hertzog s'est lancé dans un projet qui mérite un petit coup de pouce de la part de la communauté des logiciels libres: la libération du Cahier Debian, la référence littéraire pour les utilisateurs et administrateurs du système d'exploitation Debian (traduction et adaptation de la version originale en Anglais de "The Debian administrator's Handbook").

bandeau-toutes-couvertures

Trois objectifs sont en fait visés:

Pour cela Raphaël et Roland, après négociation préalable avec l'éditeur Eyrolles, sont passés par un système de financement de type "crowfunding". Ainsi, à partir du site Ulule, il vous est possible de participer à cette aventure en finançant en amont ce beau projet. Pour cela, plusieurs offres sont possibles, de 5€ à 600€+ pour les plus riches :) . Pour que celle-ci commence vraiment et que le projet soit réalisé, il faut un minimum de 15.000€.

A l'heure actuelle (2 juin à 18h), il reste encore 4.500€ à trouver.

Je compte sur vous pour donner quelques €€€€.

Cliquez ici pour participer au projet de libération du cahier Debian !

Bonne fin de week-end !

Note: personnellement, je trouve l'offre à 50€ la plus atractive car elle permet d'avoir le cahier au format papier (c'est mon coté old school qui parle).

Cet article Encore un effort pour la libération du cahier Debian est apparu en premier sur Le blog de NicoLargo.

Streaming depuis la Raspberry Camera

jeudi 30 mai 2013 à 11:53

Après une rapide présentation de la Raspberry Camera 5M (voir ce précédant billet), entrons dans le vif du sujet avec une utilisation pratique: le streaming "live" du flux vidéo vers une autre machine de votre réseau. Les applications peuvent aller d'un "baby video phone" à  un "interphone vidéo" pour votre maison en passant par toutes les autres choses qui vous passent par la tête !

Actuellement, la camera dispose d'un logiciel spécifique Raspivid (dont les sources sont disponibles sur Github), pour capturer et encoder en H.264 la vidéo dans un fichier ou bien sur le flux standard de sortie (stdout). C'est cette dernière particularité que nous allons exploiter afin de rediriger le flux vidéo vers une pipeline GStreamer qui va s'occuper du streaming vers notre machine cible (celle ou l'on souhaite voir la vidéo).

Installation des composants GStreamer

On commence par installer GStreamer sur notre Raspberry PI. Pour cela on saisi la commande suivante:

sudo apt-get install gstreamer-tools gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly

L'installation va prendre un certain temps. Passiensa !

Pour vérifier que les composants ont été correctement installé, saisir la commande suivante:

gst-inspect

Qui devrait afficher les chiffres suivants (qui peuvent varier légèrement selon votre configuration):

Total count: 233 plugins, 695 features

Lancement de la diffusion (streaming) sur le Raspberry

On utilise la pipeline suivante:

raspivid -t 0 -w 1280 -h 720 -fps 25 -b 2500000 -p 0,0,640,480 -o - | gst-launch -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.0.9 port 5000

Détaillons un peu cette ligne de commande. La première partie est dédiée à Raspvid et s'occupe de l'encodage H.264. Les paramètres sont très importants pour avoir une qualité vidéo conforme à vos besoins. Ainsi, dans mon exemple, je n'y suis pas allé avec le dos de la cuillère car j'ai opté pour une résolution HD 720p (-w 1280 -h 720) à 25 images par seconde (-fps 25) pendant un temps infini (-t -1).

Pour le streaming, le paramètre de débit (bitrate, -b 2500000) est primordial car il va fixer le débit sortant de la vidéo (à 2.5 Mbps dans mon exemple).

Ce débit est à adapté selon votre résolution. Après quelques tests, voici une table indicative des débits à utiliser:

Note: attention au dimensionnement de votre réseau si vous utilisez des débits élevés, en effet même avec des bornes Wifi ressentes, il est difficile de garder un débit constant de 5 Mbps (Full HD).

Note 2: sur le Raspberry, je conseille d'utiliser l'interface Ethernet et pas un dongle Wifi, surtout avec des résolutions importantes.

La commande passe ensuite la main à GStreamer qui va encapsuler le flux H.264 dans un conteneur RTP puis créer le serveur TCP en écoute des clients (il faudra penser à remplacer l'adresse IP par celle de votre Raspberry Pi).

Lecture de la vidéo depuis une autre machine

J'ai fait le test depuis mon portable Ubuntu 13.04 en saisissant la ligne de commande suivante pour récupérer et afficher la vidéo:

gst-launch-1.0 -v tcpclientsrc host=192.168.0.9 port=5000  ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

La qualité de la vidéo est très bonne, fluide. On note quelques retard quand on sollicite le réseau en parallèle mais cela semble normal vu les débits utilisés.

Lecture streaming Raspberry Pi Camera 720p

Ce qui est très impressionnant au niveau du Raspberry, c'est la faible consommation CPU. En effet, Raspivid ne dépasse pas les 2% (merci le GPU) et GStreamer les 25%. On peut sans aucun problème laisser tourner le tout sans risque de surchauffe.

Conclusion

J'espère que cette rapide introduction sur le streaming vidéo depuis le Raspberry vous a donné des idées que vous aller vous empresser de nous faire partager dans les commentaires ci-dessous !

Retrouvez mes articles sur l’écosystème Raspberry Pi en cliquant ici.

Cet article Streaming depuis la Raspberry Camera est apparu en premier sur Le blog de NicoLargo.

Test de la caméra Raspberry Pi 5M

lundi 27 mai 2013 à 08:00

Raspberry propose depuis peu et pour moins de 25€ une caméra dédiée à sa gamme Pi. Cette caméra de quelques grammes se connecte à une Raspberry Pi (model A ou B) à travers une interface CSi v2 (MIPI camera interface) dédiée. Grâce à Kubii (fournisseur Farnell en France) j'ai pu obtenir rapidement un de ces caméra que nous allons tester dans ce billet.

Découverte de la (petite) bête

Avec un capteur d'une résolution native de 5 mégapixels (5M) et au niveau optique d'une lentille de focalisation fixe, la caméra peut servir d'appareil photo (résolution maximale de 2592 par 1944 pixels) ou de caméra vidéo (format HD juqu'à 1080p). Son poids est impressionnant car elle ne pèse pas plus de 4 grammes pour une dimension de L25 l20 H9 (en millimètre).

Raspberry Camera 5M 1.3

Installation de la caméra

On commence par brancher la caméra sur l'interface CSi. Il faut y aller doucement, sans forcer comme un bourrin. Je vous conseille de visualiser la vidéo suivante:

Il faut disposer d'une distribution Raspbian à jour avant de pouvoir activer la caméra:

sudo apt-get update && sudo apt-get upgrade

Puis on lance ensuite l'utilitaire raspi-config ou un nouveau menu devrait vous permettre d'activer la caméra (choix numéro 5 - Activate the camera):

sudo raspi-config

Un reboot plus tard vous pouvez commencer à jouer avec la caméra

Utilisation de la caméra pour prendre des photos

Première surprise un peu désagréable: la caméra n'est pas reconnue comme un device vidéo standard (accessible via /dev/videoX). En l'état actuel des choses on ne peut donc pas l'utiliser avec une bibliothèque comme GStreamer.

Pour utiliser la caméra comme appareil photo, il faut donc passer par un utilitaire installé de base dans Raspbian: Raspistill (les sources sont disponibles sur Github).

Ce logiciel est utilisable en ligne de commande.

Prenons donc notre première "photo" en résolution maximale et à main levé (2592 par 1944 pixels):

raspistill -o image001.jpg

RaspberryCamera

La même photo avec l'option de stabilisation activée (pas de grosse différence mais je ne bougeais pas):

raspistill -ev -o image002.jpg

RaspberryCamera

Il est possible de désactiver la compression JPEG en utilisant le tag --raw (mais attention la taille des images passes à plus de 5 Mo):

raspistill --raw -o image002.jpg

Voir le résultat ici.

Il est bien sûr possible de fixer la résolution avec les tag -h et -w. Par exemple une photo en 1280x1024:

raspistill -w 1280 -h 1024 -o image003.jpg

RaspberryCamera

Utilisation de la caméra pour capturer des vidéo

Tout comme pour les photos, il faut passer par le l'utilitaire Raspivid (les sources sont disponibles sur Github). Le logiciel va permettre de générer des vidéos au format H.264.

Capturons notre première vidéo en full HD (1080p) pendant  10 secondes (-t 10000):

raspivid -t 10000 -o video001.h264

La vidéo est stocké au format H.264 dans le fichier video001.h264. Pour lire cette vidéo sur votre Raspberry, vous pouvez utiliser la commande omxplayer qui va utiliser le GPU interne et afficher la vidéo d'une manière fluide sans consommation CPU.

omxplayer video001.h264

On peut voir que la qualité du capteur est au rendez-vous, la vidéo est lumineuse et fluide, comparable à ce que l'on peut obtenir avec un bon smartphone.

Pour activer la prévisualisation de la vidéo dans un coin de l'écran (position 0x0 et taille de 640x480) on peut utiliser l'option -p:

raspivid -t 10000 -p 0,0,640,480 -o video0012.h264

Aller plus loin ?

La documentation officielle des deux commandes.

Raspistill

raspistill
==========
--width,	-w		Set image width <size>
--height,	-h		Set image height <size>
--quality,  -q		Set jpeg quality <0 to 100>
Quality 100 is almost completely uncompressed. 75 is a good all round value
--raw,	-r		Add raw bayer data to jpeg metadata
This option inserts the raw Bayer data from the camera in to the JPEG metadata
--output	-o		Output filename <filename>.
Specify the output filename. If not specified, no file is saved. If the filename is '-', then all output is sent to stdout.
--verbose,	-v		Output verbose information during run
Outputs debugging/information messages during the program run.
--timeout,	-t		Time before takes picture and shuts down.
The program will run for this length of time, then take the capture (if output is specified). If not specified, this is set to 5 seconds
--timelapse,-tl		Timelapse mode.
The specific value is the time between shots in milliseconds. Note you should specify %d at the point in the filename where you want a frame count number to appear. e.g.
	-t 30000 -tl 2000 -o image%d.jpg
will produce a capture every 2 seconds, over a total period of 30s, named image1.jpg, image2.jpg..image15.jpg.
--thumb,	-th		Set thumbnail parameters (x:y:quality)
Allows specification of the thumbnail image inserted in to the JPEG file. If not specified, defaults are a size of 64x48 at quality 35.
--demo, 	d	 	Run a demo mode <milliseconds>
This options cycles through range of camera options, no capture is done, the demo will end at the end of the timeout period, irrespective of whether all the options have been cycled. The time between cycles should be specified as a millisecond value.
--encoding,	-e		Encoding to use for output file
Valid options are jpg, bmp, gif and png. Note that unaccelerated image types (gif, png, bmp) will take much longer to save than JPG which is hardware accelerated. Also note that the filename suffix is completely ignored when encoding a file.
--exif,	-x		EXIF tag to apply to captures (format as 'key=value')
Allows the insertion of specific exif tags in to the JPEG image. You can have up to 32 exif tge entries. This is useful for things like adding GPS metadata. For example, to set the Longitude
	--exif GPS.GPSLongitude=5/1,10/1,15/100
would set the Longitude to 5degs, 10 minutes, 15 seconds. See exif documentation for more details on the range of tags available; the supported tags are as follows.

Raspivid

raspivid
========
--width,	-w		Set image width <size>
Width of resulting video. This should be between 64 and 1920.
--height,	-h		Set image height <size>
Height of resulting video. This should be between 64 and 1080.
--bitrate,	-b		Set bitrate.
Use bits per second, so 10MBits/s would be -b 10000000. For H264, 1080p a high quality bitrate would be 15Mbits/s or more.
--output	-o		Output filename <filename>.
Specify the output filename. If not specified, no file is saved. If the filename is '-', then all output is sent to stdout.
--verbose,	-v		Output verbose information during run
Outputs debugging/information messages during the program run.
--timeout,	-t		Time before takes picture and shuts down.
The program will run for this length of time, then take the capture (if output is specified). If not specified, this is set to 5seconds
--demo, 	d	 	Run a demo mode <milliseconds>
This options cycles through range of camera options, no capture is done, the demo will end at the end of the timeout period, irrespective of whether all the options have been cycled. The time between cycles should be specified as a millisecond value.
--framerate, 	-fps  Specify the frames per second to record
At present, the minimum frame rate allowed is 2fps, the maximum is 30fps. This is likely to change in the future.
--penc,	-e	Display preview image *after* encoding
Switch on an option to display the preview after compression. This will show any compression artefacts in the preview window. In normal operation, the preview will show the camera output prior to being compressed. This option is not guaranteed to work in future releases.

Conclusion

Pour moins de 60€, il est donc possible d'avoir un Raspberry Pi model B + Camera qui vous ouvre la porte à pas mal de possibilité. J'espère rapidement voir apparaître une API (en Python par exemple) permettant de programmer directement la caméra.

De mon coté je vais faire un peu mumuse avec ce nouveau jouet puis revenir prochainement vers vous pour de nouveaux billets sur le sujet !

Cet article Test de la caméra Raspberry Pi 5M est apparu en premier sur Le blog de NicoLargo.

Witsub télécharge automatiquement vos sous-titres

dimanche 19 mai 2013 à 19:30

subtitles

Witsub est mon dernier projet personnel visant à développer un utilitaire en ligne de commande permettant de télécharger automatiquement l'ensemble des sous-titres disponibles de votre bibliothèques de vidéos. L'objectif étant de disposer d'un outil simple, rapide, efficace et facilement déclenchable par script shell.

Comment marche Witsub

Witsub est développé en pure Python (sans bibliothèque non standard) et devrait donc fonctionner sur tous les systèmes d'exploitations (je l'ai uniquement testé sous GNU/linux). Dans son utilisation la plus simple, il prend en entrée un fichier ou un répertoire et une langue souhaitée pour les sous-titres. Ensuite il va parcourir la base de donnée OpenSubtitles pour y trouver les fichiers .srt correspondant à vos fichiers vidéos.

Pour installer Witsub, vous pouvez directement télécharger le script sous Github:

wget https://github.com/nicolargo/witsub/blob/master/witsub/witsub.py
chmod a+x witsub.py

ou bien utiliser les sources avec l'installeur au format tar.gz:

wget https://s3.amazonaws.com/witsub/witsub-1.1.tar.gz
tar zxvf witsub-1.1.tar.gz
cd witsub-1.1
sudo python setup.py install

ou plus propre utiliser PiPY pour l'installer sur votre système:

sudo pip install witsub

Un exemple valant mieux qu'un long discours, voici Witsub en action.

On commence par visualiser le répertoire videos avant le lancement de Witsub

videos
	├── A wonderfull movies.avi
	├── A top serie
	│   ├── A top serie - S1E01.avi
	│   └── A top serie - S1E02.avi
	└── Not a video file.txt

Puis on lance Witsub en fixant la langue Française (code ISO fre, voir la liste complète des codes ici):

witsub -l fre -f ./videos

On se retrouve avec:

videos
	├── A wonderfull movies.avi
	├── A wonderfull movies.srt
	├── A top serie
	│   ├── A top serie - S1E01.avi
	│   ├── A top serie - S1E01.srt
	│   ├── A top serie - S1E02.avi
	│   └── A top serie - S1E02.srt
	└── Not a video file.txt

Voir ce qui se passe

J'ai fait en sorte, avec l'option -V, que Witsub affiche chacune des étapes de sa recherche de sous-titres. Par exemple, pour forcer (-w) le téléchargement des sous-titres Anglais de la vidéo breakdance.avi en mode debug:

# witsub -V -w -f ./test/testdata/breakdance.avi
19/05/2013 15:19:29 DEBUG - Running witsub version 1.0
19/05/2013 15:19:29 DEBUG - Debug mode is ON
19/05/2013 15:19:29 DEBUG - Force overwrite if file exist: True
19/05/2013 15:19:29 DEBUG - No language define. Default is eng
19/05/2013 15:19:29 DEBUG - Subtitle language search set to eng
19/05/2013 15:19:29 DEBUG - Connect to XML-RPC server http://api.opensubtitles.org/xml-rpc
19/05/2013 15:19:29 DEBUG - Login to XML-RPC server <ServerProxy for api.opensubtitles.org/xml-rpc>
19/05/2013 15:19:29 DEBUG - Login successfull with status 200 OK
19/05/2013 15:19:29 DEBUG - Compute hash tag for file test/testdata/breakdance.avi
19/05/2013 15:19:29 DEBUG - Hash tag for file test/testdata/breakdance.avi is 0x8e245d9679d31e12L
19/05/2013 15:19:29 DEBUG - Search subtitle in the database
19/05/2013 15:19:29 DEBUG - Search done in 0.008 seconds
19/05/2013 15:19:29 DEBUG - 4 subtitles found
19/05/2013 15:19:29 DEBUG - Subtitle 1/4 (English - Dwnl: 364): The.Sea.Inside.2004.DVDRip.XviD-RiZZ.srt
19/05/2013 15:19:29 DEBUG - Subtitle 2/4 (English - Dwnl: 224): breakdance.srt
19/05/2013 15:19:29 DEBUG - Subtitle 3/4 (English - Dwnl: 421): breakdance2.srt
19/05/2013 15:19:29 DEBUG - Subtitle 4/4 (English - Dwnl: 143): breakdance2.srt
19/05/2013 15:19:29 DEBUG - Select the first one (most downloaded): The.Sea.Inside.2004.DVDRip.XviD-RiZZ.srt
19/05/2013 15:19:29 DEBUG - Download the compressed subtitle file (id 1951887680): http://dl.opensubtitles.org/en/download/filead/1951887680.gz
19/05/2013 15:19:30 DEBUG - Download processed in 0.05 seconds
19/05/2013 15:19:30 DEBUG - Unzip the compressed subtitle file
19/05/2013 15:19:30 DEBUG - Write the subtitle to test/testdata/breakdance.srt
19/05/2013 15:19:30 INFO - Download completed: test/testdata/breakdance.srt
19/05/2013 15:19:30 DEBUG - Logout from XML-RPC server <ServerProxy for api.opensubtitles.org/xml-rpc>
19/05/2013 15:19:30 DEBUG - Logout successfull with status 200 OK

Les sources !

Witsub est hébergé sur GitHub: https://github.com/nicolargo/witsub

Merci d'y poster vos problèmes, questions, demandes d'amélioration !

Faites tourner :)

PS: Je ne suis pas très actif sur le blog en ce moment, la faute à pas mal de choses qui me laissent peu d'énergie pour rédiger des billets. Mais ne vous inquiétez pas, certains sont en préparation, notamment un sur la nouvelle caméra pour Raspberry Pi.

Cet article Witsub télécharge automatiquement vos sous-titres est apparu en premier sur Le blog de NicoLargo.

De Squeeze à Wheezy…

dimanche 5 mai 2013 à 18:59

Depuis aujourd'hui, Wheezy est officiellement devenue la septième version stable du système d'exploitation GNU/Linux Debian. Nous allons dans ce billet voir une migration simple d'un serveur Squeeze (Debian 6) vers cette nouvelle version de Debian. Cette migration est adapté uniquement aux serveurs avec une configuration standard. Pour des configurations exotiques, je vous conseille fortement de suivre la procédure officielle très bien détaillée sur le site de Debian.

Avant de commencer...

Se loguer en root (ou avec un user ayant les droit root):

su - root

On commence par préparer le terrain

Avant de procéder à la migration vers Wheezy, il faut s'assurer que votre Squeeze et propre et à jour. Pour cela, on commence par mettre à jour les repos et les packages Squeeze:

$ apt-get update && apt-get upgrade

On doit ensuite et c'est une des étapes les plus lourdes, vérifier que l'ensemble des repos non standards sont disponibles pour Wheezy.

On commence par visualiser le fichier /etc/apt/sources.list:

deb http://debian.mirrors.ovh.net/debian/ squeeze main
deb-src http://debian.mirrors.ovh.net/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
## DotDeb Package
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all

On peut donc voir que j'utilise les miroirs officiels de Debian fournis par OVH (l'hébergeur de mon serveur de test) qui sont disponibles pour Wheezy ainsi que le repo DotDeb  également disponible pour Wheezy.

On poursuit avec les repos disponibles sous /etc/apt/sources.list.d/. Je n'ai personnellement qu'un seul repo qui est compatible avec Wheezy:

$ cat /etc/apt/sources.list.d/10gen.list
deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen

Pour les utilisateurs de sudo

Si vous utilisez sudo sur votre système, il faut effectuer les manipulations suivantes avant la mise à jour sous peine de se retrouver sans fichier de configuration valable.

cp /etc/sudoers /etc/sudoers.d/mysettings

On édite ensuite le fichier /etc/sudoers.d/mysettings pour lui enlever les lignes Defaults et #includedir. Lors de l'upgrade, le fichie /etc/sudoers doit être remplacé par le nouveau.

Pour les utilisateurs de php5-suhosin

Le paquet php5-suhosin n'existe plus dans cette nouvelle version de Debian. Il faut donc saisir la commande suivante pour supprimer la configuration correspondante /etc/php5/conf.d/suhosin.ini:

dpkg --purge php5-suhosin

Puis on migre vers Debian 7 (aka) Wheezy

Si tous les repos que vous utilisez sont compatibles, alors il suffit de saisir la commande suivante pour migrer les fichiers de configuration vers Wheezy:

sed -i 's/squeeze/wheezy/g' /etc/apt/sources.list
for i in `ls /etc/apt/sources.list.d/*.list`; do sed -i 's/squeeze/wheezy/g' $i; done

On va ensuite enchaîner la mise à jour proprement dite en faisant:

apt-get update
apt-get upgrade
apt-get dist-upgrade

Il ne vous reste plus qu'à attendre et vérifier qu'il n'y a pas de problème lors des ces trois étapes. Si vous avez une erreur, attention de bien la résoudre (Google est ton ami) avant de passer à l'étape suivante. PAr exemple, il est possible que certains paquets n'arrive pas à se mettre à jour. Les deux ligne suivantes devraient corriger ce problème:

apt-get -f install
apt-get dist-upgrade

On finalise la configuration en vérifiant que le fichier

Sinon, il ne vous reste plus qu'à redémarrer votre serveur (cette dernière étape étant facultative).

Cet article De Squeeze à Wheezy… est apparu en premier sur Le blog de NicoLargo.