树莓派应用(一)--环境配置

目录

1.前言

2.配置内网穿透及远程VNC

3.安装.net core 5

4.安装niginx并配置

5.安装supervisor守护进程

6.安装摄像头相关控件

7.安装OpenCV

8.测试树莓派摄像头


1.前言

    一直都打算将这几年的项目及学习历程整理成一篇篇的文章,善于归纳总结才能走得更远,说做就做,所以就决定每天晚上抽出一部分时间进行自己的学习总结,当然,得等到家里的小屁孩睡着了才能够静下心来慢慢总结整理。

    前段时间自己入手了树莓派4B,觉得慢慢学习研究一下,等小屁孩长大了,就可以教他动手制作自己的小玩具耍。经过了两个星期的摸索研究,算是入门了吧,现在把自己的经验总结一下,免得大家走弯路。

2.配置内网穿透及远程VNC

    工欲善其事必先利其器,所以第一件事就是要启动树莓派,然后配置相关参数,再通过内网穿透,让我们在外网也能够连接到家里的树莓派。安装启动树莓派这个过程我这里就暂且过滤掉,因为这个过程相对简单,具体的操作请看传送门-首次使用树莓派,如何安装、启动及配置

    在我们启动好树莓派之后,就需要一个内网穿透工具,经过我面向某度编程之后,找到了一个适合的工具cpolar,用这个工具的主要原因是可以白嫖白嫖白嫖。

   1. 首先从官网下载最新的cpolar

wget https://www.cpolar.com/static/downloads/cpolar-stable-linux-arm.zip

  2. 解压缩

unzip cpolar-stable-linux-arm.zip

3. 将cpolar命令移到 /usr/local/bin目录

sudo mv cpolar /usr/local/bin

4. cpolar进行token认证

    登录到cpolar后台,获取到自己的token值,然后复制到命令中。传送门-cpolar官网

cpolar authtoken Yzhh********************

    配置文件会保存在 /home/pi/.cpolar/cpolar.yml,记录下该路径

5. 前台测试

cpolar http 8080

如下图,就说明已经配置好了

树莓派应用(一)--环境配置_第1张图片

命令参数说明

http 意思是创建一个http协议的隧道 8080 指定内网web站点的8080端口,按ctrl+C可退出。

6. 安装及配置vim

如果还没有安装vim,可以先安装

sudo apt install vim

7. 配置vim

我们先对vim做基本配置,目的是为了以防止稍后编辑时,多出TAB键。

vim ~/.vimrc

在配置文件末尾添加如下内容:

set tabstop=2 
set softtabstop=2 
set shiftwidth=2 
set expandtab

8.在cpolar配置文件中,添加ssh内网穿透隧道

除了在cpolar命令行中,我们还可以在配置文件中添加多个隧道。这样多个隧道可以同时启动。 本例中,我们添加一个web隧道,一个ssh隧道

编辑cpolar的配置文件

vim ~/.cpolar/cpolar.yml

在文件下面,我们编辑成如下内容:

authtoken: YzNmYmUzOTctODMxNyxxxxxxxxxxxxxxxxxTZkNjczOGM3
tunnels:
  web:
    addr: 8080
    proto: http
    region: cn_vip
  ssh:
    addr: 22
    proto: tcp
    region: cn_vip
  vnc:
    addr: 5900
    proto: tcp
    region: cn_vip

参数说明,vnc-5900是树莓派远程的协议端口:

authtoken: xxxxx #认证token

tunnels:
  web:              #隧道名称,用户可以自定义,但多隧道时,不可重复
    addr: 8080      #本地Web站点端口
    proto: http     #协议http
    region: cn_vip  #地区,cn_vip,可选:us,hk,cn,cn_vip
  ssh:              #隧道名称,表示ssh,名称可以自定义
    addr: 22        #端口号为22
    proto: tcp      #协议tcp
    region: cn_vip  #地区,cn_vip,可选:us,hk,cn,cn_vip

注:这里的配置文件是yaml格式,每一级的参数前面,会缩进两个空格,不能使用TAB键,不能使用TAB键,不能使用TAB键。(重要说三遍)

9.测试是否配置成功

cpolar start-all

