Xamarin.iOS에서 비전 프레임 워크Vision Framework in Xamarin.iOS

비전 프레임 워크 수가 한 iOS 11 포함 하는 기능을 처리 하는 새 이미지를 추가 합니다.The Vision framework adds a number of new image processing features to iOS 11, including:

  • 사각형 검색Rectangle Detection
  • 얼굴 감지Face Detection
  • Machine Learning 이미지 분석 (에서 설명한 CoreML)Machine Learning Image Analysis (discussed in CoreML)
  • 바코드 검색Barcode Detection
  • 이미지 맞춤 분석Image Alignment Analysis
  • 텍스트 검색Text Detection
  • 기간 검색Horizon Detection
  • 개체 검색 및 추적Object Detection & Tracking

검색 하는 세 개의 사각형이 촬영 두 개의 얼굴 감지를 사용 하 여 촬영

사각형 감지 및 얼굴 감지 아래에서 자세히 설명 합니다.Rectangle Detection and Face Detection are discussed in more detail below.

사각형 검색Rectangle Detection

합니다 VisionRects 샘플 이미지를 처리 하 고 검색 된 사각형을 그리는 방법을 보여 줍니다.The VisionRects sample shows how to process an image and draw the detected rectangles on it.

1. 비전 요청을 초기화1. Initialize the Vision request

ViewDidLoad를 만들기는 VNDetectRectanglesRequest 를 참조 하는 HandleRectangles 각 요청의 끝에서 호출할 메서드:In ViewDidLoad, create a VNDetectRectanglesRequest that references the HandleRectangles method which will be called at the end of each request:

MaximumObservations 속성도 설정 해야, 그렇지 않으면 1로 기본 설정 됩니다 및 하나의 결과만 반환 됩니다.The MaximumObservations property should also be set, otherwise it will default to 1 and only a single result will be returned.

RectangleRequest = new VNDetectRectanglesRequest(HandleRectangles);
RectangleRequest.MaximumObservations = 10;

2. 비전 처리 시작2. Start the Vision processing

다음 코드는 요청 처리를 시작 합니다.The following code starts processing the request. VisionRects 샘플에서이 코드는 사용자가 이미지를 선택한 후에 실행 합니다.In the VisionRects sample, this code runs after the user has selected an image:

// Run the rectangle detector
var handler = new VNImageRequestHandler(ciImage, uiImage.Orientation.ToCGImagePropertyOrientation(), new VNImageOptions());
DispatchQueue.DefaultGlobalQueue.DispatchAsync(()=>{
  handler.Perform(new VNRequest[] {RectangleRequest}, out NSError error);
});

이 처리기에 전달 합니다 ciImage 비전 framework VNDetectRectanglesRequest 1 단계에서 생성 된 합니다.This handler passes the ciImage to the Vision framework VNDetectRectanglesRequest that was created in step 1.

3. 비전 처리의 결과 처리 합니다.3. Handle the results of Vision processing

사각형 검색이 완료 되 면 프레임 워크 실행을 HandleRectangles 메서드를 간략하게 설명 하는 다음과 같습니다.Once the rectangle detection is complete, the framework executes the HandleRectangles method, a summary of which is shown below:

private void HandleRectangles(VNRequest request, NSError error){
  var observations = request.GetResults<VNRectangleObservation>();
  // ... omitted error handling ...
  bool atLeastOneValid = false;
  foreach (var o in observations){
    if (InputImage.Extent.Contains(boundingBox)) {
      atLeastOneValid |= true;
    }
  }
  if (!atLeastOneValid) return;
  // Show the pre-processed image
  DispatchQueue.MainQueue.DispatchAsync(() =>
  {
    ClassificationLabel.Text = summary;
    ImageView.Image = OverlayRectangles(RawImage, imageSize, observations);
  });
}

4. 결과 표시 합니다.4. Display the results

합니다 OverlayRectangles 의 메서드를 VisionRectangles 샘플에는 세 가지 기능:The OverlayRectangles method in the VisionRectangles sample has three functions:

  • 원본 이미지를 렌더링합니다.Rendering the source image,
  • 각각 검색 된 위치를 나타내는 사각형을 그리기 및Drawing a rectangle to indicate where each one was detected, and
  • CoreGraphics를 사용 하 여 각 사각형에 대 한 텍스트 레이블을 추가 합니다.Adding a text label for each rectangle using CoreGraphics.

보기는 샘플의 소스 정확한 CoreGraphics 메서드에 대 한 합니다.View the sample's source for the exact CoreGraphics method.

검색 하는 세 개의 사각형이 촬영

5. 추가 처리5. Further processing

사각형 감지 된 종종 작업의 체인에서 첫 번째 단계 일 뿐와 같은 CoreMLVision 예제사각형 필기 숫자를 구문 분석 하는 CoreML 모델에 전달 되는 위치입니다.Rectangle detection is often just the first step in a chain of operations, such as with this CoreMLVision example, where the rectangles are passed to a CoreML model to parse handwritten digits.

얼굴 감지Face Detection

합니다 VisionFaces 샘플 비슷한 방식으로 작동 합니다 VisionRectangles 다른 비전 요청 클래스를 사용 하 여 샘플.The VisionFaces sample works in a similar fashion to the VisionRectangles sample, using a different Vision request class.

1. 비전 요청을 초기화1. Initialize the Vision request

ViewDidLoad, 만들기를 VNDetectFaceRectanglesRequest 를 참조 하는 HandleRectangles 메서드 각 요청의 끝에 호출 됩니다.In ViewDidLoad, create a VNDetectFaceRectanglesRequest that references the HandleRectangles method which will be called at the end of each request.

FaceRectangleRequest = new VNDetectFaceRectanglesRequest(HandleRectangles);

2. 비전 처리 시작2. Start the Vision processing

다음 코드는 요청 처리를 시작 합니다.The following code starts processing the request. VisionFaces 이 코드는 사용자가 이미지를 선택한 후에 실행 하는 샘플:In the VisionFaces sample this code runs after the user has selected an image:

// Run the face detector
var handler = new VNImageRequestHandler(ciImage, uiImage.Orientation.ToCGImagePropertyOrientation(), new VNImageOptions());
DispatchQueue.DefaultGlobalQueue.DispatchAsync(()=>{
  handler.Perform(new VNRequest[] {FaceRectangleRequest}, out NSError error);
});

이 처리기에 전달 합니다 ciImage 비전 framework VNDetectFaceRectanglesRequest 1 단계에서 생성 된 합니다.This handler passes the ciImage to the Vision framework VNDetectFaceRectanglesRequest that was created in step 1.

3. 비전 처리의 결과 처리 합니다.3. Handle the results of Vision processing

얼굴 검색 완료 되 면 처리기를 실행 합니다 HandleRectangles 오류 처리를 수행 하 고 검색 된 얼굴 및 호출의 범위를 표시 하는 메서드는 OverlayRectangles 원래 그림의 경계 사각형을 그릴 수:Once the face detection is complete, the handler executes the HandleRectangles method which performs error handling and displays the bounds of the detected faces, and calls the OverlayRectangles to draw bounding rectangles on the original picture:

private void HandleRectangles(VNRequest request, NSError error){
  var observations = request.GetResults<VNFaceObservation>();
  // ... omitted error handling...
  var summary = "";
  var imageSize = InputImage.Extent.Size;
  bool atLeastOneValid = false;
  Console.WriteLine("Faces:");
  summary += "Faces:";
  foreach (var o in observations) {
    // Verify detected rectangle is valid. omitted
    var boundingBox = o.BoundingBox.Scaled(imageSize);
    if (InputImage.Extent.Contains(boundingBox)) {
      atLeastOneValid |= true;
    }
  }
  // Show the pre-processed image (on UI thread)
  DispatchQueue.MainQueue.DispatchAsync(() =>
  {
    ClassificationLabel.Text = summary;
    ImageView.Image = OverlayRectangles(RawImage, imageSize, observations);
  });
}

4. 결과 표시 합니다.4. Display the results

합니다 OverlayRectangles 의 메서드를 VisionFaces 샘플에는 세 가지 기능:The OverlayRectangles method in the VisionFaces sample has three functions:

  • 원본 이미지를 렌더링합니다.Rendering the source image,
  • 검색의 각 얼굴에 대 한 사각형을 그리기 및Drawing a rectangle for each face detected, and
  • CoreGraphics를 사용 하 여 각 얼굴에 대 한 텍스트 레이블을 추가 합니다.Adding a text label for each face using CoreGraphics.

보기는 샘플의 소스 정확한 CoreGraphics 메서드에 대 한 합니다.View the sample's source for the exact CoreGraphics method.

두 개의 얼굴 감지를 사용 하 여 촬영

5. 추가 처리5. Further processing

비전 프레임 워크는 눈 등 입 얼굴 특징을 검색 하려면 추가 기능을 포함 합니다.The Vision framework includes additional capabilities to detect facial features, such as the eyes and mouth. 사용 된 VNDetectFaceLandmarksRequest 형식을 반환 하는 VNFaceObservation 위의 3 단계와 이지만 추가 결과 VNFaceLandmark 데이터입니다.Use the VNDetectFaceLandmarksRequest type, which will return VNFaceObservation results as in step 3 above, but with additional VNFaceLandmark data.