Skip to content

关于实时扫描重建的一些问题请教 #33

Description

@shanwenbin

关于实时扫描重建的一些问题请教

博主您好!在测试完单目及双目的标定及单次重建流程后,我们选择尝试高速的实时重建(单目结构光方式),但都失败了。在这个过程中有以下疑问,想要向您请教:

我们的环境为:

  • VS2022+OpenCV4.8+CUDA12.0
  • 显卡为1650Ti
  • 华睿相机+4710光机(白光)
  • OpenCV勾选CUDA之后进行了编译,且编译没有报错,如下所示:

d9edd1d444b3c9ff88e885f8c247dbe

  • 问题一:没有本地编译CUDA生成的exe程序是否支持实时重建呢?
    我们使用您发布的程序将光机的投图周期刻意降低,但是实时重建时程序闪退。

  • 问题二:随后,我们使用编译CUDA的exe程序尝试实时重建也失败了。在第一帧点云展示后,程序闪退。
    我们对持续扫描函数进行了一些修改增加了log的输出,发现第一帧扫描完成,进行第二组图片的回调、取图的时候,程序退出。我们判断是buffer溢出导致进程卡死退出的,不知道是不是正确的推测呢?如果不是该处存在的问题,还请您帮忙进行分析推断问题所在,感谢!
    9649717b8d6caf445515d683081ace5

`bool MonocularCamera::continuesCapture(SafeQueue &frameDataQueue) {

if (!isCaptureStop_.load(std::memory_order_acquire)) {
    return true;
}

if (imgCreateThread_.joinable()) {
    imgCreateThread_.join();
}

if (frameDataCreateThread_.joinable()) {
    frameDataCreateThread_.join();
}

isCaptureStop_.store(false, std::memory_order_release);

imgCreateThread_ = std::thread([&] {
    const device::CameraFactory::CameraManufactor manufator =
        stringProperties_["2D Camera Manufactor"] == "Huaray"
            ? device::CameraFactory::Huaray
            : device::CameraFactory::Halcon;
    auto pLeftCamera = cameraFactory_.getCamera(
        stringProperties_["Left Camera Name"], manufator);

    device::Camera *pColorCamera = nullptr;
    if (stringProperties_["Color Camera Name"] != "") {
        pColorCamera = cameraFactory_.getCamera(
            stringProperties_["Color Camera Name"], manufator);
    }

    const int imgSizeWaitFor = numbericalProperties_["Total Fringes"];

    while (!isCaptureStop_.load(std::memory_order_acquire)) {
        if (pLeftCamera->getImgs().size() >= imgSizeWaitFor &&
            (pColorCamera ? pColorCamera->getImgs().size() >= imgSizeWaitFor
                          : true)) {
            std::vector<std::vector<cv::Mat>> imgs(pColorCamera ? 2 : 1);
            int index = 0;
            while (index != imgSizeWaitFor) {
                imgs[0].emplace_back(pLeftCamera->popImg());
                if (pColorCamera) {
                    imgs[1].emplace_back(pColorCamera->popImg());
                }
                ++index;

                //add by Jia
                std::cout << "imgCreateThread : pLeftCamera->getImgs().size() = " << pLeftCamera->getImgs().size() << std::endl;
            }

            std::cout << "imgCreateThread : Before : imgsCreated_.size() = " << imgsCreated_.size() << std::endl;

            if (imgsCreated_.size() > 2) {
                continue;
            }

            imgsCreated_.push(imgs);

            std::cout << "imgCreateThread : After : imgsCreated_.size() = " << imgsCreated_.size() << std::endl;
        }
    }
});

frameDataCreateThread_ = std::thread([&] {
    while (!isCaptureStop_.load(std::memory_order_acquire)) {
        if (imgsCreated_.empty()) {
            std::this_thread::sleep_for(std::chrono::milliseconds(5));
            continue;
        }

        std::cout << "frameDataCreateThread : Before : imgsCreated_.size() = " << imgsCreated_.size() << std::endl;

        std::vector<std::vector<cv::Mat>> imgs;
        imgsCreated_.move_pop(imgs);

        std::cout << "frameDataCreateThread : After : imgsCreated_.size() = " << imgsCreated_.size() << std::endl;
        std::cout << "frameDataCreateThread : After : imgs.size() = " << imgs.size() << std::endl;

        if (stringProperties_["Color Camera Name"] != "") {
            for (int i = 0; i < imgs.size(); ++i) {
                cv::cvtColor(imgs[i], imgs[i], cv::COLOR_BayerBG2BGR);
            }
        }

        FrameData curFrameData;
        decode(imgs, curFrameData);
        //frameDataQueue.push(curFrameData);
    }
});

projectorFactory_.getProjector(stringProperties_["DLP Evm"])->project(true);
return true;

}`

  • 问题三:我们如果想要跑通实时重建的流程的话,需要注意哪些细节呢?比如编解码的方式、pattern的数量、硬件设置(相机及光机的周期设置)等一些方面?

期待您的回复,感谢!!!!!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

help wantedExtra attention is needed

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions