Logo Pixel Pixie

Sztuczna inteligencja dla analityków danych: jak OpenCV i Python pomagają analizować obrazy

15 kwietnia 2023

Biblioteka OpenCV to jedno z najpopularniejszych narzędzi do analizy obrazów. Jest to otwarte oprogramowanie, które oferuje bogaty zestaw funkcji, umożliwiających przetwarzanie, analizowanie i manipulowanie obrazami. OpenCV pozwala na automatyczne rozpoznawanie obrazów, włączając w to rozpoznawanie twarzy, detekcję ruchu, segmentację obrazów, a także wiele innych zastosowań.

Praktyczne zastosowania OpenCV w analizie obrazów

Dla analityków danych OpenCV jest nieocenionym narzędziem, ponieważ umożliwia automatyzację wielu czynności związanych z analizą obrazów. Na przykład, analityk może wykorzystać OpenCV do zautomatyzowania procesu etykietowania i klasyfikacji obrazów. Mogą również wykorzystać bibliotekę do wykrywania obiektów, co może pomóc w identyfikacji i zrozumieniu trendów w danych.

Analiza jakości produktów

Jednym z przykładów praktycznego zastosowania OpenCV jest analiza jakości produktów. Analitycy danych mogą wykorzystać OpenCV do wykrywania defektów w produkcie, takich jak rysy, pęknięcia, czy też nieprawidłowości w kolorze. Mogą również wykorzystać bibliotekę do analizy obrazów z kamer przemysłowych, co pozwala na wczesne wykrywanie problemów związanych z maszynami w fabryce.

Wykrywanie oszustw w branży ubezpieczeniowej

OpenCV może również pomóc w wykrywaniu oszustw w branży ubezpieczeniowej poprzez analizę obrazów i porównywanie ich ze sobą. W przypadku, gdy kilka osób złożyło roszczenia ubezpieczeniowe z takim samym obrazem pojazdu, OpenCV może automatycznie wykryć takie przypadki, co pozwoli na szybsze i bardziej skuteczne wykrycie potencjalnych oszustw.

Biblioteka OpenCV pozwala na porównywanie obrazów, używając algorytmów rozpoznawania wzorców i uczenia maszynowego. W ten sposób można określić, czy dwa obrazy są takie same lub bardzo podobne. Przykładowo, można porównać zdjęcia dwóch samochodów, które są zgłaszane w różnych przypadkach roszczeń ubezpieczeniowych, aby sprawdzić, czy obraz jest zduplikowany lub lekko zmieniony.

Kiedy ubezpieczyciel dostaje zgłoszenie o roszczeniu, zdjęcia pojazdu są zapisywane w bazie danych. OpenCV może przeszukać bazę danych w poszukiwaniu duplikatów lub podobnych zdjęć i w ten sposób wykryć potencjalne oszustwa. W przypadku, gdy podobny obraz zostanie przesłany do kilku różnych ubezpieczycieli, OpenCV może szybko wykryć taki przypadek i powiadomić ubezpieczycieli o podejrzeniu oszustwa.

Automatyczne rozpoznawanie twarzy przy użyciu OpenCV

Analitycy danych mogą również wykorzystać OpenCV do automatycznego rozpoznawania twarzy. Biblioteka może być wykorzystywana do identyfikacji osób na zdjęciach i filmach.

Poniżej korzystając z języka Python zobaczycie jak wykorzystać OpenCV do analizy twarzy na zdjęciu:


import cv2

# wczytanie obrazu
img = cv2.imread("obraz.png")
                      
# stworzenie detektora twarzy
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
                        
# wykrycie twarzy na obrazie
faces = face_cascade.detectMultiScale(img, scaleFactor=1.2, minNeighbors=5)
                       
# zliczenie liczby wykrytych twarzy
num_faces = len(faces)
                        
color = (147, 20, 255)
# narysowanie prostokątów wokół twarzy na obrazie
for (x, y, w, h) in faces:  
    cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)
                       
