ZED 2i相机在配置官方示例zed-pytorch遇到的问题
第一步配置ZED 2i的环境——ZED SDK
如有任何问题求求求指出,求求求帮助!
这里我建议选择CUDA11.8的SDK 4.0版(今天是2023年9月17号,MaxWell架构另说),此时的pytorch还不能和CUDA12等合作,所以调用的时候明明不应该调用我的N卡上的cuda,但是还是调用了,所以要么装多个版本的CUDA(其实就是下载安装包之后,第一次全选下载包,第二次只选cuda,然后把他们都放在这个目录下(不知道对不对,反正通了))
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA
这里只要在 系统变量–环境变量 里设置一下CUDA的路径就可以更改哪个版本的CUDA在工作了。
第一步配置ZED 2i的环境——ZED API
- 注意:只有下载安装ZED SDK这API应该才能工作,不可跳
好像就一步:
https://www.stereolabs.com/docs/app-development/python/install/
cd C:\Program Files (x86)\ZED SDK
python3 get_python_api.py
(或者)python get_python_api.py
import pyzed.sl as sl的第一种
这里我犯了一个低级错误,因为我同时配了python3.11, 3.10, 3.6的三个conda环境(无头苍蝇式),然后把pyzed的名字版本点错了。希望大家检查下自己点对没。运行get运行不出来,给个check if的pyzed下载链接,点进去下载出来。然后install发现报错Import pyzed.sl as sl,importError:DLL load failed: 找不到指定的模块。
这里可以看这位大神的解决办法
- zed2安装api,装了pyzed找不到sl的错误。我是python3.8的,翻了好多网友的回答,尝试了好多种办法。最后找到解决方案。将zed sdk 文件夹下的bin(一般文件夹的位置是C:\Program Files (x86)\ZED SDK\bin)中所有的dll文件都复制到D:\python\Lib\site-packages\pyzed(这是我的python安装目录,你们可以对应找一下)下面,成功!
原文链接:https://blog.csdn.net/qq_44847586/article/details/121379150
import pyzed.sl as sl的第二种
- 当然还有另外一种可能,像我一样在另一台老笔记本配置的时候,复制了zed sdk/bin的DLL文件也没用,点开zed depth viewer被告知没有nvEncodeAPI64.dll。装上这个nvEncodeAPI64.dll在system32里就好了。下载dll的地址用的是dllme.com。
然后就可以顺利的运行tutorial的代码了。
有相同问题的其他解决办法的可以评论哇
配置zed-pytorch样例
https://github.com/stereolabs/zed-pytorch/tree/master
这是网址,下载代码,根据指示安装,此时建议把所有要求git clone的给我拉一个文件夹。运行python3的命令,成功会出现一堆字,失败会没有反应。(也可能是python)
有关THC
配置maskrcnn-benchmark的报错。此处参考:
https://blog.csdn.net/code_zhao/article/details/129172817
这个是出现没找到THC这个头文件的报错时,把每个后缀.cu的文件里面根据这里面的123点更改就好了。
https://blog.csdn.net/sinat_29957455/article/details/113334944
有关AT_CHECK
后来又报错AT_CHECK找不到。改成TORCH_CHECK,应该是版本问题。
运行zed_detector_py这个文件
有关torch._six、_download
报错找不到torch._six,这个条件是在if里的,直接改成str,没报错,不管了。(我不会改)
还有 _download报错, 应该还是版本问题,把前面的下划线删了就行。
运行zed_object_detection这个文件
有关api参数init_pos报错
报api的错,一个是init_pos报错说PositionalTrackingParameters的这个函数里找不到这个参数名字,搜一下发现参数名字现在叫init_position_,改了根本没用,直接删了(反正不会改)
运行predictor.py
有关cv2.putText(), 删了
cv2.putText(…)报错 parse.org。百度下这就是个显示字的,直接删了(不是
然后就成功了(完全不准确,问了大佬说没标定??ZED官网是不建议标定的,但是看了很多人也标定了
我的环境和版本号如下
conda的虚拟环境python3.10。建议不要开VPN下pip的包。
同时拍摄Depth,RGB,点云,并保存代码
这里有一些错误,但是懒得改了
import os
import datetime
import cv2
import numpy as np
import pyzed.sl as sl
from pyntcloud import PyntCloud
def main():
zed = sl.Camera()
init_params = sl.InitParameters()
init_params.depth_mode = sl.DEPTH_MODE.ULTRA
init_params.coordinate_units = sl.UNIT.MILLIMETER
init_params.camera_resolution = sl.RESOLUTION.HD1080
init_params.camera_fps = 30
init_params.sdk_gpu_id = 0
init_params.sdk_verbose = True # verbose是详细信息,看log有个log_file没用,需要手动清除log file
status = zed.open(init_params)
if status != sl.ERROR_CODE.SUCCESS:
print("不管怎么错了,反正没成功")
exit(1)
runtime_parameters = sl.RuntimeParameters()
# 创建sl.Mat对象来存储图像(容器),Mat类可以处理1到4个通道的多种矩阵格式(定义储存图象的类型)
i = 0
image = sl.Mat()
disparity = sl.Mat()
depth_value = sl.Mat()
depth_image = sl.Mat()
point_cloud = sl.Mat()
resolution = zed.get_camera_information().camera_configuration.resolution
w, h = resolution.width, resolution.height
x, y = int(w / 2), int(h / 2)
while True:
if zed.grab(runtime_parameters) == sl.ERROR_CODE.SUCCESS:
timestamp_image = zed.get_timestamp(sl.TIME_REFERENCE.IMAGE)
timestamp_current = zed.get_timestamp(sl.TIME_REFERENCE.CURRENT)
zed.retrieve_image(image, sl.VIEW.LEFT) # SIDE_BY_SIDE
image_data = image.get_data()
zed.retrieve_measure(disparity, sl.MEASURE.DISPARITY, sl.MEM.CPU)
disparity_map = disparity.get_data()
zed.retrieve_measure(depth_value, sl.MEASURE.DEPTH, sl.MEM.CPU)
depth_value_data = depth_value.get_data()
zed.retrieve_image(depth_image, sl.VIEW.DEPTH)
depth_image_data = depth_image.get_data()
zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA, sl.MEM.CPU)
point_cloud_data = point_cloud.get_data()
print('时间点 image', timestamp_image.get_seconds(), '时间点 current',
timestamp_current.get_seconds(), '中心点视差值', disparity_map[x, y], '中心点深度值',
depth_value_data[x, y], 'm', '中心点云数据', point_cloud_data[x, y])
# view = np.concatenate((cv2.resize(image_data, (480, 270)), cv2.resize(depth_image_data, (480, 270)), cv2.resize(point_cloud_data, (480, 270))
# ), axis=1)
cv2.imshow("View", image_data)
cv2.imshow('point', point_cloud_data)
cv2.imshow('depth_image', depth_image_data)
key = cv2.waitKey(1)
if key & 0xFF == 27: # esc退出
break
if key & 0xFF == ord(' '): # 图像保存
datetime_object = datetime.datetime.now()
formatted_datetime = datetime_object.strftime("%Y-%m-%d_%H-%M-%S")
savePath = "your path"
# 注意根目录是否存在"./images"文件夹
savePath_point = os.path.join("your path") #
savePath_depth= os.path.join("your path", "D{:0>3d}.png".format(i)) #
cv2.imwrite(savePath, image_data)
depth_value.write("your path/{}_{}.png".format(formatted_datetime, "depth"))
# cv2.imwrite(savePath_depth,depth_value_data)
filename = "your path/{}_{}.ply".format(formatted_datetime, "point_cloud")
point_cloud.write(filename)
i = i + 1
zed.close()
if __name__ == "__main__":
main()
持续更新中。。。
新人求指点
第二步使用ZED SDK
-
空格键
在ZED Depth View中可以暂停画面。(虽然老手和聪明人可能对此不屑一顾,但是怎么没人告诉我啊啊啊?)
P键可以在ZED Explorer中保存画面。 -
请更新到最新版ZED SDK,UI界面4.0.6版一直字体很小看不清。4.0.8解决了一些,但不是很好。
-
已连接ZED相机但是ZED Explorer一直像上图一样Waiting for Camera
此处请打开Depth View再重新打开Explorer。具体什么原理不清楚,但是好用。
(MaxWell架构GPU)打开Depth Viewer
本人笔记本的独显为MX130,打开后提示
ZED Depth Viewer: An NVIDIA GPU (PASCAL OR NEWER) is required to run this software (for Kepler and Maxwell GPU, please user CUDA 10.2 ZED SDK installers)
这里需要根据对应提示下载对应的SDK和CUDA。下载完成后如果仍提示此内容,需要到
C:\ProgramData\Stereolabs
这个文件夹下,直接删除整个文件夹,重新打开即可运行