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ů
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 ViewDidLoad
aplikaci 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.
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 ViewDidLoad
aplikaci 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.
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.