2020年7月3日 星期五

樹莓派安裝 OpenCV 4

我的樹莓派視訊鏡頭買來很久了, 但是一直沒時間安裝上去 (要花點時間研究怎麼裝), 今天在下面這本書裡面看到如何在樹莓派上安裝 OpenCV 4, 看起來超乎我想像的簡單, 只需要兩道指令即可, 所以就迫不及待地在 Pi Zero W 上試試看.

Raspberry Pi Computer Vision Programming, 2nd Edition (Packt, 2020)


Source : Packt


此書首先詳細說明如何安裝 Raspbian 最新版 Buster, 以及如何設定 SSH 與 WiFi 介面以便進行無頭存取. Buster 內建了 Python 3.7.3 以及好用的 Thonny 編輯器.


1. 安裝相依模組 :

$ sudo apt-get install -y libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-test 

2. 安裝 Open CV 4 套件 :

$ pip3 install opencv-python

安裝過程如下 :

pi@raspberrypi:~ $ sudo apt-get install -y libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev libqtgui4 libqt4-test 
正在讀取套件清單... 完成
正在重建相依關係
正在讀取狀態資料... 完成
Note, selecting 'libhdf5-dev' instead of 'libhdf5-serial-dev'
下列的額外套件將被安裝:
  hdf5-helpers libaec-dev libaec0 libatlas3-base libaudio2 libhdf5-103
  libhdf5-cpp-103 libjasper1 libjpeg8 libmng1 libqt4-dbus libqt4-xml
  libqtcore4 libqtdbus4 libsz2 qdbus qt-at-spi qtchooser qtcore4-l10n
建議套件:
  libatlas-doc liblapack-doc nas libhdf5-doc libjasper-runtime libicu57
  qt4-qtconfig
下列【新】套件將會被安裝:
  hdf5-helpers libaec-dev libaec0 libatlas-base-dev libatlas3-base libaudio2
  libhdf5-103 libhdf5-cpp-103 libhdf5-dev libjasper-dev libjasper1 libjpeg8
  libmng1 libqt4-dbus libqt4-test libqt4-xml libqtcore4 libqtdbus4 libqtgui4
  libsz2 qdbus qt-at-spi qtchooser qtcore4-l10n
