Ubuntu 20.04 on raspberry pi 4에 OpenCV를 넣고 파이썬에서 사용
12232 단어 파이썬RaspberryPi4OpenCV우분투
개요
OpenCV 설치
소스 코드에서 빌드했습니다.
$ wget https://github.com/opencv/opencv/archive/3.4.3.zip -O opencv-3.4.3.zip
$ wget https://github.com/opencv/opencv_contrib/archive/3.4.3.zip -O opencv_contrib-3.4.3.zip
$ unzip opencv-3.4.3.zip
$ unzip opencv_contrib-3.4.3.zip
$ cd opencv-3.4.3
$ mkdir build
$ cd build
$ ./cmake.sh
$ make -j4
$ sudo make install
$ sudo ldconfig
$ cd /path/to/site-packages
$ sudo ln -s /usr/local/lib/python3.6/site-packages/cv2.cpython-36m-aarch64-linux-gnu.so cv2.so
cmake는 많은 옵션이 있는 것과, 몇번이나 다시 했으므로 이하와 같이 파일로 해 두었습니다.
cmake.sh#!/bin/sh
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF \
-D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF \
-D BUILD_opencv_gpucodec=OFF -D BUILD_opencv_gpufeatures2d=OFF \
-D BUILD_opencv_gpufilters=OFF -D BUILD_opencv_gpuimgproc=OFF \
-D BUILD_opencv_gpulegacy=OFF -D BUILD_opencv_gpuoptflow=OFF \
-D BUILD_opencv_gpustereo=OFF -D BUILD_opencv_gpuwarping=OFF \
-D BUILD_DOCS=OFF -D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF \
-D BUILD_opencv_python3=ON -D FORCE_VTK=ON \
-D WITH_TBB=ON -D WITH_V4L=ON \
-D WITH_OPENGL=ON -D WITH_CUBLAS=ON \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=`pyenv local 3.6.8; pyenv which python` \
-D PYTHON3_INCLUDE_DIR=`pyenv local 3.6.8; python -c 'from distutils.sysconfig import get_python_inc; print(get_python_inc())'` \
-D PYTHON3_NUMPY_INCLUDE_DIRS=`pyenv local 3.6.8; python -c 'import numpy; print(numpy.get_include())'` \
-D PYTHON3_LIBRARIES=`find $PYENV_ROOT/versions/3.6.8/lib -name 'libpython*.so'` \
-D WITH_FFMPEG=ON \
..
내가 OpenCV에 익숙하지 않은 것에 약간 특수한 환경인 일도 있어서 별로 가지 않았다. 다음과 같은 점에서 집착했습니다.
$ wget https://github.com/opencv/opencv/archive/3.4.3.zip -O opencv-3.4.3.zip
$ wget https://github.com/opencv/opencv_contrib/archive/3.4.3.zip -O opencv_contrib-3.4.3.zip
$ unzip opencv-3.4.3.zip
$ unzip opencv_contrib-3.4.3.zip
$ cd opencv-3.4.3
$ mkdir build
$ cd build
$ ./cmake.sh
$ make -j4
$ sudo make install
$ sudo ldconfig
$ cd /path/to/site-packages
$ sudo ln -s /usr/local/lib/python3.6/site-packages/cv2.cpython-36m-aarch64-linux-gnu.so cv2.so
#!/bin/sh
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF \
-D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF \
-D BUILD_opencv_gpucodec=OFF -D BUILD_opencv_gpufeatures2d=OFF \
-D BUILD_opencv_gpufilters=OFF -D BUILD_opencv_gpuimgproc=OFF \
-D BUILD_opencv_gpulegacy=OFF -D BUILD_opencv_gpuoptflow=OFF \
-D BUILD_opencv_gpustereo=OFF -D BUILD_opencv_gpuwarping=OFF \
-D BUILD_DOCS=OFF -D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF \
-D BUILD_opencv_python3=ON -D FORCE_VTK=ON \
-D WITH_TBB=ON -D WITH_V4L=ON \
-D WITH_OPENGL=ON -D WITH_CUBLAS=ON \
-D BUILD_opencv_python3=ON \
-D PYTHON3_EXECUTABLE=`pyenv local 3.6.8; pyenv which python` \
-D PYTHON3_INCLUDE_DIR=`pyenv local 3.6.8; python -c 'from distutils.sysconfig import get_python_inc; print(get_python_inc())'` \
-D PYTHON3_NUMPY_INCLUDE_DIRS=`pyenv local 3.6.8; python -c 'import numpy; print(numpy.get_include())'` \
-D PYTHON3_LIBRARIES=`find $PYENV_ROOT/versions/3.6.8/lib -name 'libpython*.so'` \
-D WITH_FFMPEG=ON \
..
import cv2
를 할 수 없어서 고민했습니다. 제대로 -D PYTHON3_hogehoge
옵션을 붙여서 python3 용의 Makefile로 받을 필요가있었습니다. cmake의 결과를 제대로 보지 않았습니다. . matplotlib
이미지 표시를 위해 matplotlib를 넣었습니다. backend가 non-GUI라고 하는 에러가 나왔으므로 아래와 같이 PyQt5를 넣었습니다. (시행착오하면서 했기 때문에 커맨드가 부족하다고 생각합니다..)
$ sudo apt install -y qt5-qmake qt5-default
$ wget https://sourceforge.net/projects/pyqt/files/sip/sip-4.19.12/sip-4.19.12.tar.gz
$ wget https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.10.1/PyQt5_gpl-5.10.1.tar.gz
$ tar -xvf sip-4.19.12.tar.gz
$ tar -xvf PyQt5_gpl-5.10.1.tar.gz
$ cd sip-4.19.12/
$ python configure.py --sip-module=PyQt5.sip
$ make -j4
$ sudo make install
$ cd ../PyQt5_gpl-5.10.1/
$ python configure.py --qmake /usr/bin/qmake --sip-incdir ~/deeplabcut/sip-4.19.12/siplib
$ make
$ sudo make install
$ pip install pyqt5
파이썬으로 동작 확인
레나 씨의 얼굴 검출을 할 수 있을까? 를 소재로 OpenCV의 동작 확인을 했습니다.
cvtest.pyimport cv2
import matplotlib.pyplot as plt
cascade_path = '/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'
def face_detection(img_src):
img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)
cascade = cv2.CascadeClassifier(cascade_path)
facerect = cascade.detectMultiScale(img_gray)
if len(facerect) == 0:
print('No face detected')
return None
rect = facerect[0]
cv2.rectangle(
img_src,
tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]),
(255, 255, 255),
thickness=2)
return img_src
if __name__ == "__main__":
lena_path = './lena.png'
lena_src = cv2.imread(lena_path)
lena_face_detected = face_detection(lena_src)
if lena_face_detected is None:
img_show = lena_src
else:
img_show = cv2.cvtColor(lena_face_detected, cv2.COLOR_BGR2RGB)
plt.imshow(img_show)
plt.show()
다음이 실행 결과입니다. 무사히 검출할 수 있네요. 와이
카메라가 도착하면 이것과 함께 놀고 싶습니다.
이상입니다.
Reference
이 문제에 관하여(Ubuntu 20.04 on raspberry pi 4에 OpenCV를 넣고 파이썬에서 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/devmikyom/items/a568d4246e1103b18f69
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ sudo apt install -y qt5-qmake qt5-default
$ wget https://sourceforge.net/projects/pyqt/files/sip/sip-4.19.12/sip-4.19.12.tar.gz
$ wget https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.10.1/PyQt5_gpl-5.10.1.tar.gz
$ tar -xvf sip-4.19.12.tar.gz
$ tar -xvf PyQt5_gpl-5.10.1.tar.gz
$ cd sip-4.19.12/
$ python configure.py --sip-module=PyQt5.sip
$ make -j4
$ sudo make install
$ cd ../PyQt5_gpl-5.10.1/
$ python configure.py --qmake /usr/bin/qmake --sip-incdir ~/deeplabcut/sip-4.19.12/siplib
$ make
$ sudo make install
$ pip install pyqt5
레나 씨의 얼굴 검출을 할 수 있을까? 를 소재로 OpenCV의 동작 확인을 했습니다.
cvtest.py
import cv2
import matplotlib.pyplot as plt
cascade_path = '/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'
def face_detection(img_src):
img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)
cascade = cv2.CascadeClassifier(cascade_path)
facerect = cascade.detectMultiScale(img_gray)
if len(facerect) == 0:
print('No face detected')
return None
rect = facerect[0]
cv2.rectangle(
img_src,
tuple(rect[0:2]), tuple(rect[0:2] + rect[2:4]),
(255, 255, 255),
thickness=2)
return img_src
if __name__ == "__main__":
lena_path = './lena.png'
lena_src = cv2.imread(lena_path)
lena_face_detected = face_detection(lena_src)
if lena_face_detected is None:
img_show = lena_src
else:
img_show = cv2.cvtColor(lena_face_detected, cv2.COLOR_BGR2RGB)
plt.imshow(img_show)
plt.show()
다음이 실행 결과입니다. 무사히 검출할 수 있네요. 와이
카메라가 도착하면 이것과 함께 놀고 싶습니다.
이상입니다.
Reference
이 문제에 관하여(Ubuntu 20.04 on raspberry pi 4에 OpenCV를 넣고 파이썬에서 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/devmikyom/items/a568d4246e1103b18f69텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)