def detectCascade(self, img, roiOnly=False):
if roiOnly:
searchArea = self.getSubRect(img, self.trackedFaceROI)
else:
searchArea = img
width = searchArea.shape[0]
faces = self.faceCascade.detectMultiScale(searchArea,
scaleFactor = settings.cascadeScaleFactor,
minNeighbors = settings.cascadeMinNeighbors,
minSize = (int(width*settings.minimumFaceSize), int(width*settings.minimumFaceSize)),
maxSize = (int(width*settings.maximumFaceSize), int(width*settings.maximumFaceSize)))
if len(faces) == 0:
if roiOnly and not self.isTemplateMatchingRunning:
self.isTemplateMatchingRunning = True
self.templateMatchingStartTime = cv2.getTickCount()
elif not roiOnly:
self.foundFace = False
self.trackedFace = None;
return
self.foundFace=True
# track only the largest face
self.trackedFace = self.largestFace(faces)
# adjust face position if necessary
if roiOnly:
self.trackedFace[0] += self.trackedFaceROI[0]
self.trackedFace[1] += self.trackedFaceROI[1]
self.trackedFaceTemplate = self.scaleRect(self.trackedFace, img, 0.5)
self.trackedFaceROI = self.scaleRect(self.trackedFace, img, 2)
评论列表
文章目录