PDlib installieren
PDlib installieren

PDlib installieren

Das letzte Update war vor 8. August 2023 von Vinzenz Schächner

Wir zeigen euch heute, wir Ihr einfach PDlib installieren könnt. Das benötigt Ihr z.B. für die Gesichtserkennung in NextCloud, wie in diesem Artikel: Face Recognition (Gesichtserkennung) in NextCloud • Schächner (xn--schchner-2za.de).

Ihr könnt damit auch folgenden Fehler beheben: App „Face Recognition“ cannot be installed because the following dependencies are not fulfilled: The library pdlib is not available.

Aber fangen wir gleich an:

Zuerst bearbeiten wir eine Datei:

sudo nano /etc/apt/sources.list.d/20-pdlib.list

Dort müssen wir am Ende die Paketquelle hinzufügen:

deb [signed-by=/usr/share/keyrings/delellis-archive-keyring.gpg arch=amd64] https://repo.delellis.com.ar jammy jammy

Danach laden wir den Schlüssel mit diesem Befehl herunter:

wget -O- https://repo.delellis.com.ar/repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/delellis-archive-keyring.gpg

Das war schon der schwierigste Teil.

Jetzt führen wir noch

sudo apt update

aus und danach können wir das Paket schon mit

sudo apt install php8.1-pdlib

installieren.

Jetzt installieren wir PDlib „nochmal“ (speziell für das Face Recognition App):

Dazu brauchen wir wieder einige Abhängigkeiten

sudo apt-get install libx11-dev
sudo apt-get install libopenblas-dev liblapack-dev
sudo apt install cmake
sudo apt install php-dev

Danach installiert man die gemeinsam genutze Bibliothek (Dlib):

sudo git clone https://github.com/davisking/dlib.git
cd dlib/dlib
sudo mkdir build
cd build
sudo cmake -DBUILD_SHARED_LIBS=ON ..
sudo make
sudo make install

Jetzt geht es an die eigentliche Installation:

sudo git clone https://github.com/goodspb/pdlib.git
cd pdlib
sudo phpize
sudo ./configure --enable-debug
sudo make
sudo make install

So. Mit dem installieren sind wir fertig. 🥴

Jetzt muss man nur noch in die php.ini Datei unter dem Punkt ; Dynamic Extensions ; folgenden Inhalt ergänzen:

 sudo nano /etc/php/8.2/cli/php.ini
[pdlib]
extension="pdlib.so"

Dast testen wir noch mit

sudo apt-get install php-bz2
sudo make test

Viel Glück und Viel Spaß!