# wyświetlenie obrazu z zaznaczonymi twarzami i liczbą zliczonych twarzy
cv2.putText(img, "Liczba twarzy: " + str(num_faces), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 2)
cv2.imshow("Obraz z wykrytymi twarzami", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
            
        

Po uruchomieniu kodu otrzymamy okno z takim zdjęciem:

A tu przykład z innym zdjęciem:

Ten kod wykorzystuje bibliotekę OpenCV do detekcji twarzy na obrazie "obraz.png". Najpierw zaimportowana jest biblioteka OpenCV, a następnie wczytywany jest obraz przy użyciu funkcji cv2.imread(). Następnie tworzony jest detektor twarzy przy użyciu pliku haarcascade_frontalface_default.xml za pomocą funkcji cv2.CascadeClassifier().

Plik haarcascade_frontalface_default.xml to gotowy szablon kaskady klasyfikatorów Haar, który służy do detekcji twarzy na obrazach w bibliotece OpenCV. Kaskada ta została wytrenowana na dużym zbiorze obrazów twarzy i pozwala na skuteczną detekcję twarzy w różnych warunkach. Funkcje detekcji twarzy w OpenCV korzystają z tego pliku. Skąd pobrać taki plik? Wystarczy znaleźć aktualne, gotowe rozwiązanie. Ja pobrałam go z Github (wpisz w Google: haarcascade_frontalface_default.xml Github).

scaleFactor i minNeighbors są parametrami metody detectMultiScale() klasy CascadeClassifier biblioteki OpenCV, która służy do detekcji obiektów na obrazie.

scaleFactor określa stosunek zmiany wielkości okna analizowanego obrazu podczas detekcji. Domyślnie wynosi 1.1, co oznacza, że okno jest zmniejszane o 10% podczas przesuwania po obrazie. W tym przypadku jest ustawiony na 1.2, co oznacza, że okno jest zmniejszane o 20% podczas przesuwania po obrazie.

minNeighbors określa minimalną liczbę sąsiednich prostokątów, które muszą być wykryte w pobliżu danego prostokąta, aby uznano go za prawdziwy. Jest to zabezpieczenie przed fałszywymi wykryciami. Im większa wartość minNeighbors, tym mniej wykryć fałszywych, ale może to prowadzić do pominięcia prawdziwych wykryć. Domyślnie wynosi 3, a w tym przypadku ustawiłam na 5.

Detektor jest następnie wykorzystywany do wykrycia twarzy na obrazie za pomocą funkcji cv2.CascadeClassifier.detectMultiScale(). Wyniki detekcji są przechowywane w tablicy "faces". Następnie liczba wykrytych twarzy jest zliczana przy użyciu funkcji len().

W celu wizualizacji wyników, dla każdej wykrytej twarzy na obrazie rysowany jest prostokąt za pomocą funkcji cv2.rectangle(). Liczba zliczonych twarzy jest wyświetlana na obrazie za pomocą funkcji cv2.putText().

Na końcu wyświetlany jest wynikowy obraz wraz z zaznaczonymi twarzami i liczbą zliczonych twarzy przy użyciu funkcji cv2.imshow(). Okno z obrazem pozostaje otwarte do momentu naciśnięcia dowolnego klawisza na klawiaturze, a następnie zostaje zamknięte za pomocą funkcji cv2.destroyAllWindows().

W bibliotece OpenCV dostępne są inne szablony kaskad do wykrywania twarzy, oto kilka przykładów:

Wszystkie te szablony służą do wykrywania twarzy, ale różnią się między sobą skutecznością i czasem detekcji. Dlatego ważne jest, aby wybrać odpowiedni szablon kaskady dla konkretnej aplikacji. Jak widzisz, ja użyłam haarcascade_frontalface_default.xml, który został wytrenowany do wykrywania twarzy ludzkich na obrazach w pozycji frontalnej, czyli patrzących bezpośrednio w kierunku kamery. Oznacza to, że jeśli na zdjęciu będzie twarz np. z profilu, ten szablon jej nie wykryje. Oczywiście, jest możliwe wykorzystanie kilku szablonów kaskad do detekcji obiektów na obrazie. Właściwie, często stosuje się takie podejście, gdyż pozwala to na zwiększenie skuteczności wykrywania oraz zmniejszenie ryzyka pomyłek. W praktyce, może to wyglądać np. tak, że używamy jednego szablonu kaskady do wykrywania twarzy, a drugiego do wykrywania oczu na już wykrytych twarzach. W ten sposób można uzyskać bardziej precyzyjne wyniki.

OpenCV to narzędzie o potężnych możliwościach, które może być wykorzystane w wielu dziedzinach, od przemysłu, przez medycynę, po analizę danych i rozpoznawanie fraudów. Dzięki OpenCV analitycy danych mają dostęp do bogatego zestawu funkcji i narzędzi, które pozwalają na automatyzację procesów związanych z przetwarzaniem, analizowaniem i manipulowaniem obrazami, co przekłada się na wydobycie cennych informacji i podejmowanie trafniejszych decyzji biznesowych.