• Chuanbo Weng's avatar
    Correctly enable OpenCL mode in tapi's hog example. · 7452eef6
    Chuanbo Weng authored
    For current OpenCV-CL architecture, if the data buffer
    allocated in UMat are cpu buffer(not ocl buffer) under
    cpu mode, and then pass this UMat to an OpenCL kernel
    as an argument, the OpenCL path will fail and fallback
    to cpu mode. Take HOGDescriptor::oclSvmDetector as an example:
        ocl::setUseOpenCL(false);
        //data allocated in hog.oclSvmDetector will be cpu buffer
        hog.setSVMDetector(HOGDescriptor::getDaimlerPeopleDetector());
        ocl::setUseOpenCL(true);
        //We enabled OpenCL, but hog.oclSvmDetector are cpu buffer,
        //so it will fail in the function ocl_classify_hists
        //when reach to this line
        //idx = k.set(idx, ocl::KernelArg::PtrReadOnly(detector));
        hog.detectMultiScale(img, found, hit_threshold, win_stride,
                Size(0, 0), scale, gr_threshold);
    
    Similar problems heppen on img_aux and img. So we should re-define
    or re-set these UMat when do mode switch (CPU -> OpenCL) in order
    to make their data be allocated by ocl and then OpenCL path will
    succeed.
    Signed-off-by: 's avatarChuanbo Weng <chuanbo.weng@intel.com>
    7452eef6
hog.cpp 10.6 KB