日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

基于大疆EP和Opencv完成人脸跟随项目

發布時間:2023/12/31 pytorch 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于大疆EP和Opencv完成人脸跟随项目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于大疆EP和Opencv完成人臉跟隨項目

    • 知識儲備
    • 實現步驟
    • 環境安裝
    • 具體步驟
    • 總體代碼

知識儲備

我們需要了解三方面的知識,第一方面是python的語法結構,也是最基礎的,第二方面是opencv的基礎知識,第三方面就是大疆的SDK啦,只有我們具備了這些知識,就可以簡單完成人臉識別項目啦。
Opencv學習網站https://www.bilibili.com/video/BV1oJ411D71z
大疆EP的開發者文檔網址https://robomaster-dev.readthedocs.io/zh_CN/latest/
至于python的語法結構,大家可以到MOOC,嗶哩嗶哩等地方找資源哦,適合自己的才是最好的哦

實現步驟

連接EP——獲取EP圖像——處理EP圖像——獲得人臉坐標——控制云臺運動
下面我們就開始吧。

環境安裝

安裝python請參考https://blog.csdn.net/qq_43603247/article/details/105520688
在運行程序的時候我們需要在python安裝robomaster庫和opencv庫
安裝robomaster庫 在電腦的cmd輸入pip install robomaster
在使用SDK時候需要安裝VC,不然會出現下面的錯誤

需要安裝VC,下載地址https://github.com/dji-sdk/robomaster-sdk
安裝opencv : pip install opencv-python

具體步驟

1.連接EP,在大疆的開發者文檔里有
WiFi 直連

import robomaster from robomaster import robotif __name__ == '__main__':# 如果本地IP 自動獲取不正確,手動指定本地IP地址# robomaster.config.LOCAL_IP_STR = "192.168.2.20"ep_robot = robot.Robot()# 指定連接方式為AP 直連模式ep_robot.initialize(conn_type='ap')version = ep_robot.get_version()print("Robot version: {0}".format(version))ep_robot.close()

其他連接方法請參考大疆的SDK開發文檔
2.獲取EP的視頻流-該項目顯示200幀的視頻流

// An highlighted block import time import cv2 import robomaster from robomaster import robotif __name__ == '__main__':ep_robot = robot.Robot()ep_robot.initialize(conn_type="sta")ep_camera = ep_robot.camera# 顯示200幀圖傳ep_camera.start_video_stream(display=False)for i in range(0, 200):img = ep_camera.read_cv2_image()cv2.imshow("Robot", img)cv2.waitKey(1)cv2.destroyAllWindows()ep_camera.stop_video_stream()ep_robot.close()

3.處理EP圖像并獲取人臉坐標

def shibei():global RLzhongxi_x,RLzhongxi_y #定義兩個全局變量,用來儲存人臉的坐標cv2.namedWindow("img", 1) #新建一個顯示窗口cv2.resizeWindow("img", 800, 400) #圖像框的大小ret,img=cap.read()#vc.read()讀取圖片的第一幀 返回兩個值,第一個值是true或者false,判斷有沒有讀取到,第二個值是當前的一幀圖像gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#將讀取到的值轉化為灰度圖faces = face_cascade.detectMultiScale(gray,1.1,5)#檢測出圖片中所有的人臉,并將人臉的各個坐標保持到faces里if len(faces)>0:#判斷是否檢測到人臉for faceRect in faces: #依次讀取faces的值x,y,w,h = faceRectcv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),3)#繪制人臉框roi_gray = gray[y:y+h//2,x:x+w]roi_color = img[y:y+h//2,x:x+w]RLzhongxi_x = x+w/2 #獲取人臉中心坐標RLzhongxi_y = y+h/2eyes = eye_cascade.detectMultiScale(roi_gray,1.1,1,cv2.CASCADE_SCALE_IMAGE,(2,2))#檢測眼睛for (ex,ey,ew,eh) in eyes:cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)#繪制眼睛框cv2.imshow("img",img)#顯示圖像return RLzhongxi_x,RLzhongxi_y#返回人臉中心坐標

4.控制云臺運動
云臺有兩個軸,分別是航向軸和俯仰軸,航向軸是圍繞的y軸轉動,俯仰軸是圍繞x軸轉動,我們要做的是控制兩個軸轉到人臉的中心。

