int main(int argc, char** argv)
{
    if(argc != 2  && argc != 3)
    {
        cout << "Format: " << argv[0] << " train_dirname [model_filename]" << endl;
        cout << "   train_dirname - a path to the directory with TOD-like training base." << endl;
        cout << "   model_filename - an optional parameter, it's a filename that will be used to save trained model." << endl;
        return -1;
    }

    Mat cameraMatrix = defaultCameraMatrix();

    // Load the data
    const string dirname = argv[1];
#if 1
    vector<string> frameIndices;
    readFrameIndices(dirname, frameIndices);
    if(frameIndices.empty())
    {
        cout << "Can not load the data from given directory of the base: " << dirname << endl;
        return -1;
    }

    cout << "Frame indices count " << frameIndices.size() << endl;

    Ptr<ArbitraryCaptureServer> captureServer = new ArbitraryCaptureServer();
    captureServer->set("cameraMatrix", cameraMatrix);
    captureServer->initialize(Size(640,480));
    for(size_t i = 0; i < frameIndices.size(); i++)
    {
        Mat bgrImage, depth;
        loadFrameData(dirname, frameIndices[i], bgrImage, depth);

        captureServer->push(bgrImage, depth, i);

        if(captureServer->get<bool>("isFinalized"))
        {
            cout << "The trajecotry construction is finalized ahead of time.";
            return -1;
        }
    }

    Ptr<TrajectoryFrames> trajectoryFrames = captureServer->finalize();
    captureServer.release();

    if(trajectoryFrames.empty())
        return -1;
#if 0
    trajectoryFrames->save("trajectoryFrames/");
    return 0;
#endif

#else
    Ptr<TrajectoryFrames> trajectoryFrames = new TrajectoryFrames();
    trajectoryFrames->load(dirname);
#endif

    ModelReconstructor reconstructor;
    reconstructor.set("isShowStepResults", true);
    reconstructor.set("maxBAPosesCount", 50);

    Ptr<ObjectModel> model;
    reconstructor.reconstruct(trajectoryFrames, cameraMatrix, model);

    if(argc == 3)
    {
        model->write_ply(argv[2]);
    }

    model->show();

    return 0;
}
예제 #2
0
int main(int argc, char** argv)
{
    if(argc != 3  && argc != 4)
    {
        cout << "Format: " << argv[0] << " train_dirname construct_if_loop_closure_only [model_filename]" << endl;
        cout << "   train_dirname - a path to the directory with TOD-like training base." << endl;
        cout << "   construct_if_loop_closure_only - 0 or 1. If 1 the model reconstruction will be run if the loop closure was detected. If 0,"
                " it will be run in any case (and result can be not very accurate in this case)." << endl;
        cout << "   model_filename - an optional parameter, it's a filename that will be used to save trained model." << endl;
        return -1;
    }

    // Load the data
    const string dirname = argv[1];
    bool constructIfLoopClosureOnly = true;

    if(string(argv[2]) == "0")
        constructIfLoopClosureOnly = false;
    else if(string(argv[2]) != "1")
    {
        cout << "Incorrect second parameter passed to the application." << endl;
        return -1;
    }

    vector<Mat> bgrImages, depthes;
    loadTODLikeBase(dirname, bgrImages, depthes);
    if(bgrImages.empty())
    {
        cout << "Can not load the data from given directory of the base: " << dirname << endl;
        return -1;
    }

    Mat cameraMatrix = defaultCameraMatrix();

    OnlineCaptureServer onlineCaptureServer;
    onlineCaptureServer.set("cameraMatrix", cameraMatrix);
    CV_Assert(!bgrImages[0].empty());
    onlineCaptureServer.initialize(bgrImages[0].size());//, TrajectoryFrames::VALIDFRAME);
    for(size_t i = 0; i < bgrImages.size(); i++)
        onlineCaptureServer.push(bgrImages[i], depthes[i], i);

    Ptr<TrajectoryFrames> trajectoryFrames = onlineCaptureServer.finalize();
    if(constructIfLoopClosureOnly && !onlineCaptureServer.get<bool>("isLoopClosed"))
        return -1;

#if 1
    releaseUnusedFrames(trajectoryFrames, bgrImages, depthes);
#endif

    ModelReconstructor reconstructor;
    reconstructor.set("isShowStepResults", false);

    Ptr<ObjectModel> model;
    reconstructor.reconstruct(trajectoryFrames, cameraMatrix, model);

    if(argc == 4)
        model->write_ply(argv[3]);

    model->show();

    return 0;
}