国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

yolov8直接調(diào)用zed相機實現(xiàn)三維測距(python)

這篇具有很好參考價值的文章主要介紹了yolov8直接調(diào)用zed相機實現(xiàn)三維測距(python)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

相關(guān)鏈接
此項目直接調(diào)用zed相機實現(xiàn)三維測距,無需標定,相關(guān)內(nèi)容如下:
1.yolov5直接調(diào)用zed相機實現(xiàn)三維測距(python)
2. yolov4直接調(diào)用zed相機實現(xiàn)三維測距
3. Windows+YOLOV8環(huán)境配置
4.具體實現(xiàn)效果已在嗶哩嗶哩發(fā)布,點擊此鏈接跳轉(zhuǎn)

本篇博文工程源碼下載(麻煩github給個星星)
下載鏈接:https://github.com/up-up-up-up/zed-yolov8

附:Zed調(diào)用YOLOv7測距也已經(jīng)實現(xiàn),但是3060筆記本6G顯存帶不動,在大現(xiàn)存服務(wù)器上可以運行,可能是由于YOLOv7網(wǎng)絡(luò)結(jié)構(gòu)導致的,由于不具備普適性,就不再寫相關(guān)文章了,有需要的可以仿照這個代碼去改寫

1. 相關(guān)配置

python==3.7
Windows-pycharm
zed api 具體配置見 (zed api 配置步驟)

由于我電腦之前python版本為3.7,yolov8要求python最低為3.8,所以本次實驗直接在虛擬環(huán)境里進行,未配置gpu,可能看著卡卡的,有需要的可以配置一下,原理是一樣的

2. 版本一

2.1 相關(guān)代碼

主代碼 zed-yolo.py,具體放置在yolov8主目錄下,盒子形式展現(xiàn),可實現(xiàn)測距+跟蹤

#!/usr/bin/env python3

import sys
import numpy as np

import argparse
import torch
import cv2
import pyzed.sl as sl
from ultralytics import YOLO

from threading import Lock, Thread
from time import sleep

import ogl_viewer.viewer as gl
import cv_viewer.tracking_viewer as cv_viewer

lock = Lock()
run_signal = False
exit_signal = False


def xywh2abcd(xywh, im_shape):
    output = np.zeros((4, 2))

    # Center / Width / Height -> BBox corners coordinates
    x_min = (xywh[0] - 0.5*xywh[2]) #* im_shape[1]
    x_max = (xywh[0] + 0.5*xywh[2]) #* im_shape[1]
    y_min = (xywh[1] - 0.5*xywh[3]) #* im_shape[0]
    y_max = (xywh[1] + 0.5*xywh[3]) #* im_shape[0]

    # A ------ B
    # | Object |
    # D ------ C

    output[0][0] = x_min
    output[0][1] = y_min

    output[1][0] = x_max
    output[1][1] = y_min

    output[2][0] = x_max
    output[2][1] = y_max

    output[3][0] = x_min
    output[3][1] = y_max
    return output

def detections_to_custom_box(detections, im0):
    output = []
    for i, det in enumerate(detections):
        xywh = det.xywh[0]

        # Creating ingestable objects for the ZED SDK
        obj = sl.CustomBoxObjectData()
        obj.bounding_box_2d = xywh2abcd(xywh, im0.shape)
        obj.label = det.cls
        obj.probability = det.conf
        obj.is_grounded = False
        output.append(obj)
    return output


def torch_thread(weights, img_size, conf_thres=0.2, iou_thres=0.45):
    global image_net, exit_signal, run_signal, detections

    print("Intializing Network...")

    model = YOLO(weights)

    while not exit_signal:
        if run_signal:
            lock.acquire()

            img = cv2.cvtColor(image_net, cv2.COLOR_BGRA2RGB)
            # https://docs.ultralytics.com/modes/predict/#video-suffixes
            det = model.predict(img, save=False, imgsz=img_size, conf=conf_thres, iou=iou_thres)[0].cpu().numpy().boxes

            # ZED CustomBox format (with inverse letterboxing tf applied)
            detections = detections_to_custom_box(det, image_net)
            lock.release()
            run_signal = False
        sleep(0.01)


