opencv is one of the most difficult python package to install. it’s not a pip install easy package issue. in this post, we’ll see how to painlessly install it. Target Os =========
we are using noobs see here Target Pi =========
pi3 Existing Instructions =====================
there are two posts which i found to be nice :
[pyimagesearch] and [manmade2.com]
this tutorial is an explanationless one, refer to these two for explanations pyimagesearch notes
pyimagesearch is the reference post, however, here are some notes: 1. you don’t need to expand the filesystem if you are using noobs (the beginner setup) 2. misses qt packages 3. misses python path in ~/.profile 4. uses weird way to modify ~/.profile 5. uses multi-core compiling 6. no working script to test
manmade2.com notes
- included wrong make command and reinstall instructions (what if a confused user compiles open cv twice (brr))
- missed qt packages install
- misses python path in ~/.profile
Install instructions
the install process can be divided into these parts 1. install raspbian packages including the qt one 2. unzip cv sources 3. setup pip and virtual env 4. compile cv 5. fix rename bug 6. verify installation 7. test snippet
install raspbian packages including the qt one
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo reboot
sudo apt-get install build-essential git cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python2.7-dev python3-dev
sudo apt install qtbase5-dev
unzip cv sources
cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
unzip opencv.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
unzip opencv_contrib.zip
setup pip and virtual env
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo pip install virtualenv virtualenvwrapper
sudo rm -rf ~/.cache/pip
find python path with
which python
open ~/.profile with
sudo nano ~/.profile
write at the end
# virtualenv and virtualenvwrapper
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export WORKON_HOME=/home/pi/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
then
source ~/.profile
mkvirtualenv cv -p python3
workon cv
pip install numpy
compile cv
workon cv
cd ~/opencv-3.3.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \
-D BUILD_EXAMPLES=ON ..
make
sudo make install
sudo ldconfig
ls -l /usr/local/lib/python3.5/site-packages/
fix rename bug
cd /usr/local/lib/python3.5/site-packages/
sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so
verify installation
workon cv
python3
>>> import cv2
>>> cv2.__version__
should be 3.3.0 test snippet
still inside the environment. create a new test file called cvtest.py
write in it :
import cv2
import time
class CameraInst():
# Constructor...
def __init__(self):
fps = 20.0 # Frames per second...
resolution = (640, 480) # Frame size/resolution...
w = 640
h = 480
self.cap = cv2.VideoCapture(0) # Capture Video...
print("Camera warming up ...")
time.sleep(1)
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*"H264") # You also can use (*'XVID')
self.out = cv2.VideoWriter('output.avi',fourcc, fps, (w, h))
def captureVideo(self):
# Capture
self.ret, self.frame = self.cap.read()
# Image manipulations come here...
self.gray = cv2.cvtColor(self.frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',self.gray)
def saveVideo(self):
# Write the frame
self.out.write(self.frame)
def __del__(self):
self.cap.release()
cv2.destroyAllWindows()
print("Camera disabled and all output windows closed...")
def main():
cam1 = CameraInst()
while(True):
# Display the resulting frames...
cam1.captureVideo() # Live stream of video on screen...
cam1.saveVideo() # Save video to file 'output.avi'...
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cleanUp()
if __name__=='__main__':
main()
run with
python3 cvtest.py
i tetsted it with a usb webcam Further notes
if you are following pyimage search, changing swap size then /etc/dphys-swapfile is a file without extentions, not a directory
if you are getting function not implemented don’t forget sudo apt install qtbase5-dev
if you can’t open ~/.profile with nano, make sure you put sudo before i.e. sudo nano ~/.profile
if you are getting
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenvwrapper has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is set properly.
make sure you set the python path as above (the which python part)