LoginSignup
2
2

More than 1 year has passed since last update.

ラズパイでmjpg-streamerのopencvプラグインを使う+OpenCVのビルドインストール(備忘録)

Last updated at Posted at 2021-06-03

mjpg-streamerを用いて、opencvで加工したwebカメラ映像をストリーミングしたかったけど、makeしてもinput_opencv.soが生成されなかった。最終的にopencvのバージョンとCMakeListsの記述を変更することでうまくいったのでメモ。

動作環境

  • Raspberry Pi4
  • Python 3.7.3
  • OpenCV 3.4.6

input_opencvのCMakeLists.txtの記述を変更

mjpg-streamerのplugins/input_opencvフォルダ内は以下のような階層だった。

input_opencv
│  CMakeLists.txt
│  input_opencv.cpp
│  input_opencv.h
│  README.md
│
└─filters
    ├─cvfilter_cpp
    │      CMakeLists.txt
    │      filter_cpp.cpp
    │      README.md
    │
    └─cvfilter_py
        │  CMakeLists.txt
        │  conversion.cpp
        │  conversion.h
        │  example_filter.py
        │  filter_py.cpp
        │  README.md
        │
        └─cmake
                FindNumpy.cmake

このうち直下とfilters/cvfilter_cppとfilters/cvfilter_py階層の3か所にCMakeLists.txtがある。

今回はpython用なので、input_opencvフォルダとcvfilter_pyフォルダにあるCMakeLists.txtを編集する。

input_opencvフォルダのCMakeLists.txt編集内容は以下のようにONLYIF OpenCV_FOUND #${OpenCV_VERSION_MAJOR} EQUAL 3の記述を削除すればよいらしい。opencv3系を入れていてもこの記述があるせいでうまくいかないのは謎。

CMakeLists.txt
#MJPG_STREAMER_PLUGIN_OPTION(input_opencv "OpenCV input #plugin"
#                            ONLYIF OpenCV_FOUND #${OpenCV_VERSION_MAJOR} EQUAL 3)
#↑ここを                            
#↓こうする                            
MJPG_STREAMER_PLUGIN_OPTION(input_opencv "OpenCV input plugin")

cvfilter_pyフォルダにあるCMakeLists.txtも同様に編集しておく。

OpenCVのバージョンは3系が必要

最初OpenCV4系でトライしてたけど、make中にエラーになったので3系にしたらすんなりmakeできた。

まず古いバージョンのOpenCVを消す。

$ cd /mnt/opencv/build
$ sudo make uninstall
$ sudo rm -rf /usr/local/include/opencv

これでもpythonでOpenCVがimportできてしまう場合はpythonからパッケージの場所を確認してそのフォルダを削除する。

import cv2
print(cv2.__file__)
#/usr/local/lib/python3.7/dist-packages/cv2/...←パスが表示されるのでこのフォルダを削除

他の記事を参照してOpenCV3.4.6をビルドインストールする。

$ sudo apt install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev 
$ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev 
$ sudo apt install libxvidcore-dev libx264-dev libgtk2.0-dev libatlas-base-dev gfortran
$ sudo apt install python3-dev python3-pip
$ sudo pip3 install numpy

#追加(GStreamer)
$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev
$ cd /usr/include
$ sudo ln -s libv4l1-videodev.h videodev.h

#download OpenCV3
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.6.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.6.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip

$ cd opencv
$ mkdir build
$ cd build

$ sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.6/modules \
-D OPENCV_PYTHON3_INSTALL_PATH=/usr/local/lib/python3.7/dist-packages \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_EXAMPLES=ON \
-D WITH_QT=OFF \
-D WITH_GTK=ON \
-D WITH_OPENGL=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
..

$ sudo make clean
$ sudo make -j4
$ sudo make install
$ sudo ldconfig

最後にpythonでimportできたか確認

import cv2
print(cv2.__version__)

最後に、mjpg-streamerをmakeする。

$ cd ~/mjpg-streamer/mjpg-streamer-experimental
$ sudo make
$ sudo make install

無事input_opencv.soが生成されていれば終了。

参考元

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2