今年队里统一采用了妙算作为minipc,经过一个半星期的踩坑填坑,查阅博客终于完成了妙算比赛的配置,现在记录一下踩坑的心酸,估计是最全踩坑记录了,希望对读者有所帮助吧,以及方便以后的查阅,本篇博客只是总结我配置时候遇到的各种问题。
妙算环境配置,经过踩坑发现
最佳最稳定的软件配置为 Ubuntu16.04 QT5 opencv3.4.5
一:换源
多篇博客开局即建议换源,看了好多博客说了各种奇奇怪怪的东西对于博主这种初学者来说,总结到了一点,妙算2-G采用的是ARM架构与我们正常笔记本在Ubuntu上面换源可能有点不一样,毕竟妙算真的看脸,而且妙算在设置里面选择最佳服务器这种换源方法是不行的,只能通过修改sourses.list来进行换源,有的博客推荐中科大的源,因为中科大的源对ARM架构友好一点,由于刚入门我也不是很了解只能把我看到的东西进行汇总分享一点,我第一次实操的时候没有采用换源,还是能够成功配置的。
当你save时候可能出现这种编译出错的情况,说什么无法编译,可以不用管他,这是我第二次配置时采用的换源 。
总之最好采用换源吧,毕竟换源可以避免许多不不必要的东西比如无法定位软件包啥的,当然了换不换源感觉都行。
二.QT5安装
看了许多博客如何如何下载QT5的感觉挺麻烦的,幸好找到了一篇比较简单的,直接在Ubuntu命令行安装QT5。
sudo su root (切换到root用户最高权限)
sudo apt-get install cmake qt5-default qtcreator (安装qt5)
此刻可能会出现问题任务被锁住无法下载, csdn上面一般有两种方法一种是kill他的进程释放锁文件还有一种方法是强制解锁,经过我实操好像对于妙算的Ubuntu系统来说没有什么用。实操发现直接重启系统然后直接更新更新一下就好了
sudo apt-get update
sudo apt upgrade
要是继续被锁的话,继续重复更新重启毕竟妙算看脸,不过一般第一次按照步骤装的话应该不可能出现任务栏被占用的情况的,我出现这种情况是已经踩坑n次后了。
三.QT配置
一般我们根据命令行直接安装的QT是无法直接使用的,需要我们自己给QT配置编译器,我们选择进行gcc的配置。
定位到Tools->Options->Build & Run->Compilers ,然后点击Add并选择GCC,在compiler path一栏,输入gcc地址:/usr/bin/gcc 。接下来修改ABI选项,将其依次修改为custom – arm – linux – generic – elf – 64 bit,完成后点击apply生效。
接下来,点击Kits选项,新建一个名为”BOF”的编译工具,这个名字可以自己随便取,用刚刚配置好的gcc就OK了。
友情提醒一定要将QT界面最大化,不然是找不到Tools栏,要是配置完之后还不能用的话,重新新建一个项目就行了,要是找不到tools栏的话,你可以直接建一个工程然后选择mange kits选项,按照上面方法进行配置就行了,但是这种方法配置的编译器,在这个工程里面是用不了的,必须重新创建一个工程才可以。
四.opencv配置选择opencv3.4.5
1.由于妙算自带的一个opencv所以在接下来的安装操作中避免操作混乱我们先 删除自带的opencv
sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update
2.从官网上下载opencv选择Sources文件
3.按照下载依赖包
sudo apt-get install build-essential cmake git pkg-config gfortran yasm
sudo apt-get install libjpeg8-dev libpng12-dev libtiff5-dev
sudo apt-get install libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get install libxine2-dev libv4l-dev
sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get install qt5-default libgtk2.0-dev libtbb-dev libatlas-base-dev
sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev
sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev sphinx-common texlive-latex-extra libx264-dev
可以选择
sudo apt-get install libavresample-dev libgphoto2-dev doxygen openjdk-8-jdk pylint libvtk5-dev
4.找到opencv-3.4.5.zip文件所在的目录
unzip opencv-3.4.5.zip
得到解压后的opencv文件
5.在解压的文件中创建build并且进入
mkdir build
cd build
6.cmake一下
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
一般第一次不会报错,当你编译失败一次过后可能重新cmake的时候可能会出现报错 如果出现报错的话把cmakecache.txt删除了再进行编译就可以了。
7.执行编译命令,会有一个很长的编译过程,一般妙算2-G的cpu可以用到八线程,我一开始不知道每次编译一下等了三个小时,人都呆了。
sudo make -j8 八线程 (可以根据自己的minipc cpu性能决定)
8.安装opencv
sudo make install
9.配置opencv的路径
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
有的博客到这里就结束了,其实我实操的时候发现到这里只是配置了opencv的一个动态库,好像还是没有什么用要是用QT进行opencv操作的话。也有可能我用pencv3的缘故的话。
还有一种方法将opencv的库添加到路径里面
sudo gedit /etc/ld.so.conf.d/opencv.conf
执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加
/usr/local/lib
执行如下命令使得刚才的配置路径生效
sudo ldconfig
你可以用第二种添加路径的方法看一下第一种有没有成功添加
10.添加完路径之后我认为要配置一下bash
sudo gedit /etc/bash.bashrc
这样会打开一个文本编译器然后将这两行代码写到最后就OK了
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
11.最后再更新一下便成功了
sudo apt-get update
12.检测一遍opencv安装是否成功
pkg-config --modversion opencv
成功安装opencv3.4.5会出现opencv 3.4.5,要是出现找不到opencv的话,那么你的opencv安装就失败了。
五.V4L2的更新驱动
因为linux系统摄像头驱动是V4L2,所以要更新安装一下他的驱动,可以用opencv直接安装驱动
1.安装cmake-gui
sudo apt-get install cmake-qt-gui
2.安装qv4l2
sudo apt install qv4l2
sudo apt install v4l-utils
v4l2-ctl
3.cd 到opencv的build下面
直接
cmake gui ..
会弹出cmake图像化的操作界面
编译V4L2
在搜索栏里面搜索V4l 把相关项全勾选 然后Generate一下就可以了
4.安装更新V4L2
make -j8
sudo make install
这样一套完整的环境配置便成功了
六.检测运行
opencv的检测
cmake .
make
./opencv_example
在一般的Ubuntu上面直接命令行输入可以调用摄像头,摄像头显示框有 Hellow opencv编译成功
(一般这种检查妙算用不到)
QT+opencv的检测
新建一个QT项目
正常运行一次要是可以运行QT安装没有问题
打开pro文件,配置pro文件
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += /usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_imgcodecs.so
打开cpp文件,测试一下
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("cat.jpg");
line(img,Point(1,1),Point(250,250),Scalar(0,0,255),5);//画一条直线
imshow("可爱的小猫咪", img);
waitKey(0);
return 0;
}
最终我测试是成功的
当时直接参考了这个大佬的博客,连图都用了他的小猫咪,由衷感谢,大佬们的无私开源,注意一下照片的格式在这个大佬的测试代码中他的照片的jpg格式,我们要直接使用的话,照片格式是png格式。
最后感谢大佬的开源,被妙算折磨的一个一个半星期里面还好有这些博客,希望这一篇我的踩坑经历可以让入门需要用妙算的好兄弟少掉坑。
参考博客
第一篇博客感谢这些大佬的博客,真心感谢。写的不好,请多指教。