樹莓派3B+到貨了,固然要把玩一番。python
樹莓派從3代開始就用上了64位的處理器,奈何卻沒有更新上64位的系統。聽說用上64位的系統,能提高很多的性能,甚至有人用RPi3B測試最快能提升30倍。linux
拿着RPi3B+的我就對這個更感興趣了,先折騰一下64位系統,再裝個caffe吧。git
我知道一個大大搞了個Ubuntu64位系統。github
雖說64位系統提高很大,可是因爲缺少官方的支持,民間高手研究出來的64位系統可能也略欠火候。json
好比說,沒有針對於3B+完美的穩定的Ubuntu64位系統。ubuntu
因爲缺少官方網卡的驅動的支持,用大大的64位系統甚至還不能使用官方網卡,我只能掏出個人USB網卡。至於怎麼配置wifi就不說了。vim
再好比說,儘管大大的系統很牛逼了,可是Ubuntu16.04系統依然無法在RPi3B+上用,而Ubuntu18.04能夠。bash
首先先把這一大堆東西裝了吧,固然,你一次性所有裝完也行都一個樣。app
apt自帶安裝的python是2.7.15的,我以爲隨意吧還行。性能
sudo apt update sudo apt install -y gfortran cython sudo apt install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler git sudo apt install --no-install-recommends libboost-all-dev sudo apt install -y python-dev libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev python-skimage sudo apt install -y python-pip sudo apt install -y build-essential sudo apt install -y cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt install -y python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
安裝後我發現該系統沒有自帶SWAP,SWAP分區對於1G小內存的樹莓派來講,是相當重要的。
我提早放個圖,這個圖是我在編譯的時候截的,表示內存使用最嚴重的時候,用了900+的Memory和800+的SWAP。
若是沒有SWAP,那麼編譯就可能不會成功,由於會被殺掉。
首先咱們在系統中劃分1G空間來作SWAP,我用的位置的/var/swap
:
sudo dd if=/dev/zero of=/var/swap bs=1M count=1024 sudo mkswap /var/swap sudo swapon /var/swap
若是之後還想開機自動掛載SWAP的話,能夠這樣:
sudo vim /etc/fstab # 添加 /var/swap swap swap defaults 0 0
以下圖:
OpenCV仍是必需要裝的,這裏我選一個2.4的OpenCV。
少廢話,安pip包。
pip install pyzmq jsonschema pillow pip install numpy scipy pip install ipython jupyter pyyaml
其中numpy和scipy的編譯難度可能較大,難在時間長、所需內存大形成SWAP換入換出嚴重阻塞IO。若是實在不行,可使用apt之類的方法安裝。
而後是下載OpenCV的包,並解壓:
# 不喜歡的話,能夠用aria2c wget https://github.com/opencv/opencv/archive/2.4.13.6.zip sudo apt install unzip unzip -o -d . 2.4.13.6.zip
開始編譯OpenCV,這個是十分耗時的,通常是幾個小時。
對於樹莓派3B+,編譯OpenCV的主要問題有兩個:
cd opencv-2.4.13.6 mkdir release cd release cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. make -j4 sudo make install sudo apt install python-opencv
接下來咱們檢驗一下Python中能不能正常導入OpenCV:
導入正常。
先把Caffe拉下來:
cd git clone https://github.com/BVLC/caffe cd caffe cp Makefile.config.example Makefile.config vim Makefile.config
須要修改Makefile.config包括這幾行:
# CPU_ONLY := 1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
改爲:
CPU_ONLY := 1 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/ LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu/hdf5/serial/
P.S. 修改這3行的意思是:
aarch64-linux-gnu
是由於我用的是64位系統,若是是32位系統,多是arm-linux-gnueabihf
。make all -j4 make test -j4 make runtest -j4
而後就是漫長的等待,結束後加上也把Python的給編譯了
cd python pip install -r requirements.txt make pycaffe -j4
而後在zsh或者bash環境中添加pycaffe的環境:
export PYTHONPATH=/home/ubuntu/extra/caffe/python:$PYTHONPATH
undefined reference to cv::imread(cv::String const&, int)
錯誤詳情:
CXX/LD -o .build_release/tools/convert_imageset.bin .build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)’ .build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)’ .build_release/lib/libcaffe.so: undefined reference to `cv::imdecode(cv::_InputArray const&, int)’ collect2: error: ld returned 1 exit status make: * [.build_release/tools/convert_imageset.bin] Error 1
方法:
修改Makefile
LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system hdf5_hl hdf5 m
改爲
LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system hdf5_hl hdf5 m opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs
cannot find -lopencv_***
錯誤詳情:
LD -o .build_release/lib/libcaffe.so.1.0.0 /usr/bin/aarch64-linux-gnu-ld: cannot find -lopencv_imgcodecs collect2: error: ld returned 1 exit stauts Makefile:572: recipe for target '.build_release/lib/libcaffe.so.1.0.0' failed make: *** [.build_release/lib/libcaffe.so.1.0.0] Error 1
方法:
sudo vim /etc/ld.so.conf.d/opencv.conf # 添加 /usr/local/lib
先這樣吧
如有錯誤之處請指出,更多地關注煎魚。