如果提示某行错误,请根据行号及报错信息修改

10. 后台运行cpolar

nohup cpolar start-all -config=/home/pi/.cpolar/cpolar.yml -log=stdout &

11. 验证后台是否运行正常

ps -aux | grep cpolar | grep -v grep

根据后台的进ID,杀掉后台运行的cpolar进程,本例如图中的28440,即为cpolar的后台进程ID

杀掉cpolar后台进程

kill 28440

12. 配置开机自启动脚本

sudo nano /etc/rc.local

在exit 0前面,加入

nohup cpolar start-all -config=/home/pi/.cpolar/cpolar.yml -log=stdout &

树莓派应用(一)--环境配置_第2张图片

保存退出。快捷按键:ctrl+o  enter ctrl+x

13. 重启树莓派

sudo reboot

14. 重启后查看是否成功

ps -aux | grep cpolar | grep -v grep

14. 查看在线隧道

传送门-cpolar官网

3.安装.net core 5

由于本人从事的是.net core方向的开发,所以这里就安装的是.net core的环境,因为后续的后台管理系统、接口服务、GPIO控制台程序等等都是基于.net core进行的开发。

下载32位arm架构sdk

wget https://download.visualstudio.microsoft.com/download/pr/55547694-fe7e-43f3-bf58-33ef9bb7ee85/5d8b57df472b96e6f38988041751ba2e/dotnet-sdk-5.0.203-linux-arm.tar.gz

建立存放目录

sudo mkdir /usr/share/dotnet 

解压安装

sudo tar -xvf dotnet-sdk-5.0.203-linux-arm.tar.gz -C /usr/share/dotnet  

建立软连接

sudo ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet

解决图片验证码显示问题,安装依赖包,这一步主要是后台管理系统里面用了system.drawing类库,安装下面的依赖可以解决系统图片问题。

sudo apt install libc6-dev 
sudo apt install libgdiplus

修改目录下所有的文件夹属性为可读可写,主要是解决用pi账户登入后,系统目录不能进行文件写入:

sudo chmod 777 *

4.安装niginx并配置

我这里是通过niginx对后台管理系统和接口服务进行的一个反向代理,当然,也可以直接上宝塔,简单粗暴,不过我这里尽量减少树莓派开销,就没有用宝塔。

下载nginx

sudo apt-get install nginx

配置代理-以后台管理系统及接口服务为例-暂时未配置SSL

