**文書の過去の版を表示しています。**
OpenCV関係
OpenCVのインストール (Jetson Xavier NX編)
2021/9/11 今日は、Xavier NXにOpenCV最新版をインストールしてみる。
AastaNV
https://github.com/AastaNV/JEP/tree/master/script
installopencv4.5.0Jetson.sh の中を再確認すると、中でsudoしているようなので、sudoは必要なさそう。 また、現在の最新版は4.5.3のようなので、version=4.5.3と編集。 また、sudo sudo … となっているところあるので、それもsudo一つ消した。
このインストールスクリプトを実行しながら、これらの元ネタなどを探してみる。 このスクリプトにも、NVIDIAのコピーライトが書かれている。
公式な情報を探してみる。 以下のスクリプトも発見。
Build OpenCV on Nvidia Jetson Nano (mdegans)
OpenCVのインストール (Jetson Nano編)
Jetson Nanoの標準的な環境でも、普通に、OpenCVをパッケージで導入できるようだが、 「バージョンが古い?」とか、「せっかくのGPUにも対応していない?」などという話が、 ネット上でちらちらと見られるため、最初から、最新のバージョンで、かつ、 GPUを使用できるOpenCV環境を導入してみる。
最新のOpenCV環境の導入は、以下で公開されているスクリプトの実行で一発。
https://github.com/AastaNV/JEP/tree/master/script
$ wget https://github.com/AastaNV/JEP/raw/master/script/install_opencv4.5.0_Jetson.sh $ chmod 775 install_opencv4.5.0_Jetson.sh $ sudo ./install_opencv4.5.0_Jetson.sh opencv
一度は、このままやってみたが、メモリ足らずだろう、途中で、他のターミナル上でも何も動かせず、 リモートログインもできず、にっちもさっちもいかなくなった。 なので、スワップメモリを確保して、やり直した。 以下が、スワップメモリの追加の方法。
https://github.com/JetsonHacksNano/installSwapfile
$ wget https://github.com/JetsonHacksNano/installSwapfile/raw/master/installSwapfile.sh $ chmod 775 installSwapfile.sh $ ./installSwapfile.sh
完了したら、リブートして、以下のコマンドを実行して、スワップメモリが追加されていることを確認。
$ free -m
無事、確認できたら、
$ sudo ./install_opencv4.5.0_Jetson.sh opencv
で、再度、OpenCV 4.5.0のインストールスクリプトを実行。 今回は、時間は結構かかるが、無事、インストール作業が進んで、以下のようなメッセージが最後に出たら、 インストール完了。
** Install opencv-4.5.0 successfully ** Bye :)
$ python3 -c 'import cv2; print(cv2.getBuildInformation())' |grep NVIDIA NVIDIA CUDA: YES (ver 10.2, CUFFT CUBLAS) NVIDIA GPU arch: 53 62 72 NVIDIA PTX archs:
#include "opencv2/opencv.hpp" #include "opencv2/core/utils/logger.hpp" using namespace cv; int main(int argh, char* argv[]) { VideoCapture cap(0); //cap.set(CAP_PROP_FRAME_WIDTH, 640); //cap.set(CAP_PROP_FRAME_HEIGHT, 720); if(!cap.isOpened()) { return -1; } int width = cap.get(CAP_PROP_FRAME_WIDTH); int height = cap.get(CAP_PROP_FRAME_HEIGHT); int fps = cap.get(CAP_PROP_FPS); std::cout << "VideoCapture is opened." << std::endl; //std::cout < "Width x Height = " << width << " x " << height << "\n"; //printf("WIdth x Height = %d x %d\n", width, height); printf("WIdth x Height = %d x %d, fps = %d\n", width, height, fps); Mat frame; while(cap.read(frame)) { imshow("win", frame); const int key = waitKey(1); if (key == 'q'/*113*/) { std::cout << "dims: " << frame.dims << ", depth(byte/channel): " << frame.elemSize1() << ", channels: " << frame.channels() << std::endl; break; } else if(key == 's'/*115*/) { imwrite("img.bmp", frame); } } destroyAllWindows(); return 0; }