目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库

news2025/4/1 13:28:36

环境情况

  • ubuntu 18.04 → 20.04(最终)
    • 安装Ubuntu1804虚拟机系统 + Anaconda:可参考我的另一篇文章
  • Python 3.6.13 → 3.8(最终)
  • Anaconda3-2021.05

目标识别:YOLOv5相关

  • 1、安装git
sudo apt install git
  • 2、使用以下代码来下载源码并直接安装:
git clone https://github.com/ultralytics/yolov5
  • 3、配置YOLO v5的环境
cd yolov5
pip install -r requirements.txt

问题及解决

  • 1、fatal: unable to access

    • 错误显示:
    (base) wjq@wjqUbuntu1804:~$ git clone https://github.com/ultralytics/yolov5
    正克隆到 'yolov5'...
    fatal: unable to access 'https://github.com/ultralytics/yolov5/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
    
    • 解决方式1:
      • ①更新 Git:
        sudo apt update
        sudo apt upgrade git
        
      • ②更新 CA 证书:
        sudo apt install --reinstall ca-certificates
        
    • 解决方式2:把命令行里的http改为git重新执行
  • 2、问题443

    • 解决途径的参考:https://blog.csdn.net/liubang00001/article/details/141334472
    • 随意打开一个终端,输入一下代码安装软件包:
      • 出现[y/n],均写y
        sudo apt update
        sudo apt install openssh-server
        
    • 验证:sudo systemctl status ssh,接着输入q可以返回命令行,于是可以重新
  • 3、版本问题

    • 问题:安装requirements.txt时很多版本找不到。
    • 解决:可能是anaconda默认下载的Python版本太低,我碰上该问题时用Python3.6无法下载,在虚拟环境搭建Python3.8则可以使用。

创建虚拟环境

  • 0、conda很慢时,可以换镜像源
    • 通过命令行直接添加:
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
    conda config --set channel_priority strict
    
  • 1、尝试创建虚拟环境:
    conda create -n py36 python=3.6.13
    
  • 2、如果还是失败,可以尝试指定国内镜像加速
    conda create -n py36 python=3.6.13 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    
  • 3、成功时
    在这里插入图片描述
  • 4、激活环境:conda activate py36
  • 5、返回到 base 环境:conda activate base
  • 6、查看当前的活跃环境:conda info --envs
  • 7、列出所有的 Conda 环境,当前激活的环境会有一个星号(*)标记。:
    # conda environments:
    #
    base                  *  /home/user/anaconda3
    py36                     /home/user/anaconda3/envs/py36
    

安装 PyTorch

  • Python3.6对应下载:pip install torch==1.10.0+cpu torchvision==0.11.1+cpu torchaudio==0.10.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
  • 检查是否成功安装:pip list | grep torch
    在这里插入图片描述

VMware虚拟机中的Ubuntu识别不到摄像头

  • 在Windows上识别得到外接摄像头,但ubuntu上识别不到
    • ①关闭虚拟机,在Windows上启动该服务 在这里插入图片描述

      • 此时在:虚拟机>可移动设备可见这些选项了
      • STEREOLABS ZED-2:这是一款完整的硬件设备,具备双目摄像头、深度传感器、IMU(惯性测量单元)、RGB 摄像头等,能够直接用于捕捉深度图像、视频流、环境映射、对象跟踪等。
      • STEREOLABS ZED-2 HID INTERFACE:这是一个接口模式,主要用于支持 ZED-2 摄像头的通信。通过 HID 接口,摄像头和计算机之间可以通过标准 USB 连接进行数据传输,但 HID 本身并不具备图像采集和处理功能,它仅是作为摄像头与计算机的通讯桥梁。
        在这里插入图片描述
    • ②关闭虚拟机,打开“首选项”
      在这里插入图片描述
      在这里插入图片描述

    • 查看清楚USB接口对应的都是什么设备

      ls -l /dev/video*
      lsusb
      

      在这里插入图片描述

    • 如果以上选中后仍无法识别,可按序完成如下参考方法:

      • 识别不到1
      • 识别不到2
      • 识别不到3
    • 最后连接上摄像头的效果(本处采用的是双目相机)

      • 安装chesse:sudo apt-get install cheese
      • 开启ubuntu的茄子相机:cheese
        在这里插入图片描述

