DPM算法源程序voc-release5在Windows中的配置修改過程
最近的《視頻處理與分析》課程中有一個大作業,是有關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系統上缺少這樣的定義);
#define bzero(a, b) memset(a, 0, b)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行
alphainfo ofs[len];
改為
struct alphainfo *ofs = (struct alphainfo *)malloc(sizeof(struct alphainfo)*len);
再在第80行后(該函數最后)添加一行
free(ofs);
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 <sys/time.h>(因為這是Linux系統中的頭文件,Windows系統中沒有),再添加下面己行代碼(即添加缺少的頭文件和函數);
#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即可(如果你的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位系統為例)_小愷_新浪博客

浙公網安備 33010602011771號