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

Mediapipe實時3D目標檢測和跟蹤(自動駕駛實現(xiàn))

這篇具有很好參考價值的文章主要介紹了Mediapipe實時3D目標檢測和跟蹤(自動駕駛實現(xiàn))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?? 導語

3D目標檢測是根據(jù)物體的形狀、位置和方向來識別和定位物體的任務(wù)。在2D目標檢測中,被檢測到的物體僅表示為矩形邊界框。3D目標檢測任務(wù)通過預測物體周圍的包圍框,可以獲取物體的三維位置信息。

Mediapipe實時3D目標檢測和跟蹤(自動駕駛實現(xiàn))

3D目標檢測在各行各業(yè)都有廣泛的應(yīng)用。一些常見的用途包括:
?? 機器人技術(shù)
?? 自動駕駛車輛
?? 醫(yī)學影像

MediaPipe Objectron是由Google的MediaPipe團隊開發(fā)的計算機視覺流水線,可以使用Objectron數(shù)據(jù)集實時實現(xiàn)3D目標檢測和跟蹤。該數(shù)據(jù)集包括自行車、書籍、瓶子、相機、谷物盒、椅子、杯子、筆記本電腦和鞋子等9種物體。

該流水線使用在合成數(shù)據(jù)上訓練的機器學習模型來估計場景中物體的三維包圍框和姿態(tài)。它接收來自相機或視頻流的一系列幀作為輸入,并輸出一系列的3D目標檢測和跟蹤結(jié)果。Objectron利用相機校準、三維物體模型和深度估計等技術(shù)組合,實現(xiàn)了高精度的3D目標檢測。

??MediaPipe實現(xiàn)3D目標檢測跟蹤算法原理

  1. 數(shù)據(jù)集和模型訓練:數(shù)據(jù)集收集和標注:使用Objectron數(shù)據(jù)集,其中包含了物體的圖像和相應(yīng)的3D邊界框和姿態(tài)標注。模型訓練:使用機器學習模型,如卷積神經(jīng)網(wǎng)絡(luò)(CNN),通過輸入圖像進行訓練,學習預測物體的3D邊界框和姿態(tài)。
  2. 相機校準:
    • 內(nèi)部參數(shù)估計:使用相機標定板等方法,通過觀察2D圖像中已知尺寸的物體,估計相機的內(nèi)部參數(shù),如焦距和主點坐標。
    • 外部參數(shù)估計:通過相機標定板的位置和姿態(tài),結(jié)合已知的世界坐標系中的點與其在圖像中的對應(yīng)關(guān)系,估計相機的外部參數(shù),包括相機的位置和姿態(tài)。
  3. 特征提取和匹配:
    • 特征提?。菏褂锰卣魈崛∷惴ǎㄈ鏢IFT、ORB、SURF等),從圖像中提取關(guān)鍵點或特征描述符。
    • 特征匹配:通過匹配不同幀之間的特征點或特征描述符,找到相應(yīng)的匹配點對。
  4. 3D邊界框和姿態(tài)估計:
    • 相機投影:通過將2D圖像坐標轉(zhuǎn)換為歸一化設(shè)備坐標,將圖像坐標與相機的內(nèi)部參數(shù)關(guān)聯(lián)起來。
    • 三角測量:通過對匹配的特征點或特征描述符進行三角測量,估計物體在3D空間中的位置。
    • 姿態(tài)估計:通過對物體的3D點進行旋轉(zhuǎn)和平移操作,將物體的姿態(tài)(旋轉(zhuǎn)角度)估計出來。
  5. 目標跟蹤:
    • 特征匹配:通過在相鄰幀之間匹配特征點或特征描述符,找到物體在不同幀之間的對應(yīng)關(guān)系。
    • 運動模型:使用運動模型來預測物體在下一幀中的位置和姿態(tài)。
    • 濾波算法:使用濾波算法(如卡爾曼濾波器、擴展卡爾曼濾波器等)來平滑和修正跟蹤結(jié)果。
  6. 結(jié)果輸出:輸出3D邊界框和姿態(tài)信息:根據(jù)估計的物體位置、尺寸和姿態(tài),生成輸出結(jié)果,包括物體的3D邊界框的中心坐標、寬度、高度以及旋轉(zhuǎn)角度等信息。

??安裝MediaPipe和OpenCV

pip install mediapipe
pip install opencv-contrib-python

