GNU/Linux >> Linux Esercitazione >  >> Linux

Configura e crea OpenCV per l'installazione personalizzata di FFMPEG

Sono passati anni dalla domanda, ma di recente mi sono imbattuto nei tipi di problemi descritti in questa domanda! Vorrei aggiungere il mio contributo.

Primo:ho creato solo le librerie ffmpeg statiche (per motivi), verso le quali il processo di compilazione opencv è in qualche modo ostile. Ci sono stati post di sviluppatori opencv che affermano che non supportano una build opencv contro librerie ffmpeg statiche, ma il mio pensiero era "e se stessi creando anche librerie opencv statiche? Certamente dovrebbero essere supportate?"

E la risposta è , puoi compilare librerie opencv statiche contro librerie ffmpeg statiche! L'ho fatto con opencv 4.1.1 contro ffmpeg 4.2. Ho dovuto utilizzare le seguenti opzioni di cmake:

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 \

Queste opzioni si traducono in un insieme di librerie statiche opencv che includono qualsiasi libreria statica ffmpeg che hai anche creato, supponendo che il tuo PKG_CONFIG_PATH sia configurato per trovare correttamente quelle librerie (o se le hai installate in una posizione di sistema predefinita).

D/R:

  • Perché non possiamo creare app?
    • Il processo di compilazione opencv presuppone che tu stia compilando e collegando librerie condivise, anche se crei solo librerie statiche. Questo sembra un difetto nel processo di compilazione piuttosto che una limitazione tecnica; forse un giorno questo verrà risolto.
  • Cos'è il flag OPENCV_FFMPEG_SKIP_BUILD_CHECK?
    • C'è un passaggio nel processo cmake di ffmpeg in cui un'applicazione viene compilata e collegata utilizzando lo stesso processo di compilazione difettoso delle altre applicazioni di opencv. È difettoso nel senso che il processo presuppone che tu stia collegando a librerie condivise quando non è necessario; puoi eseguire tu stesso gli stessi passaggi di costruzione mentre non fare questo presupposto e creare un'applicazione funzionante. Pertanto, questo controllo di compilazione deve essere disattivato affinché opencv accetti che sì, in effetti, tutte le librerie statiche che trova possono essere utilizzate. Questo è
  • E perché disabiliti il ​​supporto di Python?
    • Il processo di compilazione opencv python produce esplicitamente una libreria condivisa caricabile da Python.
  • Questo implica che stai ancora costruendo la suite di test anche con le librerie statiche?
    • Sì. Ma non ho provato a eseguirli

Qualcosa come

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/

dovrebbe funzionare. Almeno funziona con OpenCV 2.4.x sul mio Ubuntu.


Per OpenCV 3.x e ffmpeg 3.x, devo applicare la seguente patch

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}"

E con il seguente script da compilare

#!/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

Inoltre, quando costruisco ffmpeg, devo abilitare i flag --enable-avresample .


Linux
  1. Come installare e configurare VSFTPD

  2. Come installare e configurare Postfix

  3. Come installare e configurare Dovecot

  4. Come installare e configurare Fail2ban su Ubuntu?

  5. Installa IIS e configura un sito Web

Come installare e configurare Grafana

Installa e configura Fail2ban su Debian 11

Come installare e configurare Memcached su CentOS 8

Installa e configura DRBD su CentOS 8

Come installare e configurare Parse Server su Ubuntu 20.04

Installa e configura phpMyAdmin