Python 为每个面指定id

Python 为每个面指定id,python,opencv,Python,Opencv,Im使用以下代码检测人脸。检测后,我在脸周围画矩形。然后,我分配了脸的id,这是脸的编号。如果有两个面,一个面的面id为1,另一个面id为2。下面是我的代码 detections = face_cascade.detectMultiScale( gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE ) # Draw a rectangl

Im使用以下代码检测人脸。检测后,我在脸周围画矩形。然后,我分配了脸的id,这是脸的编号。如果有两个面,一个面的面id为1,另一个面id为2。下面是我的代码

detections = face_cascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags=cv2.CASCADE_SCALE_IMAGE
)

# Draw a rectangle around the faces
for (x, y, w, h) in detections:
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    face_no = detections.shape[0];

    cv2.putText(frame, str(face_no), (x, y - 30), cv2.FONT_HERSHEY_TRIPLEX,
                .7, (0, 0, 0), 1, cv2.LINE_AA)

但此代码始终返回面总数。如何获取每个面的编号?

如果使用
检测。shape[0]
每次都将获得相同的值,因为其中没有根据循环变化的变量。您可以做的是使用
enumerate
标记面,它将
face\u no
设置为循环迭代次数:

用于枚举(检测)中的面号(x、y、w、h):
cv2.矩形(框架,(x,y),(x+w,y+h),(0,255,0),2)
cv2.putText(框架,str(面号),(x,y-30),cv2.FONT\u HERSHEY\u三联,
.7,(0,0,0),1,cv2.线_AA)

检测
是检测到的面列表,而
len(检测)
应提供面数。因此,
detections[i]
是第i个面,使i成为该面的ID

如果您的循环更改为

for i in range(o,len(detections):
    faceID = i
    currentFace = detections[i]

依此类推,您可以通过ID访问它们。

这样我想区分各个面,以便可以分别处理每个面。Thx。。如何获得dlib中的x1、y1、x2、y2、w、h坐标?使用opencv的人脸检测器,可以获得检测[i].x、检测[i].y、检测[i].w和检测[i].h。如果你想要X2和y2,可以用上面四个来计算。非常感谢。我已经计算过了。是否可以以秒为单位确定检测人脸的时间?如果是,我应该尝试哪个函数?在目标c中,我们有NSTimer。在python中,我们用什么来计算秒数?