2017-12-26 38 views
1

터치 포인트에서 "inputFocusRect"값을 설정하는 올바른 방법을 찾을 수 없습니다. 나는CIDepthBlurEffect : setting inputFocusRect

@IBAction func imageTapped(_ sender: UITapGestureRecognizer) { 
    var touchPoint = sender.location(in: self.imageView) 
    imageTapCoordinates = CIVector(cgPoint: touchPoint) 

를 사용하여 터치 포인트를 잡는거야 내가 통과하는 별도의 흐림 기능에 CIFilter합니다.

filter?.setValue(imageTapCoordinates, forKey: "inputFocusRect") 

그러나 좌표계가 일치하지 않는 것 같습니다. "inputFocusRect"를 결정하는 가장 좋은 방법은 무엇입니까? 애플은이 사이트에 많은 문서를 가지고 있지 않다 ...

고마워!

+0

조금 더 많은 코드를 게시하십시오. CIDepthBlurEffect라는 CIFilter가 없습니다. https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/uid/TP40004346 – dfd

+0

또한 CoreImage 필터의 Y 축 좌표가 " 원래대로 (X == 0, Y == 0)는 왼 J * 맨 위 *가 아닌 왼쪽 * *에 있습니다. – dfd

+0

iOS11의 새로운 필터입니다! WWDC에 대한 이야기는 여기를 참조하십시오. https://developer.apple.com/videos/play/wwdc2017/508/ –

답변

0

길이와 형식이 더 좋으므로 답변으로 게시하십시오.

TL;

이 필터는 입력 이미지와 CoreML 또는 얼굴 인식의 Vision 프레임 워크 출력을 두 개 (또는 그 이상)의 입력으로 예상 할 수 있습니다.

내 생각에 inputFocusRect, CIVector (원점이 왼쪽 하단에있는 반전 된 좌표)은 CoreML 또는 Vision 프레임 워크 출력이 더 큰 이미지에서 얼굴을 인식 한 곳입니다.

설명 :

CIDepthBlurEffect는 아이폰 OS (11) 또는 맥 OS 10.3에서 사용할 수있는 새로운 필터입니다. 실제로 그것은 아주 새롭다, Apple는 아직 그것을 위해 그들의 CI Filter Reference를 새롭게하지 않았다.

나는 내가 무엇을 찾을 수 있는지 투기해야했다. 그것은 오히려 간단한 코드입니다. 필터의 인스턴스를 생성 해, 그 속성을 출력합니다. 사용 가능한 필터 (모든 또는 특정 카테고리)에 대한 장치를 조회 표시 이름 등을 얻을 수있는 특정 속성을 사용 -

let filter = CIFilter(name: "CIDepthBlurEffect") 
print(filter?.attributes) 

는이 작업을 수행하는 더 나은 방법이 있습니다, 이해합니다. 내 의도는이 질문에 내가 할 수있는 것을 제공하는 것이었다. "덤프"는 사전 요소 배열 [String:Any]을 가져 오며 여기에는 형식이 지정되지 않습니다. 수동 서식 수율이 - 2 CIImages 5 CIVectors 1 NSDictionaryNSNumbers 3, 1 AVCameraCalibrationData

[ 
    "inputRightEyePositions": { 
     CIAttributeClass = CIVector; 
     CIAttributeDisplayName = "Right Eye Positions"; 
     CIAttributeType = CIAttributeTypePosition; 
    }, 
    "inputCalibrationData": { 
     CIAttributeClass = AVCameraCalibrationData; 
     CIAttributeDisplayName = CalibrationData; 
    }, 
    "inputImage": { 
     CIAttributeClass = CIImage; 
     CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image."; 
     CIAttributeDisplayName = Image; 
     CIAttributeType = CIAttributeTypeImage; 
    }, 
    "inputChinPositions": { 
     CIAttributeClass = CIVector; 
     CIAttributeDisplayName = "Chin Positions"; 
     CIAttributeType = CIAttributeTypePosition; 
    }, 
    "inputLeftEyePositions": { 
     CIAttributeClass = CIVector; 
     CIAttributeDisplayName = "Left Eye Positions"; 
     CIAttributeType = CIAttributeTypePosition; 
    }, 
    "inputAuxDataMetadata": { 
     CIAttributeClass = NSDictionary; 
     CIAttributeDisplayName = AuxDataMetadata; 
    }, 
    "CIAttributeFilterAvailable_Mac": 10.13, 
    "CIAttributeFilterName": CIDepthBlurEffect, 
    "CIAttributeReferenceDocumentation": http://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIDepthBlurEffect, 
    "inputAperture": { 
     CIAttributeClass = NSNumber; 
     CIAttributeDefault = 0; 
     CIAttributeDisplayName = Aperture; 
     CIAttributeMax = 22; 
     CIAttributeMin = 0; 
     CIAttributeSliderMax = 22; 
     CIAttributeSliderMin = 1; 
     CIAttributeType = CIAttributeTypeScalar; 
    }, 
    "CIAttributeFilterDisplayName": Depth Blur Effect, 
    "CIAttributeFilterAvailable_iOS": 11, 
    "inputNosePositions": { 
     CIAttributeClass = CIVector; 
     CIAttributeDisplayName = "Nose Positions"; 
     CIAttributeType = CIAttributeTypePosition; 
    }, 
    "inputLumaNoiseScale": { 
     CIAttributeClass = NSNumber; 
     CIAttributeDefault = 0; 
     CIAttributeDisplayName = "Luma Noise Scale"; 
     CIAttributeMax = "0.1"; 
     CIAttributeMin = 0; 
     CIAttributeSliderMax = "0.1"; 
     CIAttributeSliderMin = 0; 
     CIAttributeType = CIAttributeTypeScalar; 
    }, 
    "inputScaleFactor": { 
     CIAttributeClass = NSNumber; 
     CIAttributeDefault = 1; 
     CIAttributeDisplayName = "Scale Factor"; 
     CIAttributeSliderMax = 1; 
     CIAttributeSliderMin = 0; 
     CIAttributeType = CIAttributeTypeScalar; 
    }, 
    "inputFocusRect": { 
     CIAttributeClass = CIVector; 
     CIAttributeDisplayName = "Focus Rectangle"; 
     CIAttributeIdentity = "[-8.98847e+307 -8.98847e+307 1.79769e+308 1.79769e+308]"; 
     CIAttributeType = CIAttributeTypeRectangle; 
    }, 
    "inputDisparityImage": { 
     CIAttributeClass = CIImage; 
     CIAttributeDisplayName = DisparityImage; 
    }, 
    "CIAttributeFilterCategories": <__NSArrayI 0x1c46588a0>(
     CICategoryBlur, 
     CICategoryVideo, 
     CICategoryStillImage, 
     CICategoryBuiltIn 
    ) 

I은 ​​12 입력 수를 카운트.

일부는 꽤 쉽게 해독됩니다 ... 카메라, 이미지, 이미지 메타 데이터 및 얼굴 구성 요소를 처리합니다. 일부는 그렇게 적지 만, Vision 프레임 워크에 더 깊숙이 들어있는 누군가는 더 많이 알고 있습니다. (! 그렇지 않으면, 어쩌면 그 모습 수있는 좋은 장소가)

특히, 내 질문은 :

  • 은 무엇 정확하게 inputDisparityImage입니까?
  • nil 또는 chi 위치를 찾을 수 없다고 예상되는 다양한 입력 얼굴 기능은 무엇입니까?

이것은 많은 SO 표준에 의한 대답이 아니며 아래로 투표하면 기꺼이 삭제할 것입니다. 그러나 에 대한 아이디어를 제공하고 싶습니다.은 필터의 속성을 파악하고 도움을 받으려합니다.

CoreML 및 Vision 프레임 워크에 대한 지식이 거의 없습니다. 나는 그들 뒤에있는 개념을 이해하고, 이미지 (또는 비디오)를보고, 을 발견/인식하는 것을 모두 두들겨 봤다.은 무엇인가이며 (일반적으로) 확신 요인을 제공한다.

얼굴 특징에 대한 다른 입력도 CIVectors이기 때문에 inputFocusRect은 전체 얼굴이 감지 된 지점이라고 생각합니다. Vision 프레임 워크가이 출력을이 필터와 긴밀하게 통합되도록 쉽게 제공 할 수 있습니다.

마지막으로, 으로 속성 내에서 문서 링크를 시도했는데 비어 있습니다.

+0

질문에 대한 대부분의 답변은이 비디오에서 확인할 수 있습니다. https://developer.apple.com/videos/play/wwdc2017/508 /? time = 1279 –