安装yolov5期间的问题总结

  • 问题1:识别不到摄像头(解决如上)

  • 问题2:库等不匹配相关问题

    • 不匹配1:yolov5 要求的是 torchvision 0.9.1

      • 解决:
        # S1.卸载当前torchvision 版本
        pip uninstall torchvision
        # S2.安装正确版本的 torchvision
        pip install torchvision==0.9.1
        # S3.确认 torch 版本是否匹配
        python -c "import torch; print(torch.__version__)"
        # S4.如果当前版本与 YOLOv5 要求的不匹配,安装兼容版本
        pip install torch==1.8.1
        # S5.检查依赖是否正确
        pip install -r requirements.txt
        
    • 不匹配2:YOLOv5 需要版本 >=2.2 的 tensorboard

      • 解决:
        # S1.安装或更新 tensorboard 到合适的版本:
        pip install tensorboard>=2.2
        #	如果你已经安装了 tensorboard,可以通过以下命令检查版本:
        pip show tensorboard
        # S2.确保安装所有依赖
        pip install -r requirements.txt
        # S3.再次运行
        python detect.py
        
    • 不匹配3:opencv-python版本不匹配

      • YOLOv5 要求的是 opencv-python==4.5.2.54。
      • 解决
        # S1.卸载当前的 opencv-python 版本
        pip uninstall opencv-python
        # S2.安装所需版本
        pip install opencv-python==4.5.2.54
        # S3.再次运行
        python detect.py
        
    • 插曲:不匹配1-3都是由于虚拟环境切换错了,所以导致库匹配出了很多问题(吃一堑:虚拟环境名要区别好,运行前要多留心虚拟环境对不对)

  • 问题3:yolov5中模型不够新。

    • 由于py38对应的是改动过的yolov5_stereo_Pro,所以包中的模型yolov5s有点问题。在这里插入图片描述
    • 解决:重新下载官方权重
      wget https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt
      
  • 问题4:输入图片尺寸不匹配代码

    • 解决:
      • 使用 v4l2-ctl 命令查看虚拟机当前连接的摄像头所拍摄图片的分辨率是多少
        # 安装 v4l-utils(如果未安装)
        sudo apt update
        sudo apt install v4l-utils
        # 查看连接的摄像头设备:
        v4l2-ctl --list-devices
        	# 输出中如“/dev/video0”,即是你的摄像头设备
        # 查看当前摄像头分辨率:
        v4l2-ctl --device=/dev/video0 --get-fmt-video
        # 列出当前摄像头所有支持的分辨率
        v4l2-ctl --device=/dev/video0 --list-formats-ext
        
      • (#暂缓,先换用笔记本自带摄像头测试yolov5的安装情况,后续再进一步修改匹配ZED2双目相机的代码)
  • 问题5:模型文件(yolov5s.pt)的结构和代码不匹配

    • 主要是 缺少 SPPF 模块的定义,SPPF是YOLOv5 v6.0 及之后版本新增的模块,用于提高检测速度和精度。原先代码可能是基于旧版本 YOLOv5,而下载的权重文件是基于新版本模型结构。
      在这里插入图片描述
    • 解决:由于我不想更新代码(为了让yolov5匹配后续结合双目相机),故尝试使用旧版本的权重(不包含 SPPF 的版本)
      # 回退模型权重
      wget https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt -O yolov5s.pt
      # 再运行
      python detect.py --source 0
      
  • 问题6:摄像头又连不上了

    • 原因:采用ctrl+z退出摄像头,导致进程被挂起,使得原先分配摄像头的source 0被挂起,摄像头因此被轮分配给source 1了。

    • 解决

      # 查看后台挂起的任务
      jobs
      	# 输出类似:
      	# [1]+  Stopped                 python detect.py --source 0
      # 恢复到前台(%1 对应任务编号)
      fg %1
      # 如果不想恢复,直接终止挂起进程
      kill %1
      
    • 把两次ctrl+z挂起的进程鲨掉之后,重新在可移动设备断开后再连接,即可重新给摄像头分配source 0了。 在这里插入图片描述

    • 恢复后,按 Ctrl + C退出,不要用ctrl+z 退出了

  • 摄像头匹配+yolov5安装成功后:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • yolov5改v8


双目测距相关

点云图:采用pcl生成

  • 安装cpp_pcl库的参考
    • 参考1
    • 参考2:我是20.04的ubuntu也可用
  • 安装Python_pcl的参考
    • 参考1
    • 参考2
    • 参考3:最后通过这个解决,注意该文章里提供法2Anaconda的路径是base下的,记得要切换成自己的虚拟环境
      • 如我的虚拟环境是yl8,则在anaconda中的envs文件夹下找到虚拟环境,法2最终改成mv pcl /home/aliez/anaconda3/envs/yl8/lib/python3.8/site-packages,另一句同理
  • 安装pcl的过程中,遇到的其他问题
    • 虚拟机磁盘不够了,扩展磁盘+重新划分内存
      • 参考1:主要参考了克隆部分
      • 参考2:完成参考1的克隆部分后,其余跟的这个
    • 磁盘扩容后,虚拟机重启进不去:先Windows主机重启后,再参考如下两个文章处理
      • 参考1
      • 参考2:最后靠该文章解决问题,该操作"try ubuntu"后会暂时出现评论区提到的"文件都消失的情况",但按操作完整处理后自然会恢复出之前的系统文件。

双目相机:ZED2相机

  • 将ZED2保存的.svo视频转.avi /.mp4
  • 相机的识别问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI API - Agent

文章目录 代理概述模型工具知识与记忆防护栏编排入门 语音代理选择正确的架构语音到语音(多模态)架构链式架构 构建语音代理使用语音到语音架构进行实时处理将音频输入链接到文本处理 → 音频输出 代理 了解如何使用 OpenAI API 构建代理。 https://pl…

Strawberry perl的下载,查询版本号,配置Path环境变量,查找perl解释器的位置

Strawberry Perl 是一个适用于 Microsoft Windows 的 Perl 环境,包含运行和开发 Perl 应用程序所需的一切。它旨在尽可能接近 UNIX 系统上的 Perl 环境。 下载 官网: Strawberry Perl for Windows - Releases 各个版本: Strawberry Perl for Windows - Releases …

MySQL的基础语法2(函数-字符串函数、数值函数、日期函数和流程函数 )

目录 一、字符串函数 1.常见字符串函数 ​编辑 2.字符串函数的基本使用 3.字符串函数的数据库案例演示 二、数值函数 1.常见数值函数(如下): 2.数值函数的基本使用 3.数值函数的数据库案例演示 三、日期函数 1.常见的日期函数 2.日…

5G_WiFi_CE_杂散测试

目录 一、规范要求 1、法规目录: 2、限值: (1)带外发射杂散 (2)带内发射杂散 (3)接收杂散 二、测试方法 1、带外发射杂散 (1)测试条件 &#xff08…

大数据Spark(五十五):Spark框架及特点

文章目录 Spark框架及特点 一、Spark框架介绍 二、Spark计算框架具备以下特点 Spark框架及特点 一、Spark框架介绍 Apache Spark 是一个专为大规模数据处理而设计的快速、通用的计算引擎。最初由加州大学伯克利分校的 AMP 实验室(Algorithms, Machines, and Pe…

UI产品经理基础(六):如何解决用户的质疑?

在需求调查中遇到用户质疑“不专业”或“不了解需求”,本质上是用户对产品经理的信任缺失或沟通鸿沟导致的。要化解这种质疑,需从专业能力展示、沟通方式优化、用户参与感提升三个维度切入,结合具体场景采取针对性策略。以下是系统化的解决方…

【大数据技术】大数据技术概念及概述

1. 大数据概念 数据 是实时或观察的结果是对客观事务的逻辑归纳是用于表示客观事物的未经加工的原始素材 数据的产生 对客观事务的计量和记录尝试的数据 单位换算1 byte8 bit1 k1024 byte1 mb1024 k1 g1024 m1 t1024 g1 p1024 t1 e1024 p1 z1024 e1 y1024 z1 b1024 y1 n10…

Python库()

1.概念 Matplotlib 库:是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂 Matplotlib 图形组成: Figure:指整个图形&#xf…

AI知识补全(八):多模态大模型是什么?

名人说:人生如逆旅,我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:AI知识补全(七):AI Agent 智能…

Docker-MySQL安装-命令解读-常见命令-数据卷挂载-本地目录挂载-自定义镜像-网络-前端部署-DockerCompose

目录 Docker: 安装MySQL: 镜像容器: 镜像仓库: ​编辑命令解读: 镜像命名规范: docker run中常见参数: Docker常见命令: ​编辑数据卷: ​编辑数据卷-操作命令&…

Docker 安装部署Harbor 私有仓库

Docker 安装部署Harbor 私有仓库 系统环境:redhat x86_64 一、首先部署docker 环境 定制软件源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum install -y yum-utils device-mapper-persistent-data lvm2…

StarRocks 存算分离在京东物流的落地实践

康琪:京东物流高级技术专家、StarRocks & Apache Flink Contributor 导读:本文整理自京东物流高级技术专家在 StarRocks 年度峰会上的分享,UData 平台从存算一体到存算分离架构演进后,查询性能得到提升。Cache hit 时&#xf…

英伟达GB300新宠:新型LPDDR5X SOCAMM内存

随着人工智能(AI)、机器学习(ML)和高性能计算(HPC)应用的快速发展,对于高效能、大容量且低延迟内存的需求日益增长。NVIDIA在其GB系列GPU中引入了不同的内存模块设计,以满足这些严格…

具身智能 - Diffusion Policy:技术解析与应用实践

具身智能之 Diffusion Policy:技术解析与应用实践 一、Diffusion Policy 的核心概念 Diffusion Policy 是一种基于扩散模型(Diffusion Models)的决策生成框架,专为具身智能(Embodied Intelligence)设计。其核心思想是通过逐步去噪的过程,在复杂环境中生成鲁棒的动作序列…

[C++] 智能指针 进阶

标题:[C] 智能指针 进阶 水墨不写bug 在很久之前我们探讨了智能指针的浅显认识,接下来会更加深入,从源码角度认识智能指针,从而了解智能指针的设计原理,并应用到以后的工作项目中。 本文将会按照C智能指针的发展历史&…

kubernetes》》k8s》》 kubeadm、kubectl、kubelet

kubeadm 、kubectl 、kubelet kubeadm、kubectl和kubelet是Kubernetes中不可或缺的三个组件。kubeadm负责集群的快速构建和初始化,为后续的容器部署和管理提供基础;kubectl作为命令行工具,提供了与Kubernetes集群交互的便捷方式;而…

C++中的new、malloc、realloc、calloc——特点?函数原型?释放方式?区别?校招面试常问内容?

作者:求一个demo 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 内容通俗易懂,没有废话,文章最后是面试常问内容(建议通过标题目录学习) 废话不多…

27_promise

插入一下前端助手测试&#xff0c;顺手可以用来做安全 promise promise 是一个es6新增的语法 汉语&#xff1a;承诺的意思 作用:是专门用来解决回调地狱!!!! 什么是回调函数&#xff1f; <script>// 回调函数 callback回调// 就是把函数A当作参数传递到函数B中// 在函…

leetcode刷题日记——跳跃游戏 II

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; 题目要求在一个一定能达到数组末尾的跳跃数组中(见55题 跳跃游戏)&#xff0c;找出能够跳到末尾的最小次数要求次数最少&#xff0c;那肯定是选取能选步数中最大的数。也就是在当前能够达到的距离中&#xff0c;选择能够达到的…