sudo nano /etc/nginx/sites-available/default
server {
    listen        8080;
    server_name   localhost;
    location /MiracleInterface {
        proxy_pass         http://localhost:6000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host localhost;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host localhost;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

重新加载

sudo /etc/init.d/nginx reload 
sudo /etc/init.d/nginx start

5.安装supervisor守护进程

下载

sudo apt install supervisor

应用配置

在 /etc/supervisor/conf.d 中创建 xxx.conf,每个应用对应一个配置文件即可

授权可进行文件写入

cd  /etc/supervisor/conf.d
sudo chmod 777 /etc/supervisor/conf.d

创建文件

sudo nano AdminMS.conf
sudo nano WebAPI.conf
sudo nano FaceRead.conf

示例:

[program:AdminMS]  ;程序的名称
command =  dotnet  MiracleAdminMS.Web.Entry.dll  ;执行的命令
directory = /home/pi/web/webadmin/ ;命令执行的目录
user = root  ;执行进程的用户
stopsignal = INT  
autostart = true  ;是否自动启动
autorestart = true  ;是否自动重启
startsecs = 3  ;自动重启间隔
stderr_logfile = /var/log/helloworld.err.log  ;标准错误日志
stdout_logfile = /var/log/helloworld.out.log  ;标准输出日志

我的树莓派实际配置如下:

web后台管理系统:
[program:AdminMS]  ;
command =  dotnet  MiracleAdminMS.Web.Entry.dll  ;
directory =/home/pi/WebPublish/WebAdmin/ ;
user = pi  ;
stopsignal = INT  
autostart = true  ;
autorestart = true  ;
startsecs = 3  ;
stderr_logfile = /home/pi/WebPublish/WebAdmin/AdminMS.err.log  ;
stdout_logfile = /home/pi/WebPublish/WebAdmin/AdminMS.out.log  ;
webapi接口服务:
[program:WebAPI]  ;
command =  dotnet  MiracleAdminMS.WebAPI.Entry.dll  ;
directory =/home/pi/WebPublish/WebAPI/ ;
user = pi  ;
stopsignal = INT  
autostart = true  ;
autorestart = true  ;
startsecs = 3  ;
stderr_logfile = /home/pi/WebPublish/WebAPI/WebAPI.err.log  ;
stdout_logfile = /home/pi/WebPublish/WebAPI/WebAPI.out.log  ;
自动化读取人脸抓拍数据:
[program:FaceRead]  ;
Command =  
python3 /home/pi/WebPublish/AutoFaceCheckPythonProject/03_face_recognition.py  ;
directory =/home/pi/WebPublish/AutoFaceCheckPythonProject/ ;
user = pi  ;
stopsignal = INT  
autostart = true  ;
autorestart = true  ;
startsecs = 3  ;
stderr_logfile = /home/pi/WebPublish/WebAPI/FaceRead.err.log  ;
stdout_logfile = /home/pi/WebPublish/WebAPI/FaceRead.out.log  ;

重启 supervisor

sudo supervisorctl reload

或热重启,不会重启其他子进程

sudo supervisorctl reread
sudo supervisorctl update

为确保没有错误,可以正常启动,使用前文提到的查看supervisor状态的命令查看。或者查看要管理的进程是否启动,本例中可以使用下面的命令:

ps -ef | grep AdminMS

ps -ef | grep WebAPI

关闭所有任务

supervisorctl shutdown

查看进程:

sudo supervisorctl status

重启进程:

sudo supervisorctl restart AdminMS

停止进程:

sudo supervisorctl stop AdminMS

启动进程:

sudo supervisorctl start AdminMS

重载进程:

sudo supervisorctl reload

在某些时候,我们可以开启8080端口:

sudo iptables -I INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
sudo iptables  -I OUTPUT -o eth0 -p tcp --sport 8080 -j ACCEPT

关闭8080端口

sudo iptables -I INPUT -i eth0 -p tcp --dport 8080 -j DROP
sudo iptables -I OUTPUT -o eth0 -p tcp --sport 8080 -j DROP

6.安装摄像头相关控件

这一步主要是检测一下摄像头是否可用,如果没有摄像头的,可以跳过。

安装 luvcview

sudo apt-get install luvcview

启动摄像头

luvcview

拍照

raspistill -v -o test.jpg

使用默认设置录制一段 5 秒钟的视频片段(1080p30)

raspivid -t 5000 -o video.h264

7.安装OpenCV

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1]  它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

由于在树莓派上安装opencv失败几率比较大,需要大家严格按照操作步骤,一步一步进行,避免出现差错导致安装失败。

python版本切换

树莓派中一般同时安装2.7和3.7版本的python,并且默认2.7版本的python。安装TensorFlow前建议先切换python版本

    ##卸载python2.7
	sudo apt-get autoremove python2.7 
	##若出现有几个软件包无法下载的报错,输入以下命令后再次卸载python2.7,即执行上一步操作,**切记一定要在卸载一次python2.7**
	sudo apt-get update --fix-missing 
	##链接python3.7
	sudo ln -s /usr/bin/python3.7 /usr/bin/python#链接如果显示错误,再次卸载一遍python2.7即可
	##链接pip3
	sudo ln -s /usr/bin/pip3 /usr/bin/pip
	##检验python版本,输入python,可以看到显示3.7的版本即为成功,否则继续前两步操作

存储空间的操作

使用16G及其以上的卡,最好是class10以上,然后扩大文件系统。因为,用SD卡安装完系统后一大部分空间实际是未被分配的。我是用的64g的tf卡,在京东上买的闪迪,大概50块钱左右。

使用命令

sudo raspi-config

选择Advanced Options→Expand Filesystem Ensures that all of the SD card storage is available to the OS.

树莓派应用(一)--环境配置_第3张图片

树莓派应用(一)--环境配置_第4张图片

随后重启树莓派,重启命令:sudo reboot

OpenCV相关库的下载

之所以把代码分行写,是因为我发现一次性运行如下全部代码,容易报错,所以,我后来就是逐行复制粘贴并运行的。一切顺利。

sudo pip3 install numpy
sudo apt-get install build-essential git cmake pkg-config 
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libjasper-dev -y
sudo apt-get install libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran

下载OpenCV包及其编译

OpenCV version of 4.4.0-dev及其缺失文件

链接:https://pan.baidu.com/s/16-9FtYL8uahXRvbN_We_kg

提取码:rwwm

里面有两个压缩包,opencv-master.zip和opencv_contrib-master.zip。另外一个Lost_files里放置的是树莓派安装OpenCV时缺失的以“i”结尾的文件。

复制文件到树莓派

在树莓派 /home/pi下新建文件夹opencv,将下载的文件复制进去。

解压文件:

cd ~/opencv

unzip opencv_contrib-master.zip

unzip opencv-master.zip

解压完毕后,可以吧压缩包删掉,以节省空间。

接下来把Lost_files中的所有文件复制到/home/pi/opencv/opencv_contrib-master/modules/xfeatures2d/src/路径下。

设置编译参数

cd ~/opencv/opencv-master
mkdir build
cd build

Cmake经过配置,可在~/opencv/opencv-master/build文件夹下生成Build files.代码如下:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv/opencv_contrib-master/modules \
-D BUILD_EXAMPLES=ON \
-D WITH_LIBV4L=ON \
-D PYTHON3_EXECUTABLE=/usr/bin/python3.7 \
-D PYTHON_INCLUDE_DIR=/usr/include/python3.7 \
-D PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \
..

配置成功之后,显示类似如下界面,最后一行是重点。

树莓派应用(一)--环境配置_第5张图片

增加swap空间

将swap大小从100MB增加到1024MB,可以方便OpenCV使用Pi的4个核进行编译。

sudo nano /etc/dphys-swapfile

找到CONF_SWAPSIZE=100,将100改为1024。按ctrl+O后,回车保存,ctrl+x退出,最后记得改回来哦。使用如下命令重启:

sudo /etc/init.d/dphys-swapfile stop

sudo /etc/init.d/dphys-swapfile start

复制hpp文件

每次在编译过程中都会报错,找不到文件,经过排查之后,发现编译时只需要复制这5个文件到指定目录之后,编译就会通过。

/home/pi/opencv-master/modules/xfeatures2d/test/文件夹里面               

test_invariance_utils.hpp

test_detectors_regression.impl.hpp

test_detectors_invariance.impl.hpp

test_descriptors_regression.impl.hpp

test_descriptors_invariance.impl.hpp

复制到/home/pi/opencv_contrib-master/modules/xfeatures2d/test/目录下

同时,修改该目录下的test_features2d.cpp

树莓派应用(一)--环境配置_第6张图片

修改test_rotation_and_scale_invariance.cpp

树莓派应用(一)--环境配置_第7张图片

编译OpenCV

make -j4

如果不报错,就一直运行下去,知道100%编译成功。如果出错了,就参照如下的解决方案,处理以后,重复执行make命令。

安装OpenCV

经过几个坑之后,终于编译到100%,成功啦!此处有鲜花和掌声,耗时最长且最麻烦的一步已经趟过去了。
执行如下安装指令:

sudo make install

8.测试树莓派摄像头

import numpy as np
import cv2
 
cap = cv2.VideoCapture(0)
cap.set(3,640) # set Width
cap.set(4,480) # set Height
  
while(True):
    ret, frame = cap.read()
    #frame = cv2.flip(frame, -1) # Flip camera vertically
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
     
    #cv2.imshow('frame', frame)
    cv2.imshow('gray', gray)
     
    k = cv2.waitKey(30) & 0xff
    if k == 27: # press 'ESC' to quit
        break
 
cap.release()
cv2.destroyAllWindows()

上面的代码可捕捉PiCam生成的视频流,用BGR颜色和灰色模式展示。要结束该程序,你必须在键盘上按 [ESC] 键。在按 [ESC] 键之前,先鼠标点击视频窗口。

至此,树莓派的相关环境配置已经全部完成,下一步就可以愉快地撸代码了,写得腰酸背痛的。

 

你可能感兴趣的:(树莓派)