Vision Framework v Xamarin.iOS

Architektura Vision přidává do iOS 11 řadu nových funkcí pro zpracování obrázků, mezi které patří:

  • Detekce obdélníků
  • Detekce tváří
  • Machine Učení Image Analysis (probíraná v CoreML)
  • Detekce čárových kódů
  • Analýza zarovnání obrázku
  • Detekce textu
  • Detekce horizontů
  • Detekce a sledování objektů

Photograph with three rectangles detected.Photograph with two faces detected.

Detekce obdélníků a detekce tváří jsou podrobněji popsány níže.

Detekce obdélníků

Ukázka VisionRects ukazuje, jak zpracovat obrázek a nakreslit zjištěné obdélníky.

1. Inicializace žádosti o zpracování obrazu

V ViewDidLoadaplikaci vytvořte odkaz na VNDetectRectanglesRequest metodu HandleRectangles , která bude volána na konci každého požadavku:

Vlastnost MaximumObservations by také měla být nastavena, jinak bude nastavena na hodnotu 1 a vrátí se pouze jeden výsledek.

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

2. Zahájení zpracování obrazu

Následující kód zahájí zpracování požadavku. V ukázce VisionRects se tento kód spustí po výběru obrázku uživatelem:

// 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);
});

Tato obslužná rutina předá ciImage architekturu VNDetectRectanglesRequest Vision vytvořenou v kroku 1.

3. Zpracování výsledků zpracování obrazu

Jakmile je detekce obdélníku dokončena, architektura spustí metodu HandleRectangles , což je souhrn, který je znázorněn níže:

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. Zobrazení výsledků

Metoda OverlayRectangles v ukázce VisionRectangles má tři funkce:

  • Vykreslení zdrojového obrázku
  • Nakreslení obdélníku, který označuje, kde byly zjištěny jednotlivé
  • Přidání textového popisku pro každý obdélník pomocí CoreGraphics

Prohlédněte si zdroj ukázky pro přesnou metodu CoreGraphics.

Photograph with three rectangles detected on a mobile device.

5. Další zpracování

Detekce obdélníků je často jen prvním krokem v řetězu operací, například v tomto příkladu CoreMLVision, kde se obdélníky předávají modelu CoreML za účelem analýzy ručně psaných číslic.

Detekce obličeje

Ukázka VisionFaces funguje podobně jako ukázka VisionRectangles s použitím jiné třídy požadavků vision.

1. Inicializace žádosti o zpracování obrazu

V ViewDidLoadaplikaci vytvořte odkaz VNDetectFaceRectanglesRequest na metodu HandleRectangles , která bude volána na konci každého požadavku.

FaceRectangleRequest = new VNDetectFaceRectanglesRequest(HandleRectangles);

2. Zahájení zpracování obrazu

Následující kód zahájí zpracování požadavku. V ukázce VisionFaces se tento kód spustí po výběru obrázku uživatelem:

// 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);
});

Tato obslužná rutina předá ciImage architekturu VNDetectFaceRectanglesRequest Vision vytvořenou v kroku 1.

3. Zpracování výsledků zpracování obrazu

Po dokončení detekce tváře obslužná rutina spustí metodu HandleRectangles , která provádí zpracování chyb a zobrazuje hranice rozpoznaných tváří a volá OverlayRectangles k vykreslení ohraničující obdélníky na původním obrázku:

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. Zobrazení výsledků

Metoda OverlayRectangles v ukázce VisionFaces má tři funkce:

  • Vykreslení zdrojového obrázku
  • Nakreslení obdélníku pro každou rozpoznanou tvář a
  • Přidání textového popisku pro každou tvář pomocí CoreGraphics

Prohlédněte si zdroj ukázky pro přesnou metodu CoreGraphics.

Photograph with two faces detected on a mobile device.

5. Další zpracování

Architektura vision obsahuje další funkce pro detekci obličejových funkcí, jako jsou oči a ústa. VNDetectFaceLandmarksRequest Použijte typ, který vrátí VNFaceObservation výsledky jako v kroku 3 výše, ale s dalšími VNFaceLandmark daty.