GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konfigurieren und erstellen Sie OpenCV für eine benutzerdefinierte FFMPEG-Installation

Es ist Jahre her, nachdem die Frage gestellt wurde, aber ich bin kürzlich auf die in dieser Frage beschriebenen Probleme gestoßen! Ich möchte meinen Beitrag hinzufügen.

Erstens:Ich habe (aus Gründen) nur die statischen ffmpeg-Bibliotheken erstellt, denen der opencv-Build-Prozess etwas feindlich gegenübersteht. Es gab Beiträge von OpenCV-Entwicklern, die besagten, dass sie einen OpenCV-Build gegen statische ffmpeg-Bibliotheken nicht unterstützen, aber mein Gedanke war:„Was ist, wenn Sie auch statische OpenCV-Bibliotheken erstellen? Das sollte sicherlich unterstützt werden?“

Und die Antwort ist Ja , können Sie statische opencv-Bibliotheken gegen statische ffmpeg-Bibliotheken kompilieren! Ich habe dies mit opencv 4.1.1 gegen ffmpeg 4.2 gemacht. Ich musste die folgenden cmake-Optionen verwenden:

cmake3 \
-D BUILD_opencv_apps=OFF \
-D BUILD_opencv_python2=OFF \
-D BUILD_SHARED_LIBS=OFF \
-D WITH_FFMPEG=ON \
-D OPENCV_FFMPEG_SKIP_BUILD_CHECK=ON \

Diese Optionen führen zu einer Reihe von statischen opencv-Bibliotheken, die alle statischen ffmpeg-Bibliotheken enthalten, die Sie auch erstellt haben, vorausgesetzt, Ihr PKG_CONFIG_PATH ist so eingerichtet, dass er diese Bibliotheken korrekt findet (oder wenn Sie sie an einem Standardsystemspeicherort installiert haben). P>

Frage/Antwort:

  • Warum können wir keine Apps erstellen?
    • Der opencv-Erstellungsprozess geht davon aus, dass Sie gemeinsam genutzte Bibliotheken erstellen und verknüpfen, selbst wenn Sie nur statische Bibliotheken erstellen. Dies scheint eher ein Mangel im Build-Prozess als eine technische Einschränkung zu sein; vielleicht wird das eines Tages behoben.
  • Was ist das OPENCV_FFMPEG_SKIP_BUILD_CHECK-Flag?
    • Es gibt einen Schritt im cmake-Prozess von ffmpeg, bei dem eine Anwendung mit demselben fehlerhaften Erstellungsprozess wie die anderen Anwendungen von opencv erstellt und verknüpft wird. Es ist in dem Sinne fehlerhaft, dass der Prozess davon ausgeht, dass Sie mit gemeinsam genutzten Bibliotheken verknüpfen, obwohl dies nicht erforderlich ist. Sie können dieselben Build-Schritte selbst ausführen, während Sie nicht diese Annahme treffen und eine funktionierende Anwendung erstellen. Daher muss diese Build-Prüfung deaktiviert werden, damit opencv akzeptiert, dass alle statischen Bibliotheken, die es findet, tatsächlich verwendet werden können. Dies ist
  • Und warum deaktivieren Sie die Python-Unterstützung?
    • Der OpenCV-Python-Erstellungsprozess erzeugt explizit eine gemeinsam genutzte Bibliothek, die von Python geladen werden kann.
  • Bedeutet dies, dass Sie die Testsuite selbst mit den statischen Bibliotheken noch erstellen?
    • Ja. Aber ich habe nicht versucht, sie auszuführen

So etwas wie

export LD_LIBRARY_PATH=/ffmpeg_install_path/lib/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/ffmpeg_install_path/lib/pkgconfig
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/ffmpeg_install_path/lib/

sollte arbeiten. Zumindest funktioniert es für OpenCV 2.4.x auf meinem Ubuntu.


Für OpenCV 3.x und ffmpeg 3.x muss ich den folgenden Patch anwenden

diff --git a/cmake/OpenCVFindLibsVideo.cmake b/cmake/OpenCVFindLibsVideo.cmake
index 13b62ac..bab9df3 100644
--- a/cmake/OpenCVFindLibsVideo.cmake
+++ b/cmake/OpenCVFindLibsVideo.cmake
@@ -228,6 +228,12 @@ if(WITH_FFMPEG)
     if(FFMPEG_libavresample_FOUND)
       ocv_append_build_options(FFMPEG FFMPEG_libavresample)
     endif()
+   CHECK_MODULE(libavcodec HAVE_FFMPEG)
+   CHECK_MODULE(libavformat HAVE_FFMPEG)
+   CHECK_MODULE(libavutil HAVE_FFMPEG)
+   CHECK_MODULE(libswscale HAVE_FFMPEG)
+   CHECK_MODULE(libswresample HAVE_FFMPEG)
+   CHECK_MODULE(libavresample HAVE_FFMPEG)
     if(HAVE_FFMPEG)
       try_compile(__VALID_FFMPEG
           "${OpenCV_BINARY_DIR}"

Und mit dem folgenden Skript zu bauen

#!/bin/bash

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/Applications/ffmpeg/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$HOME/Applications/ffmpeg/lib/pkgconfig
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:$HOME/Applications/ffmpeg/lib

cmake \
    -D BUILD_EXAMPLES=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_EXTRA_EXE_LINKER_FLAGS="-Wl,-rpath,$HOME/Applications/ffmpeg/lib" \
    -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=$HOME/Applications/opencv \
    /path/to/opencv

Außerdem muss ich beim Erstellen von ffmpeg die Flags --enable-avresample aktivieren .


Linux
  1. So installieren und konfigurieren Sie VSFTPD

  2. So installieren und konfigurieren Sie Postfix

  3. So installieren und konfigurieren Sie Dovecot

  4. Wie installiere und konfiguriere ich Fail2ban auf Ubuntu?

  5. Installieren Sie IIS und konfigurieren Sie eine Website

So installieren und konfigurieren Sie Grafana

Installieren und konfigurieren Sie Fail2ban unter Debian 11

So installieren und konfigurieren Sie Memcached unter CentOS 8

Installieren und konfigurieren Sie DRBD unter CentOS 8

So installieren und konfigurieren Sie Parse Server unter Ubuntu 20.04

Installieren und konfigurieren Sie phpMyAdmin