def main():
    global image_net, exit_signal, run_signal, detections

    capture_thread = Thread(target=torch_thread, kwargs={'weights': opt.weights, 'img_size': opt.img_size, "conf_thres": opt.conf_thres})
    capture_thread.start()

    print("Initializing Camera...")

    zed = sl.Camera()

    input_type = sl.InputType()
    if opt.svo is not None:
        input_type.set_from_svo_file(opt.svo)

    # Create a InitParameters object and set configuration parameters
    init_params = sl.InitParameters(input_t=input_type, svo_real_time_mode=True)
    init_params.coordinate_units = sl.UNIT.METER
    init_params.depth_mode = sl.DEPTH_MODE.ULTRA  # QUALITY
    init_params.coordinate_system = sl.COORDINATE_SYSTEM.RIGHT_HANDED_Y_UP
    init_params.depth_maximum_distance = 50

    runtime_params = sl.RuntimeParameters()
    status = zed.open(init_params)

    if status != sl.ERROR_CODE.SUCCESS:
        print(repr(status))
        exit()

    image_left_tmp = sl.Mat()

    print("Initialized Camera")

    positional_tracking_parameters = sl.PositionalTrackingParameters()
    # If the camera is static, uncomment the following line to have better performances and boxes sticked to the ground.
    # positional_tracking_parameters.set_as_static = True
    zed.enable_positional_tracking(positional_tracking_parameters)

    obj_param = sl.ObjectDetectionParameters()
#    obj_param.detection_model = sl.OBJECT_DETECTION_MODEL.CUSTOM_BOX_OBJECTS
    obj_param.enable_tracking = True
    zed.enable_object_detection(obj_param)

    objects = sl.Objects()
    obj_runtime_param = sl.ObjectDetectionRuntimeParameters()

    # Display
    camera_infos = zed.get_camera_information()
    camera_res = camera_infos.camera_resolution
    # Create OpenGL viewer
    viewer = gl.GLViewer()
    point_cloud_res = sl.Resolution(min(camera_res.width, 720), min(camera_res.height, 404))
    point_cloud_render = sl.Mat()
    viewer.init(camera_infos.camera_model, point_cloud_res, obj_param.enable_tracking)
    point_cloud = sl.Mat(point_cloud_res.width, point_cloud_res.height, sl.MAT_TYPE.F32_C4, sl.MEM.CPU)
    image_left = sl.Mat()
    # Utilities for 2D display
    display_resolution = sl.Resolution(min(camera_res.width, 1280), min(camera_res.height, 720))
    image_scale = [display_resolution.width / camera_res.width, display_resolution.height / camera_res.height]
    image_left_ocv = np.full((display_resolution.height, display_resolution.width, 4), [245, 239, 239, 255], np.uint8)

    # # Utilities for tracks view
    # camera_config = camera_infos.camera_configuration
    # tracks_resolution = sl.Resolution(400, display_resolution.height)
    # track_view_generator = cv_viewer.TrackingViewer(tracks_resolution, camera_config.fps, init_params.depth_maximum_distance)
    # track_view_generator.set_camera_calibration(camera_config.calibration_parameters)
    # image_track_ocv = np.zeros((tracks_resolution.height, tracks_resolution.width, 4), np.uint8)
    # Camera pose
    cam_w_pose = sl.Pose()

    while viewer.is_available() and not exit_signal:
        if zed.grab(runtime_params) == sl.ERROR_CODE.SUCCESS:
            # -- Get the image
            lock.acquire()
            zed.retrieve_image(image_left_tmp, sl.VIEW.LEFT)
            image_net = image_left_tmp.get_data()
            lock.release()
            run_signal = True

            # -- Detection running on the other thread
            while run_signal:
                sleep(0.001)

            # Wait for detections
            lock.acquire()
            # -- Ingest detections
            zed.ingest_custom_box_objects(detections)
            lock.release()
            zed.retrieve_objects(objects, obj_runtime_param)

            # -- Display
            # Retrieve display data
            zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA, sl.MEM.CPU, point_cloud_res)
            point_cloud.copy_to(point_cloud_render)
            zed.retrieve_image(image_left, sl.VIEW.LEFT, sl.MEM.CPU, display_resolution)
            zed.get_position(cam_w_pose, sl.REFERENCE_FRAME.WORLD)

            # 3D rendering
            viewer.updateData(point_cloud_render, objects)
            # 2D rendering
            np.copyto(image_left_ocv, image_left.get_data())
            cv_viewer.render_2D(image_left_ocv, image_scale, objects, obj_param.enable_tracking)
            global_image = image_left_ocv
            # global_image = cv2.hconcat([image_left_ocv, image_track_ocv])
            # # Tracking view
            # track_view_generator.generate_view(objects, cam_w_pose, image_track_ocv, objects.is_tracked)

            cv2.imshow("ZED | 2D View and Birds View", global_image)
            key = cv2.waitKey(10)
            if key == 27:
                exit_signal = True
        else:
            exit_signal = True

    viewer.exit()
    exit_signal = True
    zed.close()


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolov8n.pt', help='model.pt path(s)')
    parser.add_argument('--svo', type=str, default=None, help='optional svo file')
    parser.add_argument('--img_size', type=int, default=416, help='inference size (pixels)')
    parser.add_argument('--conf_thres', type=float, default=0.4, help='object confidence threshold')
    opt = parser.parse_args()

    with torch.no_grad():
        main()

