資源簡介
利用Haarcascade所建立的臉部特征模型,對OpenCV處理過的幀圖像實現臉部檢測。之后,根據識別到的區域,來確定所識別到物體的中心點。根據物體的中心點和視頻畫面的中心點之間的誤差,可以確定出轉動的方向。最后通過與Arduino互聯完成舵機的驅動,并實現攝像頭對主體臉部的跟蹤。

代碼片段和文件信息
import?time
import?cv2
import?serial
import?asyncio
import?threading
class?PID:
????def?__init__(self?kP=0.1?kI=0.0?kD=0.0):
????????#?initialize?gains
????????self.kP?=?kP
????????self.kI?=?kI
????????self.kD?=?kD
????def?initialize(self):
????????#?intialize?the?current?and?previous?time
????????#?self.currTime?=?time.time()
????????#?self.prevTime?=?self.currTime
????????#?initialize?the?previous?error
????????self.prevError?=?0
????????#?initialize?the?term?result?variables
????????self.cP?=?0
????????self.cI?=?0
????????self.cD?=?0
????def?update(self?errordeltaTime):
????????#?grab?the?current?time?and?calculate?delta?time
????????self.currTime?=?time.time()
????????#?delta?error
????????deltaError?=?error?-?self.prevError
????????#?proportional?term
????????self.cP?=?error
????????#?integral?term
????????self.cI?+=?error?*?deltaTime
????????#?derivative?term?and?prevent?divide?by?zero
????????self.cD?=?(deltaError?/?deltaTime)?if?deltaTime?>?0?else?0
????????#?#?save?previous?time?and?error?for?the?next?update
????????self.prevError?=?error
????????#?sum?the?terms?and?return
????????return?sum([
????????????self.kP?*?self.cP
????????????self.kI?*?self.cI
????????????self.kD?*?self.cD])
def?conter():
????if?cap.isOpened():
????????res?img?=?cap.read()
????????(hw)?=?img.shape[:2]
????????return?h//2w//2
def?inrange(nummin=0max=180):
????return?(num?>?min?and?num?
async?def?face_capture():
????global?center_x?#人臉中心的坐標
????global?center_y
????global?deltatime
????global?Scan
????global?flag
????while?cap.isOpened():
????????pretime?=?time.time()
????????res?img?=?cap.read()
????????gray?=?cv2.cvtColor(img?cv2.COLOR_BGR2GRAY)
????????Scan?=?face.detectMultiScale(grayscaleFactor=1.3minNeighbors=3)
????????#?print(type(Scan))
????????for?(x?y?w?h)?in?Scan:
????????????cv2.rectangle(img?(x?y)?(x?+?w?y?+?h)?(255?0?0)?2)??#?依靠對角線來定矩形
????????????center_x?=?int(x?+?w/2)
????????????center_y?=?int(y?+?h?/?2)
????????cv2.imshow(“CaptureFace“img)
????????deltatime?=?time.time()-pretime
????????#?print(deltatime)
????????await??asyncio.sleep(0.01)
????????key?=?cv2.waitKey(50)?&?0xff
????????if?key?==?27:??#?ESC的ASCALL碼是27
????????????flag?=?1
????????????break
????cap.release()
????cv2.destroyAllWindows()
async?def?caculatePID():
????print(“Start“)
????global?pan_angle
????global?tilt_angle
????p1i1d1?=?0.0200.0550.00031
????#?p1i1d1?=?000
????#?p2i2d2?=?000
????p2i2d2?=?0.0220.00210.00038
????pid_pan?=?PID(p1?i1?d1)
????pid_tilt?=?PID(p2?i2?d2)
????while?flag?==?0:
????????pid_pan.initialize()
????????pid_tilt.initialize()
????????if?isinstance(Scan?tuple)?==?False:
????????????head_pan?=?pid_pan.update(cx-center_xdeltaTime=deltatime)
????????????head_tilt?=?pid_tilt.update(cy-center_ydeltaTime=deltatime)
????????else:
????????????head_pan?=?head_tilt?=?0
????????if?inrange
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-05-24?12:45??Face-tracking\
?????文件????????3933??2020-05-22?13:11??Face-tracking\FaceTracking_PID.py
?????文件??????930127??2020-03-16?11:20??Face-tracking\haarcascade_frontalface_default.xm
?????文件??????140975??2020-03-17?17:47??Face-tracking\haarcascade_frontalface_default.zip
?????文件?????????694??2020-05-09?21:10??Face-tracking\pan-tilt.ino
- 上一篇:QT項目code.rar
- 下一篇:2018最新git視頻教程
評論
共有 條評論