下面我將使用MediaPipe在圖像幀中檢測3D物體,并使用OpenCV繪制其周圍的三維邊界框。

?? 使用MediaPipe實現(xiàn)3D目標檢測

import cv2
import mediapipe as mp
import time
mp_objectron = mp.solutions.objectron
mp_drawing = mp.solutions.drawing_utils

首先,我們需要導入Objectron解決方案和繪圖工具,以便檢測和繪制物體的3D邊界框。

cap = cv2.VideoCapture(0)

然后,我們可以打開視頻捕獲設(shè)備。這將打開計算機上的網(wǎng)絡(luò)攝像頭,并將攝像頭捕獲的視頻存儲在cap變量中。

objectron = mp_objectron.Objectron(static_image_mode=False,
                            max_num_objects=5,
                            min_detection_confidence=0.5,
                            min_tracking_confidence=0.7,
                            model_name='Cup')

通過Objectron方法,我們可以對3D目標檢測算法進行不同的配置。

  • static_image_mode: 基于我們將使用圖像或視頻進行3D檢測(對于圖像為True,對于視頻為False)
  • max_num_objects: 定義我們想要在其周圍繪制邊界框的最大可識別對象數(shù)。
  • min_detection_confidence: 檢測給定類別所需的閾值。
  • min_tracking_confidence: 在跟蹤物體時避免誤報的閾值
  • model_name: 定義我們將在3D目標檢測模型中使用哪個類別,可以是’Cup’、‘Shoe’、‘Camera’或’Chair’。
while cap.isOpened():
    success, image = cap.read()

    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = objectron.process(image)

    image.flags.writeable = True
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    if results.detected_objects:
        for detected_object in results.detected_objects:
            
            mp_drawing.draw_landmarks(image, 
                                      detected_object.landmarks_2d, 
                                      mp_objectron.BOX_CONNECTIONS)
          
            mp_drawing.draw_axis(image, 
                                 detected_object.rotation,
                                 detected_object.translation)

    cv2.imshow('MediaPipe Objectron', cv2.flip(image, 1))
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

當我們通過這個過程時,無法對圖像進行寫入操作(image.flags.writeable = False),這會稍微提高性能。

然后,我們可以檢查圖像幀中是否存在任何檢測結(jié)果。如果有,我們可以繪制2D邊界框的標記點,并通過添加附加軸來獲取3D邊界框。通過旋轉(zhuǎn),我們可以得到物體在圖像幀中的旋轉(zhuǎn)情況,然后我們還將指定物體在圖像幀中的平移情況。

在結(jié)果中,我們可以獲得3D物體檢測結(jié)果。當我們打印它時,我們可以得到帶有x、y、z軸的標記點,這些是檢測到的物體的中心點,我們還可以以數(shù)組的形式獲得檢測到的物體的旋轉(zhuǎn)、平移和縮放情況。

Results:

Mediapipe實時3D目標檢測和跟蹤(自動駕駛實現(xiàn))
??當我們將3D邊界框與2D邊界框進行比較時,存在額外的參數(shù)。?? 2D目標檢測:

  • 邊界框中心的X坐標
  • 邊界框中心的Y坐標
  • 邊界框的寬度
  • 邊界框的高度

?? 3D目標檢測:

  • 邊界框中心的X坐標
  • 邊界框中心的Y坐標
  • 邊界框中心的Z坐標
  • 邊界框的寬度
  • 邊界框的高度
  • 邊界框的長度
  • Roll角度表示繞X軸的旋轉(zhuǎn)
  • Pitch角度表示繞Y軸的旋轉(zhuǎn)
  • Yaw角度表示繞Z軸的旋轉(zhuǎn)

??Mediapipe實現(xiàn)自動駕駛功能

我使用了Mediapipe編寫了一個小功能,與自動駕駛相關(guān)。該功能以第三人稱視角為基礎(chǔ)(類似于極品飛車游戲),通過分析車輛與行人之間的距離,來判斷是否可能發(fā)生碰撞,并相應(yīng)地引導汽車進行停車或轉(zhuǎn)向的動作。

Mediapipe實時3D目標檢測和跟蹤(自動駕駛實現(xiàn))

import cv2
import mediapipe as mp
import time

mp_objectron = mp.solutions.objectron
mp_holistic = mp.solutions.holistic
mp_drawing = mp.solutions.drawing_utils

cap = cv2.VideoCapture(0)

