Mettez un manchot dans votre PC
On trouve de tout dans le domaine des caméras de surveillance à des prix plus ou moins abordables, elles sont généralement fournies avec un logiciel dédié propriétaire fonctionnant forcément sous windows, le fait de le faire fonctionner sous Linux ne permet pas toujours de pouvoir profiter pleinement de toutes leurs fonctionnalités, on se contentera du standard et toute l'intelligence logicielle étant déportée dans le logiciel de supervision.
Sans vouloir faire de la publicité pour telle ou telle marque, je cherchais une caméra IP pour la placer à l'extérieur, j'ai d'abord fait mon choix sur la marque Reolink, mais j'ai été incapable de la faire fonctionner sous Linux et même sous windows ! Et rien n'est fait de la part de ce constructeur pour les utilisateurs linux, donc retour à l'envoyeur et je me rabats sur la marque Annke.
Dans un cas comme un autre ces caméras IP sont alimentées via le câble Ethernet (PoE Power over Ethernet) et cela nécessite un routeur ou un adaptateur particulier comme celui qu'on peut voir sur la photo ci-dessus.
Petit bémol, j'ai dû passer au moins une fois par windows pour l'activer avec le logiciel maison en fixant un mot de passe et l'adresse IP mais ensuite toute la configuration peut se faire d'un navigateur sous linux en tapant simplement l'adresse IP dans la barre d'URL. Les screenshots ci-dessous ont été faits avec Firefox sur Linux/Mageia 9.
Une fois qu'on a saisi son login, on tombe sur la page de visualisation en temps réel qui ne fonctionne pas sous linux mais ce n'est pas grave car on n'en pas l'utilité.
En revanche la page de configuration fonctionne parfaitement et c'est bien là l'intérêt, on a accés à tous les paramètres possibles à partir du navigateur.
La visualisation se fait simplement en tapant dans un shell
ffplay rtsp://admin:password@192.168.2.110
Si votre caméra n'est pas équipée de base d'un serveur de flux vidéo compatible rtsp, vous pouvez monter en monter un qui pourra marcher avec une simple webcam. Mon choix s'est porté sur mediamtx qui est bien plus qu'un simple serveur rtsp. Le site officiel est https://github.com/bluenviron/mediamtx, on y récupère la dernière release qu'on décompresse en tapant
tar xvfz mediamtx-1.8.5.tar.gz
cela donne le répertoire mediamtx-1.9.3, les sources se compilent avec le langage go qu'il faudra avoir préalablement installé (package golang-bin sur ma mageia). Dans le répertoire on tape successivement
go generate ./...
CGO_ENABLED=0 GOOS=linux go build .
cela va donner un binaire mediamtx que vous pouvez très bien déplacé ensuite sous /usr/local/bin. On copiera également le fichier de configuration mediamtx.yml sous /usr/local/etc. On le lance d'abord sans être nécessairement root
mediamtx
voilà les traces
2024/10/25 16:45:46 INF MediaMTX v0.0.0
2024/10/25 16:45:46 INF configuration loaded from
/usr/local/etc/mediamtx.yml
2024/10/25 16:45:46 INF [RTSP] listener opened on :8554 (TCP), :8000
(UDP/RTP), :8001 (UDP/RTCP)
2024/10/25 16:45:46 INF [RTMP] listener opened on :1935
2024/10/25 16:45:46 INF [HLS] listener opened on :8888
2024/10/25 16:45:46 INF [WebRTC] listener opened on :8889 (HTTP), :8189
(ICE/UDP)
2024/10/25 16:45:46 INF [SRT] listener opened on :8890 (UDP)
on lance le flux vidéo avec ffmpeg avec comme source /dev/video0 qui correspond à la webcam sur une adresse rtsp correspondant à la machine sur laquelle mediamtx est lancé
ffmpeg -f v4l2 -framerate 24 -video_size 640x480 -i /dev/video0 -f rtsp -rtsp_transport tcp rtsp://tetiaroa.kervao.fr:8554/monflux
voilà ce que le serveur renvoie
2024/10/25 16:47:16 INF [RTSP] [conn 192.168.2.16:39506] opened
2024/10/25 16:47:16 INF [RTSP] [session 23cd16d2] created by
192.168.2.16:39506
2024/10/25 16:47:16 INF [RTSP] [session 23cd16d2] is publishing to path
'monflux', 1 track (MPEG-4 Video)
on peut visualiser le flux vidéo de n'importe quelle machine du réseau, en tapant
ffplay rtsp://tetiaroa.kervao.fr:8554/monflux
voilà la trace du serveur
2024/08/17 09:31:01 INF [RTSP] [conn 192.168.2.16:55664] opened
2024/08/17 09:31:01 INF [RTSP] [session bd9fc103] created by
192.168.2.16:55664
2024/08/17 09:31:01 INF [RTSP] [session bd9fc103] is reading from path
'monflux', with UDP, 1 track (MPEG-4 Video)
La webcam pourra être intégrée et utilisée dans les outils de vidéosurveillance présentés plus bas.
Zoneminder est considéré comme le logiciel opensource de vidéosurveillance de référence. Le site officiel est https://zoneminder.com.
rpm -ivh --nodeps zoneminder-1.36.33-2.mga9.tainted.x86_64.rpm
On veillera toutefois à installer tous ces packages perl
- perl-Apache-Test-1.430.0-2.mga9.noarchIl faut commencer par créer une base de données mysql en tapant:
mariadb -u root -p < /usr/share/zoneminder/db/zm_create.sql
on vérifie si la base est bien créée, elle se nomme simplement zm et on crée un utilisateur privilégié zmuser sur la base zm
mariadb -u root -p
voilà le résultat
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 25
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)]> show databases;
+---------------------+
|
Database
|
+---------------------+
| MyMusic82
|
| MyMusic83
|
| MyVideos121 |
| MyVideos131 |
|
digikam
|
| digikam_similarites |
| digikam_vignettes |
| digikam_visages |
| information_schema |
|
mysql
|
| performance_schema |
| phpmyadmin |
| roundcubemail |
| spamassassin |
| syncstorage_rs |
|
sys
|
| tokenserver_rs |
|
zm
|
+---------------------+
18 rows in set (0,096 sec)
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]> CREATE USER 'zmuser' IDENTIFIED BY 'zmpass';
Query OK, 0 rows affected (0,087 sec)
MariaDB [mysql]> GRANT ALL ON zm.* TO 'zmuser'@'localhost';
Query OK, 0 rows affected (0,201 sec)
maintenant j'ai modifié le fichier /usr/lib/systemd/system/zoneminder.service qui contiendra
[Unit]
Description=ZoneMinder CCTV recording and security system
After=network.target mariadb.service httpd.service
Requires=mariadb.service httpd.service
[Service]
User=apache
Type=forking
ExecStart=/usr/bin/zmpkg.pl start
ExecReload=/usr/bin/zmpkg.pl reload
ExecStop=/usr/bin/zmpkg.pl stop
[Install]
WantedBy=multi-user.target
Attention le user doit correspondre au propriétaire du processus Apache httpd. La mise à jour du fichier doit être prise en compte en tapant systemctl daemon-reload
Le mot de passe zmpass devra être changé
Le fichier de configuration /etc/zm/zm.conf ressemble à ça
#
==========================================================================
#
# ZoneMinder Base Configuration
#
#
==========================================================================
#
# *** DO NOT EDIT THIS FILE ***
#
# To make custom changes to the variables below, create a new
configuration
# file, with an extention of .conf, under the /etc/zm/conf.d
# folder, containing your desired modifications.
#
# Path to installed data directory, used mostly for finding DB upgrade
scripts
ZM_PATH_DATA=/usr/share/zoneminder
# Path to ZoneMinder binaries
ZM_PATH_BIN=/usr/bin
# Path to ZoneMinder libraries (none at present, for future use)
ZM_PATH_LIB=/usr/lib64
# Path to ZoneMinder configuration (this file only at present)
ZM_PATH_CONF=/etc/zm
# Path to ZoneMinder web files
ZM_PATH_WEB=/usr/share/zoneminder/www
# Path to ZoneMinder cgi files
ZM_PATH_CGI=/usr/share/zoneminder/cgi-bin
# Username and group that web daemon (httpd/apache) runs as
# utilisateur et groupe propriétaire du daemon apache httpd
ZM_WEB_USER=apache
ZM_WEB_GROUP=apache
# ZoneMinder database type: so far only mysql is supported
ZM_DB_TYPE=mysql
# ZoneMinder database hostname or ip address and optionally port or unix
socket
# Acceptable formats include hostname[:port], ip_address[:port], or
# localhost:/path/to/unix_socket
# le nom du serveur sur lequel tourne le serveur mariadb
ZM_DB_HOST=mariadb-serveur
# ZoneMinder database name
ZM_DB_NAME=zm
# ZoneMinder database user
ZM_DB_USER=zmuser
# ZoneMinder database password
# le mot de passe tel que défini dans mariadb
ZM_DB_PASS=zmpass
# SSL CA certificate for ZoneMinder database
ZM_DB_SSL_CA_CERT=
# SSL client key for ZoneMinder database
ZM_DB_SSL_CLIENT_KEY=
# SSL client cert for ZoneMinder database
ZM_DB_SSL_CLIENT_CERT=
# Do NOT set ZM_SERVER_HOST if you are not using Multi-Server
# You have been warned
#
# The name specified here must have a corresponding entry
# in the Servers tab under Options
ZM_SERVER_HOST=
il faudra veiller à ce que l'utilisateur apache soit bien propriétaire de certains répertoires nécessaires au fonctionnement de zoneminder
chown -R apache:apache /var/log/zm
chown -R apache:apache /var/lib/zoneminder
chown -R apache:apache /usr/share/zoneminder/www
chown -R apache:apache /var/cache/zoneminder
chown -R apache:apache /etc/zm
accessoirement j'ai créé le lien suivant
ln -s /var/cache/zoneminder/ /usr/share/zoneminder/www/cache
il faudra ensuite modifier la configuration du serveur Apache httpd dans le fichier /usr/local/apache2/conf/httpd/conf, tout d'abord la liste des modules utiles et nécessaires
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgid_module modules/mod_cgid.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php_module
modules/libphp.so
(...)
# le propriétaire du daemon apache/httpd
User apache
Group apache
(...)
#directives spécifiques zoneminder
<Directory "/usr/share/zoneminder/www">
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<Directory "/var/cache/zoneminder">
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory "/usr/share/zoneminder/cgi-bin">
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AllowOverride All
Require all granted
</Directory>
<Directory "/usr/share/zoneminder/www/api">
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
RewriteBase /zm/api
</Directory>
<Directory "/usr/share/zoneminder/www/api/app">
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
RewriteBase /zm/api
</Directory>
<Directory "/usr/share/zoneminder/www/api/app/webroot">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteBase /zm/api
</Directory>
#alias zoneminder dans cet ordre précis
ScriptAlias /zm/cgi-bin "/usr/share/zoneminder/cgi-bin"
Alias /zm/cache "/var/cache/zoneminder"
Alias /zm "/usr/share/zoneminder/www"
on veillera également à ce que la variable de la zone horaire du fichier /usr/local/apache2/conf/php.ini soit bien initialisée
date.timezone = Europe/Paris
on relance Apache httpd pour la prise en compte de la mise à jour de ces deux derniers fichiers
systemctl httpd restart
et on lance zoneminder en tapant
systemctl start zoneminder
et voilà ce que renvoie la commande
systemctl status zoneminder
● zoneminder.service - ZoneMinder CCTV recording and security system
Loaded: loaded
(/usr/lib/systemd/system/zoneminder.service; disabled; preset: disabled)
Active: active (running) since Fri 2024-08-09
16:03:47 CEST; 11s ago
Process: 3570 ExecStart=/usr/bin/zmpkg.pl start
(code=exited, status=0/SUCCESS)
Main PID: 3578 (zmdc.pl)
Tasks: 5 (limit: 9239)
Memory: 91.5M
CPU: 2.077s
CGroup: /system.slice/zoneminder.service
├─3578 /usr/bin/perl -wT /usr/bin/zmdc.pl startup
├─3606 /usr/bin/perl -wT /usr/bin/zmfilter.pl --filter_id=1 --daemon
├─3610 /usr/bin/perl -wT /usr/bin/zmfilter.pl --filter_id=2 --daemon
├─3616 /usr/bin/perl -wT /usr/bin/zmwatch.pl
└─3620 /usr/bin/perl -wT /usr/bin/zmstats.pl
août 09 16:03:44 ultra.kervao.fr systemd[1]: Starting
zoneminder.service...
août 09 16:03:47 ultra.kervao.fr systemd[1]: Started zoneminder.service.
Voilà l'écran principal avec une caméra rajoutée à partir de la commande Ajouter Caméra avec le mode Modect, c'est à dire qu'il va détecter les mouvements et créer un évènement pour chacun.
Il aura fallu définir la source vidéo de la vue, en mettant le chemin
Il faut procéder ensuite en tâtonnant pour le reste des paramètres.
Maintenant à la détection d'un évènement la ou les zones concernées seront
indiquées
Le serveur de notification d'évènement "Event Notification Server" ou ZMES est un outil complémentaire à zoneminder, il dispose d'une "machine learning" ou d'un apprentissage automatique qui lui permet de reconnaître les objets, qu'ils soient des personnes ou des voitures par exemples.
Le site officiel est https://github.com/ZoneMinder/zmeventnotification on y récupère les sources qu'on décompresse en tapant
tar xvfz zmeventnotification-6.1.29.tar.gz
cela donne le répertoire zmeventnotification-6.1.29. On installera d'abord les packages perl-Crypt-MySQL, perl-Module-Build-Tiny et perl-CPAN-DistnameInfo. Puis avec CPAN
perl -MCPAN -e "install Crypt::Eksblowfish::Bcrypt"
perl -MCPAN -e "install Protocol::WebSocket"
perl -MCPAN -e "install Net::WebSocket::Server"
Maintenant on tape en tant que root
zmeventnotification-6.1.29/install.sh
Il faudra modifier ou créer des fichiers sous /etc/zm tout
d'abord secrets.ini qui contiendra
[secrets]
# l'URL pour accéder à zoneminder https://ultra.kervao.fr/zm est à
adapter, l'utilisateur et le mot de passe de connexion sont définis
dans la page de configuration système
ZMES_PICTURE_URL=https://ultra.kervao.fr/zm/index.php?view=image&eid=EVENTID&fid=objdetect&width=600
ZM_USER=zm-user
ZM_PASSWORD=password
ZM_PORTAL=https://ultra.kervao.fr/zm
ZM_API_PORTAL=https://ultra.kervao.fr/zm/api
# certificat et clé pour une connexion ssl, j'ai réutilisé celles de
mon serveur apache
ES_CERT_FILE=/etc/ssl/public/apache.crt
ES_KEY_FILE=/etc/ssl/apache/apache.key
#clé pour la reconnaissance des plaques d'immatriculation, il faudra
créer un compte sur ce site https://platerecognizer.com/
PLATEREC_ALPR_KEY=cb5ece0dhkhg1bea8dfd08408ec6cb8370d6c3b5c
On modifiera maintenant le fichier /etc/zm/objectconfig.ini qui
contiendra
# portal/user/password are needed if you plan on using ZM's legacy
# auth mechanism to get images
# l'URL pour accéder à zoneminder ainsi que l'utilisateur et mot de
passe de connexion
portal=https://ultra.kervao.fr/zm
user=zm-user
password=password
# api portal is needed if you plan to use tokens to get images
# requires ZM 1.33 or above
api_portal=https://ultra.kervao.fr/zm/api
(...)
# connexion à un serveur mlapi, je m'en sers pas mais les champs ne
doivent pas être vides
ml_user=mlapi-user
ml_password=password
(...)
# la clé pour la reconnaissance des plaques, idem au fichier
secrets.ini
alpr_key=cb5ece0dhkhg1bea8dfd08408ec6cb8370d6c3b5c
On modifier maintenant /etc/zm/zmeventnotification.ini
[ssl]
# Enable SSL (default: yes)
enable = yes
#idem clé dans le fichier secrets.ini
cert = /etc/ssl/public/apache.crt
key = /etc/ssl/apache/apache.key
Maintenant dans les options et configuration système on cochera les cases OPT_USE_API et OPT_USE_EVENTNOTIFICATION
On relance zoneminder et on lance ZMES en tapant
sudo -u apache /usr/bin/zmeventnotification.pl
voilà le résultat
Use of uninitialized value $first_arg in string eq at
./zmeventnotification.pl line 62.
27/10/2024 17:31:03.690121 zmeventnotification[163691].INF [main:330]
[Running on WebSocket library version:0.004]
27/10/2024 17:31:07.018532 zmeventnotification[163691].INF [main:1010]
[PARENT: using config file: /etc/zm/zmeventnotification.ini]
27/10/2024 17:31:07.833499 zmeventnotification[163691].INF [main:1010]
[PARENT: using secrets file: /etc/zm/secrets.ini]
Use of uninitialized value $es_debug_level in numeric ge (>=) at
./zmeventnotification.pl line 999.
Use of uninitialized value $es_debug_level in numeric ge (>=) at
./zmeventnotification.pl line 999.
Use of uninitialized value $skip_monitors in split at
./zmeventnotification.pl line 543.
Use of uninitialized value $es_debug_level in numeric ge (>=) at
./zmeventnotification.pl line 999.
Use of uninitialized value $hook_skip_monitors in split at
./zmeventnotification.pl line 732.
avec un évènement
27/10/2024 17:31:26.558583 zmeventnotification[163691].INF
[main:1010] [PARENT: Push enabled via FCM]
27/10/2024 17:31:26.558734 zmeventnotification[163691].INF [main:1010]
[PARENT: MQTT Disabled]
27/10/2024 17:31:26.558814 zmeventnotification[163691].INF [main:1010]
[PARENT: |------- Starting ES version: 6.1.29 ---------|]
Can't ignore signal CHLD, forcing to default.
27/10/2024 17:31:49.322211 zmeventnotification[163691].INF [main:1010]
[PARENT: Event Notification daemon v 6.1.29 starting]
27/10/2024 17:31:50.349988 zmeventnotification[163691].INF [main:1010]
[PARENT: Re-loading monitors]
Use of uninitialized value in concatenation (.) or string at
./zmeventnotification.pl line 1453.
27/10/2024 17:31:54.071086 zmeventnotification[163691].INF [main:1010]
[PARENT: New event 380 reported for Monitor:4 (Name:Camera-4)
Motion[last processed eid:]]
27/10/2024 17:31:56.427281 zmeventnotification[163691].INF [main:1010]
[PARENT: Secure WS(WSS) is enabled...]
27/10/2024 17:31:56.427365 zmeventnotification[163691].INF [main:1010]
[PARENT: Web Socket Event Server listening on port 9000]
pour l'activer en tant que service systemd, on va créer le fichier /usr/lib/systemd/system/zmes.service qui contiendra
[Unit]
Description=ZMES
After=zoneminder.service
Requires=zoneminder.service httpd.service
[Service]
User=apache
Type=simple
ExecStart=/usr/bin/zmeventnotification.pl
Restart=on-failure
[Install]
WantedBy=multi-user.target
on l'activera en tapant
systemclt enable zmes
on le lance en tapant
systemctl start zmes
voici son statut en tapant
systemctl status zmes
● zmes.service - ZMES
Loaded: loaded
(/usr/lib/systemd/system/zmes.service; disabled; preset: disabled)
Active: active (running) since Thu 2024-10-31
10:43:42 CET; 36s ago
Main PID: 243499 (zmeventnotifica)
Tasks: 1 (limit: 9239)
Memory: 46.3M
CPU: 784ms
CGroup: /system.slice/zmes.service
└─243499 /usr/bin/perl -T /usr/bin/zmeventnotification.pl
oct. 31 10:43:42 ultra.kervao.fr systemd[1]: Started zmes.service.
oct. 31 10:43:42 ultra.kervao.fr zmeventnotification.pl[243499]: Use
of uninitialized value $first_arg in string eq at
/usr/bin/zmeventnotification.pl line 61.
oct. 31 10:43:43 ultra.kervao.fr zmeventnotification.pl[243499]: Use
of uninitialized value $es_debug_level in numeric ge (>=) at
/usr/bin/zmeventnotification.pl line 998.
oct. 31 10:43:43 ultra.kervao.fr zmeventnotification.pl[243499]: Use
of uninitialized value $es_debug_level in numeric ge (>=) at
/usr/bin/zmeventnotification.pl line 998.
oct. 31 10:43:43 ultra.kervao.fr zmeventnotification.pl[243499]: Use
of uninitialized value $skip_monitors in split at
/usr/bin/zmeventnotification.pl line 542.
oct. 31 10:43:43 ultra.kervao.fr zmeventnotification.pl[243499]: Use
of uninitialized value $es_debug_level in numeric ge (>=) at
/usr/bin/zmeventnotification.pl line 998.
oct. 31 10:43:43 ultra.kervao.fr zmeventnotification.pl[243499]: Use
of uninitialized value $hook_skip_monitors in split at
/usr/bin/zmeventnotification.pl line 731.
oct. 31 10:43:44 ultra.kervao.fr zmeventnotification.pl[243505]: Can't
ignore signal CHLD, forcing to default.
Et voilà ce que ça va donner au niveau de l'interface, on voit qu'il a identifié des personnes et un véhicule (truck).
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 ] |