升級 0 個,新安裝 24 個,移除 0 個,有 200 個未被升級。
需要下載 16.1 MB 的套件檔。
此操作完成之後,會多佔用 69.4 MB 的磁碟空間。
下載:1 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libjasper1 armhf 1.900.1-debian1-2.4+deb8u1 [110 kB]
下載:2 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libjpeg8 armhf 8d1-2 [108 kB]
下載:3 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libmng1 armhf 1.0.10+dfsg-3.1 [164 kB]
下載:4 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf hdf5-helpers armhf 1.10.4+repack-10 [35.2 kB]
下載:5 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libaec0 armhf 1.0.2-1 [21.3 kB]
下載:6 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libsz2 armhf 1.0.2-1 [6,640 B]
下載:7 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libaec-dev armhf 1.0.2-1 [19.1 kB]
下載:8 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libatlas3-base armhf 3.10.3-8+rpi1 [2,399 kB]
下載:9 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libatlas-base-dev armhf 3.10.3-8+rpi1 [2,966 kB]
下載:10 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libaudio2 armhf 1.9.4-6 [72.7 kB]
下載:11 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libhdf5-103 armhf 1.10.4+repack-10 [1,259 kB]
下載:12 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libhdf5-cpp-103 armhf 1.10.4+repack-10 [121 kB]
下載:13 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libhdf5-dev armhf 1.10.4+repack-10 [2,221 kB]
下載:14 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libjasper-dev armhf 1.900.1-debian1-2.4+deb8u1 [501 kB]
下載:15 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf qtcore4-l10n all 4:4.8.7+dfsg-18+rpi1 [662 kB]
下載:16 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqtcore4 armhf 4:4.8.7+dfsg-18+rpi1 [1,361 kB]
下載:17 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqt4-xml armhf 4:4.8.7+dfsg-18+rpi1 [127 kB]
下載:18 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqtdbus4 armhf 4:4.8.7+dfsg-18+rpi1 [194 kB]
下載:19 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf qtchooser armhf 66-2 [23.1 kB]
下載:20 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf qdbus armhf 4:4.8.7+dfsg-18+rpi1 [73.0 kB]
下載:21 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqt4-dbus armhf 4:4.8.7+dfsg-18+rpi1 [54.0 kB]
下載:22 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqt4-test armhf 4:4.8.7+dfsg-18+rpi1 [97.8 kB]
下載:23 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf libqtgui4 armhf 4:4.8.7+dfsg-18+rpi1 [3,408 kB]
下載:24 http://mirror.ossplanet.net/raspbian/raspbian buster/main armhf qt-at-spi armhf 0.4.0-9 [48.3 kB]
取得 16.1 MB 用了 19s (840 kB/s)
選取了原先未選的套件 libjasper1:armhf。
(讀取資料庫 ... 目前共安裝了 156648 個檔案和目錄。)
正在準備解包 .../00-libjasper1_1.900.1-debian1-2.4+deb8u1_armhf.deb……
Unpacking libjasper1:armhf (1.900.1-debian1-2.4+deb8u1) ...
選取了原先未選的套件 libjpeg8:armhf。
正在準備解包 .../01-libjpeg8_8d1-2_armhf.deb……
Unpacking libjpeg8:armhf (8d1-2) ...
選取了原先未選的套件 libmng1:armhf。
正在準備解包 .../02-libmng1_1.0.10+dfsg-3.1_armhf.deb……
Unpacking libmng1:armhf (1.0.10+dfsg-3.1) ...
選取了原先未選的套件 hdf5-helpers。
正在準備解包 .../03-hdf5-helpers_1.10.4+repack-10_armhf.deb……
Unpacking hdf5-helpers (1.10.4+repack-10) ...
選取了原先未選的套件 libaec0:armhf。
正在準備解包 .../04-libaec0_1.0.2-1_armhf.deb……
Unpacking libaec0:armhf (1.0.2-1) ...
選取了原先未選的套件 libsz2:armhf。
正在準備解包 .../05-libsz2_1.0.2-1_armhf.deb……
Unpacking libsz2:armhf (1.0.2-1) ...
選取了原先未選的套件 libaec-dev:armhf。
正在準備解包 .../06-libaec-dev_1.0.2-1_armhf.deb……
Unpacking libaec-dev:armhf (1.0.2-1) ...
選取了原先未選的套件 libatlas3-base:armhf。
正在準備解包 .../07-libatlas3-base_3.10.3-8+rpi1_armhf.deb……
Unpacking libatlas3-base:armhf (3.10.3-8+rpi1) ...
選取了原先未選的套件 libatlas-base-dev:armhf。
正在準備解包 .../08-libatlas-base-dev_3.10.3-8+rpi1_armhf.deb……
Unpacking libatlas-base-dev:armhf (3.10.3-8+rpi1) ...
選取了原先未選的套件 libaudio2:armhf。
正在準備解包 .../09-libaudio2_1.9.4-6_armhf.deb……
Unpacking libaudio2:armhf (1.9.4-6) ...
選取了原先未選的套件 libhdf5-103:armhf。
正在準備解包 .../10-libhdf5-103_1.10.4+repack-10_armhf.deb……
Unpacking libhdf5-103:armhf (1.10.4+repack-10) ...
選取了原先未選的套件 libhdf5-cpp-103:armhf。
正在準備解包 .../11-libhdf5-cpp-103_1.10.4+repack-10_armhf.deb……
Unpacking libhdf5-cpp-103:armhf (1.10.4+repack-10) ...
選取了原先未選的套件 libhdf5-dev。
正在準備解包 .../12-libhdf5-dev_1.10.4+repack-10_armhf.deb……
Unpacking libhdf5-dev (1.10.4+repack-10) ...
選取了原先未選的套件 libjasper-dev。
正在準備解包 .../13-libjasper-dev_1.900.1-debian1-2.4+deb8u1_armhf.deb……
Unpacking libjasper-dev (1.900.1-debian1-2.4+deb8u1) ...
選取了原先未選的套件 qtcore4-l10n。
正在準備解包 .../14-qtcore4-l10n_4%3a4.8.7+dfsg-18+rpi1_all.deb……
Unpacking qtcore4-l10n (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqtcore4:armhf。
正在準備解包 .../15-libqtcore4_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqtcore4:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqt4-xml:armhf。
正在準備解包 .../16-libqt4-xml_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqt4-xml:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqtdbus4:armhf。
正在準備解包 .../17-libqtdbus4_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqtdbus4:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 qtchooser。
正在準備解包 .../18-qtchooser_66-2_armhf.deb……
Unpacking qtchooser (66-2) ...
選取了原先未選的套件 qdbus。
正在準備解包 .../19-qdbus_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking qdbus (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqt4-dbus:armhf。
正在準備解包 .../20-libqt4-dbus_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqt4-dbus:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqt4-test:armhf。
正在準備解包 .../21-libqt4-test_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqt4-test:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 libqtgui4:armhf。
正在準備解包 .../22-libqtgui4_4%3a4.8.7+dfsg-18+rpi1_armhf.deb……
Unpacking libqtgui4:armhf (4:4.8.7+dfsg-18+rpi1) ...
選取了原先未選的套件 qt-at-spi:armhf。
正在準備解包 .../23-qt-at-spi_0.4.0-9_armhf.deb……
Unpacking qt-at-spi:armhf (0.4.0-9) ...
設定 libjpeg8:armhf (8d1-2) ...
設定 libmng1:armhf (1.0.10+dfsg-3.1) ...
設定 libatlas3-base:armhf (3.10.3-8+rpi1) ...
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/atlas/libblas.so.3 來提供 /usr/lib/arm-linux-gnueabihf/libblas.so.3 (libblas.so.3-arm-linux-gnueabihf)
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/atlas/liblapack.so.3 來提供 /usr/lib/arm-linux-gnueabihf/liblapack.so.3 (liblapack.so.3-arm-linux-gnueabihf)
設定 hdf5-helpers (1.10.4+repack-10) ...
設定 libatlas-base-dev:armhf (3.10.3-8+rpi1) ...
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/atlas/libblas.so 來提供 /usr/lib/arm-linux-gnueabihf/libblas.so (libblas.so-arm-linux-gnueabihf)
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/atlas/liblapack.so 來提供 /usr/lib/arm-linux-gnueabihf/liblapack.so (liblapack.so-arm-linux-gnueabihf)
設定 libaec0:armhf (1.0.2-1) ...
設定 libaudio2:armhf (1.9.4-6) ...
設定 libjasper1:armhf (1.900.1-debian1-2.4+deb8u1) ...
設定 libjasper-dev (1.900.1-debian1-2.4+deb8u1) ...
設定 qtchooser (66-2) ...
設定 libsz2:armhf (1.0.2-1) ...
設定 qtcore4-l10n (4:4.8.7+dfsg-18+rpi1) ...
設定 libaec-dev:armhf (1.0.2-1) ...
設定 libhdf5-103:armhf (1.10.4+repack-10) ...
設定 libqtcore4:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 libqtgui4:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 libhdf5-cpp-103:armhf (1.10.4+repack-10) ...
設定 libqt4-xml:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 libqt4-test:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 libhdf5-dev (1.10.4+repack-10) ...
update-alternatives: 在自動模式下以 /usr/lib/arm-linux-gnueabihf/pkgconfig/hdf5-serial.pc 來提供 /usr/lib/arm-linux-gnueabihf/pkgconfig/hdf5.pc (hdf5.pc)
設定 libqtdbus4:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 qdbus (4:4.8.7+dfsg-18+rpi1) ...
設定 libqt4-dbus:armhf (4:4.8.7+dfsg-18+rpi1) ...
設定 qt-at-spi:armhf (0.4.0-9) ...
執行 man-db (2.8.5-2) 的觸發程式……
執行 libc-bin (2.28-10+rpi1) 的觸發程式……
pi@raspberrypi:~ $
pi@raspberrypi:~ $ pip3 install opencv-python     
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting opencv-python
  Downloading https://www.piwheels.org/simple/opencv-python/opencv_python-4.1.1.26-cp37-cp37m-linux_armv6l.whl (9.4MB)
Requirement already satisfied: numpy>=1.16.2 in /usr/lib/python3/dist-packages (from opencv-python) (1.16.2)
Installing collected packages: opencv-python
Successfully installed opencv-python-4.1.1.26

看來可以正式來學習 OpenCV 4 了, 但是我 import cv2 卻出現下列錯誤訊息 :

Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> import cv2   
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import cv2
  File "/home/pi/.local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
    from .cv2 import *
ImportError: /home/pi/.local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: undefined symbol: __atomic_fetch_add_8

求助 Google 大神, 找到下面這篇, 其中有人回應說樹莓派還未支援 OpenCV 4, 建議安裝 3.4.6.27 就沒問題了, 參考 : 


其實上面那本書上是安裝 4.0.1.24 版 :

pip3 install opencv-python==4.0.1.24 

只好移除最新版, 重新安裝 4.0.1.24 版看看.

參考 :

Install OpenCV 4 on your Raspberry Pi

5 則留言 :

Unknown 提到...

這樣載下來的OpenCV使用的是哪個版本的python?
我的住教說樹莓派使用的python環境大概是2.7版的python,這樣可以跑得動嗎??

小狐狸事務所 提到...

Hi, 最新的 Rabian Buster 搭載的是 Python 3.7.3 版, 應該可以, 但我還沒最終確認, 這兩天會改安裝 OpenCV 4.0.1.24 試試看.

石甘佳 提到...

我用 win7 anacoda3 python 3.6, opencv 4.0.1.24
可以。

聯絡方式 提到...
作者已經移除這則留言。
聯絡方式 提到...

~$python3

>>>import cv2
>>>cv2.__version__