Les Tarte aux framboises a beaucoup de meilleurs accessoires et celui qui est sûr d’apparaître sur cette liste est le nouveau module de caméra 3. Dans notre examen du module de caméra Raspberry Pi 3nous avons dit que nous aimons la mise au point automatique rapide et les images HDR et nous voulons partager ces fonctionnalités avec vous dans ce guide pratique.
Si vous n’avez jamais utilisé de caméra Raspberry Pi auparavant, notre guide du débutant pour Picamera2 est une excellente introduction pour que votre Pi prenne de superbes photos. Dans ce guide, nous allons explorer les nombreuses façons d’utiliser le système de mise au point du module de caméra 3 avec Picamera2 et apprendre à prendre des images HDR avec un script simple et rapide qui automatise le processus. Si Python n’est pas votre truc, le module de caméra 3 peut également être contrôlé à l’aide de libcamera via le terminal.
Apprendre à connaître l’autofocus
L’autofocus a trois modes dans lesquels il fonctionne.
- Manuel: Obliger l’utilisateur à spécifier le contrôle LensPosition pour modifier la mise au point de l’objectif. Une valeur de zéro produira une mise au point infinie. Les valeurs jusqu’à 10 sont acceptées, 10 définissant la mise au point sur 1/10 de mètre (10CM).
- Auto: L’autofocus typique qui utilise AfTrigger pour démarrer un cycle d’autofocus.
- Continu: La caméra recherchera une cible, se recentrant sur la cible lorsque l’algorithme la détecte.
Projet 1 : Utilisation de la mise au point continue
La mise au point continue utilise un algorithme pour rechercher une cible dans le flux d’images. Peu importe que la cible soit proche (environ 10 cm) ou éloignée, l’algorithme trouvera la cible et se verrouillera. Mais comment l’utilisons-nous ? Faisons un test rapide. Nous utiliserons un mode de mise au point continue pour rechercher la meilleure mise au point possible sur notre cible. Il serait utile d’avoir un objet que l’on puisse tenir devant la caméra, nous avons utilisé un billet d’un dollar.
1. Depuis le menu principal, ouvrez Programmation >> Thonny.
2. Importer Picamera2.
from picamera2 import Picamera2
3. Importez la classe de contrôles de libcamera. Avec cela, nous pouvons configurer la caméra en fonction de nos besoins.
from libcamera import controls
4. Créer un objet, picam2 que nous utiliserons comme lien entre le code et notre caméra.
picam2 = Picamera2()
5. Démarrer une fenêtre d’aperçu. L’aperçu est l’endroit où l’on voit la sortie de la caméra.
picam2.start(show_preview=True)
6. Réglez l’AfMode (mode de mise au point automatique) sur continu.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
7. Enregistrez le code sous AFtest.py.
8. Cliquez sur Exécuter pour démarrer le code. Une fenêtre d’aperçu apparaîtra. Déplacez un objet, nous avons choisi un billet d’un dollar, autour du cadre et observez le déplacement de la mise au point. Essayez de rapprocher l’objet de l’objectif, rappelez-vous que le point focal le plus proche est à 10 centimètres.
Liste complète des codes
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
Projet 2 : Réglage manuel de la mise au point
Parfois, une mise au point fixe est ce dont nous avons besoin pour obtenir cette superbe photo. Après tout, nous ne voulons pas capturer un désordre flou. Fixer la mise au point est relativement simple ; en fait, c’est si simple que nous pouvons réutiliser la plupart du code de l’exemple précédent.
1. Utiliser Enregistrer sous sur l’exemple précédent to créer un nouveau fichier appelé ManualFocusTest.py
2. Modifiez la dernière ligne pour utiliser LensPositiondans ce cas, définissez la valeur sur 0,0 pour un focus infini.
picam2.set_controls("AfMode": controls.AfModeEnum.Manual, "LensPosition": 0.0)
3. Exécutez le code. Remarquez comment la mise au point est nette pour les objets éloignés, mais de près, ils sont flous.
4. Modifiez la valeur LensPosition sur 0,5. Cela nous donnera environ une distance focale de 50 cm.
5. Enregistrez et exécutez le code. Déplacez un objet vers et depuis la caméra. Remarquez comment la mise au point devient nette autour de 50 cm.
Liste complète des codes
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Manual, "LensPosition": 0.5)
Projet 3 : mise au point rapide pour plusieurs images
Qu’il s’agisse d’une caméra d’oiseaux, d’une journée sportive à l’école ou de la sécurité à domicile, nous avons parfois besoin d’obtenir une série d’images nettes. Heureusement, nous pouvons régler le module de caméra 3 pour prendre une série d’images rapides et régler la mise au point automatique à grande vitesse.
1. Créez un nouveau fichier appelé AfFastFocus.py
2. Importer Picamera2.
from picamera2 import Picamera2
3. Importez la classe de contrôles de libcamera. Avec cela, nous pouvons configurer la caméra en fonction de nos besoins.
from libcamera import controls
4. Créer un objet, picam2 que nous utiliserons comme lien entre le code et notre caméra.
picam2 = Picamera2()
5. Démarrer une fenêtre d’aperçu. L’aperçu est l’endroit où l’on voit la sortie de la caméra.
picam2.start(show_preview=True)
6. Réglez le mode de mise au point automatique sur Continu et réglez AfSpeed sur Rapide.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
7. Réglez l’appareil photo pour capturer trois fichiers, avec un délai d’une demi-seconde entre chaque prise de vue. Le nom de fichier « fastfocus.jpg » ajoutera 0, puis 1 et 2 à chaque fichier. Nous donnant trois fichiers dans l’ordre numérique.
picam2.start_and_capture_files("fastfocus:d.jpg", num_files=3, delay=0.5)
8. Fermez la fenêtre d’aperçu.
picam2.stop_preview()
9. Fermez la connexion de la caméra.
picam2.stop()
dix. Enregistrez et exécutez le code. Tenez un objet à trois distances différentes de l’appareil photo et observez le changement de mise au point, la fenêtre d’aperçu se fige lorsque l’appareil photo prend une photo, puis se relâche pour la prise suivante. Une fois que trois photos sont prises, la fenêtre de prévisualisation se ferme.
Liste complète des codes
from picamera2 import Picamera2
from libcamera import controls
picam2 = Picamera2()
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
picam2.start_and_capture_files("fastfocus-test:d.jpg", num_files=3, delay=0.5)
picam2.stop_preview()
picam2.stop()
Capturer une image HDR avec Picamera2
Les images HDR (High Dynamic Range) peuvent être facilement capturées avec libcaméra. Nous avons juste besoin de passer l’argument –hdr lorsque nous exécutons la commande. Mais pour Picamera2, nous devons exécuter une commande de terminal avant d’exécuter notre code Python.
Le HDR augmente la plage de luminosité dynamique des images. Avec HDR, nous obtenons une obscurité plus profonde et des images plus lumineuses. Cela fonctionne en capturant plusieurs images de la même scène, chacune avec des expositions différentes. Ces images sont ensuite combinées en une seule image qui englobe toute la gamme. Le module de caméra 3 peut capturer des images HDR, mais pas à la résolution complète de 12 MP. Au lieu de cela, nous obtenons une image 3MP avec une résolution de 2304 x 1296 pixels.
Pour notre test nous allons réutiliser le code du AfFastFocus.py projet, pour capturer une série d’images HDR. Nous utiliserons également la bibliothèque du système d’exploitation de Python pour exécuter une commande de terminal qui activera et désactivera le paramètre HDR sans interaction de l’utilisateur. Cela signifie que nous n’oublierons pas d’activer et de désactiver les paramètres HDR.
1. Créez un nouveau fichier appelé HDRAfFastFocus.py
2. Importer Picamera2.
from picamera2 import Picamera2
3. Importez la classe de contrôles de libcamera. Avec cela, nous pouvons configurer la caméra en fonction de nos besoins.
from libcamera import controls
4. Importer le module du système d’exploitation. Cela permet à notre code d’interagir avec le système d’exploitation sous-jacent, dans ce cas Raspberry Pi OS (Linux).
import os
5. Créer un objet, picam2 que nous utiliserons comme lien entre le code et notre caméra.
picam2 = Picamera2()
6. Utilisez la fonction système du module os pour configurer la caméra pour qu’elle utilise le HDR. Picamera2 prend en charge le HDR, mais pas directement dans le module. Le problème concerne V4L2, l’interface du noyau entre la caméra et le système vidéo Linux. À l’heure actuelle, il n’offre pas de prise en charge immédiate du HDR avec cet appareil photo, nous devons donc exécuter cette solution de contournement rapide pour le rendre disponible dans Picamera2.
7. Imprimer un message sur Python Shell nous informant que le HDR est activé.
print("Setting HDR to ON")
8. Démarrer une fenêtre d’aperçu. L’aperçu est l’endroit où l’on voit la sortie de la caméra.
picam2.start(show_preview=True)
9. Réglez le mode de mise au point automatique sur Continu et réglez l’AfSpeed sur Rapide.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
dix. Réglez l’appareil photo pour capturer trois fichiers, avec un délai d’une seconde entre chaque prise de vue. Le nom de fichier « HDRfastfocus.jpg ajoutera 0, puis 1 et 2 à chaque fichier. Nous donnant trois fichiers dans l’ordre numérique. Nous doublons le délai entre chaque prise de vue pour donner à l’appareil photo le temps d’enregistrer l’image précédente, puis de régler la mise au point pour l’image suivante. Nous l’avons testé avec un retard de 0,5 et nos clichés étaient parfois un peu trop flous.
picam2.start_and_capture_files("HDRfastfocus:d.jpg", num_files=3, delay=1)
11. Fermez la fenêtre d’aperçu.
picam2.stop_preview()
12. Fermez la connexion de la caméra.
picam2.stop()
13. Imprimer un message à l’utilisateur que HDR est maintenant désactivé, puis exécutez la commande à l’aide de os.system.
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")
14. Enregistrez et exécutez le code. Tenez un objet à trois distances différentes de l’appareil photo et observez le changement de mise au point, la fenêtre d’aperçu se fige lorsque l’appareil photo prend une photo, puis se relâche pour la prise suivante. Une fois que trois photos sont prises, la fenêtre de prévisualisation se ferme.
Liste complète des codes
from picamera2 import Picamera2
from libcamera import controls
import os
picam2 = Picamera2()
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=1 -d /dev/v4l-subdev0")
print("Setting HDR to ON")
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast)
picam2.start_and_capture_files("HDRfastfocus:d.jpg", num_files=3, delay=1)
picam2.stop_preview()
picam2.stop()
print("Setting HDR to OFF")
os.system("v4l2-ctl --set-ctrl wide_dynamic_range=0 -d /dev/v4l-subdev0")