最近的《视频处理与分析》课程中有一个大作业,是有关DPM物体检测算法的。网上有DPM的源代码,但是原版只能在Linux或Mac上运行,而我的电脑是Windows系统,于是在网上搜了一下在怎样Windows在运行,最后通过一些代码的修改,可以在Windows上正常运行,下面记录我的修改过程。

DPM源程序下载:Discriminatively Trained Deformable Part Models (Release 5)

我下载的是voc-release5版本。

voc-release5原版并不支持在Windows系统中编译运行,但只需进行以下几项代码修改即可完美解决。

源代码修改步骤

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

    1. #define bzero(a, b) memset(a, 0, b)
    1. int round(float a) { float tmp = a - (int)a; if( tmp >= 0.5 ) return (int)a + 1; else return (int)a; }

2. 修改features目录下的resize.cc文件:同样添加上面两行代码,再将第39行

    1. alphainfo ofs[len];

改为

    1. struct alphainfo *ofs = (struct alphainfo *)malloc(sizeof(struct alphainfo)*len);

再在第80行后(该函数最后)添加一行

    1. free(ofs);

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

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

    1. #define int32_t int
    1. #define INFINITY 1e8

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

    1. #define int32_t int

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

    1. #define INFINITY 1e8

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

8. 修改star-cascade目录下的timer.h文件:删掉第6行代码#include <sys/time.h>(因为这是Linux系统中的头文件,Windows系统中没有),再添加下面己行代码(即添加缺少的头文件和函数);

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

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即可(如果你的Matlab还没有配置mex的话,需要提前配置一下,即在Matlab命令窗口执行mex -setup,选择一个编译器即可)。

参考

DPM目标识别 windows 下配置_moran_新浪博客

linux下gettimeofday函数windows替换方案_CastleintheSky_新浪博客

matlab中 mex -o 中的“-o”是什么意思,为什么会出错。_百度知道

VS2008和VC6.0下使用pthread.h头文件 | 学步园

在Windows下运行Felzenszwalb的star-cascade DPM(Deformable Part Models)目标检测Matlab源码 - 推酷

GNU C中不为人知的特色:attribute__机制 - JuanA1的专栏 - 博客频道 - CSDN.NET

gcc __attribute
((packed)) || attribute ((aligned(4))) 2 - green的专栏 - 博客频道 - CSDN.NET

C语言字节对齐(以32位系统为例)_小恺_新浪博客

DPM算法源程序voc-release5在Windows中的配置修改过程的更多相关文章

  1. Windows中Nginx配置nginx.conf不生效解决方法(路径映射)

    Windows中Nginx配置nginx.conf不生效解决方法 今天在做Nginx项目的时候,要处理一个路径映射问题, location /evaluate/ { proxy_pass http:/ ...

  2. Maven在Windows中的配置以及IDE中的项目创建

    Maven在Windows下的配置 1.Maven下载地址:http://maven.apache.org/download.cgi,下载红框里的版本即可. 2.解压到D盘: 3.修改配置文件sett ...

  3. windows中的mysql修改管理员密码

    上周安装了Mysl 但是却无法登陆,找了好久才找到这个解决办法,讲的详细谢谢了. [摘要:1.my-default.ini 更名my.ini 正在解压的目次上面复造my-default.ini一份更名 ...

  4. 在Windows中快速配置vim

    vim原本是在Linux中的编辑器,如果使用熟练写代码速度可以远高于其它编辑器 当然很多OI比赛也会要求在Linux中进行 然而: 想学Linux,首先要有一个Linux,但有了Linux,这个直播间 ...

  5. Windows中Nginx配置nginx.conf不生效解决方法

    转:https://lucifer.blog.csdn.net/article/details/83860644?utm_medium=distribute.pc_relevant.none-task ...

  6. jdk在windows中的配置

    1.下载jdk(java developer kit),其内部包含jre(java runtime environment): 安装解压缩到一盘内,如:G:\Program Files\Java: 2 ...

  7. 在windows中给git修改默认的编辑器为sublime

    首先,需要配置sublime的为环境变量,这是为了让git能通过命令调用sublime.也可以写一个.bat脚本.然后,让git调用bat脚本也可以 配置环境变量path到subl.exe的目录 脚本 ...

  8. python---django中models配置修改数据库引擎

    Django支持多种数据库,sqlite,mysql,oracle等,其默认数据库是sqlite 在settings文件中可以发现: DATABASES = { 'default': { 'ENGIN ...

  9. Windows中安装Linux子系统的详细步骤

    早就听说Windows中可以安装Linux子系统,体验了一下,感觉还是不错的,下面直接开始安装和配置步骤吧! 开启Windows中的配置 首先开启开发者模式 打开"所有设置"进入& ...

随机推荐

  1. thinkphp发送邮件

    看thinkPHP手册发送邮件 Thinkphp3.2 PHPMailer 发送邮件结合QQ企业邮箱发送邮件下载附件PHPMailer解压到ThinkPHP\Library\VendorPHPMail ...

  2. linux vi基本操作

    在Linux下,可以键入vimtutor命令,有一个包含实操的vim教程. 1.VI的三种命令模式  1)Command(命令)模式,用于输入命令:  2)Insert(插入)模式,用于插入文本:  ...

  3. LUA类

    cpp_object_map = {}setmetatable(cpp_object_map, { __mode = "kv" }) local search_basesearch ...

  4. Struts2 token禁止重复提交表单

    如果服务器响应慢的情况下,用户会重复提交多个表单,这时候有两种设计思想: 1.在客户端使用JS技术,禁止客户重复提交表单.但是这样会使一些不使用浏览器方式登陆的人比如使用底层通信来攻击你的服务器 2. ...

  5. mysql导入导出.csv格式数据

    window下导入数据: LOAD DATA INFILE "C:\\1.csv" REPLACE INTO TABLE demo CHARACTER SET gb2312 FIE ...

  6. Windows phone应用开发[17]-xap提交异常处理

    在windows phone 应用提交操作上早在2011年时就写过一篇Windows phone 应用开发[4]-应用发布,那时wp应用提交官方市场的流程繁杂[超过了5步].因为上传和填写应用信息页面 ...

  7. SQLite剖析之动态内存分配

    SQLite通过动态内存分配来获取各种对象(例如数据库连接和SQL预处理语句)所需内存.建立数据库文件的内存Cache.保存查询结果. 1.特性    SQLite内核和它的内存分配子系统提供以下特性 ...

  8. 【转】解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介

    ASP.NET 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦.为了这些改写,微软也是蛮 拼的,几乎把.NET Framwrok全部改写了一遍,形成了一个.NET Core的东 ...

  9. php环境的搭建

    Windows下php作为Apache的子模块加载 1.安装Apache后,找到httpd.conf文件,加入下列三行 #将php作为Apache的一个模块来处理LoadModule php5_mod ...

  10. 【BZOJ-3195】奇怪的道路 状压DP (好题!)

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 305  Solved: 184[Submit][Statu ...