银河麒麟V10系统+飞腾CPU交叉编译OpenCV
一、银河麒麟下安装OPenCV基础库
1、准备工作
在/usr/local/下新建一个ffmpeg文件夹
mkdir /usr/local/ffmpeg
2、安装nasm
nasm下载链接如下:
https://www.linuxfromscratch.org/blfs/view/8.2/general/mercurial.html
进入网址后,界面如下:
先点击右上角Next,到nasm-2.13.03的页面,再选择红框选中区域,下载nasm
下载完成后进入到下载目录执行下面的操作:
tar -xvf nasm-2.13.03.tar.gz
cd nasm-2.13.03/
./configure
make –j8
make install
执行上述过程中make时可能会报错,错误结果如下
./include/nasmlib.h:194:1: error: ‘pure’ attribute on function returning ‘void’ [-Werror=attributes] 194 | void pure_func seg_init(void);
这是由于gcc版本过新,解决方案如下
vim ./include/nasmlib.h
在vim编译器中找到大概193行位置,对下面一行代码进行注释
void pure_func seg_init(void);
然后重新make,再执行make install,完美解决。输入下面的命令,查看nasm版本号,打印出来表示安装成功。
nasm -verison
3、安装yasm
官网下载链接Index of /projects/yasm/releases/
如上图红框所示,下载相应的版本
将下载后的文件解压到/usr/local/ffmpeg文件夹内,主要操作如下:
cd /usr/local/ffmpeg
tar -xvf yasm-1.2.0.tar.gz
cd yasm-1.2.0/
./configure –build=arm-linux
make –j8
make install
最后安装成功后可以使用如下命令查看
yasm –version
4、安装x264
官网链接如下
https://www.videolan.org/developers/x264.html
进去之后界面如下
点击红框选中位置进行下载,同样,下载后放入/usr/local/ffmpeg文件夹内进行解压等后续操作:
tar -xvf x264-master.tar.bz2
cd x264-master
./configure --enable-shared
make
make install
安装完成后同样可以使用下面命令进行测试
x264 --version
出现下面界面表示安装成功
5、安装fdk-aac-0.1.6
源码包下载地址:https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
tar -xvf fdk-aac-0.1.6.tar.gz
cd fdk-aac-0.1.6.tar.gz
./configure
make –j8
sudo make install
6、安装Speex
sudo apt install speex
7、安装pkg-config
sudo apt install pkg-config
8、安装zlib1g
sudo apt install zlib1g-dev
结果: zlib1g-dev : 依赖: zlib1g (= 1:1.2.11.dfsg-2kylin1) 但是 1:1.2.12.1-1+eagle 正要被安装,这里可以看到是因为有一个zlib1g正在被安装,所以才会产生的冲突。
将zlib1g降级就好了呀!
sudo apt install zlib1g=1:1.2.11.dfsg-2kylin1
9、安装libgtk2.0
sudo apt-get install libgtk2.0-dev
根据提示依赖项依次安装
10、安装ffmpeg
(1)、下载源码
首先去官网下载ffmpeg,链接如下
http://ffmpeg.org/download.html#build-linux
进去之后按照下面提示操作
2)、编译安装
下载之后放入/usr/local/ffmpeg文件夹内
然后依次执行下面步骤
tar -xvf ffmpeg-4.4.2.tar.xz
cd ffmpeg-4.4.2
./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-libx264 --enable-gpl
make -j8
make install -j8
上面执行完成后,安装基本算是成功了,至于为什么没全成功,后面还需要再进一步配置方可使用。
(3)、环境配置
配置过程如下
配置1
cd /usr/local/ffmpeg/
查看该目录下是否包含下面的几个文件目录
bin目录中包含了ffmpeg的二进制文件
include目中包含了编程需要引入的头文件目录
lib是编译好的库文件目录
share是文档目录
配置2
cd /usr/local/ffmpeg/bin
./ffmpeg -version
一般情况下会看到下图的结果
说明至此,ffmpeg真的安装成功了
如果,出现特殊情况,那就是报错了,不要慌,继续执行下面
配置3
vi /etc/ld.so.conf.d/ffmpeg.conf
可能是一个新文件。如果不是就在文档末尾添加下面一句话
/usr/local/ffmpeg/lib
保存退出,使用ldconfig使得配置生效
ldconfig
修改/etc/ld.so.conf
目的是使用ffmpeg库的时候,能让编译器找到我们的库,因为编译器默认找/usr/lib,而不是/usr/local/lib
sudo vim /etc/ld.so.conf
在文件中添加 /usr/local/lib
在文件中添加 /usr/local/ffmpeg/lib
在 /etc目录下 sudo ldconfig
添加环境变量
目的是为了能使用ffplay ,ffprobe, ffmpeg,而不用每次都到ffmpeg目录下面./运行
最后,再执行配置2的语句,此时应该出现配置2 的截图了,说明至此安装完毕。
安装后添加环境变量的问题
sudo vim /etc/profile
在最后面加上这两行 最好不要复制
export HBASE_HOME=/usr/local/ffmpeg
export PATH=$PATH:/usr/local/ffmpeg/bin
执行source /etc/profile 命令刷新配置
测试:ffmpeg -version
问题
编译ffmpeg时,在ffmpeg目录执行./configure … 之后,没有修改config.h文件,这样也编译不出ffplay来。解决办法是进入到 ffmpeg 目录下,打开 config.h文件找 FFPLAY 关键字,将其后面的 0 修改为 1,保存并退出该文件。在当前目录下执行 make && sudo make install。注意,修改 config.h文件后,不要再执行./configure …了,否则config.h中的值又都恢复为原来的值了
测试
如果遇到ffplay不能播放的问题
ffplay 不能播放 Could not initialize SDL - No available video device (Did you set the DISPLAY variable?)
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev
重新进入SDL2-2.0.14目录
make clean
./configure
make -j4
sudo make install
当然,到此,我们还没有对安装进行实际测试,不确定安装后是否能达到预期的效果,为此,本文专门使用了一个mp4视频进行了测试,将mp4转换为avi格式,测试步骤和结果如下,此处截图时转换后的格式为mp4,后面命令中进行了修改
首先,查看一下原视频,格式为mp4,大小为17507051,位置在桌面,名称叫test.mp4,为了方便测试,可以将该文件拷贝到/monchickey/ffmpeg/bin目录下。
然后在/monchickey/ffmpeg/bin目录下执行下面的命令
./ffmpeg -i test.mp4 -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 320*240 destination.avi
此时你会看到下面的运行界面
紧接着是这样的画面
终于通过实际的测试了,等待程序执行完成之后,会发现bin目录下多了一个destination.avi文件
可以看到后,格式转换后,文件的大小发生了变化,打开视频后发现与原视频效果差不多。
常用参数
#ffmpeg常用参数的介绍
#-i 指定要转换视频的源文件
#-s 视频转换后视频的分辨率
#-vcodec 视频转换时使用的编解码器
#-r 视频转换换的桢率(默认25桢每秒)
#-b 视频转换换的bit率
#-ab 音频转换后的bit率(默认64k)
#-acodec 制度音频使用的编码器
#-ac 制定转换后音频的声道
#-ar 音频转换后的采样率
./ffmpeg -i source.mp4 -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 320*240 destination.mp4
需要的自取,上面使用的参数命令可以对照命令参数详情自己理解。
二、银河麒麟下移植OpenCV
1、opencv下载链接
Releases - OpenCV
2、配置opencv,可跳过
下载完成后,解压目录
unzip opencv-3.4.6.zip
首先,修改一个文件,不然安装过程中会报错
vim 你的路径/opencv-3.4.6/modules/videoio/src/cap_ffmpeg_impl.hpp
若没有则跳过
然后加入下面三句宏定义
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
3、编译opencv
一、x86_arm交叉编译
1)、通过cmake-gui安装
1、安装cmake-gui
sudo apt-get install cmake-gui
在源码目录下
mkdir /usr/local/opencv-3.4.6
mkdir build
cd build
2、安装完成后运行:
sudo cmake-gui
3、然后会弹出CMake的图形化界面,在上方的两个路径里面,选择好代码所在文件夹的路径和要安装的路径。
说明:Where is the source code对应opencv的文件夹,Where to build the binaries对应opencv存放编译好的配置文件等信息的文件夹(刚才创建的build文件夹)
4、交叉编译
注意:Linux要大写首字母,不能写成linux。Target Root代表标准库与头文件的搜索起始位置,可以理解为对应交叉编译工具的根目录,下图中的工具链是:
C:/usr/local/cross-arm/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
C++:/usr/local/cross-arm/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
Target Root:/usr/local/cross-arm/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/
勾选Advanced配置zlib路径,find / -name zlib.h查看zlib.h是否在那个目录存在
/usr/local/opencv-3.4.6-arm/opencv-3.4.6/3rdparty/zlib/
5、编译
sudo make –j8
可能报错,参考百度解决
错误1:undefined reference to ‘png_riffle_palette_neon’
解决1:
在build目录下:vi ../3rdparty/libpng/pngpriv.h大概131行位置
/*# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \*/
如上所示,把上面的一行注释掉,增加下面一行。再次make即可
#if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) &&\
defined(PNG_ALIGNED_MEMORY_SUPPORTED)
6、安装
sudo make install
7、环境变量
参考2、其他平台配置
二、其他平台
1)、通过cmake-gui安装
1、安装cmake-gui
sudo apt-get install cmake-gui
在源码目录下
mkdir /usr/local/opencv-3.4.6
mkdir build
cd build
2、安装完成后运行:
sudo cmake-gui
3、然后会弹出CMake的图形化界面,在上方的两个路径里面,选择好代码所在文件夹的路径和要安装的路径。
4、点击左下方的Configure按钮,选择Unix Makefiles,选择Use default native compilers(默认),然后点击Finish
5、需要下载一些文件,要等待一段时间。然后CMake即载入默认配置,如下图所示:
6、这里需要对两个地方进行修改:
(1)在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变(如果已经存在就不必修改)。
下方的CMAKE_INSTALL_PREFIX显示了默认的安装目录,生成makefile文件最后执行 make install时就会安装到这个目录,这里可以根据个人需求更改。
(2)在OPENCV_EXTRA_MODULES_PATH处,选择输入目录(单击这一行后方空白处即可选中)
(3)然后选择opencv_contrib-3.2.0文件夹中的modules文件夹,注意,不是只选中opencv_contrib-3.2.0文件夹就好了,需要选中里面的modules文件夹! 如下图所示,然后点Choose。
注:OPENCV_EXTRA_MODULES_PATH 是用来指定要编译的扩展模块,其中包括OpenCV_contrib模块。
7、点击Generate生成配置文件,这一步应该比较快就完成了。
8、接着,在build目录下打开终端,输入
sudo make -j8
sudo make install
2)、shell指令安装
mkdir build
cd build
cmake –D OPENCV_GENERATE_PKGCONFIG=ON –D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-3.4.6 -D WITH_FFMPEG=ON –D BUILD_opencv_world=ON -D WITH_GTK=ON ..
上面这个cmake命令很重要,尤其是OPENCV_GENERATE_PKGCONFIG=ON,这个很重要,不写安装完成后会出现很多问题。
cmake结束后,继续执行下面的命令
make -j8
make install
至此,opencv安装结束
4、环境变量配置
打开QT运行的时候,大概率报错。
error while loading shared libraries: libopencv_core.so.3.3: cannot open shared object file: No such file or directory
不要慌,还有解决方案,如下
sudo vim /etc/ld.so.conf
在include那句话下面加入
/usr/local/lib/
下面是环境变量的配置,配置环境变量需谨慎,一定要仔细,不然会导致系统瘫痪。
vim /etc/ld.so.conf.d/opencv.conf
打开文件后输入/usr/local/opencv-3.4.6/lib,并保存退出
然后在终端执行
sudo ldconfig
vim /etc/profile
在末尾加入
export PATH=$PATH:/usr/local/opencv-3.4.6/bin
export PATH=$PATH:/usr/local/opencv-3.4.6/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
source /etc/profile
5、opencv的测试
ldconfig -v | grep opencv
输入命令:
pkg-config --cflags opencv
pkg-config --libs opencv
如果没有出错,说明安装成功
三、OpenCV使用问题
1、imshow无法使用
问题:
imshow 无法使用, 会出现如下警告. 这是因为python-opencv没有编译gtk, 网上的解决方法可能会推荐你重新编译什么的, 太过麻烦, 也不一定能解决.
cv2.error: OpenCV(4.1.0) /io/opencv/modules/highgui/src/window.cpp:627: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'
解决:
卸载全部其他python版本的opencv
# 首先看看系统上是否安装了opencv
# 如果你使用了 conda 环境, 用如下命令列出全部的opencv包
conda list opencv
# 注意: conda列出来的包, 每行末尾有pypi的要通过pip卸载, 没有pypi的通过conda卸载
# 如果没有conda, 那就用pip 看一下
pip list | grep opencv
# conda list opencv 的结果如下:
# 然后就能看到装过的各种版本的opencv, 卸载这些opencv
# conda 卸载参考
conda uninstall xxx-opencv-xxx
# pip 卸载参考, 在我上面这张图中, 执行:
pip uninstall opencv-contrib-python
安装opencv,注意其他的opencv一定要先卸载干净,到之前的/usr/local/opencv-3.4.6/opencv-3.4.6/build文件夹下
make uninstall
pip3 install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple
等待下载安装,然后重新编译安装opencv。
银河麒麟V10系统+飞腾CPU交叉编译OpenCV相关推荐
- 银河麒麟V10系统+飞腾CPU交叉编译安装Qt-5.15.2
银河麒麟V10系统+飞腾CPU编译安装Qt-5.15.2 一.准备工作 1.下载qt源码包 下载网址:https://download.qt.io/archive/qt/ 在任意空闲位置新建文件夹,并 ...
- 银河麒麟V10系统+飞腾CPU编译安装Qt-5.15.2
银河麒麟V10系统+飞腾CPU编译安装Qt-5.15.2 一.准备工作 1.下载qt源码包 下载网址:https://download.qt.io/archive/qt/ 在任意空闲位置新建文件夹,并 ...
- 基于ARM64银河麒麟V10系统(PK体系)适配安装Ambari2.7.3+HDP3.1
引言 目前市场上主流的大数据平台以CDH和HDP两种为主,而两种大数据平台都是基于Apache原生态版本改进的,HDP版本的更贴近于原生态版本,开源率100%,基本上支持所有的开源大数据组件.CDH版 ...
- .NET 6应用程序适配国产银河麒麟V10系统随记
最近想在麒麟系统上运行.NET 6程序,经过一番折腾最终完成了,简单记录一下. 目标系统: CPU: aarch64架构(ARM64) 操作系统:银河麒麟V10高级服务器系统 银河麒麟V10系统(以下 ...
- CRTD--有关于intel芯片组和BCM4360网卡适配银河麒麟V10系统(适用于macbook)
在intel芯片组上安装银河麒麟V10系统存在问题: 一开始登录界面瞬间从有亮度到亮度最低,屏幕变黑,当登录进去时,进入设置勉强看到亮度为100%.据分析,是此系统默认调光为系统亮度而不是intel_ ...
- 银河麒麟V10(飞腾2000+ ARM)环境下构建达梦V8数据库容器镜像
1.在银河麒麟V10(飞腾2000+ ARM)设备下,先下载一个镜像,我这里选择了centos: docker pull centos:centos7.9.2009 2.启动一个容器: sudo do ...
- 银河麒麟V10系统 syslog和kern.log文件过大问题解决,定时清理日志文件
文章目录 1. 新建clear_log.sh脚本文件 2. 设置cron任务 3. 解决不执行的方法 需求: 在使用银河麒麟V10系统时,/var/log/kern.log 和 /var/log/sy ...
- 【国产化系列】银河麒麟V10系统上升级gcc版本
DATE: 2021.10.15 文章目录 1.前言 2.参考 3.gcc源码下载 4.gcc7.5.0安装步骤 4.1.安装依赖 4.2.configure 4.3.make 1.前言 银河麒麟V1 ...
- 银河麒麟V10系统无法调用达梦数据库图形化工具的解决办法
近期,在部署及使用达梦数据库时,发现了无法调用图形化工具界面的问题,首先先确认了图形化服务是正常的,使用root用户可以正常调用图形化界面,但使用dmdba却无法调用,在经过一段时间的尝试后,终于发现 ...
最新文章
- Struts 2(八):文件上传
- .NET Core 中的路径问题
- Python list 数据类型:列表
- 第二阶段--个人冲刺--第十天
- 谁说数学没有用?披着小学数学外衣的,经典程序员面试题!
- mysql实例怎么复制_Mysql实例MySQL数据库复制概论
- 禅道的基本使用(创建项目、维护部门、用户、产品、提出需求、创建测试用例等)
- Java运算符(Operator)之 算数运算符(ArithmeticOperator)
- RabbitMQ 高可用之镜像队列
- sds数据结构,Simple Dynamic String,简单动态字符串
- ios 视频播放器:AVPlayer(附:seektotime精准定位)
- iOS Gif分解与展示
- Visual studio的中英文切换
- Android 中Goolgle 相关服务的移植[转]
- 激活win10专业版最简单的方法
- [AutoVue开发手册]第二篇——AutoVue之Applet参数列表
- pta中java编程题_多文件编程题
- 2017ACM ICPC Asia Regional-Daejeon H-Rock Paper Scissors[ FFT]
- GAMES101现代计算机图形学入门——几何表示之曲线与曲面
- 一个SQL获取某股票连续上涨的天数