AI-For-Beginners/translations/nl/lessons/4-ComputerVision/06-IntroCV/README.md

10 KiB

Introductie tot Computer Vision

Computer Vision is een discipline die tot doel heeft computers een hoog niveau van begrip van digitale beelden te geven. Dit is een vrij brede definitie, omdat begrip veel verschillende dingen kan betekenen, zoals het vinden van een object op een afbeelding (objectdetectie), begrijpen wat er gebeurt (evenementdetectie), een afbeelding in tekst beschrijven, of een scène in 3D reconstrueren. Er zijn ook speciale taken die te maken hebben met menselijke beelden: schatting van leeftijd en emoties, gezichtsdetectie en -identificatie, en 3D-houdingsschatting, om er een paar te noemen.

Quiz voorafgaand aan de les

Een van de eenvoudigste taken van computer vision is beeldclassificatie.

Computer vision wordt vaak beschouwd als een tak van AI. Tegenwoordig worden de meeste taken binnen computer vision opgelost met behulp van neurale netwerken. We zullen meer leren over het speciale type neurale netwerken dat wordt gebruikt voor computer vision, convolutionele neurale netwerken, in dit gedeelte.

Echter, voordat je een afbeelding aan een neuraal netwerk doorgeeft, is het in veel gevallen zinvol om enkele algoritmische technieken te gebruiken om de afbeelding te verbeteren.

Er zijn verschillende Python-bibliotheken beschikbaar voor beeldverwerking:

  • imageio kan worden gebruikt voor het lezen/schrijven van verschillende afbeeldingsformaten. Het ondersteunt ook ffmpeg, een handig hulpmiddel om videoframes naar afbeeldingen te converteren.
  • Pillow (ook bekend als PIL) is iets krachtiger en ondersteunt ook enkele beeldbewerkingen zoals morphing, aanpassingen van het palet, en meer.
  • OpenCV is een krachtige beeldverwerkingsbibliotheek geschreven in C++, die de de facto standaard is geworden voor beeldverwerking. Het heeft een handige Python-interface.
  • dlib is een C++-bibliotheek die veel machine learning-algoritmen implementeert, waaronder enkele algoritmen voor computer vision. Het heeft ook een Python-interface en kan worden gebruikt voor uitdagende taken zoals gezichts- en gezichtskenmerkdetectie.

OpenCV

OpenCV wordt beschouwd als de de facto standaard voor beeldverwerking. Het bevat veel nuttige algoritmen, geïmplementeerd in C++. Je kunt OpenCV ook vanuit Python aanroepen.

Een goede plek om OpenCV te leren is deze Learn OpenCV-cursus. In ons curriculum is het doel niet om OpenCV te leren, maar om je enkele voorbeelden te laten zien van wanneer het kan worden gebruikt en hoe.

Afbeeldingen Laden

Afbeeldingen in Python kunnen handig worden weergegeven door NumPy-arrays. Bijvoorbeeld, grijswaardenafbeeldingen met een grootte van 320x200 pixels worden opgeslagen in een 200x320-array, en kleurenafbeeldingen van dezelfde afmetingen hebben een vorm van 200x320x3 (voor 3 kleurkanalen). Om een afbeelding te laden, kun je de volgende code gebruiken:

import cv2
import matplotlib.pyplot as plt

im = cv2.imread('image.jpeg')
plt.imshow(im)

Traditioneel gebruikt OpenCV BGR (Blauw-Groen-Rood) codering voor kleurenafbeeldingen, terwijl de rest van de Python-tools de meer traditionele RGB (Rood-Groen-Blauw) gebruiken. Om de afbeelding correct weer te geven, moet je deze converteren naar de RGB-kleurruimte, door ofwel de dimensies in de NumPy-array te verwisselen, of door een OpenCV-functie aan te roepen:

im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

Dezelfde cvtColor-functie kan worden gebruikt om andere kleurtransformaties uit te voeren, zoals het converteren van een afbeelding naar grijswaarden of naar de HSV (Tint-Verzadiging-Waarde) kleurruimte.

Je kunt OpenCV ook gebruiken om video frame-voor-frame te laden - een voorbeeld hiervan wordt gegeven in de oefening OpenCV Notebook.

Beeldverwerking