objectron = mp_objectron.Objectron(static_image_mode=False,
                                    max_num_objects=5,
                                    min_detection_confidence=0.5,
                                    min_tracking_confidence=0.7,
                                    model_name='Car')

holistic = mp_holistic.Holistic(static_image_mode=False,
                                model_complexity=2,
                                min_detection_confidence=0.5,
                                min_tracking_confidence=0.5)

# 車輛狀態(tài)類
class CarState:
    def __init__(self):
        self.position = None
        self.rotation = None

# 行人狀態(tài)類
class PedestrianState:
    def __init__(self, position):
        self.position = position

# 避障系統(tǒng)類
class ObstacleAvoidanceSystem:
    def __init__(self):
        self.car_state = CarState()
        self.pedestrians = []

    def update_car_state(self, car_position, car_rotation):
        self.car_state.position = car_position
        self.car_state.rotation = car_rotation

    def update_pedestrians(self, pedestrian_positions):
        self.pedestrians = []
        for position in pedestrian_positions:
            pedestrian = PedestrianState(position)
            self.pedestrians.append(pedestrian)

    def check_collision(self):
        if self.car_state.position is not None:
            for pedestrian in self.pedestrians:
                # 在這里實現(xiàn)碰撞檢測邏輯
                # 根據(jù)車輛和行人的位置進行碰撞檢測
                if pedestrian.position is not None:
                    distance = calculate_distance(self.car_state.position, pedestrian.position)
                    if distance < 2.0:  # 示例:定義碰撞距離為2米
                        return True
        return False

# 輔助函數(shù):計算兩個點之間的距離
def calculate_distance(point1, point2):
    x1, y1, z1 = point1
    x2, y2, z2 = point2
    distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2 + (z2 - z1) ** 2) ** 0.5
    return distance