// An highlighted block def Error():RLzhongxi_x_1=centre[0]#將上面的值傳到這里RLzhongxi_y_1=centre[1]TXzhongxi_x=400 #整個圖像的中心坐標TXzhongxi_y=200error_x=TXzhongxi_x-RLzhongxi_x_1 #偏航軸的的誤差error_y=TXzhongxi_y-RLzhongxi_y_1#俯仰軸的誤差if abs(error_x) < 10:#判斷誤差是否小于10,如果小于默認為到達人臉中心yaw0_speed = 0else:yaw0_speed = KP*error_x#輸出偏航軸的速度if abs(error_y) < 10:pitch0_speed = 0else:pitch0_speed = -KP*error_y#輸出俯仰軸的速度print("yaw的速度:",yaw0_speed)print("Pitch的速度:",pitch0_speed)ep_gimbal.drive_speed(pitch_speed='{pitch}', yaw_speed='{yaw}'.format(pitch=pitch0_speed,yaw=yaw0_speed))#控制云臺

總體代碼

#導入需要用到的庫 import cv2 import numpy as np import wave import re import socket import sys import numpy as np #創建新的對象 ep_robot = robot.Robot()# 指定連接方式為AP 直連模式,初始化 ep_robot.initialize(conn_type='ap') #開始獲取視頻流,但是不播放 ep_camera.start_video_stream(display=False)#設置模式為自由模式 ep_robot.set_robot_mode(mode=robot.FREE)#獲取官方提供的特征庫,根據自己電腦設置路徑 face_cascade = cv2.CascadeClassifier("D://python38//Lib//site-packages//cv2//data//haarcascade_frontalface_default.xml") eye_cascade = cv2.CascadeClassifier("D://python38//Lib//site-packages//cv2//data//haarcascade_eye.xml") KP = 0.15#比例系數,讓云臺轉的慢一點def shibei():global RLzhongxi_x,RLzhongxi_y #定義兩個全局變量,用來儲存人臉的坐標cv2.namedWindow("img", 1) #新建一個顯示窗口cv2.resizeWindow("img", 800, 400) #圖像框的大小 img = ep_camera.read_cv2_image()#獲取視頻流的一幀圖像gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#將讀取到的值轉化為灰度圖faces = face_cascade.detectMultiScale(gray,1.1,5)#檢測出圖片中所有的人臉,并將人臉的各個坐標保持到faces里if len(faces)>0:#判斷是否檢測到人臉for faceRect in faces: #依次讀取faces的值x,y,w,h = faceRectcv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),3)#繪制人臉框roi_gray = gray[y:y+h//2,x:x+w]roi_color = img[y:y+h//2,x:x+w]RLzhongxi_x = x+w/2 #獲取人臉中心坐標RLzhongxi_y = y+h/2eyes = eye_cascade.detectMultiScale(roi_gray,1.1,1,cv2.CASCADE_SCALE_IMAGE,(2,2))#檢測眼睛for (ex,ey,ew,eh) in eyes:cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)#繪制眼睛框cv2.imshow("img",img)#顯示圖像cv2.waitKey(2)#每兩幀的間隔時間return RLzhongxi_x,RLzhongxi_y#返回人臉中心坐標def Error():RLzhongxi_x_1=centre[0]#將上面的值傳到這里RLzhongxi_y_1=centre[1]TXzhongxi_x=400 #整個圖像的中心坐標TXzhongxi_y=200error_x=TXzhongxi_x-RLzhongxi_x_1 #偏航軸的的誤差error_y=TXzhongxi_y-RLzhongxi_y_1#俯仰軸的誤差if abs(error_x) < 10:#判斷誤差是否小于10,如果小于默認為到達人臉中心yaw0_speed = 0else:yaw0_speed = KP*error_x#輸出偏航軸的速度if abs(error_y) < 10:pitch0_speed = 0else:pitch0_speed = -KP*error_y#輸出俯仰軸的速度print("yaw的速度:",yaw0_speed)print("Pitch的速度:",pitch0_speed)ep_gimbal.drive_speed(pitch_speed='{pitch}', yaw_speed='{yaw}'.format(pitch=pitch0_speed,yaw=yaw0_speed))#控制云臺while True:shibei()centre = shibei()Error()

因為EP借出去了,沒有測試過新版的SDK,以前就舊的SDK是可以用的,如果有問題,希望大家指正,謝謝,微信:13580449720

總結

以上是生活随笔為你收集整理的基于大疆EP和Opencv完成人脸跟随项目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。