Raspberry Pi Camera V1.3

Uit RobotMC.be
Ga naar: navigatie, zoeken

Picamera V1.3

De huidige Picamera is de V2.0, maar met de vorige V1.3 Picamera kan je ook al aardig uit de voeten. De V1.3 is erg goedkoop te bestellen in de chinese webshops (ik betaalde 5 €). De camera wordt aangesloten op de csi camera connector van de Pi met een lintkabel. Standaard is deze kabel ca 15 cm lang, maar er bestaan ook langere lintkabels, tot wel 80 cm. Installatie is simpel, de lintkabel gewoon in de connector schuiven en dan vastklemmen. Ik volgde deze handleiding : projects.raspberrypi.org/en/projects/getting-started-with-picamera/4

Picamera + OpenCV

Voor de picamera bestaat er een uitgebreide Python library, dus ook opencv kan hier gebruik van maken. Indien je in een virtuele omgeving werkt, moet je deze lib wel installeren met "pip", en in de virtuele omgeving : www.pyimagesearch.com/2015/03/30/accessing-the-raspberry-pi-camera-with-opencv-and-python/

Picamera, snelheid van kleurdetectie

Een nuttige toepassing van de Picamera is natuurlijk object detectie, vb de positie van rode colablikken in het beeldveld vinden. Hier is de snelheid van wezenlijk belang. Bij de eerste testen van de picamera haalde ik maar 5 frames/sek bij een resolutie van 640*480. Er zijn echter wel optimalisaties mogelijk :

  1. "Capture" van de picamera in een aparte "thread" laten lopen. De beeldverwerking moet dan nooit wachten op het binnenlezen van een frame, het laatste complete frame van de "capture" thread wordt direct gebruikt. Opgelet, de verwerking gaat dus wel sneller, maar de delay kan dus groter zijn ! Als de camera wordt gelezen aan 30 fps, kan er nog een maximum extra delay van 33 ms (= de tijd nodig voor het lezen van één frame) bijkomen. Gemiddeld zal deze delay echter 17 ms bedragen.
  2. Een kleinere resolutie gebruiken. Voor de hand liggend natuurlijk, maar bij de picamera kan men eenvoudig ook het "halve" beeldveld gebruiken, vb 640*240 ! De breedte blijft dus op volledige resolutie, alleen de hoogte wordt gehalveerd. Zeker nuttig voor onze toepassing, want de blikken staan altijd op de grond !
  3. Alleen maar de noodzakelijke functies gebruiken : de "ERODE" en "DILATE" functies zijn niet altijd noodzakelijk (witte en zwarte pixels verwijderen), maar kosten wel veel tijd. Ook het wegschrijven van volledige beelden naar het scherm kosten tijd, en zijn alleen maar nodig om de camera in te stellen.
  4. Indien mogelijk de interne camerafuncties gebruiken. Als het beeld ondersteboven staat, kan je dit met een opencv functie of met de camera juist zetten. Deze opencv functie kost meer tijd, dus zorg ervoor dat je de camera dit werkje laat opknappen. In de "imutils" lib van Adrianpy was dit niet voorzien, maar je kan dit makkelijk uitbreiden. Uiteindelijk is dit maar een tussenstap naar de python lib voor de picamera : picamera.readthedocs.io/en/release-1.10/api_camera.html Ook de resolutie kan je best instellen in de camera. Hier enkele voorbeelden van deze instellingen :

Picamera Res.png

Hier zie je duidelijk het effect van de verschillende resoluties. De beeldverwerking tijd was als volgt :

  • 640*480 : 70 ms
  • 1280*240 : 70 ms
  • 640*240 : 40 ms
  • 320*240 : 20 ms

De framerate van de camera was wel ingesteld op 30fps, dus snellere verwerkingstijden dan 33 ms hebben weinig zin... De camera kan echter ook op 60 fps ingesteld worden, in dat geval is dit wel zinvol. Hier nog een filmpje :