Movid is the acronym for Modular Open Vision Interaction Daemon. It's a crossplatform and Open Source tracker, designed to be as modular as possible.
code download :http://github.com/tito/Movid
Movid思路分析
Movid高度模块化,主要功能模块在tito-Movid-3d5b78b/src文件夹下面。模块moModule负责处理,模块间共享端口数据moDataStream。moModule体系通过moModule.h中的宏定义实现自动化绑定。
模块间端口数据共享通过指针浅拷贝,共享内存, 因为movid只是可视化opencv,输入数据来源于camera或者video,对于二者opencv自动会管理每帧的管理,所以movid中moDataStream不需要管理端口数据的生命周期。
moModule体系,包括在moDataStream中使用了多线程,偶对MT还只是理解皮毛,惭愧~
moProperty中定义moModule的其他一些属性,比如canny算子需要的两个int型参数,定义如下:
moPipeline里面管里创建整个可视化场景,特别是moPipeline::parse函数,通过解析字符串命令创建场景。
Movid的界面在web上实现,movid.cpp中负责网络通信部分。
最终用户在网页上,以连线的方式产生了一个场景图,从而生成一个模块间的调用序列,将这些字符串传给服务器,服务器端Movid解析产生结果,传给客户端,显示最终结果图片。所以这个角度说,Movid并不是所见即所得的编程,gui只是一种表示,跟gui层跟数据层是分离的。
Movid的执行机制有点神奇,一直没有看到对所有模块进行拓扑排序的函数,难道通过MT就这可够了???研究ing~
Movid演示例子,顺序创建结点,按照结点ID号遍历所有节点,调用poll / update函数。。。