Inhoudsopgave:

OpenCV-basisprojecten: 5 stappen
OpenCV-basisprojecten: 5 stappen

Video: OpenCV-basisprojecten: 5 stappen

Video: OpenCV-basisprojecten: 5 stappen
Video: Lesson 28: Car-6 SunFounder self Driving Arduino car using | Robojax 2024, Juli-
Anonim
OpenCV-basisprojecten
OpenCV-basisprojecten

In dit project onderzoeken we enkele basis OpenCV-functionaliteit door middel van 4 eenvoudige projecten met een live videostream. Dit zijn gezichtsherkenning, achtergrondverwijdering, speciale visuele weergave van randen en het toepassen van een vervagingseffect op de live videostream. Mijn belangrijkste doel om deze projecten uit te proberen, was om gewoon nat te worden met de OpenCV-interface, omdat ik van plan ben dieper te graven op het gebied van computervisie

Benodigdheden

  • Computer met Python
  • Open CV-bibliotheek, Numpy-bibliotheek, tkinter-bibliotheek, sys-bibliotheek
  • Camera om op de computer aan te sluiten (als de computer er nog geen heeft)
  • Python-bestand van het programma (inbegrepen in deze instructable)
  • haarcascade xml-bestand (inbegrepen in dit instructable)

Stap 1: FaceDetect-functie

FaceDetect-functie
FaceDetect-functie
FaceDetect-functie
FaceDetect-functie

Deze functie toont de video van je camera met groene vierkantjes op alle gezichten die het oppikt. In de code gebruiken we de functie cv2. VideoCapture() om de video die we vastleggen op te slaan in een object met de naam "capture". De CAPTURE_INDEX is een getal dat door uw computer is ingesteld en dat overeenkomt met de index van uw camera in de video-invoerlijst van de computer. Als je geen externe camera op je computer hebt aangesloten, zou 0 of 1 moeten werken.

Het face_cascade-object wordt geïnitialiseerd met behulp van de cascadeClassifier-functie en het bestand "haarcascade_frontalface_default.xml" in de OpenCV github. We gebruiken dit object om de gedetecteerde gezichten in de lijst "gezichten" op te slaan als een viervoudig invoer-tupel met de gezichten x-coördinaat, y-coördinaat, breedte en hoogte. Vervolgens tekenen we een rechthoek die het gezicht perfect omsluit met behulp van de cv2.rechthoekfunctie

Van deze video legt OpenCV veel afbeeldingen vast in onze while-lus met behulp van capture.read() en slaat de afbeelding op in een frame dat we "img" hebben genoemd. Elke afbeelding wordt vervolgens naar wens geïnterpreteerd en aangepast. Voor faceDetect maken we de afbeelding grijs met behulp van de cvtColor-functie die de afbeelding die in de eerste parameter wordt gegeven, converteert naar een bepaald type afbeeldingskleur die in de tweede parameter is gespecificeerd. De lijst met aanvaardbare waarden voor de tweede parameter is online te vinden. Vervolgens geven we de afbeelding weer in een venster met de naam "Het gezicht detecteren" met behulp van de functie imshow() die een string nodig heeft voor de vensternaam en het afbeeldingsframe dat moet worden weergegeven.

Ten slotte wachten we tot de gebruiker de q-sleutel invoert met behulp van de cv2.waitKey()-functie. Het 0xFF-masker wordt gebruikt als een conventie voor 64-bits computers. Nadat de gebruiker de videostream heeft beëindigd, bevrijdt de faceDetect-functie het opnameobject en vernietigt vervolgens alle andere vensters die zijn geopend onder de OpenCV-interface. Alle andere functies volgen een vergelijkbare ontwerpstructuur.

Stap 2: Functie Achtergrond verwijderen

AchtergrondVerwijderen Functie
AchtergrondVerwijderen Functie
AchtergrondVerwijderen Functie
AchtergrondVerwijderen Functie

Deze functie probeert het achtergrondgedeelte van onze video te verwijderen en laat alleen de voorgrondafbeelding achter. Het werkt mogelijk niet op sommige camera's, omdat ze een functie voor het aanpassen van de verlichting gebruiken die wordt geactiveerd wanneer verschillende objecten/focussen het frame binnenkomen. Als uw backgroundRemove-functie niet werkt, hoeft u zich geen zorgen te maken - het kan gewoon uw camera zijn!

