2016-07-20 14 views
1

問題是我的代碼只能用於一張臉。如果我拍了兩張臉的照片,它不會檢測到第二張臉,而對於兩張以上的臉也是如此。這裏是我的代碼:CIFaceFeature只檢測一張臉

if let inputImage = imageView.image { 
     let ciImage = CIImage(CGImage: inputImage.CGImage!) 

     let options = [CIDetectorAccuracy: CIDetectorAccuracyHigh] 
     let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: options) 

     let faces = faceDetector.featuresInImage(ciImage) 

     if let face = faces.first as? CIFaceFeature { 
      print("Found face at \(face.bounds)") 

      if face.hasLeftEyePosition { 
       print("Found left eye at \(face.leftEyePosition)") 
      } 

      if face.hasRightEyePosition { 
       print("Found right eye at \(face.rightEyePosition)") 
      } 

      if face.hasMouthPosition { 
       print("Found mouth at \(face.mouthPosition)") 
      } 
     } 
     print("\(faces.count)") 
    } 
+2

'if let face = faces.first'確實只有一張臉,因爲*你*只能在第一張臉上工作。 ;) – Moritz

+0

@EricD,所以我需要通過運行一個循環來修復它,直到計算完面的數量爲止? –

回答

0

您的問題是,你只上發現的第一面的工作,因爲這一點:

if let face = faces.first as? CIFaceFeature { 

因此,例如,相反,你可以使用一個循環和迭代這個數組,像這樣:

for item in faces { 
    if let face = item as? CIFaceFeature { 
     print("Found face at \(face.bounds)") 

     if face.hasLeftEyePosition { 
      print("Found left eye at \(face.leftEyePosition)") 
     } 

     if face.hasRightEyePosition { 
      print("Found right eye at \(face.rightEyePosition)") 
     } 

     if face.hasMouthPosition { 
      print("Found mouth at \(face.mouthPosition)") 
     } 
    } 
} 

還是這個樣子,稍微好一點:

if let faces = faceDetector.featuresInImage(ciImage) as? [CIFaceFeature] { 
    for face in faces { 
     print("Found face at \(face.bounds)") 

     if face.hasLeftEyePosition { 
      print("Found left eye at \(face.leftEyePosition)") 
     } 

     if face.hasRightEyePosition { 
      print("Found right eye at \(face.rightEyePosition)") 
     } 

     if face.hasMouthPosition { 
      print("Found mouth at \(face.mouthPosition)") 
     } 
    } 
} 
+0

非常感謝!你幫我解決了這個問題 –

+0

很酷!別客氣。 – Moritz