Editiert: 26.03.21
Heute nach über einen Monat wieder ein kleiner Artikel über die Nextcloud und deren Plugins. Inzwischen dürfte ja bekannt sein, das ich fast alles auf meinem Server beherberge. Neben Nextcloud einen Pastebin Ersatz, einen URL Shortener sowie (ganz wichtig) einen Mailserver.
Nun ist meine Nextcloud wieder an der Reihe. Diese hat nun für die Galerie eine Gesichtserkennung oder auch Facerecognition bekommen. Mit genau der gleichen Funktion wie bei Google Fotos oder Apple Icloud Photos.
Wie habe ich das gemacht, wollt ihr nun wissen!?
Hier folgt die Anleitung. Diese weicht ein klein wenig vom Original ab, da ich ein paar Fehler beheben musste.
Was wird benötigt?
Der Server sollte mindestens
- 4 GB RAM haben
- Mindestens Quad-Core CPU
- Memory_limit in der php.ini von ca. 4 GB
- Nextcloud Instanz
Vorbereitung
Damit wir mit der eigentlichen Installation begonnen werden kann müssen einige Abhängigkeiten installiert werden.
Die da wären:
- Dlib PHP
- Pdlib
Auf gehts!
apt install libx11-dev make cmake
Zuerst wird Dlib von Github heruntergeladen und installiert. Ich habe die Installation mit meinem sudo berechtigten User erledigt und nicht direkt mit dem Root User. Dementsprechend liegen die Ordner in:
/home/USER/dlib
/home/USER/pdlib
Kompilieren von dlib
git clone https://github.com/davisking/dlib.git
cd dlib/dlib
mkdir build
cd build
sudo cmake -DBUILD_SHARED_LIBS=ON ..
sudo make
sudo make install
Im Anschluss folgt die Installation von pdlib. Hier wird PHP 7.3.xx oder 7.4 vorausgesetzt, denn mit dem abgeänderten Configure Befehl wird das Modul mit einer anderen API konfiguriert.Mein geänderter Installationablauf für pdlib.
git clone https://github.com/goodspb/pdlib.git
cd pdlib
sudo apt install pkg-config #ohne der Installation gibt es einen Error https://github.com/goodspb/pdlib/issues/17#issue-507010566
sudo phpize7.3
sudo ./configure --with-php-config=/usr/bin/php-config7.3 #Lösung für die API Version: https://github.com/tideways/php-xhprof-extension/issues/76#issuecomment-469160637
sudo make
sudo make install
Das original: (hier wird auf einer ältern API das Modul kompiliert (php 7.2)
Kompilieren von pdlib
git clone https://github.com/goodspb/pdlib.git
cd pdlib
phpize
./configure --enable-debug
make
sudo make install
Anpassen der PHP.ini
Nach dem hoffentlich alles richtig installiert wurde, muss die php.ini abgeändert werden. Die cli sowie auch die fpm Variante.
sudo vi /etc/php/7.3/cli/php.ini
sudo vi /etc/php/7.3/fpm/php.ini
In beiden INI Dateien wird unter Module folgende Zeile eingefügt.
[pdlib]
extension="pdlib.so"
Danach wird PHP und Apache bzw. Nginx, je nachdem was ihr nutzt neu gestartet. In meinem Fall ist es Nginx.
Damit die Bearbeitung etwas schneller geht in beiden *.ini Dateien das Memory Limit erhöhen.
memory_limit=4028
Mit einem Restart werden die Änderungen übernommen.
sudo service php7.3-fpm restart && sudo nginx restart
Installation von Facerecognition
Nachdem jetzt die Abhängigkeiten installiert wurden, kann es an die Nextcloud App gehen. Diese wird folgend installiert.
sudo apt-get update
sudo apt-get install git-core composer
cd /var/www/nextcloud/apps/ # or whatever is your path to nextcloud
git clone https://github.com/matiasdelellis/facerecognition.git
cd facerecognition/
make
chown -R www-data:www-data /var/www/nextcloud/apps/facerecognition
sudo service nginx restart
Die App ist nun installiert. Wechselt man nun in die Cloud sollte die Einstellung so aussehen.

Einstellungen im Admin Bereich
Wie man sieht ist die Ampel auf Grün und die Indexierung läuft. Dieser brauch bei mir aktuell 21 Tage!!
Ist die Konfiguration komplett, kann die erste Indexierung gestartet werden. Damit man einen User indexieren kann muss dieser in den persönlichen Einstellungen dies aktivieren!

Erst aktivieren, dann klappt das indexieren!
Wie man bei meiner Installation schön sieht kann dies je nachdem wieviele Bilder hier habt, eine Menge Zeit in Anspruch nehmen. Also direkt den OCC Befehl in einen Screen packen, oder in den Hintergrund schieben und den Job enteignen. Danach heisst es abwarten….
sudo -u www-data php /var/www/nextcloud/occ face:background_job -u Username
STRG+Z
disown %1
Nun sollte es laufen und sich die Anzeige stetig in der Cloud verändern.Weitere Infos dazu gibt es auf Github
Falls euch die Anleitung gefallen hat, findet ihr weitere Anleitungen auf meiner Webseite.
Quellen: matiasdelellis/github, goodspb/pdlib(github), tideways(github)
Hey Lars.
Geht das mit jeder Cam, oder auch nur mit denen mit Infrarot-Senser (Stichwort Windows Hello)?
Das ist Kameraunabhängig denke ich. Wird ja nur das Gesicht auf dem Foto gescannt, nichts anderes
Klasse, werde ich mal testen ?
Kleiner Tippfehler?
memory_limit=4028 müsste 4096 heißen
Gruß Markus
hallo
Hallo,
meinst du das ganze könnte auhc auf einem RPi 4 mit 4GB Ram laufen?
VG
Nils
Kannst du gerne ausprobieren, aber ich meine es gescheitert wegen der ARM Architektur auf meinem Odroid C2
Hey ich habe das ganze auch installiert, aber ich sehe nicht die Additional settings und sehe auch nicht das Feld zum memory limit ändern.
Eine Idee ist ja noch eine Nvidia Grafikkarte zu haben und Cuda zu installieren. dann muss dlib aber neu compiliert werden.
Dazu den dlib Ordner löschen und neu installieren, da wird geprüft ob cuda installiert ist und ob eine Nvidia Grafikkarte installiert ist.
Danach wir die Grafikkarte benutzt um Gesichter zu finden, was ca. 50 -100x schneller ist.
Gruß Jakob
Überlicherweise hat ein Server keine GPU.
hallo,ich habe das Problemdass ich kein Model laden kann , kann mir jamand sagen woran das liegen kann?
hier einige infos:
root@0ab64345f320:/# sudo -u www-data php /var/www/nextcloud/occ face:setup
PHP Warning: Module ‚pdlib‘ already loaded in Unknown on line 0
You must indicate the ID of the model to install
+—-+———+—————+—————————————————————————————————————————————-
| Id | Enabled | Name | Description
+—-+———+—————+—————————————————————————————————————————————-
| 1 | | Default | Main model, using dlib defaults: mmod_human_face_detector.dat, shape_predictor_5_face_landmarks.dat and dlib_face_recognition_resnet_mo
| 2 | | DlibCnn68 | Alternative default model, using dlib: mmod_human_face_detector.dat, shape_predictor_68_face_landmarks.dat and dlib_face_recognition_re
| 3 | | DlibHog | DDlib HOG Model which needs lower requirements
| 4 | | DlibCnnHog5 | Extends the main model, doing a face validation with the Hog detector
| 5 | | ExternalModel | External Model (EXPERIMENTAL)
+—-+———+—————+—————————————————————————————————————————————-
root@0ab64345f320:/# sudo -u www-data php /var/www/nextcloud/occ face:setup -m|–model [1]
bash: –model: command not found
PHP Warning: Module ‚pdlib‘ already loaded in Unknown on line 0
root@0ab64345f320:/#
mein System
5.4.0-70-generic #78~18.04.1-Ubuntu SMP Sat Mar 20 14:10:07 UTC 2021 x86_64 GNU/Linux
core i3 ohne discrete GPU , 32 GB RAM
ciao Guido
Hallo Guido. Danke erstmal für den Kommentar.
Ich hab das System gestern selbst aufgesetzt, da neuer Server. Ich konnte direkt den Scan starten. Ohne ein Model anzugeben. Model 1 ist es automatisch.
Hallo ,habemeinen Fehler gefunden, es war lediglich die Syntax beim Laden des Moduls.
sudo -u www-data php /var/www/nextcloud/occ face:setup -m 1
sudo -u www-data php /var/www/nextcloud/occ face:setup -m 2
sudo -u www-data php /var/www/nextcloud/occ face:setup -m 4
Danke 🙂
Hey, bei mir startet der aber nicht die Zuornung (ich habe es aktiviert) er sagt nur noch nicht gestartet 0 bilder sind in der warteschlange
Moin. Hast du denn die Indexierung erlaubt in den Persönlichen Einstellungen?
Hallo Lars,
vielen Dank für diese ausgezeichnete Anleitung – Facerecognition läuft auf meiner Nextcloudinstallation. ABER ich habe ein Problem – wobei ich nicht weiß, ob es ein Problem ist, sondern ein Verständnisproblem?!
Meine Bilder werden indexiert, jedoch werden die erkannten Gesichter immer wieder als unbekannt eingestuft. Auch wenn ich ein paar Gesichter benamsle, werden neue Bilder mit den gleichen Gesichtern wieder als unbekannt betitelt. Ist das nicht Sinn der ganzen Sache, dass die Fotos, sowie die Gesichter analysiert wurden gruppiert werden?
Vielen Dank, lg Bernhard
Hi,
danke erstmal für den Kommentar. Bei mir war es so das ich die Bilder benannt habe. Anhand der Ähnlichkeit wurden die dann sortiert.Hat nicht immer gepasst, aber meistens.