De AI-hype richt zich momenteel volledig op generatieve AI. Maar een ander onderwerp waar kunstmatige intelligentie specifiek sterk in is, is computervisie, de taak van het begrijpen van digitale beelden.
Lang voordat de wereld überhaupt van kunstmatige intelligentie hoorde, richtten AI-onderzoekers zich al op computervisietaken zoals het herkennen van handgeschreven karakters. Omdat deze karakters klein en niet al te complex waren, konden ze worden herkend door eenvoudige neurale netwerken die niet de rekenkracht nodig hadden die we vandaag de dag zien.
Maar naarmate computergeheugen en rekenkracht groter werd, nam ook de complexiteit toe van dingen die in afbeeldingen konden worden herkend.
Als we even vooruitspoelen naar vandaag zien we dat objectherkenningsmodellen zoals Yolo zo zijn krachtig geworden dat je ze op je eigen laptop kunt draaien, met live videobeelden van je eigen webcam.
Wil je leren hoe? Lees snel verder!
Objecten herkend via je eigen webcam met Yolo
Maar allereerst, wat is objectherkenning en hoe werkt Yolo?
Als we het hebben over objectherkenning in AI, hebben we het vaak over de dubbele taak van het herkennen van objecten in digitale beelden en het lokaliseren ervan.
Dit wordt vaak gebruikt in beveiligingssurveillance, maar ook bij het detecteren van slachtoffers tijdens grootschalige rampen, of zelfs schattingen van schendingen van sociale afstand tijdens de Covid-19-pandemie.
Deze modellen gebruiken zogenaamde convolutienetwerken - CNN's voor kort - om patronen in foto's te herkennen. In plaats van naar het hele plaatje in één keer te kijken, scannen deze CNN's het plaatje stukje voor stukje. Denk hierbij aan het kijken naar een afbeelding door een rietje. Door deze gefilterde stukjes herhaaldelijk toe te passen, leert het netwerk complexe patronen in de gegevens te herkennen.
Yolo staat voor You Only Look Once. Het is vernoemd naar het feit dat het model objecten in één keer verwerkt in plaats van meerdere keren, wat de standaard was vóór Yolo. Als gevolg hiervan staat Yolo bekend om haar snelheid. Daarnaast is het model ook opvallend nauwkeurigheid. Deze twee kenmerken maken Yolo perfect voor het analyseren van realtime videobeelden.
Yolo is ontwikkeld in Python door Ultralytics, maar gebruikt C onder de motorkap, een veel snellere programmeertaal. Het model is open source gepubliceerd, en de broncode is gemakkelijk te vinden op Github.
Yolo aansluiten op je webcam
Yolo draait op Python, dus als je dat nog niet hebt gedaan, is het eerste wat je moet doen Python installeren. Om Yolo voor python te installeren, open je een terminal/CMD en gebruik je het volgende commando:
$ pip install ultralytics
Daarnaast, om webcambeelden vast te leggen, zullen we OpenCV gebruiken, een open-source computervisiepakket in Python. Om deze module te installeren, open je de terminal/CMD en gebruik je het volgende commando:
$ pip install opencv-python
Vervolgens maak je een nieuw Python-bestand - bijvoorbeeld main.py - en kopieer/plak je de volgende code:
# 1. Import modules
# - ultralytics, for object recognition
# - cvs, for video capturing
# - math, for rounding results from Yolo
from ultralytics import YOLO
import cv2
import math
# 2. Create a video capture 1280 by 960 format
cap = cv2.VideoCapture(0)
cap.set(3, 1280)
cap.set(4, 960)
# 3. Create a Yolo model - version 8
model = YOLO("yolo-Weights/yolov8n.pt")
# 4. Define all classes that Yolo can recognize
classNames = [
"person", "bicycle", "car", "motorbike", "aeroplane", "bus", "train", "truck", "boat",
"traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat",
"dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella",
"handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat",
"baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup",
"fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli",
"carrot", "hot dog", "pizza", "donut", "cake", "chair", "sofa", "pottedplant", "bed",
"diningtable", "toilet", "tvmonitor", "laptop", "mouse", "remote", "keyboard", "cell phone",
"microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors",
"teddy bear", "hair drier", "toothbrush"
]
# 5. Loop infinitely, so we never stop capturing and recognizing
while True:
# 6. Capture video and process with Yolo model
success, img = cap.read()
results = model(img, stream=True)
# 7. Loop over all processed video frames
for r in results:
boxes = r.boxes
# 8. Loop over all detected objects' bounding boxes
for box in boxes:
# 9. Get bounding box coordinates
x1, y1, x2, y2 = [int(value) for value in box.xyxy[0]]
# 10. Draw rectangle on bounding box
cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 255), 3)
# 11. Get class name of object and draw into image, and also print to output
className = classNames[int(box.cls[0])]
cv2.putText(img, className, [x1, y1], cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
print("Class name -->", className)
# 12. Get confidence of found classs and print to output
confidence = math.ceil((box.conf[0] * 100)) / 100
print("Confidence --->", confidence)
# 13. Show the altered image with detected objects
cv2.imshow('Webcam', img)
if cv2.waitKey(1) == ord('q'):
break
# 14. Cleanup capture windows
cap.release()
cv2.destroyAllWindows()
Deze code doet de volgende dingen (zie de opmerkingen in de code):
Tot slot hoeven we alleen het Python-programma uit te voeren. Het resultaat? Je live webcamstream met geannoteerde objecten in de video.
Veel plezier met detecteren!