1. 基于dlib库- - -检测人脸、跟踪人脸
2. 基于dlib库- - -选定目标物体,跟踪目标
代码实现
import cv2
import dlib
def main():
capture = cv2.VideoCapture(0)
detector = dlib.get_frontal_face_detector()
tractor = dlib.correlation_tracker()
tracking_state = False
while True:
ret, frame = capture.read()
if tracking_state is False:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
dets = detector(gray, 1)
if len(dets) > 0:
tractor.start_track(frame, dets[0])
tracking_state = True
if tracking_state is True:
tractor.update(frame)
position = tractor.get_position()
cv2.rectangle(frame, (int(position.left()), int(position.top())), (int(position.right()), int(position.bottom())), (0, 255, 0), 4)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
cv2.imshow("face tracking", frame)
capture.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
增加保存视频,提示信息代码:
import cv2
import dlib
def show_info(frame, tracking_state):
pos1 = (20, 40)
pos2 = (20, 80)
cv2.putText(frame,"'1' : reset", pos1, cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 255))
if tracking_state is True:
cv2.putText(frame, "tracking now....", pos2, cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 0, 0))
else:
cv2.putText(frame, "no tracking....", pos2, cv2.FONT_HERSHEY_COMPLEX, 0.5, (0, 255, 0))
def main():
capture = cv2.VideoCapture(0)
detector = dlib.get_frontal_face_detector()
tractor = dlib.correlation_tracker()
tracking_state = False
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
frame_fps = capture.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc(*"XVID")
output = cv2.VideoWriter("record.avi", fourcc, int(frame_fps), (int(frame_width), int(frame_height)), True)
while True:
ret, frame = capture.read()
show_info(frame, tracking_state)
if tracking_state is False:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
dets = detector(gray, 1)
if len(dets) > 0:
tractor.start_track(frame, dets[0])
tracking_state = True
if tracking_state is True:
tractor.update(frame)
position = tractor.get_position()
cv2.rectangle(frame, (int(position.left()), int(position.top())), (int(position.right()), int(position.bottom())), (0, 255, 0), 4)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
if key == ord('1'):
tracking_state = False
cv2.imshow("face tracking", frame)
output.write(frame)
capture.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()