Rozpoznawanie twarzy z użyciem AWS Rekognition

W grudniu 2016 roku Amazon zapowiedział, że AWS zostanie wzbogacony o nową usługę – AWS Rekognition. Pozwala ona na korzystanie z ich sztucznej sieci neuronowej do rozpoznawania zdjęć. Uważam, że jest to świetne rozwiązanie dla małych firm i startupów, które nie mają czasu, środków ani potężnej bazy zdjęć, aby wytrenować własną sieć neuronową do takiego poziomu by była w stanie z dużą dokładnością rozpoznawać przedmioty na zdjęciu. Do korzystania z AWS Rekognition nie trzeba wiedzieć czym jest uczenie maszynowe, deep learning ani sztuczna sieć neuronowa. Jeśli chcemy korzystać z dobrodziejstw sztucznej inteligencji AWS Rekognition jest jednym z najprostszych sposobów. Oczywiście Amazon nie jest jedyną firmą, która daje takie możliwości, jest też Google Cloud czy Microsoft Azure.

Takim oto demo można pobawić się u Google’a:

 

Trudno nie być pod wrażeniem, skoro została rozpoznana nawet rasa psa 😉

Jak zacząć pracę z AWS Rekognition?
Po pierwsze musimy mieć konto AWS i utworzonego użytkownika z dostępem do usługi AWS Rekognition.
Instrukcje, krok po kroku znajdziecie w dokumentacji AWSa. Dla utworzonego użytkownika generujemy AWSAccessKeyId oraz AWSSecretAccessKey. O tym jak korzystać z AccessKeyId oraz SecretAccessKey można przeczytać tutaj. Generalnie, są trzy sposoby – ja używam „Credentials File”, jednak nie ma to większego znaczenia. Najważniejsze to pamiętać o tym, by przypadkiem nikomu nie udostępniać tych danych, ponieważ może to nas kosztować wiele tysięcy $ ;). Po GitHubie, krążą boty, które szukają kluczy AWS’owych commitowanych przez nieostrożnych programistów.

  1. Tworzymy nowy projekt WPF! (w tym przykładzie będę opierał się sporo na projekcie z mojego poprzedniego wpisu)
  2. Do projektu, przy użyciu nuget package manager’a dodajemy najnowszą wersję AWSSDK.Rekognition (3.3.x)

    oraz EmguCV (3.1.x.x)


  3. Zgodnie z wybraną strategią używania kluczy, edytujemy plik App.config. W moim przypadku jest to podanie ścieżki do pliku „credentials”
  4. Korzystanie z AWSSDK.Rekognition jest banalnie proste:
        public class RekognitionService
        {
            AmazonRekognitionClient _client;
    
            public RekognitionService()
            {
                _client = new AmazonRekognitionClient();
            }
    
            public DetectFacesResponse Recognize(Bitmap image)
            {
                MemoryStream memoryStream = new MemoryStream();
    
                image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
    
                var result = _client.DetectFaces(new DetectFacesRequest()
                {
                    Attributes = new List<string> { "ALL" },
                    Image = new Amazon.Rekognition.Model.Image() { Bytes = memoryStream }
                });
    
                return result;
            }
        }
    

    Do wcześniej już opisywanego projektu dodałem klasę RekognitionService, która implementuje metodę Recognize. Domyślnie metody przyjmują stream pliku w formacie JPEG, użyłem MemoryStream, aby umożliwić przerobienie bitmapy na jpeg „w locie” bez konieczności zapisywania pliku na dysku.

    W odpowiedzi na żądanie dostajemy już zdeserializowany obiekt – DetectFaceResponse, w którym znajdziemy współrzędne znaczników (Landmarks – na zdjęciu poniżej kolor niebieski), BoundingBox z twarzą oraz informację o wystąpieniu lub braku dodatkowych cechy np. broda, okulary, wąsy.

    Demo, które napisałem umożliwia zrobienie zdjęcia przy pomocy kamerki internetowej oraz wyświetlenie szczegółów dot. wykrytej na zdjęciu twarzy.



    Cały kod dostępny na GitHub.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *