Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Struktura przetwarzania obrazów dodaje szereg nowych funkcji przetwarzania obrazów do systemu iOS 11, w tym:
- Wykrywanie prostokąta
- Wykrywanie twarzy
- Analiza obrazów usługi Machine Learning (omówiona w języku CoreML)
- Wykrywanie kodów kreskowych
- Analiza wyrównania obrazów
- Wykrywanie tekstu
- Wykrywanie horyzontów
- Wykrywanie i śledzenie obiektów

Wykrywanie prostokątów i wykrywanie twarzy zostały omówione bardziej szczegółowo poniżej.
Wykrywanie prostokąta
W przykładzie pokazano, jak przetworzyć obraz i narysować wykryte prostokąty.
1. Inicjowanie żądania przetwarzania obrazów
W ViewDidLoadpliku utwórz element VNDetectRectanglesRequest odwołujący się do HandleRectangles metody, która zostanie wywołana na końcu każdego żądania:
Właściwość powinna być również ustawiona MaximumObservations , w przeciwnym razie wartość domyślna to 1 i zostanie zwrócony tylko jeden wynik.
RectangleRequest = new VNDetectRectanglesRequest(HandleRectangles);
RectangleRequest.MaximumObservations = 10;
2. Rozpoczęcie przetwarzania obrazów
Poniższy kod rozpoczyna przetwarzanie żądania. W przykładzie visionRects ten kod jest uruchamiany po wybraniu obrazu przez użytkownika:
// 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);
});
Ta procedura obsługi przekazuje ciImage element do struktury VNDetectRectanglesRequest Vision utworzonej w kroku 1.
3. Obsługa wyników przetwarzania obrazów
Po zakończeniu wykrywania prostokąta platforma wykonuje metodę HandleRectangles , a podsumowanie pokazane poniżej:
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. Wyświetlanie wyników
Metoda OverlayRectangles w przykładzie VisionRectangles ma trzy funkcje:
- Renderowanie obrazu źródłowego,
- Rysowanie prostokąta wskazującego, gdzie wykryto każdą z nich, i
- Dodawanie etykiety tekstowej dla każdego prostokąta przy użyciu biblioteki CoreGraphics.

5. Dalsze przetwarzanie
Wykrywanie prostokąta jest często tylko pierwszym krokiem w łańcuchu operacji, na przykład w tym przykładzie CoreMLVision, gdzie prostokąty są przekazywane do modelu CoreML w celu analizowania cyfr odręcznych.
Wykrywanie twarzy
Ten przykład działa w podobny sposób do przykładu VisionRectangles przy użyciu innej klasy żądania przetwarzania obrazów.
1. Inicjowanie żądania przetwarzania obrazów
W ViewDidLoadpliku utwórz element VNDetectFaceRectanglesRequest odwołujący HandleRectangles się do metody, która zostanie wywołana na końcu każdego żądania.
FaceRectangleRequest = new VNDetectFaceRectanglesRequest(HandleRectangles);
2. Rozpoczęcie przetwarzania obrazów
Poniższy kod rozpoczyna przetwarzanie żądania. W przykładzie visionFaces ten kod jest uruchamiany po wybraniu obrazu przez użytkownika:
// 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);
});
Ta procedura obsługi przekazuje ciImage element do struktury VNDetectFaceRectanglesRequest Vision utworzonej w kroku 1.
3. Obsługa wyników przetwarzania obrazów
Po zakończeniu wykrywania twarzy program obsługi wykonuje metodę, która wykonuje HandleRectangles obsługę błędów i wyświetla granice wykrytych twarzy, a następnie wywołuje OverlayRectangles metodę , aby narysować prostokąty ograniczenia na oryginalnym obrazie:
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. Wyświetlanie wyników
Metoda OverlayRectangles w przykładzie VisionFaces ma trzy funkcje:
- Renderowanie obrazu źródłowego,
- Rysowanie prostokąta dla każdej wykrytej twarzy i
- Dodawanie etykiety tekstowej dla każdej twarzy przy użyciu biblioteki CoreGraphics.

5. Dalsze przetwarzanie
Struktura vision zawiera dodatkowe możliwości wykrywania cech twarzy, takich jak oczy i usta. VNDetectFaceLandmarksRequest Użyj typu , który zwróci VNFaceObservation wyniki w kroku 3 powyżej, ale z dodatkowymi VNFaceLandmark danymi.