12 Kommentare

  1. m0nn3

    Hallo, und vielen Dank schon mal für diese Anleitung !!!

    habe auch ein Problem bei der Installation:

    sudo make test

    Build complete.
    Don’t forget to run ‚make test‘.

    =====================================================================
    PHP : /usr/bin/php8.1
    PHP_SAPI : cli
    PHP_VERSION : 8.1.2-1ubuntu2.14
    ZEND_VERSION: 4.1.2
    PHP_OS : Linux – Linux NAS-Nextcloud 5.10.60-qnap #1 SMP Tue Nov 28 07:48:15 CST 2023 x86_64
    INI actual : /home/m0nn3/dlib/dlib/build/pdlib/tmp-php.ini
    More .INIs :
    ———————————————————————
    PHP : /usr/bin/phpdbg8.1
    PHP_SAPI : phpdbg
    PHP_VERSION : 8.1.2-1ubuntu2.14
    ZEND_VERSION: 4.1.2
    PHP_OS : Linux – Linux NAS-Nextcloud 5.10.60-qnap #1 SMP Tue Nov 28 07:48:15 CST 2023 x86_64
    INI actual : /home/m0nn3/dlib/dlib/build/pdlib/tmp-php.ini
    More .INIs :
    ———————————————————————
    CWD : /home/m0nn3/dlib/dlib/build/pdlib
    Extra dirs :
    VALGRIND : Not used
    =====================================================================
    TIME START 2024-02-12 18:28:30
    =====================================================================
    PASS Check for pdlib presence [tests/001.phpt]
    PASS Basic tests for chinese_whispers [tests/chinese_whispers_basic.phpt]
    PASS Edge given in edges array for chinese_whispers functions is associative array [tests/chinese_whispers_edge_associative_array_error.phpt]
    PASS Edge elements given in edges array for chinese_whispers functions are not of long type [tests/chinese_whispers_edge_elements_not_long.phpt]
    PASS Edge given in edges array for chinese_whispers functions is not having all values to be arrays with 2 elements [tests/chinese_whispers_edge_not_2_element_error.phpt]
    PASS Edge given in edges array is not array for chinese_whispers functions [tests/chinese_whispers_edge_not_array_error.phpt]
    PASS Args given to chinese_whispers functions is not correct [tests/chinese_whispers_wrong_arg_type_error.phpt]
    PASS Testing CnnFaceDetection constructor without arguments [tests/cnn_face_detection_ctor_error.phpt]
    PASS Testing CnnFaceDetection constructor with model that do not exist [tests/cnn_face_detection_ctor_model_not_found_error.phpt]
    PASS Frontal face detection. [tests/dlib_face_detection.phpt]
    PASS Testing FaceLandmarkDetection constructor without arguments [tests/face_landmark_detection_ctor_error.phpt]
    PASS Testing FaceRecognition constructor without arguments [tests/face_recognition_ctor_error.phpt]
    SKIP Full test for face recognition – download models, detect faces, landmark detection and face recognition. [tests/integration_face_recognition.phpt] reason: bz2 extension missing
    PASS Basic tests for dlib_vector_length [tests/vector_length.phpt]
    FAIL Just test php extension version [tests/version.phpt]
    =====================================================================
    TIME END 2024-02-12 18:28:32

    =====================================================================
    TEST RESULT SUMMARY
    ———————————————————————
    Exts skipped : 0
    Exts tested : 16
    ———————————————————————

    Number of tests : 15 14
    Tests skipped : 1 ( 6.7%) ——–
    Tests warned : 0 ( 0.0%) ( 0.0%)
    Tests failed : 1 ( 6.7%) ( 7.1%)
    Tests passed : 13 ( 86.7%) ( 92.9%)
    ———————————————————————
    Time taken : 2 seconds
    =====================================================================

    =====================================================================
    FAILED TEST SUMMARY
    ———————————————————————
    Just test php extension version [tests/version.phpt]
    =====================================================================

    You may have found a problem in PHP.
    This report can be automatically sent to the PHP QA team at
    http://qa.php.net/reports and http://news.php.net/php.qa.reports
    This gives us a better understanding of PHP’s behavior.
    If you don’t want to send the report immediately you can choose
    option „s“ to save it. You can then email it to [email protected] later.
    Do you want to send this report now? [Yns]: n
    make: *** [Makefile:133: test] Error 1
    m0nn3@NAS-Nextcloud ~/d/d/b/pdlib [2]> sudo apt-get install php-bz2
    Paketlisten werden gelesen… Fertig
    Abhängigkeitsbaum wird aufgebaut… Fertig
    Statusinformationen werden eingelesen… Fertig
    php-bz2 ist schon die neueste Version (2:8.1+92ubuntu1).

    bei der php.ini habe ich natürlich diese genommen: /etc/php/8.1/cli/php.ini

    bz2 ist ja missing aber ja eigentlich installiert.

    Sollte ich auf php8.2 updaten oder könnte ich noch einen Fehler haben?

    Gruß m0nn3

    1. Vielen Dank für deine Antwort (-;.

      Auf php8.2 (die neuste Version wäre inzwischen schon php8.3) zu updaten sollte nicht nötig sein.
      Laut deiner Ausgabe hat alles funktioniert, bis auf der Test der PHP-Erweiterung (FAIL Just test php extension version [tests/version.phpt])
      Dazu gibt es auch schon ein Github Issue: https://github.com/goodspb/pdlib/issues/62.
      Ich würde dir empfehlen, einfach mit den weiteren Schritten fortzufahren. Ich könnte mir vorstellen, dass es trotzdem funktioniert.
      Probiere es einfach mal aus und schreibe gerne nochmal, wenn weitere Fehler auftreten.
      Viele Grüße!

  2. Steve

    Vielen Dank für die Anleitung. Ich hab eine VM mit Ubuntu 22.04 laufen. Darauf läuft php8.2. wenn ich aber install php-dev installieren möchte, will er php8.3-dev installieren. selbes problem mit install php-bz2. auf hier will er php8.3-bz2 installieren.
    Wenn ich bei beiden jeweils explizit php8.2-dev bzw. -bz2 installiere, dann meckert er beim Testen am Ende, dass angeblich bz2 nicht installiert ist:

    =====================================================================
    PHP : /usr/bin/php8.2
    PHP_SAPI : cli
    PHP_VERSION : 8.2.15
    ZEND_VERSION: 4.2.15
    PHP_OS : Linux – Linux universal 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64
    INI actual : /home/steve/dlib/dlib/build/pdlib/tmp-php.ini
    More .INIs :
    ———————————————————————
    PHP : /usr/bin/phpdbg8.2
    PHP_SAPI : phpdbg
    PHP_VERSION : 8.2.15
    ZEND_VERSION: 4.2.15
    PHP_OS : Linux – Linux universal 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64
    INI actual : /home/steve/dlib/dlib/build/pdlib/tmp-php.ini
    More .INIs :
    ———————————————————————
    CWD : /home/steve/dlib/dlib/build/pdlib
    Extra dirs :
    VALGRIND : Not used
    =====================================================================
    TIME START 2024-01-23 05:48:58
    =====================================================================
    PASS Check for pdlib presence [tests/001.phpt]
    PASS Basic tests for chinese_whispers [tests/chinese_whispers_basic.phpt]
    PASS Edge given in edges array for chinese_whispers functions is associative array [tests/chinese_whispers_edge_associative_array_error.phpt]
    PASS Edge elements given in edges array for chinese_whispers functions are not of long type [tests/chinese_whispers_edge_elements_not_long.phpt]
    PASS Edge given in edges array for chinese_whispers functions is not having all values to be arrays with 2 elements [tests/chinese_whispers_edge_not_2_element_error.phpt]
    PASS Edge given in edges array is not array for chinese_whispers functions [tests/chinese_whispers_edge_not_array_error.phpt]
    PASS Args given to chinese_whispers functions is not correct [tests/chinese_whispers_wrong_arg_type_error.phpt]
    PASS Testing CnnFaceDetection constructor without arguments [tests/cnn_face_detection_ctor_error.phpt]
    PASS Testing CnnFaceDetection constructor with model that do not exist [tests/cnn_face_detection_ctor_model_not_found_error.phpt]
    PASS Frontal face detection. [tests/dlib_face_detection.phpt]
    PASS Testing FaceLandmarkDetection constructor without arguments [tests/face_landmark_detection_ctor_error.phpt]
    PASS Testing FaceRecognition constructor without arguments [tests/face_recognition_ctor_error.phpt]
    SKIP Full test for face recognition – download models, detect faces, landmark detection and face recognition. [tests/integration_face_recognition.phpt] reason: bz2 extension missing
    PASS Basic tests for dlib_vector_length [tests/vector_length.phpt]
    FAIL Just test php extension version [tests/version.phpt]
    =====================================================================
    TIME END 2024-01-23 05:48:59

    =====================================================================
    TEST RESULT SUMMARY
    ———————————————————————
    Exts skipped : 0
    Exts tested : 17
    ———————————————————————

    Number of tests : 15 14
    Tests skipped : 1 ( 6.7%) ——–
    Tests warned : 0 ( 0.0%) ( 0.0%)
    Tests failed : 1 ( 6.7%) ( 7.1%)
    Tests passed : 13 ( 86.7%) ( 92.9%)
    ———————————————————————
    Time taken : 1 seconds
    =====================================================================

    =====================================================================
    FAILED TEST SUMMARY
    ———————————————————————
    Just test php extension version [tests/version.phpt]
    =====================================================================

    Wie kann ich das Problem lösen?

    1. Hallo Steve!
      Wir haben das Problem so auch noch nie gesehen.
      Wie es scheint, ist der Text von der PHP-Erweiterung fehlgeschlagen.
      Wenn du „sudo php -v“ eintippst, müsste normalerweise die standardmäßige PHP-Version erscheinen. Das sollte in deinem Fall php8.2 sein.
      Es würde jetzt zwei Möglichkeiten geben:
      1. Du installierst PHP komplett neu, indem du es deinstallierst (sudo apt-get purge php*.*) und dann alle manuell nochmal installierst, indem Du überall 8.2 angibst, oder
      2. Du installierst PHP-8.3, also die neuere Version von PHP, mit der das auch funktionieren sollte. (sudo apt-get install php-8.3)

      (PS: Hast du Nextcloud über Docker installiert? Peter Heitman hat uns auch am 22.01. geschrieben, dass es bei ihm nicht funktioniert.
      Das Ubuntu die neuere Version installieren mag, ist ganz normal!

      Es würde auch noch auf Github eine Anleitung zu php-bz2 geben. Vielleicht hilft dir diese weiter?

      Hoffentlich konnten wir dir weiterhelfen!

      Schreibe uns gerne wieder, falls das Problem noch nicht behoben ist!
      Viele Grüße,
      Schächner

  3. Peter Heitman

    I have tried to follow the instructions above, but I encounter two significant errors. First, when I try to apt install php8.1-pdlib, I am told that the package is not available. I did the first steps where I added the delellis repo to the repo list. Second, if I ignore that step and continue on, when I try to apt install php-dev, that isn’t found either. Any ideas on what might be different about my environment? Note that I am running nextcloud as a docker container.

    1. Hello Peter!
      We’ve heard about this error several times, but haven’t found a solution yet.
      But you can try installing the latest PHP version (8.3), maybe it will work.

      There is also a repository on Github where the installation is explained again.
      Maybe that will help you?

      Hopefully we could help you!
      Best regards,
      Schächner.

  4. Stefan

    Servus,

    zuerst vielen Dank für die schnelle Hilfe. Es lag weder an der PHP Version noch am falschen kopieren der Befehle oder sonst etwas.

    Es lag in meinem Fall an dem noch verfügbaren Speicher von Proxmox.

    Durch einen blöden Zufall musste ich heute in einem anderen LXC Container ein Update für IMMICH welches in eine Docker Container läuft machen. Das Update lief nicht durch und dann bin ich auf die Idee gekommen, einmal nach dem Speicher zu sehen. Habe einen anderen LXC Container gelöscht und schon lief das Update durch.

    Anschließend habe ich bei Nextcloud nachgesehen und was soll ich sagen, der Interne Server Fehler bei Nextcloud war weg und die Gesichtserkennung läuft.Leider sehe ich aber noch keine Personen wenn ich die Gesichtserkennung im persönlichen Bereich aufrufe. Ich denke, dort kann man dann den Personen Namen zuordnen.

    root@Cloud:~# sudo -u www-data php /var/www/nextcloud/occ face:progress
    +——–+———–+—–+
    | Images | Remaining | ETA |
    +——–+———–+—–+
    | 174 | 0 | – |
    +——–+———–+—–+
    root@Cloud:~# sudo -u www-data php /var/www/nextcloud/occ face:stats
    +——-+——–+——-+———-+———+
    | User | Images | Faces | Clusters | Persons |
    +——-+——–+——-+———-+———+
    | admin | 174 | 10 | 7 | 0 |
    +——-+——–+——-+———-+———+

    Gruß Stefan

    1. Guten Morgen, Stefan
      freut uns, dass du das Problem lösen hast können.

      Zu dem 2. Punkt:
      Bei dir wurden jetzt, wenn ich das richtige sehe, nur Fotos von dem Benutzer „Admin“ indexiert.
      Die Anaylse musst du für jeden Benutzer einzeln aktivieren:
      https://github.com/matiasdelellis/facerecognition/wiki/Usage

      Sie funktioniert aber dann auch nur, soweit ich das in Erinnerung habe, für Fotos, die kit diesem Account hochgeladen wurden.

      Viele Grüße!

  5. Stefan

    Ich habe Methode 1. (einfach, funktioniert zu 100%) jetzt sowohl als normaler Benutzer mit Root Rechten als auch als Root Benutzer mehrfach exakt so wie hier beschrieben durchgeführt aber leider immer den gleichen Fehler zum Schluss bei sudo make test

    =====================================================================
    FAILED TEST SUMMARY
    ———————————————————————
    Just test php extension version [tests/version.phpt]
    =====================================================================

    =====================================================================
    TEST RESULT SUMMARY
    ———————————————————————
    Exts skipped : 0
    Exts tested : 17
    ———————————————————————

    Number of tests : 15 14
    Tests skipped : 1 ( 6.7%) ——–
    Tests warned : 0 ( 0.0%) ( 0.0%)
    Tests failed : 1 ( 6.7%) ( 7.1%)
    Tests passed : 13 ( 86.7%) ( 92.9%)
    ———————————————————————
    Time taken : 1 seconds
    =====================================================================

    =====================================================================
    FAILED TEST SUMMARY
    ———————————————————————
    Just test php extension version [tests/version.phpt]
    =====================================================================

    Auf meinem Rechner läuft Proxmox und Nextcloud in einem LXC Container (nicht Docker Container) mit Ubuntu 22.04

    Habe in dem LXC Container mit Nextcloud die App Face Recognition installiert und auch wie auf ihrer 1. Seite beschrieben den Speicher und das Model installiert .

    Wenn ich dann in Nextcloud auf Geschichtserkennung gehe kommt Nextcloud Interner Server Fehler.

    Exception: Class „CnnFaceDetection“ not found in file ‚/var/www/nextcloud/apps/facerecognition/lib/Model/DlibCnnModel/DlibCnnModel.php‘ line 179

    Vielleicht habe sie ja eine Idee wie ich Face Recognition ans Laufen bekomme.

    Vielen Dank
    Gruß Stefan

    1. Grüß Gott Stefan,
      vielen Dank für deinen Kommentar!

      Vermutlich hängt der Fehler mit deiner PHP-Version zusammen.
      Kannst du mal mit „php -v“ überprüfen, ob du aktuell PHP 8.2 am laufen hast?

      Wenn das nicht der Fall ist, musst du folgenden Dateipfad anpassen:

      sudo nano /etc/php/8.2/cli/php.ini

      Hier dann wie oben beschrieben folgendes einfügen:

      [pdlib]
      extension=“pdlib.so“

      Du kannst alternativ auch PHP 8.2 installieren.
      Pass nur auf, dass du, wenn du auf eine andere PHP-Version wechselst, nicht dein System kaputt machst. (Das ist uns schon in einer Testumgebung passiert 😖)

      Hoffentlich konnten wir dir helfen.

      Vielen Grüße und noch einen schönen Abend!

  6. Eric

    This seems to fail for me.
    I really don’t know what to do about this

    root@nextcloud ~/.../dlib/build# cmake -DBUILD_SHARED_LIBS=ON ..
    -- The CXX compiler identification is unknown
    CMake Error at CMakeLists.txt:16 (project):
      No CMAKE_CXX_COMPILER could be found.
    
    
      Tell CMake where to find the compiler by setting either the environment
      variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
      to the compiler, or to the compiler name if it is in the PATH.
    
    
    
    
    -- Configuring incomplete, errors occurred!
    See also "/root/dlib/dlib/build/CMakeFiles/CMakeOutput.log".
    See also "/root/dlib/dlib/build/CMakeFiles/CMakeError.log".
    
    1. Vinzenz Schächner

      Thank you for your question, Eric.
      Your problem obviously has something to do with a compiler.
      You can try to fix the problem by installing the CXX complier.
      You can do this with the following command:

      sudo apt-get install build-essential
      

      This should solve your problem.
      If this is not the case, you are welcome to contact us again.
      Good luck and have a nice day!

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert