陈春生7-9月工作总结

了解深度相机

  1. 图漾DM460标称精度0.5-2%.在会议桌3.5m实测精度2%,5m处精度约2.5%。PS:精度=|相机计算深度-实际深度|/实际深度
  2. 深度相机画面抖动原因:物体表面或光滑时,立体匹配缺乏特征,匹配误差增大,(zed)提高分辨力可改善
  3. 市面主流深度相机产品对比: | 产品 | 测距范围 | 精度 | 分辨率 | 备注 | | ——– | ——– | ———— | —— | —————————- | | 图漾 | 0.5-6m | 0.5-2.5% | 480p | | 光铂 | 0.5-5m | 0.5-2% | 480p | | 微软 | 0.5-8m | 0.5-2% | 1080p | SDK完善,tof技术,帧率视场角调 | | zed | 0.5-20m | 5m-1%\12-m2% | 2K | GPU>3.0,RGB | | smartTOF | 0.5-8M | 4m-1% | 480p | 头顶客流检测 |
  4. 深度相机优缺点:

    优点:三维信息,距离信息;缺点:3-5m范围内,业界普遍精度为1%,双目技术相机精度略差于TOF技术,缺乏合适的三维场景分析方法(主要瓶颈)。空间遮挡问题

基于深度图的分析方法

深度图预处理

  1. 空间转换与切割:
    • 软件环境:matlab-R2016a,jsonlab
    • 程序:文末附录链接
    • 使用方法:
    read.m    --读取深度图,转换为三维云图
    cut.m     --切割凳子空间
    tupian.m  --分离xz,yz平面
    img.m     --滤波,轮廓提取
    main.m    --
    /wholespace   --完整云图
    /cutspace     --分割空间云图
    /cut_img      --xz,yz平面图
    /img_lk       --xz,yz轮廓图

轮廓分析

  • 使用方法

    outline.m    --匹配圆弧
    核心函数:detectSURFFeatures(I,name,value)
    参数NumOctaves表示高斯滤波器序列,默认3即可
    MetricThreshold表示blob强度,越小检测的圆弧弧度越小,建议值100
  • 结果:

lk lk

数量分析

统计云点数量进行分析,云图中数据量众多,可考虑将云图数据取整再山区重复行

    ymap=round(ymap);%取整数
    ymap=unique(ymap,'rows');%去掉重复的行

SVM分类法

  1. matlab-svmlib方法
  2. 使用方法

    chuli.m   --读取图片,得到train,test的标签及数据(样本数*单样本数据的mat矩阵)
    to1       --归一化至1
    ssvm      --SVM主程序,参数说明见链接
         建议参数:-s 0 -t 2 -c 0.5 -g 2.8 
         t表示核函数,默认使用RBF核t=2
         c表示惩罚函数,越小收敛慢,准确度略有提高
         g表示γ,建议值1-5
    SVMcgForClass函数:可自动寻找最优参数,安装libsvm-mat(/toolbox)

    注意:训练集测试集的数据矩阵必须对齐,必要时刻数据补0.归一化效果不明显,但博客上说有好处,我这个代码没体现出来。

    博客园-libsvm说明https://www.cnblogs.com/jiahuiyu/p/5415936.html
  3. 结果:

    测试集120张图,准确率约87-92%;第一排无遮挡准确率96%,第二排准确率89%,第三排准确率72%;

结果分析:

在近期工作中,后排遮挡严重的情况下,没有有效的分析方法取处理三维场景,轮廓分析,SVM分类时,采用的是投影xz,yz平面方法,众多信息丢失,使用原DM460没有RGB颜色信息。

人脸验证

TL法(google-FACENET)

girhub地址:https://github.com/ageitgey/face_recognition 1. 标称准确率:98.56 2. 软件环境: python win10 tensorflow==1.7 scipy scikit-learn opencv-python h5py matplotlib Pillow requests psutil 3. 使用方法 ```python 在项目主页下载预训练模型,模型位于/align python cpmpare.py 图片1,图片2 –计算TL距离 python -u classifier.py –检测人脸 图片数据位于/image

若需要自己训练,可下载LFW数据集 python -u align/align_dataset_mtcnn.py –数据集人脸对齐 python -u train_tripletloss.py –训练模型 ```

MTCNN法(face-recognition)

github地址:https://github.com/davidsandberg/facenet 1. 标称准确率:99.06 2. 软件环境: python win10 python==3.6.4 numpy==1.14.2 opencv-python==3.4.1 face-recognition==1.2.2 dlib=19.8.1 3. 使用方法: python 图片数据库:/img/face_recognition python -u faceRecognition.py

结果:

两总方法结果基本一致,无明显差异 人脸识别

双目视觉成像

说明: 1. 若测量范围为3m内,则尽量在3m附近拍照标定。 2. 相机相对位置不变,必须定焦镜头。 3. 双目间距影响视距,3m-6cm,5m-8cm,10m-12cm。间距过大会导致可视区域缩小(若一目不可见,则该点结果=0) 4. 增大分辨率可提高精度,具体原理见CSDN-双目成像原理计算复杂度:n^3log2(n)+d*n^2。分辨率提高后,对算力迅速增大,目前720p 5. 物体表面光滑或反光透明时,特征不明显,匹配误差大,因此画面抖动

ZED相机demo

PS:国庆上不了stereo网站,不记得具体环境搭建了,待定 链接在此 * 软件环境(很麻烦,还要编译)

CUDA==
tensorflow==
zed-python-api(官网下载)
zed-tensorflow

CUDA安装详见CSDN-GPU-tensorflow安装特别特别注意版本一致:tensorflow==1.14 python==3.7.3 CUDA=10.0.130 cuDNN==7.4.2 (具体可查官网显卡对应版本,近期连NVdia官网都上不了)

  • 使用方法
cd zed-tensorflow  --切换至目标文件夹
python -u object_detection_zed.py
备注:
line263 indices = np.argwhere(classes == 1) 参数classes表示类别,google目标检测的模型针对多种物体,==1 表示people
  • 说明:zed相机的优势在于可视距离远(标称0.5-20m),带RGB颜色信息,在2k模式下桌面抖动较小,我实测下,3m的精度0.8%,5m精度1.0%。目前算是业界水平比较高的相机。其官网文档提供的API,SDK仅提供基础访问功能。目标检测的例子中,用的是google的object-detection模型,其基于是2维图片分析。在代码line254 sess.run(boxes, scores, classes, num_detections])函数中,书如参数仅左目2维图片,仅在检测到人后,调用深度信息,显示在界面。我询问工作人员,回复是:如果你需要处理自己的问题,需要自己搭建处理3维信息的分析方法。

  • 结果: zed目标检测

标定

  1. 张正定法 PS:国庆期间无法访问外网(平时可以访问) 具体日后细说[链接在此]http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example5.html
  • 结果

  1. stereo camera calibrator工具
    • 使用方法(matlab-R2016a)
    1. 命令行stereoCameraCalibrator
    2. 勾选‘skew''Tangential Distortion''3 Coefficients'
     去掉'2 Coefficients'选项
    3. 点击'add image'
    4. 点击'Calibrate'
    5. 查看下方误差窗口,设定上限,删去误差大的图片
    6. 导出'Export camera parameters'
    7. 命令行输入save('mystereoParams.mat','stereoParams')
    • 结果
  2. 方法对比:精度上:张法可自对标点微调,设置con参数。strreo操作简单,精度略低于张法

立体匹配成像

  1. 目前精度:1m范围内4%,非常不理想
  2. SGM算法:SGM算法依旧采用全局框架,但是在计算能量函数最小化的步骤时使用高效率的一维路径聚合方法来代替全局算法中的二维最小化算法,使用一维最优来近似二维最优,得到的视差图在效果上和全局算法没有太大的差别,但是算法效率却有非常大的提升
  3. 使用方法

    run ZED.m --
    备注:rectifyStereoImages函数此核心函数
  4. 踩过的坑,rectifyStereoImages函数的一定要选fullview模式
  5. 提高精度的方法还早找

资源文件压缩包

网盘链接 1. depth:深度图预处理,轮廓分析 2. SVM:svm法对xz,yz平面的人数分析 3. faceai:MTCNN法人脸检测 4. facenet:TL法人脸检测 5. bino:张正定法双目成像 6. caremae:matlab自带工具箱双目成像 7. zed-demo:ZED目标检测(需要另外安装zes-api) 8. scam-sdk:自行购买的双目摄像头演示程序,captuer截取画面 9. /jsonlab,/libsvm json转mat,svm工具 10. /bookmark:实习中保存的有用的书签