Le programme motionplus est un utilitaire de détection de mouvement à partir de diverses sources vidéo, webcam, flux vidéo, caméra IP, wifi ou que sais-je encore disposible sur le réseau. Il intègre un serveur httpd où les vidéos peuvent être visualisées en temps réel, on peut également visualiser les évènements, c'est à dire tout mouvement ayant fait l'objet d'un enregistrement. L'utilisation d'une base de donnée est nécessaire pour gérer les évènements.
Le site officiel est https://motion-project.github.io/ on y découvre le programme d'origine motion et une version refondue appelée motionplus présentée ici dans cette page, qu'on décompresse en tapant
tar xvfz motionplus-release-0.2.2.tar.gz
cela donne le répertoire motionplus-master on récupérera préalablement les packages lib64microhttpd-devel et lib64camera-devel, on verra plus loin comment utiliser un serveur Apache httpd. On revient dans le répertoire dans lequel on tape
autoreconf -fiv;./configure
--with-ffmpeg=/usr/local/lib --with-mariadb=/usr/local/mysql
L'option with-ffmpeg pointe vers le répertoire où se trouvent les bibliothèques de ffmpeg compilées par mes soins pour éviter qu'il utilise la version du système. Voilà le résultat
**************************
Configure
status
motionplus 0.2.2
**************************
CPPFLAGS: -D_THREAD_SAFE
-I/usr/include/p11-kit-1 -I/usr/include/webp
-I/usr/include/libcamera -I/usr/local/include
-I/usr/include/opencv4
-I/usr/local/mysql/include/mysql/ -D_REENTRANT
LIBS: -pthread -ljpeg -lmicrohttpd
-lwebpmux -lwebp -lsharpyuv -lcamera -lcamera-base
-L/usr/local/lib -lavutil -lavformat -lavcodec -lswscale
-lavdevice -lopencv_gapi -lopencv_stitching -lopencv_alphamat
-lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired
-lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres
-lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf
-lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform
-lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid
-lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape
-lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping
-lopencv_superres -lopencv_optflow -lopencv_surface_matching
-lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text
-lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio
-lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect
-lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn
-lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc
-lopencv_core -L/usr/local/mysql/lib/ -lmariadb
-lsqlite3 -lpulse -pthread -lpulse-simple
-lasound -lfftw3
LDFLAGS:
OS
: linux-gnu
pthread_np
: no
pthread_setname_np : yes
pthread_getname_np : yes
XSI
error
: no
webp support : yes
V4L2 support : yes
libcamera support : yes
FFmpeg support : yes
libavformat version : 61.1.100
OpenCV
: yes
version
: 4.6.0
SQLite3 support : yes
MYSQL support : no
PostgreSQL support : no
MariaDB support : yes
ALSA support : yes
PulseAudio support : yes
FFTW support : yes
Install prefix: /usr/local
mariadb -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10952
Server version: 11.4.2-MariaDB Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
MariaDB [(none)]> create database motionplus;
Query OK, 1 row affected (0,001 sec)
A présent on va modifier le fichier de configuration, un fichier de configuration motionplus-dist.conf par défaut a été créé sous /usr/local/etc/motionplus/ on le renomme motionplus.conf. Vous trouverez ci-dessous les modifications qui ont été opérées
;*************************************************
;***** Camera
;*************************************************
device_name
device_id
target_dir /emile/photo/motion
La variable target_dir pointe à l'endroit où seront stockés snapshots et vidéos, je l'ai placé dans l'arborescence de mon serveur Apache pour qu'ils puissent être visibles.
(...)
;*************************************************
; Device config files - One for each device.
;*************************************************
camera /usr/local/etc/motionplus/camera1.conf
camera /usr/local/etc/motionplus/camera2.conf
camera /usr/local/etc/motionplus/camera3.conf
Définition des caméras qui seront utilisées et qui seront décrites dans les fichiers mentionnés ci-dessus
(...)
;*************************************************
;***** Scripts
;*************************************************
on_event_start /usr/local/bin/motionmail
on_event_end
script à lancer s'il y a un évènement en cours. Le script contient simplement
#!/bin/bash
mail -s "Evenement motion" olivier.hoarau@funix.org
(...)
;*************************************************
;***** Picture
;*************************************************
picture_output off
picture_filename %v-%Y%m%d%H%M%S-%q
;*************************************************
;***** Movie
;*************************************************
movie_output on
movie_max_time 120
movie_quality 45
movie_container mp4
movie_filename %v-%Y%m%d%H%M%S
pour chaque évènement c'est une vidéo utilisant le conteneur mp4 (et le codec x265) qui sera utilisée, il faut mettre picture_output à on pour avoir des snapshots
(...)
;*************************************************
;***** Base de donnée
;*************************************************
database_type mariadb
database_dbname motionplus
database_host mariadb-serveur
database_port 3306
database_user root
database_password password
Ces dernières directives permettent d'accéder à la base de données motionplus. Le logiciel n'intègre pas par défaut de système d'alerte par mail ou sms, en revanche on dispose du paramètre on_motion_detected qui permettra de lancer un script qui pourra faire cette alerte.
Maintenant pour une connexion sécurisée avec mot de passe et chiffrement TLS on rajoutera les lignes suivantes
;***** Web Control
;*************************************************
webcontrol_port 8080
webcontrol_localhost off
webcontrol_parms 3
webcontrol_auth_method digest
webcontrol_authentication user:motdepasse
webcontrol_tls on
webcontrol_cert /etc/ssl/public/apache.crt
webcontrol_key /etc/ssl/apache/apache.key
je me suis servi du certificat perso et de la clé définis par ici.
Pour davantage de détails sur le fichier de configuration, voir cette page https://motion-project.github.io/motionplus_config.html
On définit maintenant les fichiers de configuration des caméras, exemple ci-dessous avec une caméra IP accessible via rtsp et une webcam.
; /usr/local/etc/motionplus/camera1.conf
;
; This config file was generated by motionplus 0.2.2
;*************************************************
; Configuration options specific to camera 1
;*************************************************
;*************************************************
;***** Camera
;*************************************************
device_name MyCam1
device_id 101
;*************************************************
;***** Source
;*************************************************
netcam_url rtps://admin:password@192.168.2.110
;*************************************************
;***** Image
;*************************************************
width 1280
height 720
;*************************************************
;***** Overlays
;*************************************************
text_left CAMERA 1
;*************************************************
;***** Movie
;*************************************************
movie_filename CAM01_%t-%v-%Y%m%d%H%M%S
et le fichier pour la deuxième caméra
; /usr/local/etc/motionplus/camera2.conf
;
; This config file was generated by motionplus 0.2.2
;*************************************************
; Configuration options specific to camera 2
;*************************************************
;*************************************************
;***** Camera
;*************************************************
device_name Patio
device_id 102
;*************************************************
;***** Source
;*************************************************
v4l2_device /dev/video0
;*************************************************
;***** Image
;*************************************************
width 352
height 288
;*************************************************
;***** Overlays
;*************************************************
text_left Camera2
text_right Patio\n%Y-%m-%d\n%T-%q
;*************************************************
;***** Movie
;*************************************************
movie_filename CAM02_%t-%v-%Y%m%d%H%M%S
On lance maintenant motionplus, le propriétaire du process doit pouvoir écrire dans le répertoire désigné par target_dir (évitez root...). Voilà le résultat
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] conf_process: Processing config file
/usr/local/etc/motionplus/motionplus.conf
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] conf_edit_stream_preview_method: Invalid
stream_preview_method combined
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] conf_process: Processing config file
/usr/local/etc/motionplus/camera1.conf
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] conf_process: Processing config file
/usr/local/etc/motionplus/camera2.conf
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] conf_process: Processing config file
/usr/local/etc/motionplus/camera3.conf
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] log_init: Logging to syslog
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] log_init: MotionPlus 0.2.2 started
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] log_init: Using log type (ALL) log level (NTC)
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] mytranslate_init: Language: English
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][STR][00:motionplus] webu_init_webcontrol: Starting webcontrol on
port 8080
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][STR][00:motionplus] webu_init_webcontrol: Started webcontrol on
port 8080
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ENC][00:motionplus] motpls_av_init: libavcodec version
61.3.100
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ENC][00:motionplus] motpls_av_init: libavformat version 61.1.100
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][VID][00:ml00:camera-sud] netcam_start: Opening Netcam
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][VID][02:ml02:Piece2] netcam_start: Opening Netcam
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:motionplus] main: Motionplus pid: 1331263
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][VID][01:ml01:Piece1] netcam_start: Opening Netcam
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][05:nc05:Piece2] netcam_handler: Norm: Camera handler thread
[5] started
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][02:ml02:Piece2] mlp_ring_resize: Resizing buffer to 4 items
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][01:ml01:Piece1] mlp_ring_resize: Resizing buffer to 4 items
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][06:nc06:Piece1] netcam_handler: Norm: Camera handler thread
[6] started
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][05:nc05:Piece2] netcam_connect: Norm: Camera (Piece2)
connected
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][05:nc05:Piece2] netcam_connect: Norm: Netcam capture FPS is
15.
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][05:nc05:Piece2] netcam_connect: Norm: Unable to determine the
camera source FPS.
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][06:nc06:Piece1] netcam_connect: Norm: Camera (Piece1)
connected
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][06:nc06:Piece1] netcam_connect: Norm: Netcam capture FPS is
15.
oct. 25 17:09:33 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][06:nc06:Piece1] netcam_connect: Norm: Unable to determine the
camera source FPS.
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][00:ml00:camera-sud] netcam_ntc:
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][00:ml00:camera-sud] netcam_ntc:
******************************************************
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][00:ml00:camera-sud] netcam_ntc: The network camera is sending
pictures at 0x0
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][00:ml00:camera-sud] netcam_ntc: resolution but config is
1280x720. If possible change
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][00:ml00:camera-sud] netcam_ntc: the netcam or config so that
the image height and
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][00:ml00:camera-sud] netcam_ntc: width are the same to lower
the CPU usage.
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][00:ml00:camera-sud] netcam_ntc:
******************************************************
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][00:ml00:camera-sud] netcam_ntc:
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:ml00:camera-sud] mlp_ring_resize: Resizing buffer to 4
items
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][03:nc03:camera-sud] netcam_handler: Norm: Camera handler
thread [3] started
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][02:ml02:Piece2] mlp_init: Camera 103 started: motion
detection Enabled
oct. 25 17:09:35 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][01:ml01:Piece1] mlp_init: Camera 102 started: motion
detection Enabled
oct. 25 17:09:36 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][03:nc03:camera-sud] netcam_connect: Norm: Camera (camera-sud)
connected
oct. 25 17:09:36 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][03:nc03:camera-sud] netcam_connect: Norm: Netcam capture FPS
is 21.
oct. 25 17:09:36 ultra.kervao.fr motionplus[1331263]:
[NTC][NET][03:nc03:camera-sud] netcam_connect: Norm: Camera source is 20
FPS
oct. 25 17:09:37 ultra.kervao.fr motionplus[1331263]:
[NTC][ALL][00:ml00:camera-sud] mlp_init: Camera 101 started: motion
detection Enabled
Vous constaterez qu'en passant devant la webcam les vidéos s'accumulent sous /emile/photo/motion, ça marche !! Le log donnera la ligne suivante à chaque mouvement identifié comme évènement.
[NTC][ALL][ml01:MyCam2] mlp_detected_trigger: Motion detected - starting event 1
L'application dispose d'une interface web visible à l'URL
http://localhost:8080/. On y voit en temps réel les
différentes vues

La configuration est possible de l'interface

Les évènements sont accessibles via Recordings

| [Retour page d'accueil FUNIX] | [retour haut de la page ] |