今天就来看一下人脸辨识 + 物件追踪可以迸出什麽样的火花吧!
applications
目录下新增face_tracking
目录与main.py
档案main.py
:
import ntpath
import sys
# resolve module import error in PyCharm
sys.path.append(ntpath.dirname(ntpath.dirname(ntpath.dirname(ntpath.abspath(__file__)))))
import argparse
import time
import cv2
from imutils.video import WebcamVideoStream, FPS
from face_detection.dlib_mmod import detect
# 初始化OpenCV提供的追踪方法列表
OPENCV_OBJECT_TRACKERS = {
# 更准确但比kcf慢
"csrt": cv2.TrackerCSRT_create,
# 速度与准确兼备
"kcf": cv2.TrackerKCF_create,
"boosting": cv2.TrackerBoosting_create,
"mil": cv2.TrackerMIL_create,
"tld": cv2.TrackerTLD_create,
"medianflow": cv2.TrackerMedianFlow_create,
# 更快但比kcf不准
"mosse": cv2.TrackerMOSSE_create
}
def main():
ap = argparse.ArgumentParser()
ap.add_argument("-t", "--tracker", type=str,
default="kcf",
choices=["csrt", "kcf", "boosting", "mil", "tld", "medianflow", "mosse"],
help="the object tracker type")
args = vars(ap.parse_args())
# 初始化object tracker
trackers = cv2.MultiTracker_create()
# 启动WebCam
vs = WebcamVideoStream().start()
time.sleep(2.0)
fps = FPS().start()
initFace = False
while True:
# 取得当前的frame
frame = vs.read()
# 使用dlib: MMOD来侦测人脸并追踪
if not initFace:
rects = detect(frame)
for rect in rects:
print(rect)
tracker = OPENCV_OBJECT_TRACKERS[args["tracker"]]()
trackers.add(tracker, frame, rect)
initFace = True
# 物件追踪更新
(_, boxes) = trackers.update(frame)
# 侦测物件位置与画图
if len(boxes) > 0:
for box in boxes:
(x, y, w, h) = [int(b) for b in box]
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
fps.update()
fps.stop()
cv2.putText(frame, "FPS: {:.2f}".format(fps.fps()), (10, frame.shape[0] - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2)
cv2.imshow("frame", frame)
key = cv2.waitKey(1) & 0xff
# 你也可以用判断是否需要圈选物件 (按下c按键)
if key == ord('c'):
# 圈选矩形框 (需按下空白键或Enter确认)
box = cv2.selectROI("frame", frame, fromCenter=False, showCrosshair=True)
print(box)
tracker = OPENCV_OBJECT_TRACKERS[args["tracker"]]()
trackers.add(tracker, frame, box)
fps = FPS().start()
# 按下q键就离开程序
elif key == ord('q'):
break
vs.stop()
fps.stop()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
face_tracking
目录下与输入python main.py
:程序码部分应该很好理解,
我们把前面的人脸追踪功能,
与cv2.tracker
相关的逻辑合并在一起就完成今天的应用了。
你也可以透过按下
c
按键拉矩形范围与space
空白键确认,来新增一个tracker追踪物件
.
.
电脑视觉的世界还有很多问题需要克服,
但到目前也已经有很多的进展,
可以让我们尽情地去发想各式各样的应用。
期待你经过这个系列能对这个领域有些些的理解与帮助,
也期待在未来能看到你做出专属於自己的应用。
系列的原始码参考
<<: [NestJS 带你飞!] DAY28 - CORS
>>: Android Studio初学笔记-Day28-Fragment
昨天介绍了 OrderCreate,今天会把另外两个都介绍完! OrderQuery 主要功能:查询...
接着来讲讲Class一些基本概念.... 我顺序有点搞错...这个要放在物件导向前面讲的才对 1.X...
在现在这种讲求快速开发的开发模式,我们通常不太会自己将所有功能都自己硬刻出来,而是会去使用第三方的套...
这题写凌晨2、3点,本来要用c的,最後用JAVA,然後睡觉前送出去Time Limit Exceed...
Golang 玩一下html template 如果golang要使用作为网站的话,不太可能都只靠p...