CoffeeCup3D视觉项目入门

项目问题处理(Cmake接触):

初次接触3D视觉,想先体验下效果,但没找到能简单入手的,在github下看到下面这个项目,打算体验下.
项目链接:https://github.com/windz0629/coffeeCup
这个项目初次测试真的会遇到很多问题,但是官方教程给的也很详细了,部分问题谷歌都能解决,剩下的得靠经验了.这里记录最后几步遇到的问题.

Cmakelist.txt文件内需要改写如下,请根据自己的情况改写,:
基本上会遇到的问题就是 make 会爆出undefined reference to "XX"的问题,部分是因为对应的 .so文件没有链接好.这里需要将对应的 XX_LIBRARIES 与对应的.so文件链接.
格式如:下

set(freenect2_LIBRARIES "/home/meroke/Develop_Tool/libfreenect2/build/lib/libfreenect2.so")

这里需要链接的库只有三个,pcl,freenect2,hdf5.
使用apt install XX的,该库的.so文件一般在/usr/lib/
源码编译安装的,.so文件在/usr/local/lib/或者/usr/local/XX/lib

Cmakelist.txt:

cmake_minimum_required(VERSION 2.8)

project(coffeeCup)
set(CMAKE_CXX_FLAGS "-std=c++11 -fPIC ${CMAKE_CXX_FLAGS}")
#set(CMAKE_CXX_FLAGS "-std=c++14 -fPIC ${CMAKE_CXX_FLAGS}")
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} /opt/freenect2/)
#find_package(PCL 1.8 REQUIRED PATHS /usr/include NO_DEFAULT_PATH)


find_package(PCL 1.12 REQUIRED )
include_directories("/usr/local/include/pcl-1.12")
#link_directories(${PCL_LIBRARY_DIRS})
link_directories("/usr/local/lib/libpcl_common.so" "/usr/local/lib/libpcl_io.so" "/usr/local/lib/libpcl_visualization.so")




find_package(freenect2 REQUIRED)
#find_package(OpenCV REQUIRED PATHS /usr/local NO_DEFAULT_PATH)
find_package(OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS}) 
set( OpenCV_FOUND 1 )


#include_directories(${PCL_INCLUDE_DIRS})
include_directories(${freenect2_INCLUDE_DIR})
link_directories("/opt/freenect2/lib/")
set(freenect2_LIBRARIES "/home/meroke/Develop_Tool/libfreenect2/build/lib/libfreenect2.so")

find_package(HDF5)
set(HDF5_INCLUDE_DIR "/usr/local/hdf5/include/")
set(HDF5_hdf5_LIBRARY "/usr/local/hdf5/lib/libhdf5.so")  # 解决有关hdf5的未引用报错 

if(HDF5_FOUND)

  find_package(FLANN)
  include_directories(${FLANN_INCLUDE_DIRS})
  include_directories(${HDF5_INCLUDE_DIR})

  add_executable(realtime_recognize_demo realtime_recognize_demo.cpp kinect2grabber.cpp)
  target_link_libraries(realtime_recognize_demo ${PCL_LIBRARIES} ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} ${freenect2_LIBRARIES}
    ${FLANN_LIBRARIES} ${HDF5_hdf5_LIBRARY})

  add_executable(get_training_samples get_training_samples.cpp kinect2grabber.cpp)
  target_link_libraries(get_training_samples ${PCL_LIBRARIES} ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} ${freenect2_LIBRARIES})

  add_executable(scene_test scene_test.cpp)
  target_link_libraries(scene_test ${PCL_LIBRARIES} ${Boost_LIBRARIES})

  add_executable(prepare_data prepare_data.cpp)
  target_link_libraries(prepare_data ${PCL_LIBRARIES} ${Boost_LIBRARIES})

  add_executable(build_tree build_tree.cpp)
  target_link_libraries(build_tree ${PCL_LIBRARIES} ${Boost_LIBRARIES}
                                 ${FLANN_LIBRARIES} ${HDF5_hdf5_LIBRARY})

  add_executable(nearest_neighbors nearest_neighbors.cpp)
  target_link_libraries(nearest_neighbors ${PCL_LIBRARIES}
                                        ${Boost_LIBRARIES} ${FLANN_LIBRARIES} ${HDF5_hdf5_LIBRARY}
                                        )
endif(HDF5_FOUND)

hdf5

也出现过未定义引用的情况,一般是cmake文件里路径没写好,加入下列解决.

set(HDF5_INCLUDE_DIR "/usr/local/hdf5/include/")
set(HDF5_hdf5_LIBRARY "/usr/local/hdf5/lib/libhdf5.so") 

pcl

/home/meroke/Python_pro/coffeeCup/realtime_recognize_demo.cpp:498:52: error: no matching function for call to ‘getMinMax3D(const pointCloudPtr&, pointT&, pointT&)’
             pcl::getMinMax3D(clusters_get,minP,maxP);

如上问题一般是头文件未包含,上述getMinMax3D()函数在/usr/local/include/pcl-1.12/pcl/common文件夹内,
头文件添加#include <pcl/common/common.h>即可

freenect2:

cmake .. -DENABLE_CXX11=ON -DCUDA_PROPAGATE_HOST_FLAGS=off -DCMAKE_INSTALL_PREFIX=$HOME/freenect2

其中-DCUDA_PROPAGATE_HOST_FLAGS=off ,这个指令会导致编译出错

libfreenect2/src/frame_listener_impl.cpp:112:25: error: ‘bind’ is not a member of ‘std’
   auto predicate = std::bind(&SyncMultiFrameListenerImpl::hasNewFrame, impl_);

其原因是libfreenect2/src/frame_listener_impl.cpp内缺少 #include <functional> 头文件

C++源码问题:

部分文件会报错:boost::make_shared,将其替换成std:make_shared即可.

最终测试程序显示如下:
请添加图片描述
遗留问题:最开始运行还能识别出一个,隔了一天,居然全都识别不出来了。
打算之后重新制作数据集,再测试一遍.

补充一下关于ply/obj 转 pcd的方法:
例如: 01.PLY 转 output.pcd

pcl_mesh2pcd -leaf_size 0.1 01.PLY output.pcd

如果有其他比较好入门的3D视觉目标检测项目,请大家在评论区分享一下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值