2.2 實驗結(jié)果

測距圖(感覺挺精準的)
yolov8檢測物體的世界坐標高度,zed,三維測距,雙目相機,YOLO,數(shù)碼相機,python
視頻展示:

Zed相機+YOLOv8目標檢測跟蹤

3. 版本二

3.1 相關(guān)代碼

主代碼 zed.py,具體放置在yolov8主目錄下,可實現(xiàn)測距+跟蹤+分割,完整代碼六月開源

#!/usr/bin/env python3
import math
import sys
import numpy as np
from PIL import Image
import argparse
import torch
import cv2
import pyzed.sl as sl
from ultralytics.utils.plotting import Annotator, colors, save_one_box
from ultralytics import YOLO
from threading import Lock, Thread
from time import sleep

import ogl_viewer.viewer as gl
import cv_viewer.tracking_viewer as cv_viewer

zed = sl.Camera()

# Create a InitParameters object and set configuration parameters
init_params = sl.InitParameters()
init_params.camera_resolution = sl.RESOLUTION.HD720
init_params.coordinate_units = sl.UNIT.METER
init_params.depth_mode = sl.DEPTH_MODE.ULTRA  # QUALITY
init_params.coordinate_system = sl.COORDINATE_SYSTEM.RIGHT_HANDED_Y_UP
init_params.depth_maximum_distance = 20  # 設(shè)置最遠距離

runtime_params = sl.RuntimeParameters()
status = zed.open(init_params)

if status != sl.ERROR_CODE.SUCCESS:
    print(repr(status))
    exit()

image_left_tmp = sl.Mat()
print("Initialized Camera")
positional_tracking_parameters = sl.PositionalTrackingParameters()
zed.enable_positional_tracking(positional_tracking_parameters)

obj_param = sl.ObjectDetectionParameters()
obj_param.detection_model = sl.DETECTION_MODEL.CUSTOM_BOX_OBJECTS
obj_param.enable_tracking = True
zed.enable_object_detection(obj_param)
objects = sl.Objects()
obj_runtime_param = sl.ObjectDetectionRuntimeParameters()

point_cloud_render = sl.Mat()
point_cloud = sl.Mat()
image_left = sl.Mat()
depth = sl.Mat()
# Utilities for 2D display