# 自動駕駛系統(tǒng)類
class AutonomousDrivingSystem:
    def __init__(self):
        self.obstacle_avoidance_system = ObstacleAvoidanceSystem()

    def process_frame(self, frame):
        frame.flags.writeable = False
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        # 對車輛進行檢測和姿態(tài)估計
        objectron_results = objectron.process(frame)
        car_position = None
        car_rotation = None
        if objectron_results.detected_objects:
            for detected_object in objectron_results.detected_objects:
                car_position = detected_object.translation
                car_rotation = detected_object.rotation

                mp_drawing.draw_landmarks(frame,
                                          detected_object.landmarks_2d,
                                          mp_objectron.BOX_CONNECTIONS)

                mp_drawing.draw_axis(frame,
                                     detected_object.rotation,
                                     detected_object.translation)

        # 對行人進行檢測和姿態(tài)估計
        holistic_results = holistic.process(frame)
        pedestrian_positions = []
        if holistic_results.pose_landmarks:
            for landmark in holistic_results.pose_landmarks.landmark:
                pedestrian_positions.append((landmark.x, landmark.y, landmark.z))

            mp_drawing.draw_landmarks(frame,
                                      holistic_results.pose_landmarks,
                                      mp_holistic.POSE_CONNECTIONS)

        # 更新避障系統(tǒng)的車輛狀態(tài)和行人狀態(tài)
        self.obstacle_avoidance_system.update_car_state(car_position, car_rotation)
        self.obstacle_avoidance_system.update_pedestrians(pedestrian_positions)

        # 檢測碰撞
        if self.obstacle_avoidance_system.check_collision():
            # 在這里實現(xiàn)避免碰撞的控制邏輯
            # 示例:停車和避讓行人
            control_command = ControlCommand(0.0, 0.0)  # 停車
        else:
            # 在這里實現(xiàn)正常行駛的控制邏輯
            # 示例:設(shè)定一定的車速和轉(zhuǎn)向角度
            control_command = ControlCommand(0.5, 0.0)

        # 在圖像上顯示控制指令
        cv2.putText(frame, f"Speed: {control_command.speed} m/s", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.putText(frame, f"Steering Angle: {control_command.steering_angle} deg", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

        frame.flags.writeable = True
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
        return frame
        
#主函數(shù)控制器
class MainController:
    def init(self):
        self.autonomous_driving_system = AutonomousDrivingSystem()

    def run(self):
        while cap.isOpened():
            success, frame = cap.read()
            if not success:
                break

            frame = self.autonomous_driving_system.process_frame(frame)

            cv2.imshow('MediaPipe Objectron', cv2.flip(frame, 1))
            if cv2.waitKey(10) & 0xFF == ord('q'):
                break

        cap.release()
        cv2.destroyAllWindows()

#主函數(shù)
if name == 'main':
    main_controller = MainController()
    main_controller.run()

這段代碼是一個基于媒體管道(MediaPipe)的自動駕駛系統(tǒng)的簡單實現(xiàn)。以下是代碼的詳細思路:文章來源地址http://www.zghlxwxcb.cn/news/detail-484177.html

  1. 導入所需的庫,包括cv2、mediapipe和time。
  2. 初始化MediaPipe的對象:Objectron和Holistic,用于檢測和跟蹤車輛和行人。
  3. 定義了三個類:CarState、PedestrianState和ObstacleAvoidanceSystem,分別表示車輛狀態(tài)、行人狀態(tài)和避障系統(tǒng)。
  4. ObstacleAvoidanceSystem類包含了更新車輛狀態(tài)和行人狀態(tài)的方法,以及碰撞檢測的方法。
  5. 輔助函數(shù)calculate_distance用于計算兩個點之間的距離。
  6. AutonomousDrivingSystem類是自動駕駛系統(tǒng)的主要類,包含了處理每幀圖像的方法。
  7. process_frame方法中,首先將幀轉(zhuǎn)換為RGB顏色空間,并通過Objectron檢測和估計車輛的位置和旋轉(zhuǎn)。
  8. 然后通過Holistic檢測和估計行人的位置。
  9. 更新避障系統(tǒng)的車輛狀態(tài)和行人狀態(tài)。
  10. 進行碰撞檢測,如果發(fā)生碰撞,執(zhí)行停車和避讓行人的控制邏輯;如果沒有碰撞,執(zhí)行正常行駛的控制邏輯。
  11. 在圖像上顯示控制指令,包括車速和轉(zhuǎn)向角度。
  12. 最后,將處理后的幀顯示在窗口中,直到按下鍵盤上的"q"鍵退出。
  13. 主函數(shù)MainController初始化自動駕駛系統(tǒng),并運行主循環(huán)。

到了這里,關(guān)于Mediapipe實時3D目標檢測和跟蹤(自動駕駛實現(xiàn))的文章就介紹完了。如果您還想了解更多內(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)文章

  • [論文閱讀]MV3D——用于自動駕駛的多視角3D目標檢測網(wǎng)絡(luò)

    [論文閱讀]MV3D——用于自動駕駛的多視角3D目標檢測網(wǎng)絡(luò)

    Multi-View 3D Object Detection Network for Autonomous Driving 用于自動駕駛的多視角3D目標檢測網(wǎng)絡(luò) 論文網(wǎng)址:MV3D 這篇論文提出了一個多視角3D目標檢測網(wǎng)絡(luò)(MV3D),用于自動駕駛場景下高精度的3D目標檢測。主要的創(chuàng)新點有: 提出了一種緊湊的多視角表示方法來編碼稀疏的3D點云數(shù)據(jù)。該方法

    2024年02月08日
    瀏覽(24)
  • Mediapipe人體骨架檢測和實時3d繪制——Mediapipe實時姿態(tài)估計

    Mediapipe人體骨架檢測和實時3d繪制——Mediapipe實時姿態(tài)估計

    大約兩年前,基于自己的理解我曾寫了幾篇關(guān)于Mediapipe的文章,似乎幫助到了一些人。這兩年,忙于比賽、實習、畢業(yè)、工作和考研。上篇文章已經(jīng)是一年多前發(fā)的了。這段時間收到很多私信和評論,請原諒無法一一回復了。我將嘗試在這篇文章里回答一些大家經(jīng)常問到的問

    2024年02月03日
    瀏覽(90)
  • 基于 Center 的 3D 目標檢測和跟蹤

    基于 Center 的 3D 目標檢測和跟蹤

    論文地址:https://arxiv.org/abs/2006.11275 論文代碼:https://github.com/tianweiy/CenterPoint 3D 目標通常表示為點云中的 3D Boxes。 CenterPoint 在第一階段,使用關(guān)鍵點檢測器檢測對象的中心,然后回歸到其他屬性,包括 3D 大小、3D 方向和速度; 在第二階段,它使用目標上的附加點特征來細化

    2024年02月06日
    瀏覽(16)
  • 基于opencv與mediapipe的面部跟蹤(人臉檢測追蹤)python代碼實現(xiàn)

    基于opencv與mediapipe的面部跟蹤(人臉檢測追蹤)python代碼實現(xiàn)

    ????????面部跟蹤主要是從圖像或視頻中檢測出人臉并輸出人臉位置及其大小等有效信息,并在后續(xù)幀中繼續(xù)捕獲人臉的位置及其大小等信息,實時跟蹤人臉。此技術(shù)可用于海關(guān)、機場、視頻會議、拍照對焦、面部打碼等業(yè)務(wù)場景。(與人臉識別是不同范疇) ? ? ? ? 本

    2024年01月17日
    瀏覽(30)
  • 自動駕駛感知——物體檢測與跟蹤算法|4D毫米波雷達

    自動駕駛感知——物體檢測與跟蹤算法|4D毫米波雷達

    DBSCAN: Density Based Spatial Clustering of Applications with Noise; DBSCAN是基于密度的聚類方法,對樣本分布的適應(yīng)能力比K-Means更好。 紅色的點是核心對象 黑色的點是非核心對象 注意 :距離的度量不限于點的空間距離,還可以是其它點特征,比如速度、反射強度等 基本思路 假定類別可以

    2024年02月11日
    瀏覽(24)
  • 競賽保研 多目標跟蹤算法 實時檢測 - opencv 深度學習 機器視覺

    競賽保研 多目標跟蹤算法 實時檢測 - opencv 深度學習 機器視覺

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 ?? 深度學習多目標跟蹤 實時檢測 該項目較為新穎,適合作為競賽課題方向,學長非常推薦! ??學長這里給一個題目綜合評分(每項滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點:4分 ?? 更多資料, 項目分享: https://gitee.com/dancheng-sen

    2024年01月16日
    瀏覽(96)
  • 多目標跟蹤算法 實時檢測 - opencv 深度學習 機器視覺 計算機競賽

    多目標跟蹤算法 實時檢測 - opencv 深度學習 機器視覺 計算機競賽

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 ?? 深度學習多目標跟蹤 實時檢測 該項目較為新穎,適合作為競賽課題方向,學長非常推薦! ??學長這里給一個題目綜合評分(每項滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點:4分 ?? 更多資料, 項目分享: https://gitee.com/dancheng-sen

    2024年02月05日
    瀏覽(27)
  • 互聯(lián)網(wǎng)加競賽 多目標跟蹤算法 實時檢測 - opencv 深度學習 機器視覺

    互聯(lián)網(wǎng)加競賽 多目標跟蹤算法 實時檢測 - opencv 深度學習 機器視覺

    ?? 優(yōu)質(zhì)競賽項目系列,今天要分享的是 ?? 深度學習多目標跟蹤 實時檢測 該項目較為新穎,適合作為競賽課題方向,學長非常推薦! ??學長這里給一個題目綜合評分(每項滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點:4分 ?? 更多資料, 項目分享: https://gitee.com/dancheng-sen

    2024年02月19日
    瀏覽(19)
  • OpenCV—自動駕駛實時道路車道檢測(完整代碼)

    OpenCV—自動駕駛實時道路車道檢測(完整代碼)

    自動駕駛汽車是人工智能領(lǐng)域最具顛覆性的創(chuàng)新之一。在深度學習算法的推動下,它們不斷推動我們的社會向前發(fā)展,并在移動領(lǐng)域創(chuàng)造新的機遇。自動駕駛汽車可以去傳統(tǒng)汽車可以去的任何地方,并且可以完成經(jīng)驗豐富的人類駕駛員所做的一切。但正確地訓練它是非常重要

    2024年02月06日
    瀏覽(13)
  • 解讀 | 自動駕駛系統(tǒng)中的多視點三維目標檢測網(wǎng)絡(luò)

    解讀 | 自動駕駛系統(tǒng)中的多視點三維目標檢測網(wǎng)絡(luò)

    原創(chuàng) | 文 BFT機器人? 01 背景 多視角三維物體檢測網(wǎng)絡(luò),用于實現(xiàn)自動駕駛場景高精度三維目標檢測,該網(wǎng)絡(luò)使用激光雷達點云和RGB圖像進行感知融合,以預測定向的三維邊界框,相比于現(xiàn)有技術(shù),取得了顯著的精度提升。同時現(xiàn)代自動駕駛汽車通常配備多個傳感器,如雷達

    2024年02月07日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包