Our chassis builder was determined to get OpenCV working on the latest Raspberry Pi platform for our entry, but it wasn't as straight forward as a quick download...................
Installing OpenCV on Raspberry Pi Zero 2 W
A tale with a moral
I have been interested in using OpenCV for years, but the
driving force of need was never strong enough to overcome the obstacles. For
example, my bomb disposal robot needed to detect the bomb. I scoured the
Internet for instruction on installing OpenCV, but in the time it took to try
and fail a few times I was able to implement Canny edge detection myself, and
it worked fine for that purpose.
Then came Pi Wars 2022. Suddenly the goalposts had moved.
Whereas the bomb disposal robot, which moved slowly in any case, was happy with
two detections a second, I reckoned that our Pi Wars 2022 robot would need at
least twenty, and preferably forty. So, back to the Internet.
If you type “install opencv on raspberry pi” into Google, you
get 839,000 results, and I'm here to tell you that the most common single
category is someone who has read how to do it and is passing it on without
actually trying it themselves. Why do they do it? It just makes more crud to
wade through. The next category is people who have tried it and got it to work
on a very specific configuration, but don't explain fully what that
configuration was, so you can't tell if it's applicable. One common thread is
that a full install from scratch can take days and is fraught with peril. I
asked on Discord for a prepared disk image without success. In total, over
time, looking for shortcuts, I probably spent several days not installing
OpenCV
Eventually I gave up on shortcuts, bit the bullet, and found
a recipe for doing it the hard way. https://pimylifeup.com/raspberry-pi-opencv/
It was marked “beginner” which turned out to be a bit optimistic, but basically
it worked!
A few prerequisites may be missing, so I added the following:
sudo apt-get install libatlas-base-dev
sudo apt-get install libjasper-dev
sudo apt-get install libqtgui4
sudo apt-get install libqt4-test
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
sudo apt install libopenblas-base
sudo apt install libopenblas-dev
sudo apt install liblapacke-dev
If they are already there, running the install will do no
harm.
Anyway: I now have OpenCV working on a variety of Pis in the
sense that all the facilities in there that I think I need are present. I have
made the disk images available on Google Drive if anyone wants to save effort,
but I would encourage people to do it themselves.
Moral: sometimes the hard way is the best way.
Colin Walls
05/Dec/2021
P.S. The Pi Camera
Anyone used to SLRs will find the Pi camera hard to understand,
particularly as it is on the end of a long chain of hardware and software, all
trying to be helpful, but obscuring what is really happening, so …
There is no diaphragm, so you can't adjust the F stop. 'ISO'
affects analogue gain and has no effect on raw sensor sensitivity. The focus is
factory set (supposedly to 2m - infinity) and glued into place. There is no
shutter, so light is hitting the sensor at all times. The sequence of zeroing,
waiting, and reading pixel rows is roughly equivalent to a rolling shutter
though, and the waiting period is roughly equivalent to shutter speed.
It is a video camera, there are no stills in the conventional
sense. When you 'capture' an image what is really happening is that you get
given the last video frame that the camera happened to produce. This means that
you can't synchronise two cameras by 'capturing' an image at the same instant.
This is why frame rate is crucial, because (assuming a 30fps rate, for example)
any frame could be up to 1/30 second old when you get it, and the two cameras
could be up to 1/30 second different in time of capture.
One thing common to nearly all digital cameras is that each
pixel captures only one colour, so the true resolution is ¼ what you think it
is, as other values are interpolated. This means that the ¼ 'maximum
resolution' resolution has the special quality of matching the natural binning
of the Bayer quartets in the sensor and involves a lot less processing. For the
Pi camera V1 this 'sweet spot' is 1296 x 972. For
the V2 it is 1640 x 1232
If you want to know more, read
https://picamera.readthedocs.io/en/release-1.13/fov.html