Voordat je een afbeelding aan een neuraal netwerk doorgeeft, wil je mogelijk enkele voorbewerkingsstappen toepassen. OpenCV kan veel dingen doen, waaronder:

  • Het formaat wijzigen van de afbeelding met im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)
  • Vervagen van de afbeelding met im = cv2.medianBlur(im,3) of im = cv2.GaussianBlur(im, (3,3), 0)
  • Het aanpassen van de helderheid en het contrast van de afbeelding kan worden gedaan door NumPy-arraybewerkingen, zoals beschreven in deze Stackoverflow-opmerking.
  • Het gebruik van drempeltechnieken door de functies cv2.threshold/cv2.adaptiveThreshold aan te roepen, wat vaak de voorkeur heeft boven het aanpassen van helderheid of contrast.
  • Het toepassen van verschillende transformaties op de afbeelding:
    • Affine transformaties kunnen nuttig zijn als je rotatie, formaatwijziging en scheefstelling op de afbeelding wilt combineren en je de bron- en bestemmingslocatie van drie punten in de afbeelding kent. Affine transformaties behouden parallelle lijnen parallel.
    • Perspectieftransformaties kunnen nuttig zijn wanneer je de bron- en bestemmingsposities van 4 punten in de afbeelding kent. Bijvoorbeeld, als je een foto van een rechthoekig document maakt met een smartphonecamera vanuit een bepaalde hoek, en je wilt een rechthoekige afbeelding van het document zelf maken.
  • Beweging in de afbeelding begrijpen door gebruik te maken van optische stroom.

Voorbeelden van het gebruik van Computer Vision

In ons OpenCV Notebook geven we enkele voorbeelden van wanneer computer vision kan worden gebruikt om specifieke taken uit te voeren:

  • Voorbewerken van een foto van een Braille-boek. We richten ons op hoe we drempeltechnieken, kenmerkdetectie, perspectieftransformatie en NumPy-bewerkingen kunnen gebruiken om individuele Braille-symbolen te scheiden voor verdere classificatie door een neuraal netwerk.
Braille Afbeelding Braille Afbeelding Voorbewerkt Braille Symbolen

Afbeelding uit OpenCV.ipynb

  • Beweging detecteren in video met behulp van framedifferentiatie. Als de camera vast staat, zouden frames van de camerafeed vrij gelijk aan elkaar moeten zijn. Aangezien frames worden weergegeven als arrays, krijg je door die arrays van twee opeenvolgende frames af te trekken het pixelverschil, dat laag zou moeten zijn voor statische frames, en hoger wordt zodra er aanzienlijke beweging in de afbeelding is.

Afbeelding van videoframes en framedifferentiatie

Afbeelding uit OpenCV.ipynb

  • Beweging detecteren met behulp van Optische Stroom. Optische stroom stelt ons in staat te begrijpen hoe individuele pixels op videoframes bewegen. Er zijn twee soorten optische stroom:

    • Dense Optical Flow berekent het vectorveld dat laat zien waar elke pixel naartoe beweegt.
    • Sparse Optical Flow is gebaseerd op het nemen van enkele onderscheidende kenmerken in de afbeelding (bijv. randen) en het opbouwen van hun traject van frame naar frame.

Afbeelding van Optische Stroom

Afbeelding uit OpenCV.ipynb

✍️ Voorbeeld Notebooks: OpenCV probeer OpenCV in actie

Laten we enkele experimenten doen met OpenCV door OpenCV Notebook te verkennen.

Conclusie

Soms kunnen relatief complexe taken zoals bewegingsdetectie of vingertopdetectie puur door computer vision worden opgelost. Het is daarom erg nuttig om de basistechnieken van computer vision te kennen en te weten wat bibliotheken zoals OpenCV kunnen doen.

🚀 Uitdaging

Bekijk deze video van de AI-show om meer te leren over het Cortic Tigers-project en hoe zij een blokgebaseerde oplossing hebben gebouwd om computer vision-taken te democratiseren via een robot. Doe wat onderzoek naar andere projecten zoals deze die nieuwe leerlingen helpen in het veld te stappen.

Quiz na de les

Herziening & Zelfstudie

Lees meer over optische stroom in deze geweldige tutorial.

Opdracht

In dit lab neem je een video met eenvoudige gebaren, en je doel is om op/neer/links/rechts bewegingen te extraheren met behulp van optische stroom.

Palm Movement Frame

Disclaimer:
Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in zijn oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.