您的位置:首页 > 产品设计 > 产品经理

Windows下编译运行DPM(Discriminatively trained deformable part models)

2017-03-20 10:11 106 查看
DPM:https://people.eecs.berkeley.edu/~rbg/latent/index.html 我下载的是voc-release5版本,建议不要用4或者3的DPM模型,如果应用Opencv2.4.x的检测代码,速度慢的惊奇,而且opencv2.4.x也不能应用DPM5的模型。Opencv3里面应用的是DPM5的模型voc-release5原版并不支持在Windows系统中编译运行,但只需进行以下几项代码修改即可完美解决。

1. 修改features目录下的features.cc文件:在所有#include下面添加最后一行代码(因为Windows系统上缺少这样的定义);

#include <math.h>
#include "mex.h"

#define bzero(a, b) memset(a, 0, b) //ADD KK


修改features目录下的resize.cc文件:同样添加上面一行代码

#include <string.h>
#include "mex.h"

#define bzero(a, b) memset(a, 0, b) //ADD KK


定位于第41行: alphainfo ofs[len]; 修改为

alphainfo *ofs = new alphainfo[len];


并在第85行左右,添加代码:

alphacopy(s, d, ofs, k);
}
}
free(ofs); //add kk
}


3. 修改fv_cache目录下的fv_compile.m文件:将第13~15行代码注释掉(即允许在Windows系统上编译);

4. 修改gdetect目录下的bounded_dt.cc文件:在所有#include下面添加下面两行代码(同样是因为Windows系统上缺少这样的定义);

#define int32_t int
#define INFINITY 1e8


5. 修改gdetect目录下的dt.cc文件:在所有#include下面添加下面一行代码(同样是因为Windows系统上缺少这样的定义);

#define int32_t int


6. 修改star-cascade目录下的cascade.cc文件:在所有#include下面添加下面一行代码(同样是因为Windows系统上缺少这样的定义);

#define INFINITY 1e8


7. 修改star-cascade目录下的cascade_compile.m文件:将第13~15行代码注释掉(即允许在Windows系统上编译);

8. 修改star-cascade目录下的timer.h文件:删掉第6行代码#include

#include <time.h>
#include <windows.h>
int gettimeofday(struct timeval *tp, void *tzp)
{
time_t clock;
struct tm tm;
SYSTEMTIME wtm;
GetLocalTime(&wtm);
tm.tm_year     = wtm.wYear - 1900;
tm.tm_mon     = wtm.wMonth - 1;
tm.tm_mday     = wtm.wDay;
tm.tm_hour     = wtm.wHour;
tm.tm_min     = wtm.wMinute;
tm.tm_sec     = wtm.wSecond;
tm. tm_isdst    = -1;
clock = mktime(&tm);
tp->tv_sec = clock;
tp->tv_usec = wtm.wMilliseconds * 1000;
return (0);
}


9. 修改compile.m文件:将第13~15行代码注释掉(即允许在Windows系统上编译),再注释掉第64行并取消注释第68行(即选择编译fconv_var_dim.cc而不是fconvsse.cc),再注释掉第72行并取消注释第74行(即选择编译fconv_var_dim.cc而不是fconv_var_dim_MT.cc),再将所有的-o改为-output;

按上述步骤修改完之后,在Matlab中运行demo.m即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