from: http://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/
Step #1: Install OpenCV dependencies on Ubuntu 16.04
Most (in fact, all) steps in this tutorial will be accomplished by using your terminal. To start, open up your command line and update the get package manager to refresh and upgrade and pre-installed packages/libraries:
|
1
2
|
update
upgrade
|
Next, let’s install some developer tools:
|
1
|
config
|
The cmake program is used to automatically configure our OpenCV build.
OpenCV is an image processing and computer vision library. Therefore, OpenCV needs to be able to load various image file formats from disk such as JPEG, PNG, TIFF, etc. In order to load these images from disk, OpenCV actually calls other image I/O libraries that actually facilitate the loading and decoding process. We install the necessary ones below:
|
1
|
dev
|
Okay, so now we have libraries to load images from disk — but what about video? Use the following commands to install packages used to process video streams and access frames from cameras:
|
1
2
|
dev
dev
|
OpenCV ships out-of-the-box with a very limited set of GUI tools. These GUI tools allow us to display an image to our screen ( setMouseCallback ), and create simple GUI elements such as sliders and trackbars. Again, you shouldn’t expect to be building full-fledged GUI applications with OpenCV — these are just simple tools that allow you to debug your code and build very simple applications.
Internally, the name of the module that handles OpenCV GUI operations is highgui module relies on the GTK library, which you should install using the following command:
|
1
|
dev
|
Next, we install libraries that are used to optimize various functionalities inside OpenCV, such as matrix operations:
|
1
|
gfortran
|
We’ll wrap up Step #1 by installing the Python development headers and libraries for both Python 2.7 and Python 3.5 (that way you have both):
|
1
|
dev
|
Note: If you do not install the Python development headers and static library, you’ll run into issues during Step #4 where we run cmake command will be unable to automatically determine the proper values of the Python interpreter and Python libraries. In short, the output of this section will look “empty” and you will not be able to build the Python bindings. When you get to Step #4, take the time to compare your output of the command to mine.
Step #2: Download the OpenCV source
At the time of this article’s publication, the most recent version of OpenCV is zip of and unarchive using the following commands:
|
1
2
3
|
~
3.1.0.zip
.zip
|
When new versions of OpenCV are released you can check the official OpenCV GitHub and downloaded the latest release by changing the version number of the zip .
However, we’re not done downloading source code yet — we also need the opencv_contribrepository as well:
|
1
2
|
3.1.0.zip
.zip
|
Why are we bothering to download the contrib repo as well?
Well, we want the full install of OpenCV 3 to have access to features (no pun intended) such as SIFT and SURF. In OpenCV 2.4, SIFT and SURF were included in the default installation of OpenCV. However, with the release of OpenCV 3+, these packages have been moved to contrib, which houses either (1) modules that are currently in development or (2) modules that are marked as “non-free” (i.e., patented). You can learn more about the reasoning behind the SIFT/SURF restructuring in this blog post.
Note: You might need to expand the commands above using the “<=>” button during your copy and paste. The opencv_contrib archive below:
- https://github.com/opencv/opencv/archive/3.1.0.zip
- https://github.com/opencv/opencv_contrib/archive/3.1.0.zip
I also want to mention that both your 3.1.0 ). If the versions numbers do not matchup, you could very easily run into compile time errors (or worse, runtime errors that are near impossible to debug).
Step #3: Setup your Python environment — Python 2.7 or Python 3
We are now ready to start configuring our Python development environment for the build. The first step is to install pip , a Python package manager:
|
1
2
3
|
~
.py
.py
|
I’ve mentioned this in every single OpenCV + Python install tutorial I’ve ever done, but I’ll say it again here today: I’m a huge fan of both virtualenv and virtualenvwrapper. These Python packages allow you to create separate, independent Python environments for eachproject that you are working on.
In short, using these packages allows you to solve the “Project X depends on version 1.x, but Project Y needs 4.x dilemma. A fantastic side effect of using Python virtual environments is that you can keep your system Python neat, tidy, and free from clutter.
While you can certainly install OpenCV with Python bindings without Python virtual environments, I highly recommend you use them as other PyImageSearch tutorials leverage Python virtual environments. I’ll also be assuming that you have both virtualenvwrapper installed throughout the remainder of this guide.
If you would like a full, detailed explanation on why Python virtual environments are a best practice, you should absolutely give this excellent blog post on RealPython a read. I also provide some commentary on why I personally prefer Python virtual environments in the first half of this tutorial.
Again, let me reiterate that it’s standard practice in the Python community to be leveraging virtual environments of some sort, so I suggest you do the same:
|
1
2
|
virtualenvwrapper
pip
|
Once we have bashrc file to include the following lines at the bottom of the file:
|
1
2
3
|
# virtualenv and virtualenvwrapper
.virtualenvs
.sh
|
The virtualenvwrapper .
To update your nano is likely the easiest to operate.
A more simple solution is to use the cat command and avoid editors entirely:
|
1
2
3
|
.bashrc
.bashrc
.bashrc
|
After editing our bashrc file, we need to reload the changes:
|
1
|
.bashrc
|
Note: Calling bashrc will be automatically executed (including our updates).
Now that we have installed mkvirtualenv command.
But before executing this command, you need to make a choice: Do you want to use Python 2.7 or Python 3?
The outcome of your choice will determine which command you run in the following section.
Creating your Python virtual environment
If you decide to use Python 2.7, use the following command to create a Python 2.7 virtual environment:
|
1
|
python2
|
Otherwise, use this command to create a Python 3 virtual environment:
|
1
|
python3
|
Regardless of which Python command you decide to use, the end result is that we have created a Python virtual environment named cv (short for “computer vision”).
You can name this virtual environment whatever you like (and create as many Python virtual environments as you want), but for the time bing, I would suggest sticking with the cv name as that is what I’ll be using throughout the rest of this tutorial.
Verifying that you are in the “cv” virtual environment
If you ever reboot your Ubuntu system; log out and log back in; or open up a new terminal, you’ll need to use the workon command follows:
|
1
|
cv
|
To validate that you are in the cv virtual environment:
Figure 1: Make sure you see the “(cv)” text on your prompt, indicating that you are in the cv virtual environment.
Otherwise, if you do not see the cv virtual environment:
Figure 2: If you do not see the “(cv)” text on your prompt, then you are not in the cv virtual environment and need to run the “workon” command to resolve this issue.
To access the workon command mentioned above.
Install NumPy into your Python virtual environment
The final step before we compile OpenCV is to install NumPy, a Python package used for numerical processing. To install NumPy, ensure you are in the cv environment). From there execute the following command:
|
1
|
numpy
|
Step #4: Configuring and compiling OpenCV on Ubuntu 16.04
At this point, all of our necessary prerequisites have been installed — we are now ready to compile and OpenCV!
But before we do that, double-check that you are in the workon command:
|
1
|
cv
|
After ensuring you are in the cv virtual environment, we can setup and configure our build using CMake:
|
1
2
3
4
5
6
7
8
9
10
|
/
build
build
\
\
\
\
\
\
.
|
The above commands change directory to zip files.
Note: If you are getting an error related to h error. Thank you to Carter Cherry and Marcin for pointing this out in the comments section!
Inside this directory we create a sub-directory named build directory is where the actual compile is going to take place.
Finally, we execute cmake to configure our build.
Before we move on to the actual compilation of OpenCV, make sure you examine the output of CMake!
To do this, scroll down the section titled 3 .
If you are compiling OpenCV on Ubuntu 16.04 with Python 2.7 support, make sure thepath . Your output should be similar to mine below:
Figure 3: Ensuring that Python 2.7 will be used when compiling OpenCV 3 for Ubuntu 16.04.
Examining this output, you can see that:
- The cv virtual environment.
- Libraries points to the Python 2.7 library (which we installed during the final step of Step #1).
- The cv virtual environment.
- And finally, the / .
Similarly, if you’re compiling OpenCV 16.04 with Python 3 support, you’ll want to ensure your 3 section looks similar to mine below:
Figure 4: Validating that Python 3 will be used when compiling OpenCV 3 for Ubuntu 16.04.
Again, notice how my path have all been correctly set.
If you do not see the cv virtual environment prior to running CMake!
If that is indeed the case, simply access the cv and re-run the CMake command mentioned above.
Assuming your CMake command exited without any errors, you can now compile OpenCV:
|
1
|
j4
|
The j4 .
Using multiple processes allows OpenCV to compile faster; however, there are times where race conditions are hit and the compile bombs out. While you can’t really tell if this is the case without a lot of previous experience compiling OpenCV, if you do run into an error, my first suggestion would be to run clean to flush the build, followed by compiling using only a single core:
|
1
2
|
clean
make
|
Below you can find a screenshot of a successful OpenCV + Python compile on Ubuntu 16.04:
Figure 5: Successfully compiling OpenCV 3 for Ubuntu 16.04.
The last step is to actually install OpenCV 3 on Ubuntu 16.04:
|
1
2
|
install
ldconfig
|
Step #5: Finish your OpenCV install
You’re coming down the home stretch, just a few more steps to go and your Ubuntu 16.04 system will be all setup with OpenCV 3.
For Python 2.7:
After running ls command:
|
1
2
3
|
/
1972
.so
|
Note: In some cases, you may find that OpenCV was installed inpakages .
The final step is to sym-link our OpenCV cv virtual environment for Python 2.7:
|
1
2
|
/
.so
|
For Python 3.5:
After running ls command:
|
1
2
3
|
/
1972
.so
|
I’ve been puzzled regarding this behavior ever since OpenCV 3 was released, but for some reason, when compiling OpenCV with Python 3 support, the output so .
Again, I have no idea exactly why this happens, but it’s a very easy fix. All we need to do is rename the file:
|
1
2
|
/
.so
|
After renaming cv virtual environment for Python 3.5:
|
1
2
|
/
.so
|
Step #6: Testing your OpenCV install
Congratulations, you now have OpenCV 3 installed on your Ubuntu 16.04 system!
To verify that your installation is working:
- Open up a new terminal.
- Execute the cv Python virtual environment.
- Attempt to import the Python + OpenCV bindings.
I have demonstrated how to perform these steps below:
|
1
2
3
4
5
6
7
8
9
10
|
~
cv
python
)
linux
.
cv2
.__version__
'3.1.0'
>>>
|
As you can see, I can import my OpenCV bindings into my Python 3.5 shell.
Below follows a screenshot of me utilizing the same steps outlined in this tutorial and importing OpenCV bindings into a Python 2.7 shell:
Figure 6: Ensuring that I can successfully import my Python + OpenCV bindings on Ubuntu 16.04.
Thus, regardless of which Python version you decide to use, simply follow the steps detailed in this tutorial and you’ll be able to install OpenCV + Python on your Ubuntu 16.04 system.
Once OpenCV has been installed, you can delete both the zip files):
|
1
2
|
~
.zip
|
But again, be careful when running this command! You’ll want to make sure you have properly installed OpenCV on your system prior to blowing along these directories. Otherwise, you’ll need to restart the entire compile process!
Troubleshooting and FAQ
In this section, I address some of the common questions, problems, and issues that arise when installing OpenCV on Ubuntu 16.04.
Q. When I execute workon , I get a “command not found error”.
A. There are three primary reasons why you would be getting this error message, all of which are related to Step #3:
- First, make sure you have installed virtualenvwrapper in the list of installed packages.
- Your bashrc ).
- After editing your workon commands.
Q. Whenever I open a new terminal, logout, or reboot my Ubuntu system, I cannot execute the workon commands.
A. See reason #2 from the previous question.
Q. When I (1) open up a Python shell that imports OpenCV or (2) execute a Python script that calls OpenCV, I get an error: cv2 .
A. Unfortunately, the exact cause of this error message is extremely hard to diagnose as there are multiple reasons this could be happening. In general, I recommend the following suggestions to help diagnose and resolve the error:
- Make sure you are in the cv command. If this command gives you an error, then see the first question in this FAQ.
- If after you’ve ensured your packages directory and (2) that it’s properly sym-linked to a valid, existing file.
- Be sure to check the so file there.
- If all else fails, check in your cv virtual environment.
So, what’s next?
Congrats! You now have a brand new, fresh install of OpenCV on your Ubuntu 16.04 system — and I’m sure you’re just itching to leverage your install to build some awesome computer vision apps…
…but I’m also willing to bet that you’re just getting started learning computer vision and OpenCV, and probably feeling a bit confused and overwhelmed on exactly where to start.
Personally, I’m a big fan of learning by example, so a good first step would be to have some fun and read this blog post on detecting cats in images/videos. This tutorial is meant to be very hands-on and demonstrate how you can (quickly) build a Python + OpenCV application to detect the presence of cats in images.
And if you’re really interested in leveling-up your computer vision skills, you should definitely check out my book, Practical Python and OpenCV + Case Studies. My book not only covers the basics of computer vision and image processing, but also teaches you how to solve real-world computer vision problems including face detection in images and video streams, object tracking in video, and handwriting recognition.