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 則留言:

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

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

    回覆刪除
  3. 我用 win7 anacoda3 python 3.6, opencv 4.0.1.24
    可以。

    回覆刪除
  4. ~$python3

    >>>import cv2
    >>>cv2.__version__

    回覆刪除