ZED双目相机环境配置

官方资料:stereolabs/zed-python-api: Python API for the ZED SDK (github.com)

1,配置ZED相机环境

1.安装CUDA

查看电脑是否安装CUDA,安装过程可参考以下博文:

如何选择匹配的CUDA版本:https://blog.csdn.net/iamqianrenzhan/article/details/89343601

cuda安装教程+cudnn安装教程:https://blog.csdn.net/sinat_23619409/article/details/84202651

win10下CUDA和CUDNN的安装:https://blog.csdn.net/u010618587/article/details/82940528

2.安装ZED-SDK

下载与电脑操作系统以及CUDA版本对应的SDK,官方下载链接如下:

ZED SDK 3.8 - Download | Stereolabs

选择 <= 自己电脑CUDA版本的SDK

安装SDK成功后,我们进入ZED SDK文件夹中的tools子文件夹,运行ZED Explorer.exe 以及 ZED Depth Viewer.exe,查看ZED相机是否能正常启用工作。

报错:缺少dll,去bin文件夹下,找到dll,复制到tools下

3.安装ZED-Python-API(pyzed)

默认电脑已配置好Python-OpenCV环境,

pip install cythonpip install numpypip install opencv-python pip install pyopengl

ZED SDK 安装文件夹中有一个 Python 脚本(get_python_api.py),可以自动检测操作系统、CUDA 和 Python 版本并下载相应的预编译 Python API 包(pyzed)。

首先在ZED SDK文件夹中,找到get_python_api.py脚本,并获取其路径信息,最后我是在Anaconda Prompt运行该脚本。在下图中的运行结果可以看到检测出操作系统、CUDA版本等信息,并自动下载与其对应的ZED-Python-API 包。

如果遇到ZED-Python-API 包下载不下来,或者报错的情况。我们可以复制运行结果中的下载链接(如:上图中对应的API下载链接是 https://download.stereolabs.com/zedsdk/4.1/whl/win_amd64/pyzed-4.1-cp38-cp38-win_amd64.whl),在浏览器上直接访问,即可下载。

下载得到ZED-Python-API 包,也就是pyzed的.whl文件,将pyzed.whl文件放入ZED SDK 文件夹。

然后在Anaconda Prompt 输入 pip install 命令,对pyzed.whl文件进行安装,这样我们就完成了对ZED相机的Win11-Python开发环境配置。

进入bin文件夹下,将所有dll文件复制到E:\Anaconda3\envs\zed\Lib\site-packages\pyzed下

4、Hello ZED(Python)

配置好 ZED 的 Python 开发环境后,我们可以进行一个简单的教程案例来实现调用ZED的Python API。

在本例中,我们简单地检索ZED相机的序列号:打开 ZED相机,然后打印其序列号,然后关闭相机。

import pyzed.sl as sldef main():# Create a Camera objectzed = sl.Camera()# Create a InitParameters object and set configuration parametersinit_params = sl.InitParameters()init_params.sdk_verbose = False# Open the cameraerr = zed.open(init_params)if err != sl.ERROR_CODE.SUCCESS:exit(1)# Get camera information (ZED serial number)zed_serial = zed.get_camera_information().serial_numberprint("Hello! This is my serial number: {0}".format(zed_serial))# Close the camerazed.close()if __name__ == "__main__":main()

5,image_capture.py

import pyzed.sl as sl
import cv2
import os
import numpy as np
# 2. 捕获图像
def image_capture():zed = sl.Camera()# 设置相机的分辨率1080和采集帧率30fpsinit_params = sl.InitParameters()init_params.camera_resolution = sl.RESOLUTION.HD1080  # Use HD1080 video modeinit_params.camera_fps = 30  # fps可选:15、30、60、100err = zed.open(init_params)  # 根据自定义参数打开相机if err != sl.ERROR_CODE.SUCCESS:exit(1)runtime_parameters = sl.RuntimeParameters()  # 设置相机获取参数runtime_parameters.sensing_mode = sl.SENSING_MODE.STANDARDi = 0# 创建sl.Mat对象来存储图像(容器),Mat类可以处理1到4个通道的多种矩阵格式(定义储存图象的类型)image = sl.Mat()  # 图像disparity = sl.Mat()  # 视差值dep = sl.Mat()  # 深度图depth = sl.Mat()  # 深度值point_cloud = sl.Mat()  # 点云数据# 获取分辨率resolution = zed.get_camera_information().camera_resolutionw, h = resolution.width , resolution.heightx,y = int(w/2),int(h/2)  # 中心点while True:# 获取最新的图像,修正它们,并基于提供的RuntimeParameters(深度,点云,跟踪等)计算测量值。if zed.grab(runtime_parameters) == sl.ERROR_CODE.SUCCESS:  # 相机成功获取图象# 获取图像timestamp = zed.get_timestamp(sl.TIME_REFERENCE.CURRENT)  # 获取图像被捕获时的时间点zed.retrieve_image(image, sl.VIEW.LEFT)  # image:容器,sl.VIEW.LEFT:内容img = image.get_data()  # 转换成图像数组,便于后续的显示或者储存# 获取视差值zed.retrieve_measure(disparity,sl.MEASURE.DISPARITY,sl.MEM.CPU)dis_map = disparity.get_data()# 获取深度zed.retrieve_measure(depth,sl.MEASURE.DEPTH,sl.MEM.CPU)  # 深度值zed.retrieve_image(dep,sl.VIEW.DEPTH)  # 深度图depth_map = depth.get_data()dep_map = dep.get_data()# 获取点云zed.retrieve_measure(point_cloud,sl.MEASURE.XYZBGRA,sl.MEM.CPU)point_map = point_cloud.get_data()print('时间点',timestamp.get_seconds(),'中心点视差值',dis_map[x,y],'中心点深度值',depth_map[x,y],'中心点云数据',point_map[x,y])# 利用cv2.imshow显示视图,并对想要的视图进行保存view = np.concatenate((cv2.resize(img,(640,360)),cv2.resize(dep_map,(640,360))),axis=1)cv2.imshow("View", view)key = cv2.waitKey(1)if key & 0xFF == 27:  # esc退出breakif key & 0xFF == ord('s'):  # 图像保存savePath = os.path.join("./images", "V{:0>3d}.png".format(i))  # 注意根目录是否存在"./images"文件夹cv2.imwrite(savePath, view)i = i + 1zed.close()image_capture()

代码中涉及的可选参数(点击关键字可进入官方文档链接)

分辨率选择

可捕获的视图

计算获得的视图

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式物联网平台特点

随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;我们正步入一个万物互联的新时代。在这个时代&#xff0c;设备、数据和服务的无缝集成是实现智能化的关键。分布式物联网平台作为这一进程的核心&#xff0c;正在成为构建智能世界的基石。 一、分布式物联网平…

本学期嵌入式期末考试的综合项目,我是这么出题的

时间过得真快&#xff0c;临近期末&#xff0c;又到了老师出卷的时候。作为《嵌入式开发及应用》这门课的主讲教师&#xff0c;今年给学生出的题目有一点点难度&#xff0c;最后的综合项目要求如下所示&#xff0c;各位学生朋友和教师同行可以评论一下难度如何&#xff0c;单片…

【每日刷题】Day66

【每日刷题】Day66 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 2. 牛牛的递增之旅_牛客题霸_牛客网 (nowcoder.com)…

nginx ws长连接配置

nginx ws长连接配置 http根节点下配上 map $http_upgrade $connection_upgrade {default upgrade; close;}如下&#xff1a; server服务节点下&#xff0c;后端接口的代理配置 proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connec…

将Vite添加到您现有的Web应用程序

Vite&#xff08;发音为“veet”&#xff09;是一个新的JavaScript绑定器。它包括电池&#xff0c;几乎不需要任何配置即可使用&#xff0c;并包括大量配置选项。哦——而且速度很快。速度快得令人难以置信。 本文将介绍将现有项目转换为Vite的过程。我们将介绍别名、填充webp…

[C++ STL] vector 详解

标题&#xff1a;[C STL] vector 详解 水墨不写bug 目录 一、背景 二、vector简介 三、vector的接口介绍 &#xff08;1&#xff09;默认成员函数接口 i&#xff0c;构造函数&#xff08;constructor&#xff09; ii&#xff0c;析构函数&#xff08;destructor&#xff0…

C++ UML建模

starUML UML图转C代码 数据流图 E-R图 流程图 整体架构图 ORM关系图 参考 app.asar附件资源可免激活 JHBlog/设计模式/设计模式/1、StarUML使用简明教程.md at master SunshineBrother/JHBlog GitHub C程序员UML实务手册代码 - 开发实例、源码下载 - 好例子网 GitHub -…

Armbian OS(基于ubuntu24) 源码编译mysql 5.7

最近弄了个S905X3的盒子刷完Armbian OS &#xff08;基于ubuntu24&#xff09;&#xff0c;开始折腾Arm64之旅。第一站就遇到了MySQL的问题&#xff0c;由于MySQL没有提供Arm64版本&#xff0c;又不想塞Docker镜像&#xff0c;因此选择源码来编译MySQL5.7。下面记录详细过程和遇…

5.Sentinel入门与使用

5.Sentinel入门与使用 1.什么是 Sentinel?Sentinel 主要有以下几个功能: 2.为什么需要 Sentinel?3.Sentinel 基本概念3.1 什么是流量控制?3.1.1 常见流量控制算法3.1.2 Sentinel 流量控制流控效果介绍如下: 3.2 什么是熔断?熔断策略 3.3 Sentinel 组成&#xff08;资源和规…

springboot+shiro+jwt 兼容session和token

最近和别的软件集成项目&#xff0c;需要提供给别人接口来进行数据传输&#xff0c;发现给他token后并不能访问我的接口&#xff0c;拿postman试了下还真是不行。检查代码发现项目的shiro配置是通过session会话来校验信息的 &#xff0c;我之前一直是前后端自己写&#xff0c;用…

等级考试3-2021年3月题

作业&#xff1a; #include <iostream> using namespace std; int chonghe(int,int,int,int); int main(){int a[1000],b[1000];int n,ma0;cin>>n;for(int i0;i<n;i){cin>>a[i]>>b[i];}for(int i0;i<n;i){for(int ji1;j<n;j){mamax(ma,chongh…

华为云CodeArts API:API管理一体化平台 5月新特性上线啦!

CodeArts API是华为云API全生命周期管理一体化解决方案平台&#xff0c;支持开发者高效实现API设计、API开发、API测试、API托管、API运维、API变现的一站式体验。 通过以API契约为锚点&#xff0c;CodeArts API保证API各阶段数据高度一致&#xff0c;为开发者提供友好易用的A…

非线性模型预测控制NMPC例子

NMPC概述 非线性模型预测控制(Nonlinear Model Predictive Control, NMPC)是一种用于控制非线性系统的高级控制策略。与线性MPC不同,NMPC需要处理系统的非线性特性,这使得优化问题更加复杂。NMPC通常使用迭代优化算法来求解非线性优化问题 NMPC基本原理 NMPC的目标是最小…

Github 2024-06-10开源项目周报 Top15

根据Github Trendings的统计,本周(2024-06-10统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目8Jupyter Notebook项目2Go项目2C++项目1Shell项目1Lua项目1JavaScript项目1MDX项目1C项目1HTML项目1Python - 100天从新手到大师 创建…

设计模式详解(全23种)

设计模式的分类 总体来说设计模式分为三大类&#xff1a; 创建型模式&#xff08;5&#xff09;&#xff1a; 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式&#xff08;7&#xff09;&#xff1a; 适配器模式、装饰器模式、代理模式、外观模式、桥…

SpringBoot3 常用的第三方接口调用十种方式

环境&#xff1a;SpringBoot.3.3.0 简介 在项目中调用第三方接口是日常开发中非常常见的。调用方式的选择通常遵循公司既定的技术栈和架构规范&#xff0c;以确保项目的一致性和可维护性。无论是RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式&#x…

从反向传播过程看激活函数与权重初始化的选择对深度神经网络稳定性的影响

之前使用深度学习时一直对各种激活函数和权重初始化策略信手拈用,然而不能只知其表不知其里。若想深入理解为何选择某种激活函数和权重初始化方法卓有成效还是得回归本源,本文就从反向传播的计算过程来按图索骥。 为了更好地演示深度学习中的前向传播和反向传播,有必要图文…

FM全网自动采集聚合影视搜索源码

源码介绍 FM 全网聚合影视搜索(响应式布局)&#xff0c;基于 TP5.1 开发的聚合影视搜索程序&#xff0c;本程序无数据库&#xff0c;本程序内置P2P 版播放器&#xff0c;承诺无广告无捆绑。片源内部滚动广告与本站无关,谨防上当受骗&#xff0c;资源搜索全部来自于网络。 环境…

模拟电子技术基础(一)--本证半导体与杂质半导体

半导体分为两大类&#xff1a;本征半导体和杂质半导体。这两种类型的半导体在电子结构和电导特性上有显著的区别。 本征半导体&#xff08;Intrinsic Semiconductor&#xff09; 定义和组成&#xff1a;本征半导体是纯净的半导体&#xff0c;没有任何杂质原子。最常见的本征半…

AI预测体彩排3采取888=3策略+和值012路或胆码测试6月16日升级新模型预测第1弹

根据前面的预测效果&#xff0c;我对模型进行了重新优化&#xff0c;因为前面的模型效果不是很好。熟悉我的彩友比较清楚&#xff0c;我之前的主要精力是对福彩3D进行各种模型的开发和预测&#xff0c;排三的预测也就是最近1个月才开始搞的。3D的预测&#xff0c;经过对模型的多…