ubuntu下Scilab SIVP的安装
来源:互联网 发布:java compare 编辑:程序博客网 时间:2024/06/14 08:06
1, 概述
SIVP是国内团队在SCILAB上做的视频处理函数的扩展。网上有很多链接,不过我发现下面这个好像有最新的更新:
https://atoms.scilab.org/toolboxes/SIVP
对于SIVP,我浅薄的感觉是它好像是主要在Windows上开发的。在Linux系统上的维护好像并不好。而我就是要在Ubuntu上运行scilab+SIP+SIVP。所以只好花了些时间看看SIVP在我Ubuntu上怎么运转起来。先粗略介绍一下情况:
- 在上面链接中,能够得到0.5.3.2的版本。似乎在我Ubuntu上也能够编译过去,但是很快就发现它运行还是有问题。
- 从其它网站上下载的老一点的版本,0.5.3,经过仔细对比后,发现0.5.3.2在代码上变化不大,只是为Linux下编译做了些改变。但是带来的后果是0.5.3.2包变得很大,而且最后用下来没有达到傻瓜式的效果。既然我要自己来重新编译,那么我还是认为0.5.3的版本比较干净,编译环境配置文件也写的比较干净,所以下面的工作就基于0.5.3(老一点的版本)来进行。
在细节展开前,再说一下目前对SIVP这个项目的一点闲话:
- 这是个开源项目,这个我喜欢。不过当我想为它捐点零钱的时候,发现捐钱通道好像只有国外通道,很不方便。这真让人遗憾。有人想给钱都这么不方便,也反映出中国开源社区的现状。最后钱还是没有能够给出去。
- SIVP这个项目的代码有些老了,更新很不活跃。它用到的opencv的函数,在我的opencv2.4.8中都已经淘汰不可用了。直接导致我最后在代码中删除了一个输出函数。另外,它和scilab接口的形式也即将被scilab淘汰。Scilab声明在6.0.0版本中将不支持这种老的接口。所以如果SIVP没有再进行维护更新的话,很可能会面临被淘汰的情况。
- 顺便评论一下对0.5.3.2的看法。在这个最新版本中,作者似乎想把SIVP的运行库都打包在一起,这样就不用依赖PC上的运行库了。这种方法出发点是不错,只是作者好像没做彻底。导致在我的环境下反正是少东西。如果强行用我PC上的东西把缺口补上,实际运行时候就会出现错误。
2, 编译
好,闲话说完,进入正题。我的系统配置是:
Ubuntu14.04+opencv2.4.8+scilab5.5.1。至于其它的编译环境,我很难一一列出了。反正如果少了啥,就用sudoapt-get install去安装吧。如果你不知道该安装什么,建议可以用apt-file search去看看缺少的东西关联的包都有哪些,然后选一个最靠谱的安装吧。顺便说一下,我的opencv2.4.8是自己编译安装的,所以安装在/user/local/目录下,如果你是用apt-get直接安装的话,路径可能会有些不一样。下面阅读的时候注意一下。
依照说明,把sivp包放到scilab5.5.1/share/scilab/contrib目录下。然后在scilab环境中运行builder.sce。如果一切顺利,那就可以直接跳转到启动部分了(别高兴太早,启动还是有玄机。如果你用0.5.3.2,那很可能你编译是没有问题,但是你启动时候就麻烦大了。)下面我描述一下在0.5.3上,我遇到的问题:
问题一:编译器抱怨<list>库找不到。
这是opencv编译时候常见的问题。根源在于c/c++的冲突。你编译的软件用的是老式的opencv的C接口。而新的opencv2虽然维护了老的C接口库和头文件,但是有些太老的东西,就被抛弃了。这个太老的东西就是#include <cvaux.h>。它已经老到在opencv2.4.8中,已经没有为它维护的对应的C版本的库和lib了。
解决方法:在sivp/sci_gateway/c/common.h中,直接把#include <cvaux.h>给注释掉。这样带来的后果是,后面有一个文件detectforeground.c会编译不过了。不过这也没啥大不了,因为这个文件/函数用到的CvBGStatModel太老了,以至于新的opencv中都找不到它了。暂时就委屈一下,把它忽略吧,如果后面遇到一定要这个文件提供的功能,自己再用新的opencv函数重新写一下,然后替换掉,重新编译吧。
不建议的解决方法:默认的编译器是gcc。如果用g++编译基于c的opencv文件的话,的确会省很多事情,避免很多错误。于是你可以尝试在sivp/sci_gateway/c/builder_gateway_c.sce文件中,修改tbx_build_gateway函数如下:
tbx_build_gateway("sivp" , ..
inter_names , ..
inter_files , ..
curr_path , ..
opencv_libs , ..
inter_ldflags , ..
inter_cflags, "","g++" );
这样svip就会用g++来编译。这样看上这个问题是没有了,但是在后面会遇到更大的麻烦:
- g++和gcc对C语言的语法检查和容忍不一样,等到编译最后自动生成的libsivp.c的时候,会出现g++的语法错误;
- 你用g++编译出来的库,很可能无法和用gcc编译出来的scilab, sip兼容。于是你又有更多的工作要做,去补上这个缺口。
当然,如果是你自己单独的项目,统一用g++来编译,那是没有什么问题的。
问题二 stack-h.c过时警告。
这个没办法。scilab准备要修改接口了,咱们就凑合用吧。解决办法就是在CFLAG上加上-D__USE_DEPRECATED_STACK_FUNCTION__。这个在错误报告里有。添加的地方就是sivp/sci_gateway/c/builder_gateway_c.sce中。注意添加的位置,我们应该在linux,opencv2的选项中。另外我吧-DOPENCV_V2给注释掉了,我发现这个没啥用。当然,你留着也无碍。我还加了-std=c99。建议加上,只是告诉编译器遵循的语法定义规则:
inter_cflags = " -std=c99-D__USE_DEPRECATED_STACK_FUNCTIONS__ "; //"-DOPENCV_V2 ";
问题三:有些语法告警,你可能要在cflags里面加-Wno-write-strings来避免。我记得可能我用了-std=c99后,这些告警就没有了。反正告警都好办,忽略就是了。它提示你加什么,你就加什么。
问题四:CvBGStatModel这个定义找不到了。在2.4.8中已经没有了。而detectforeground.c中大量使用了它,所以只好在builder_gateway_c.sce中,把这个函数相关的部分注释掉(2个地方,一个是输出函数,一个是文件名。Scilab中注释可以用//)。反正就少一个功能。如果后果严重,那也没有办法,只能用新的opencv库中的函数,重写这个文件。
问题五:还有几个零散的问题,说是opencv函数的参数不够。这是opencv新老库的变化。网上查看一下函数定义,把默认参数补上就好了。这种情况不多,好像只有2,3个地方。
3, 启动
终于编译通过。但是发现,在工具条直接启动sivp时候,还是出错。这是因为sivp/etc/sivp.start的问题。这个启动文件中,它要去找相关的库去加载。我们要修改它。
首先要知道我们编译出来的libsivp.so都需要哪些库。前面编译完成后,在/sivp/sci_gateway/c目录下,由libsivp.so文件。用:
readelf -a libsivp.so | grep "Shared"
去看看它都需要动态链接哪些库。然后找到这些库的位置,从新更改link部分的命令。在我的系统中,如下:
link("/usr/local/lib/libopencv_core.so.2.4");
link("/usr/local/lib/libopencv_highgui.so.2.4");
link("/usr/local/lib/libopencv_imgproc.so.2.4");
link("/usr/local/lib/libopencv_objdetect.so.2.4");
link("/usr/local/lib/libopencv_video.so.2.4");
link("/lib/x86_64-linux-gnu/libm.so.6");
link("/lib/x86_64-linux-gnu/libc.so.6");
然后再回到工具条,启动sivp,终于好用了。尝试了一下imresize,能工作了。
- ubuntu下Scilab SIVP的安装
- fedora 8 安装 scilab
- Scilab的内定常数
- scilab的数据类型
- scilab 的初步介绍
- scilab 的初步介绍
- Scilab的初步介绍
- scilab
- Scilab
- Scilab
- scilab符号运算工具箱Symbolic Toolbox for Scilab安装过程
- ubuntu下apache的安装
- ubuntu 下ruby 的安装
- ubuntu下VMTools的安装
- ubuntu下php的安装
- UBUNTU 下 JDK 的安装
- Ubuntu下Reciteword的安装
- Ubuntu下GTK的安装
- 使用DevExpress控件构造单文档多界面(标签页)
- 自说自话,Racket我来了
- poj 3126 Prime Path
- pugixml简介
- Minimum Path Sum
- ubuntu下Scilab SIVP的安装
- [BestCoder] Round #8
- 进程间通讯概述
- PIT systick
- LIS of Sequence
- java图片处理工具
- Android学习笔记 - SlidingDrawer 和 ExpandableListView
- java要学的技术。路很长啊
- 位和字节