由於專題需要parsing clothes
所以找到了這個opensource的code
http://vision.is.tohoku.ac.jp/~kyamagu/research/clothing_parsing/
不過在使用上遇到不少問題
因此在部落格上紀錄一下
如果只是照他README上面寫的乖乖的只打sbu.make
一開始就會看到一大堆的訊息
然後就會選擇性的只看下面好幾行的
Building with 'g++'.
MEX completed successfully.
看到completed successfully就會自以為一切都沒問題
但其實中間藏了不少error
需要一個一個慢慢解
(訊息很多但還是要面對阿QQ)
首先要先確定matlab的mex用的gcc和g++版本都是4.7.x(或以下)的
就是去/usr/bin下面看有沒有gcc-4.7.x之類的東西存在
但存在不代表它一定會用到(因為有可能同時好幾個版本的gcc存在)
所以建議是直接重新建立soft link
建立soft link的方法可以參考這裡:
http://www.cyberciti.biz/faq/creating-soft-link-or-symbolic-link/
總之就是先rm gcc和rm g++(記得要sudo)
然後sudo ln -s gcc-4.7.x gcc (g++方法一樣)
這樣就把gcc/g++的版本更新了
上述完成後編譯時還是會遇到不少問題
出現的error大致上長這樣
[svmpredict.mexa64] Error 255
然後說什麼CC#g++ not found之類的
要解決這個問題就是去/ib/+libsvm和/lib/+liblinear下面兩個的MAKEFILE裡面把
MEX_OPTION = CC\#$(CXX) CXX\#$(CXX) CFLAGS\#"$(CFLAGS)" CXXFLAGS\#"$(CFLAGS)"
改成
MEX_OPTION = CC=$(CXX) CXX=$(CXX) CFLAGS="$(CFLAGS)" CXXFLAGS="$(CFLAGS)"
就好了
參考:http://stackoverflow.com/questions/24599491/installing-liblinear-on-matlab-r2014a
還沒結束
接著還會遇到
/usr/bin/ld: cannot find -lboost_program_options-mt
collect2: ld returned 1 exit status
make: *** [tests/testdai] Error 1
這時請進到/lib/libdai裡的Makefile.LINUX
將
BOOSTLIBS_PO=-lboost_program_options-mt
改成
BOOSTLIBS_PO=-lboost_program_options
問題就解決了
參考:https://groups.google.com/forum/#!topic/libdai/rEGQLzvkJ2U
不過這次它就又會再出現
CXX#g++ not found
make: *** [+libdai/dai.mexa64] Error 255
這樣的error
同樣在Makefile.LINUX裡面
將
MEXFLAGS:=CXX\#g++ CXXFLAGS\#'$(CCFLAGS)'
改成
MEXFLAGS:=CXX=g++ CXXFLAGS='$(CCFLAGS)'
問題消失~~~
然後換新問題
/usr/bin/ld: cannot find -lboost_unit_test_framework-mt
make: *** [tests/unit/var_test] Error 1
一樣把-mt刪掉就好了
大功告成~~~~終於阿~~~
然後要注意的是他的README似乎不是很準
有些上面說的function都不能用...
測試之後沒問題的作法大概就是
Parsing: (跑一張圖還滿久的)
im = imread('myphoto.jpg');
parser = sbu.ClothParser.default_parser;
photo = parser.parse(im,{'t-shirt','pants','shoes'}); % specific parsing
Display:
photo.segmentation.show_superpixels;
photo.segmentation.show; % Plain parse
photo.segmentation.show('image', photo.image); % Overlaid parsing
% Adding a color bar in the plot
clothings = sbu.Fashionista.clothings;
photo.segmentation.show('image', photo.image, 'labels', clothings);
然後要看pose的話可以用
photo.pose.show; % Plain pose in xy coord
photo.pose.show('image', photo.image); % Pose overlaid on an image
出來結果長這樣(pose的):
阿parsing結果長這樣:
他旁邊那個圖示條跟文字好像沒有很對到
但順序一樣就是了
其實結果沒有到想像中那麼好
但大致上也正確了
以上。
2016.9.25補充
若想單純estimate pose
可以用以下方法
im = imread('myphoto.jpg');
estimator = uci.PoseEstimator.default_estimator;
boxes = estimator.estimate(im);
pose = sbu.Pose(boxes);
pose.show('image', im);
出來結果會像這樣