Я экспериментирую с компиляцией OpenCV в Google Colab из исходного кода.Мой скрипт выглядит следующим образом:
!pip3 uninstall -y opencv_python
!pip2 uninstall -y opencv_python
!apt purge --remove libopencv-dev
!apt-get install build-essential cmake unzip pkg-config libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libx265-dev libgtk-3-dev libatlas-base-dev gfortran python3-dev checkinstall libeigen3-dev ccache
%cd /content
!mkdir opencv
%cd opencv
!wget https://github.com/opencv/opencv/archive/4.1.0.zip
!unzip -qq 4.1.0.zip
!git clone https://github.com/opencv/opencv_contrib.git
%cd opencv-4.1.0
!mkdir build
%cd build
!cmake -DCPU_BASELINE_REQUIRE=SSE4_1,SSE4_2,AVX,FP16,AVX2,AVX512_SKX -DPYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 -DCMAKE_BUILD_TYPE=Release -DOPENCV_EXTRA_MODULES_PATH=/content/opencv/opencv_contrib/modules -DOPENCV_ENABLE_NONFREE=ON -DOPENCV_GENERATE_PKGCONFIG=ON -DENABLE_CCACHE=ON -DWITH_TBB=ON -DWITH_EIGEN=ON -DWITH_CUDA=ON -DWITH_CUFFT=ON -DCUDA_ARCH_BIN=75 -DBUILD_opencv_cudacodec=OFF -DBUILD_DOCS=OFF -DBUILD_EXAMPLES=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_TESTS=OFF -DBUILD_JAVA=OFF -DBUILD_opencv_js=OFF -DBUILD_opencv_ts=OFF ..
!make -j2
!make install
Все успешно компилируется и устанавливается.Я могу проверить версию OpenCV и установленные файлы, используя pkg-config
.Но в тот момент, когда я пытаюсь использовать любую функцию OpenCV в Python или C ++, происходит сбой.
Этот код Python вызывает сбой и перезапуск виртуальной машины:
import cv2
Любой код C ++ с функцией OpenCVв нем происходит выход без отображения каких-либо сообщений об ошибках:
#include <iostream>
#include "opencv2/highgui.hpp"
#include <opencv2/core/utility.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
try
{
waitKey(1);
}
catch( const cv::Exception& e )
{
cerr << "exception caught: " << e.what() << endl;
}
cout<<"hello"<<endl;
return 0;
}
Я попытался отключить CUDA, изменив тип среды выполнения на None
вместо GPU
, но ничего не решило проблему.ldd
печатает каждую зависимость правильно и valgrind --leak-check=yes executable
дает этот вывод .
Может ли кто-нибудь обнаружить проблему здесь?