Om deze functie te gebruiken, gaat u weg van het cameraframe en drukt u op de "d"-toets om de achtergrondafbeelding vast te leggen. Het is belangrijk dat er zich geen bewegende objecten op de achtergrond bevinden die u wilt vastleggen. Dan kunnen we terug in het cameraframe stappen. Als de functie werkte, zou de gebruiker zichzelf alleen in de videostream van de functie moeten zien. Eventuele ruis/zwarte vlekken in het voorgrondbeeld kunnen het gevolg zijn van de belichtingsaanpassing van de camera. Om een andere achtergrond vast te leggen, drukt u op de toets "r" om opnieuw te initialiseren en drukt u nogmaals op "d".

Een belangrijk voordeel van deze functie is het gebruik van de "vlag"-boolean die wordt verhoogd zodra de gebruiker op de d-knop drukt. Hiermee wordt de achtergrond vastgelegd en kunnen we deze verwijderen uit de video die door de functie wordt gestreamd. We streven ernaar de achtergrondafbeelding op te slaan in ref_img, zodat we deze kunnen onderscheiden van de voorgrondafbeelding, die elk bewegend object vastlegt. We gebruiken de functie cv2.subtract() om de afbeelding van de voorgrond af te trekken van de achtergrondafbeelding en vice versa, en heffen dan eventuele minuscule verschillen in de twee afbeeldingen onmiddellijk daarna op. De achtergrond is verduisterd.

Het fgmask wordt gemaakt met behulp van het verschil tussen deze twee afbeeldingen en vervolgens toegepast op de functies videostream met behulp van de functie OpenCV cv2.bitwise_and().

Stap 3: VideoEdges-functie

VideoEdges-functie
VideoEdges-functie
VideoEdges-functie
VideoEdges-functie

Deze functie retourneert onze live videostream, maar de detecteerbare randen worden wit weergegeven terwijl al het andere wordt verduisterd. Wat deze functie onderscheidt van de andere functies is de conversie van onze originele video van RBG-formaat naar HSV, wat staat voor tint, verzadiging en variatie - een andere methode om licht en kleur te verwerken dan een video. Met deze methode kunnen we gemakkelijker contouren in de video onderscheiden door een filter toe te passen (red_low tot red_high).

Canny Edge Detection wordt gebruikt om de randen in een afbeelding te detecteren. Het accepteert een grijsschaalafbeelding als invoer en het maakt gebruik van een meertraps algoritme.

Stap 4: VideoBlur-functie

Video Blur-functie
Video Blur-functie
Video Blur-functie
Video Blur-functie

Deze functie wordt gebruikt om een vervagingseffect toe te voegen aan onze videostream. De functie roept eenvoudig de GaussianBlur cv2-functie op ons frame aan. Meer informatie over de GaussianBlur-functie vindt u hier:

opencv-python-tutroals.readthedocs.io/en/l…

Stap 5: Verbeteringen

De meest gevoelige functie in dit project is de functie voor het verwijderen van de achtergrond, omdat hiervoor een camera nodig is die geen functie voor het aanpassen van de verlichting heeft. Er is mogelijk een betere set functies binnen de OpenCV-bibliotheek die deze verlichtingsaanpassing kan verklaren en de achtergrond soepel kan verwijderen (vergelijkbaar met een groen scherm).

We zouden ook andere gezichtsdetectiefuncties kunnen gebruiken die objecten kunnen produceren met meer functionaliteit dan alleen het retourneren van (x, y)-coördinaten. Misschien zou een gezichtsherkenningsprogramma met het vermogen om gezichten te onthouden niet al te moeilijk zijn om te implementeren.

De vervagingsfunctie kan meer worden aangepast via intuïtieve bediening door de gebruiker. De gebruiker kan bijvoorbeeld de intensiteit van het vervagingseffect willen aanpassen of een specifiek gebied binnen het frame willen selecteren om te vervagen.

Aanbevolen: