玩转智能路由器-WRTnode添加OpenCV支持

opencv libs库文件ipk编译

opencv ipk源码

利用openwrt package的编译机制仅仅需要一个Makefile即可编译opencv。

为何会如此简单神奇,下面就对Makefile详解(个人看法,欢迎指正):

$vim Makefile

include $(TOPDIR)/rules.mk 
PKG_NAME:=opencv 
# PKG_NAME -软件包的名字, 在 menuconfig 和 ipkg 显示
PKG_VERSION:=2.4.8 
# PKG_VERSION -软件包的版本,主干分支的版本正是我们要下载的
PKG_RELEASE:=1 
# PKG_RELEASE -这个 makefile 的版本
PKG_USE_MIPS16:=0 
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).zip 
# PKG_SOURCE -要下载的软件包的名字,一般是由 PKG_NAME 和 PKG_VERSION 组成
PKG_SOURCE_URL:=http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.8/ # PKG_SOURCE_URL -下载这个软件包的链接 ,从网上得到的
PKG_MD5SUM:=50cc1433b3654074206f5b3dbfd49848 
##################################################
# 软件包的 MD5 值,校验值,得到MD5的值的方法
#$ ./scripts/update-package-md5sum ....../opencv/
#PKG_CAT:= unzip
#PKG_CAT -解压软件包的方法 (zcat, bzcat, unzip)
##################################################
include $(INCLUDE_DIR)/package.mk 
include $(INCLUDE_DIR)/cmake.mk 
define Package/opencv/Default/description 
the Open Source Computer Vision Library for linux 
endef 
define Package/opencv 
  SECTION:=libs 
  CATEGORY:=Libraries 
  TITLE:= opencv-2.4.8 
  DEPENDS:=+libpthread +librt +libstdcpp +zlib +libjpeg 
endef 
##################################################
#SECTION - 软件包类型 
#CATEGORY - menuconfig中软件包所属的一级目录,如 Libraries
#SUBMENU - menuconfig中软件包所属的二级目录(没有用到)
#TITLE - 软件包标题
#DESCRIPTION - 软件包的详细说明
#URL - 软件的原始位置,一般是软件作者的主页
#MAINTAINER - (optional) 软件包维护人员
#DEPENDS - (optional) 依赖项,运行本软件依赖的其他包
#################################################
PKG_INSTALL:=1 
CMAKE_OPTIONS += -DWITH_LIBV4L:BOOL=OFF -DBUILD_opencv_ts:BOOL=OFF
#################################################
#CMAKE_OPTIONS 
#例如不想编译libv4l库、ts等,就选择OFF。
#################################################
define Build/InstallDev 
    $(INSTALL_DIR) $(1)/usr/include 
    $(CP) $(PKG_INSTALL_DIR)/usr/include/opencv $(1)/usr/include/ 
    $(CP) $(PKG_INSTALL_DIR)/usr/include/opencv2 $(1)/usr/include/ 
    $(INSTALL_DIR) $(1)/usr/lib 
    $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopencv* $(1)/usr/lib/ 
endef 
#################################################
# define Build/InstallDev 
#生成的头文件和库放到  
#./staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include 和 ./staging_dir/target- mipsel_24kec+dsp_uClibc-0.9.33.2/usr/lib 下
#PKG_INSTALL_DIR  ./trunk/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/opencv-2.4.8/ipkg-install 
#################################################
define Package/opencv/install 
    $(INSTALL_DIR) $(1)/usr/include 
    $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/ 
    $(INSTALL_DIR) $(1)/usr/lib 
    $(CP) $(PKG_INSTALL_DIR)/usr/lib/libopencv* $(1)/usr/lib/ 
endef 
$(eval $(call BuildPackage,opencv))
#################################################
#这是最为关键的BuildPackage宏。它是在$(INCLUDE_DIR)/package.mk文件里定义的。BuildPackage宏只要求 一个参数,即要编译的软件包名,在本例中是"opencv"。所有其他信息都通过宏来获得,这提供了一种内在的简洁性。比如BuildPackage需要软件包的一大串描述信息,我们并不要向它传递冗长的参数,因为我们已经约定描述信息定义在DESCRIPTION宏,BuildPackage从里面读取 就可以了。
# Build/Compile (可选) 
# 编译源代码命令
# Package/install 
# 软件安装命令,主要是把相关文件拷贝到指定目录,如配置文件。 
#################################################

opencv测试程序的编译

opencv-test ipk源码

下面我们利用opencv-test这个demo来测试opencv libs。测试程序实现功能是从摄像头读取图片,保存在当前目录。由于存储空间受限,就存6张图片。 下面是生成opencv-test ipk包所需要的Makefile,其编译方法与其他任何ipk包的编译方法完全一样。

$vim Makefiel

include $(TOPDIR)/rules.mk
PKG_NAME:=opencv-test
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/package.mk
define Package/opencv-test
  SECTION:=wrtnode
  CATEGORY:=WRTnode
  SUBMENU :=demos
  TITLE:=opencv demo app
  DEPENDS := +opencv
endef
#################################################
#DEPENDS := +opencv ,依赖opencv lib
#################################################
define Package/opencv-test/description
        WRTnode test program for opencv lib
endef
define Build/Prepare
        mkdir -p $(PKG_BUILD_DIR)
        $(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Compile
        $(MAKE) -C $(PKG_BUILD_DIR)                 $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS)"                         LDFLAGS="$(TARGET_LDFLAGS)"
endef
#################################################
#$(TARGET_CONFIGURE_OPTS) 、$(TARGET_CFLAGS)、 $(TARGET_LDFLAGS)等定义在rules.mk 
#################################################
define Package/opencv-test/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/cv_test $(1)/usr/bin/
endef
#################################################
#cv_test 编译生成的可执行文件
#################################################
$(eval $(call BuildPackage,opencv-test))

而opencv-test的源码和编译二进制代码的Makefile在src目录下,有兴趣的同学可以深入研究。

备注:opencv应用程序几乎可以认为是跨平台的,我们可以在x86的windows或Mac下面进行开发,将与图形窗口显示和键盘输入等OpenWrt不能支持的代码去掉以后,即可保证在WRTnode上顺利编译通过并执行。

时间: 2024-10-12 06:17:06

玩转智能路由器-WRTnode添加OpenCV支持的相关文章

玩转智能路由器-WRTnode开发板[接上网线]

WRTnode专属网线 首先来介绍这根特殊的网线(图1):图1网线引脚说明:首先需要一根T568B线序的网线.T568B网线就是平时家里用于电脑连接路由器,ADSL猫的普通平行网线.T568B网线线序如下:然后将网线剪断,从中选出绿.绿白.橙.橙白四根线.其余4根线可以剪断.将上述四根线做一个2*2杜邦线插头,杜邦线插头分配如下:线做好啦,如何连接到WRTnode呢? 核心板上的针脚图(图2):图2在网线黑色的一头有一个小箭头(Pin1)的标志.当我们用网线连WRTnode时,可以选择四个LAN

玩转智能路由器-WRTnode开发板[刷新固件]

WRTnode的固件更新方法 刷机乐趣尽在其中,但乐趣与风险并存. 一:准备固件 参见编译WRTnode固件,如果不想自己编译,可以直接下载WRTnode出厂固件,linux内核 3.10.44:或者是更新版固件,linux内核 3.14.18. 二: 刷新固件 常用刷机方法有两种: 方法一:通过web界面刷机 PC机连上WRTnode的wifi或者是PC机通过网线与WRTnode相连,连接成功以后,打开浏览器,在地址栏输入 i.wrtno.de或192.168.8.1或openwrt.lan,

OpenSCAD制作的智能路由器盒子

基于OpenSCAD的一个盒子造型,可以用于了解OpenSCAD的造型语言. 这个盒子的尺寸是为WRTnode(http://wrtnode.com/)设计的,可以输出STL后通过3D打印机打印出来直接使用(注意:不同3D打印机的输出效果和间歇.材料收缩的公差不同,请自行根据情况调整,否则组装不上喔!).     WRTnode(http://wiki.wrtnode.com/index.php?title=Main_Page/zh-cn)是一个开源的智能路由器开发板,可以运行OpenWRT开源

一款Android设备上的智能路由器软件:手机服务站

现在智能电视和盒子的配置越来越高,体验越来越好,那么我们除了用它看看电视电影,打打游戏外,还能干什么呢?它占据着客厅的重要位置,是不是可以做点其他的事情? 例如: 1.用它代替无线路由器给我们的手持设备或笔记本共享网络可以吗? 2.能不能把它做成服务器,用来保存一些不方便或者不需要上传到网络云盘里的文件呢? 3.再或者我想建立一个私人的网站,记录家里的点点滴滴,这些,都可以吗? 4.就算以上都可以做,那我管理起来会不会不方便? 所以,在此向各位推荐一个Android软件来解决以上几个问题,而且还

智能路由器-OpenWRT 系列六 (远程迅雷离线下载)

OpenWRT 系列教程 智能路由器-OpenWRT 系列一 (OpenWRT 刷机) 智能路由器-OpenWRT 系列二 (OpenWRT初始配置) 智能路由器-OpenWRT 系列三 (OpenWRT安装LuCI&网络配置) 智能路由器-OpenWRT 系列四 (挂载移动设备) 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享) 智能路由器-OpenWRT 系列六 (远程迅雷离线下载) 下载 Xware1.0.31,参考地址 http://luyou.xunlei.com/thr

Android蓝牙4.0之玩爆智能穿戴、家具(二)【进阶篇】

闲话中心 这几天最大的事可能就是美国总统的上任,双十一,还有乐视股价了,乍一看,好像和我们没什么关系,其实肯定是有的了,要不然他也成不了新闻啊,有一点我们得改变,就是我们必须要希望我们自己国家的企业能过强大,我们必须支持他们,哪怕他做的不够好,这个问题其实就像一个国家一样,我们都知道许多政策是不合理的,或者说有很多制度是坑人的,但是我们不能因为这些而不爱我们的国家,那么企业也是一样,就拿乐视来说,股价跌了,公司遇到资金问题了,你看看这些媒体都在报道什么,全是负面消息,马上倒闭了,或者说是撑不住了

【智能路由器】C代码调用uci的API读openwrt配置文件指南

[智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 上篇博客讲解了命令行下uci的使用方法,本篇博客arvik将简单剖析uci部分源码,带领大家使用c语言调用uci的API来读取配置文件. 实战背景 倘若我们自己写了一个应用程序,也想用uci来集中化管理配置该应用的配置文件,怎么办呢? 看了arvik的上一篇博客后相信新手能很快的使用uci对某个配置文件进行配置,只是如何让我们的应用程序读取配置文件内容呢,

智能路由器:忽悠,还是变革?

文/东言东语 随着小米.360.乐视相继加入战局,智能路由器市场大放光彩,一夜之间路由器从默默无闻的网络设备成为了耀眼的明星,未来家庭控制中心.未来家庭网络的入口等概念,更是让智能路由器充满想象空间.但是,这些高大上的理论少有真正关注产品本身究竟能做什么,实际上,在没有整个软硬件产业的配合下,智能路由器到底有何智能并没有得到明显的体现,而其刚需性能未必强.新功能又不明显.价格相对较高的情况下,市场有多大还存在相当的变数,同时,在盒子之类产品的竞争下,其未来的走向仍有很大的不确定性. 进入微软.亚

智能路由器要成功 该怎样修炼穿墙术

对于占用户绝大多数的小白用户来说,智能的概念其实更多的就是不用在麻烦,不用专业,一键完成,就如当年一键杀毒.一键清理电脑垃圾一样. 文/张书乐 因为参与了海康威视的萤石W1智能生活路由器的测评,才有了这个不像测评的体验文章. 至少在打开包装之前,我对于这个路由器并没有多少联想,因为这无外乎又是一个穿墙术修炼到满级的路由器,至少银质的天线,可以让我在我的复式楼里,不再有盲区. 但如果这就是智能路由器,其实也就没啥意思了.记得360的周鸿祎曾经总结自己第一次路由器试水失败时,小白用户都是用信号强弱来