树莓派3B+到货了,当然要把玩一番。

背景

树莓派从3代开始就用上了64位的处理器,奈何却没有更新上64位的系统。据说用上64位的系统,能提升不少的性能,甚至有人用RPi3B测试最快能提高30倍。

拿着RPi3B+的我就对这个更感兴趣了,先折腾一下64位系统,再装个caffe吧。

我知道一个大大搞了个Ubuntu64位系统。

虽然说64位系统提升很大,但是由于缺乏官方的支持,民间高手研究出来的64位系统可能也略欠火候。

比如说,没有针对于3B+完美的稳定的Ubuntu64位系统。

由于缺乏官方网卡的驱动的支持,用大大的64位系统甚至还不能使用官方网卡,我只能掏出我的USB网卡。至于怎么配置wifi就不说了。

再比如说,尽管大大的系统很牛逼了,但是Ubuntu16.04系统依然没法在RPi3B+上用,而Ubuntu18.04可以。

安装

依赖包

首先先把这一大堆东西装了吧,当然,你一次性全部装完也行都一个样。

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,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

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的主要问题有两个:

  1. 内存不够,不够SWAP加了
  2. 太热,自备小风扇或水冷谢谢(水冷真的不是开玩笑。。)
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

先把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行的意思是:

  1. 修改为cpu模式,RPi没有GPU
  2. 添加hdf5的include
  3. 添加hdf5的lib,其中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

编译Caffe可能出现的错误:

可能错误1: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
可能错误2: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

先这样吧

若有错误之处请指出,更多地关注煎鱼。

树莓派3B+ 64位Ubuntu安装caffe的更多相关文章

  1. xamarin.ios – ShareKit与MonoTouch如何?

    有人可以验证ShareKit实际上是否可用于MonoTouch并指导我完成使其工作所需的步骤?解决方法您首先从getsharekit.com下载还是使用ShareKit2.0?

  2. iOS使用openCV检测来自摄像头的矩形

    如果我在处理它之前克隆matimage,通过记录它,它似乎处理图像甚至找到矩形,但矩形不会被绘制到图像输出到imageView.我很确定我错过了一些东西,可能是因为我没有正确传递某个对象,指向对象的指针等等,而我需要修改的对象则没有.无论如何,如果这不是正确的方法,我真的很感谢他们做这样的事情的教程或例子,使用openCV或GPUImage…它不需要尝试使用matimage来设置imageView.image,而只需要将matimage转换为在imageView中实际修改,因为CvVideoCamera已

  3. ios – iPhone崩溃日志不能正确地符号化并且是双重间隔的

    任何建议超过欢迎.谢谢.解决方法当这件事发生在我身上时,它只是我通过电子邮件收到的日志.如果我记得,至少有一些是在.msg文件中,我不得不把它们拿出来.它可能是Exchange编码更改.如果你显示不可见的字符,你可能会看到每个字符之间的东西.您可以找到并替换它们以删除它们或更改编辑器中的编码.

  4. 使用Xcode为OS X Lion / Mountain Lion编译OpenCV(2.3.1)

    任何人都可以为我提供一些如何使用Xcode在OSXLion上编译OpenCV2.3.1的详细指南吗?我对此感到生气…我得到了源码,使用cmake创建Xcode模板并尝试构建它,但它失败了大约200个错误.提前致谢,大教堂解答我的回答帖子.解决方法详细指南如何使用MacPorts在Xcode4.2.1的OSXLion下启动和运行OpenCV2.3.1编辑08/06/2012:这也适用于OpenCV2.4.1.只需确保您获得最新版本的Xcode并安装“命令行工具”.编辑15/08/2012:使用Mountai

  5. ios – OpenCV构建问题,找不到ext/atomicity.h

    我得到编译器错误抱怨在构建包含OpenCV的项目时.环境是针对iOS的Xcode4.5.它为模拟器编译良好,但在为设备构建时失败.这是错误文本:我正在使用opencv2.framework,使用指令here构建cmake.解决方法默认情况下,XCode4.5使用libc(支持C11的LLVMC标准库)生成要构建的新项目.但OpenCV期望针对GNUlibstd

  6. ios – Xcode 7 beta 2:LaunchScreen.storyboard无法打开文档

    我在两个不同的Mac(iMac和MacBookpro)上收到这个错误.不知道为什么人们不能再现它,但我需要一些帮助.在运行XX优胜美地10.10.4的Mac上运行Xcode7beta2(15六月’15).甚至无法编译和运行我的项目..我从创建菜单创建了一个视图应用程序项目,就是这样.编辑:我试图删除并重新添加storyboard文件(也可以打开Main.storyboard插件),我仍然得到相同的

  7. 从IOS / iPad / iPhone的最大速度

    我使用OpenCVforiOS完成计算密集型应用程序.当然这很慢.但它比我的PC原型慢了200倍.所以我正在优化它.从最初的15秒,我能够获得0.4秒的速度.我想知道我是否找到了所有的东西以及别人想要分享的东西.我做了什么:>将OpenCV中的“double”数据类型替换为“float”.双倍是64位,32位cpu不能轻易处理,所以浮动给了我一些速度.OpenCV经常使用双倍.>为编译器选项添加了

  8. ios – 在/usr/lib/system/libcache.dylib中,缺少必需的架构armv6

    在试图为iphoneos编写一个虚拟程序时,Xcode4,gcc似乎没有超出初始的sysroot目录如果我把sysroot,以下作品,但感觉非常干酪,而且不可伸缩.这里发生了什么?

  9. 树莓派2 GPIO 和 SwiftyGPIO

    自从苹果去年开源Swift编程语言以来,热心人们已经创建了Ubuntu安装包,移植到ARM设备上如RaspberryPi2,创建了网页开发框架,而现在UmbertoRaimondi发布了SwiftyGPIO,一个Swift库,能够和ARM设备上的GPIO接口进行交互。SwiftyGPIOREADME详细解释了如何使用模块。这次我们在RaspBerryPi2上用Swift语言再实现一次。SwiftGPIO为比较流行的板子提供了封装好的GPIO。setLedColor方法通过一个元组和一个数组[GPIO]把一

  10. Swift 2/iOS 9 – libz.dylib找不到

    我在我的新的Swift2.0项目中使用一些来自google的外部代码,在早期版本中需要“libz.dylib”。更新到新的XCode/新的SDK后。

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部