3.2 實驗結(jié)果

可實現(xiàn)測距、跟蹤和分割功能,這個代碼沒有加多線程,速度夠用懶得寫了,對速率要求高的可以自己寫一下,實現(xiàn)不同功能僅需修改以下代碼,具體見 此篇文章

 model = YOLO("./yolov8n.pt")
 img = cv2.cvtColor(image_net, cv2.COLOR_BGRA2BGR)
 result = model.predict(img, conf=0.5)

測距功能
yolov8檢測物體的世界坐標高度,zed,三維測距,雙目相機,YOLO,數(shù)碼相機,python
跟蹤功能
yolov8檢測物體的世界坐標高度,zed,三維測距,雙目相機,YOLO,數(shù)碼相機,python

分割功能
yolov8檢測物體的世界坐標高度,zed,三維測距,雙目相機,YOLO,數(shù)碼相機,python
視頻展示文章來源地址http://www.zghlxwxcb.cn/news/detail-847850.html

到了這里,關(guān)于yolov8直接調(diào)用zed相機實現(xiàn)三維測距(python)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • yolov8/yolov7/yolov5-車輛測距+前車碰撞預警(追尾預警)+車輛檢測識別+車輛跟蹤測速(算法-畢業(yè)設(shè)計)

    yolov8/yolov7/yolov5-車輛測距+前車碰撞預警(追尾預警)+車輛檢測識別+車輛跟蹤測速(算法-畢業(yè)設(shè)計)

    本項目效果展示視頻: https://www.bilibili.com/video/BV14d4y177vE/?spm_id_from=333.999.0.0vd_source=8c532ded7c7c9041f04e35940d11fdae 1、本項目通過yolov8/yolov7/yolov5和deepsort實現(xiàn)了一個自動駕駛領(lǐng)域的追尾前車碰撞預警系統(tǒng),可為一些同學的課設(shè)、大作業(yè)等提供參考。分別實現(xiàn)了自行車、汽車、摩托車

    2024年02月04日
    瀏覽(30)
  • 易語言調(diào)用Yolov8與Yolov8綜合工具使用

    易語言調(diào)用Yolov8與Yolov8綜合工具使用

    相信大家也看了不少的Yolo系列那些繁雜的理論, Yolo的官方網(wǎng)站也免費公布了英文的源代碼。 相信有些小伙伴們有一定的基礎(chǔ),經(jīng)過了一段的深入研究。 已經(jīng)能夠調(diào)用并且使用成功了。 但是肯定還有一部分,基礎(chǔ)不是很強的小伙伴們還不能成功的使用。 但是又想去感受使用

    2024年02月07日
    瀏覽(25)
  • 項目設(shè)計:YOLOv5目標檢測+機構(gòu)光相機(intel d455和d435i)測距

    項目設(shè)計:YOLOv5目標檢測+機構(gòu)光相機(intel d455和d435i)測距

    1.1??Intel D455 Intel D455 是一款基于結(jié)構(gòu)光(Structured Light)技術(shù)的深度相機。 與ToF相機不同,結(jié)構(gòu)光相機使用另一種方法來獲取物體的深度信息。它通過投射可視光譜中的紅外結(jié)構(gòu)光圖案,然后從被拍攝物體表面反射回來的圖案重建出其三維形狀和深度信息。 Intel D455 深度相機

    2024年02月08日
    瀏覽(33)
  • OpenCV C++雙目三維重建:雙目攝像頭實現(xiàn)雙目測距

    OpenCV C++雙目三維重建:雙目攝像頭實現(xiàn)雙目測距

    目錄 OpenCV C++雙目三維重建:雙目攝像頭實現(xiàn)雙目測距 1.目錄結(jié)構(gòu) 2.依賴庫 ?(1) Ubuntu 18.04配置開發(fā)環(huán)境 ?(2) Windows配置開發(fā)環(huán)境 3.雙目相機標定 ?(1)雙目相機標定-Python版 ?(2)雙目相機標定-Matlab版 4.相機參數(shù)配置 5. 雙目測距 6. 運行Demo 7.雙目測距的誤差說明 8. 雙目三維重建項

    2024年02月02日
    瀏覽(46)
  • 用python調(diào)用YOLOV8預測視頻并解析結(jié)果----錯誤解決

    用python調(diào)用YOLOV8預測視頻并解析結(jié)果----錯誤解決

    1?同濟子豪兄關(guān)鍵點檢測教程視頻 2?同濟子豪兄的GitHub代碼參考 3?提出問題的小伙伴的博客 本節(jié)調(diào)用了YOLOV8的預訓練模型來對視頻進行預測,采用的是python的API,并將關(guān)鍵點檢測的結(jié)果可視化。在未更改代碼之前,跑出來的效果如圖所示。如果檢測到的點數(shù)少于16,會被自

    2024年01月19日
    瀏覽(26)
  • yolov8訓練自己的數(shù)據(jù)集與轉(zhuǎn)成onnx利用opencv進行調(diào)用

    yolov8訓練自己的數(shù)據(jù)集與轉(zhuǎn)成onnx利用opencv進行調(diào)用

    文章目錄 系列文章目錄 前言 一、利用labeling進行數(shù)據(jù)的創(chuàng)建? 二、使用步驟 1.引入庫 2.讀入數(shù)據(jù) 總結(jié) 首先需要創(chuàng)建適合yolov8的數(shù)據(jù)模式,需要將xml文件轉(zhuǎn)成txt文件。修改yolov8的配置文件實現(xiàn)模型的訓練 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 代碼如下(示例)

    2024年02月06日
    瀏覽(22)
  • ZED相機快速使用指南

    ZED相機快速使用指南

    ZED SDK 3.8 - Download | Stereolabs GitHub - stereolabs/zed-ros-wrapper: ROS wrapper for the ZED SDK 其他教程:ZED2相機SDK安裝使用及ROS下使用_可即的博客-CSDN博客 Get Started with ZED | Stereolabs 在/usr/local/zed/tools/下的./ZED_Calibration根據(jù) 教程可以實現(xiàn)標定校準 在/usr/local/zed/setting下有校準后的參數(shù) cat一下

    2024年02月09日
    瀏覽(26)
  • ZED相機獲取圖像python

    注:在根目錄中創(chuàng)建一個images的文件夾

    2024年02月09日
    瀏覽(22)
  • ONNX格式模型 學習筆記 (onnxRuntime部署)---用java調(diào)用yolov8模型來舉例

    ONNX格式模型 學習筆記 (onnxRuntime部署)---用java調(diào)用yolov8模型來舉例

    ONNX(Open Neural Network Exchange)是一個開源項目,旨在建立一個開放的標準,使深度學習模型 可以在不同的軟件平臺和工具之間輕松移動和重用 。 ONNX模型可以用于各種應(yīng)用場景,例如機器翻譯、圖像識別、語音識別、自然語言處理等。 由于ONNX模型的互操作性,開發(fā)人員 可以

    2024年01月22日
    瀏覽(26)
  • YOLOv8首發(fā)改進|獨創(chuàng)結(jié)構(gòu)FasterNeXt,超10個數(shù)據(jù)集上已漲點,可直接寫模型改進,源于最新CVPR2023主干系列FasterNet

    ?? 本篇內(nèi)容 :YOLOv8原創(chuàng)改進最新CVPR2023主干系列:博客提出了一個獨創(chuàng)結(jié)構(gòu)FasterNeXt,超10個數(shù)據(jù)集上已漲點,可直接寫模型改進 ?? ??????內(nèi)含·改進源代碼·,按步驟操作運行改進后的代碼即可 改進結(jié)構(gòu)為博主原創(chuàng)結(jié)構(gòu), 部分漲點效果反饋 一覽,只統(tǒng)計了一小部分????

    2024年02月05日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包