树莓派 Docker 容器内 脚本安装 OpenCV2.4

https://github.com/jayrambhia/Install-OpenCV

Ubuntu适用于树莓派,可以根据自己的系统和需要,自行修改脚本

更新源:

树莓派更新镜像源于镜像源推荐

https://blog.csdn.net/cduan/article/details/52594374

sudo nano /etc/apt/sources.list 

用#号注释掉官方源,添加两个源连接,一个注释备用;


#deb http://archive.raspbian.org/raspbian jessie main contrib non-free rpi f$
deb http://mirror.nus.edu.sg/raspbian/raspbian wheezy main contrib non-free $
#deb http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contr$


CTRL+O ,直接 Enter 确认并存盘;
CTRL+X 退出;

修改后,更新

sudo apt-get update

1、下载 安装脚本

在容器内,直接下载

 git clone https://github.com/jayrambhia/Install-OpenCV.git

或网页 下载到电脑或树莓派上,再docker cp传到容器:

2、cd到脚本文件夹,下载安装必要的服务,如解压

apt-get install unzip
#[compiler] 
sudo apt-get install build-essential
#[required] 
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
#[optional] 
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

执行脚本

chmod +x * 
./opencv2_4_9.sh

3、其他系统的可以修改脚本,或者手动安装;

90M左右,下载太慢

先下到电脑再传到树莓派,

树莓派主机 docker cp 到容器:

解压进入目录:

unzip opencv-2.4.13.6.zip
cd opencv-2.4.13.6

准备编译

mkdir build
cd build 

更改安装目录(先在/usr/local下新建文件夹opencv2)

注意:要在cmake最后加上 -DENABLE_PRECOMPILED_HEADERS=OFF,之前没加出错了:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2 .. -DENABLE_PRECOMPILED_HEADERS=OFF -DWITH_FFMPEG=OFF

编译(本例树莓派3B+,选择 4核编译 -j4,或者直接 make 也行)

注意散热,风扇强制散热,温度三四十度,安装过程中,CPU飙升100%,温度上升至54度,如果不散热树莓派一般70度左右,安装时温度再升高,很容易gogo;

make -j4 
sudo make install

实测Class10 金士顿32G sd卡,make -j4 耗时一个半小时多一点;

安装完成后,安装目录有4个文件夹

安装python-opencv

可直接使用apt安装

sudo apt-get install python-opencv
sudo apt-get install python-numpy

测试:

打开python,import cv模块出错:

libdc1394 error: Failed to initialize libdc1394

通过以下命令ln -s /dev/null /dev/raw1394禁用USB驱动程序,

ln -s /dev/null /dev/raw1394

再打开python2 测试,成功导入

import cv
import cv2
cv2.__version__

安装完还查看不了版本:

通过修改bashrc文件来设置PKG_ CONFIG_PATH 和 LD_LIBRARY_PATH的路径来选择对应的opencv版本

sudo nano ~/.bashrc

在文本末尾加上新编译的2.4版本的路径,也就是cmake时:CMAKE_INSTALL_PREFIX=/usr/local/opencv2

export PKG_CONFIG_PATH=/usr/local/opencv2/lib/pkgconfig

export LD_LIBRARY_PATH=/usr/local/opencv2/lib

然后执行命令:

source ~/.bashrc

用pkg-config --modversion opencv 查看opencv版本的时候就是2.4版本

3.上面的这些过程并不能保证在写makefile中调用的是2.4版本的库,具体还是要在CMakeList.txt中指定要找的opencv的目录;

在使用的时候,在CMakelists.txt中,如要用2,在find_package前指明路径:

set(OpenCV_DIR /usr/local/opencv2/share/OpenCV)
find_package(OpenCV 2 REQUIRED)

用3的时候:

find_package(OpenCV 3 REQUIRED)


参考例子

测试opencv

1) 创建工作目录

mkdir ~/opencv-lena
cd ~/opencv-lena
nano DisplayImage.cpp

DisplayImage.cpp内容:

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }

    Mat image;
    image = imread( argv[1], 1 );

    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);

    waitKey(0);

    return 0;
}

2、创建CMake编译文件

nano CMakeLists.txt

CMakeLists.txt内容:

cmake_minimum_required(VERSION 2.8)
#set (OpenCV_DIR "/home/pi/opencv-2.4.13.6/build")
set(OpenCV_DIR /usr/local/opencv2/share/OpenCV)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

3、编译 

sudo cmake .
sudo make

4、执行

此时opencv-lena文件夹中已经产生了可执行文件DisplayImage,下载lena.jpg放在opencv-lena下,运行

./DisplayImage lena.jpg

OpenCV测试完成后,可以保存修改镜像

docker commit -m="install opencv2.4 & test examples" -a="jacka654321" b26cf49aa20f jacka654321/face_recognition:v3

上传至你的dockerhub:

登录:

使用您的Docker ID登录 
如果您没有Docker帐户,请在cloud.docker.com注册一个 。记下你的用户名和密码。(需翻墙注册) 
登录到本地计算机上的Docker公共注册表。 

docker login

发布镜像 :
将您的标记镜像上传到存储库: 
docker push username/repository:tag

docker push jacka654321/face_recognition:v3

https://hub.docker.com/r/jacka654321/face_recognition/

容器运行:

在容器中开发、运行facerecognition应用,我们可以利用如下的命令来启动容器。其包含了facerecognition 的完整开发环境和示例应用,并且已经安装opencv2.4.13.6。

docker run -it \
    --name face_recognition_v3 \
    --device /dev/vchiq \
      jacka654321/face_recognition:v3 \
      /bin/bash

 其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

其中关键之处就在于将摄像头设备/dev/vchiq挂载到容器内部,这样就可以让容器中的应用来拍摄照片和视频。

参考链接:

linux下查看opencv安装路径以及版本号

https://blog.csdn.net/zhenguo26/article/details/79627232

林帆:Docker运行GUI软件的方法

https://www.csdn.net/article/2015-07-30/2825340

猜你喜欢

转载自blog.csdn.net/jacka654321/article/details/82345500