Tuesday, July 26, 2011

Building Bundler, CMVS and PMVS2 on Kubuntu 11.04 64bit

I've had some minor trouble getting the SFM combo to compile and run properly on linux these days.

I started out first by getting bundler v0.4 and installing the requirements described in INSTALL.txt (mainly apt-getting LAPACK, BLAS, MINPACK). Hitting make in the source directory went through part of the compilation, but gcc complained that line 620 of BundlerApp.h was giving trouble. It actually suggested to replace
    SkeletalApp() {
        BundlerApp::BundlerApp();
        m_start_camera = -1;
    }
with
    SkeletalApp() {
        BundlerApp();
        m_start_camera = -1;
    }
which solved the problem and got through the compilation successfully.

The second issue I stumbled across was quite more difficult to gleam:
the jhead, sift and other executables that are provided with the source code would not run and tell me the command was "not found" even though the file was indeed there. This turned out to be a 32-bit/64-bit issue: installing the ia32 libraries (sudo apt-get install ia32-libsfixed the problem. For some reason this worked right away on another install on a Toshiba laptop. On the main machine I had been playing around with uninstalling/reinstalling Nvidia drivers to get CUDA up and running, so this might be the reason...

For CMVS/PMVS, I gitted the CMVS-PMVS package from TheFrenchLeaf. I installed CMAKE and used it on the CMVS-PMVS/program/ folder to generate the makefiles. Compile went without problems and I had everything I wanted.

Finally, I came back and modified Bundle2PMVS.cpp to replace line 160 from
fprintf(f_scr, "BUNDLER_BIN_PATH=" # Edit this line before running\n");
to
fprintf(f_scr, "BUNDLER_BIN_PATH=$1\n");
so that I won't have to manually modify the prep_pmvs.sh script every time I use Bundle2PMVS. Since I was there, I also modified the RunBatch.sh script to run both Bundle2PMVS and prep_pmvs.sh by addingsleep 1
echo "[- Running Bundle2PMVS -]"
$BASE_PATH/bin/Bundle2PMVS list.txt bundle/bundle.out
sleep 1
sh pmvs/prep_pmvs.sh $BASE_PATH/bin

at the end of the file.
This has taken care of basically all my requirements. Next up will be getting siftGPU to replace the original sift.

No comments: