Le nouveau Raspberry Pi Camera Module 3 offre une qualité d’image exceptionnelle et un choix entre un objectif standard (75 degrés) et un objectif large (120 degrés). Mieux encore, nous avons maintenant la mise au point automatique. Prendre des photos avec la Picamera2 est facile, mais parfois nous voulons juste appuyer sur un bouton et prendre une photo, et apparaître sur la photo !
Dans ce projet, nous utiliserons Blue Dot, un module Python et une application Android pour créer un déclencheur de caméra contrôlé par Bluetooth. Grâce à la bibliothèque facile à utiliser de Blue Dot et à la structure détaillée de Picamera2, nous allons capturer des photos 1080p via une petite quantité de code.
Pour ce projet, vous aurez besoin
- Un Raspberry Pi 3 ou 4
- Une caméra Raspberry Pi
- Un appareil Android
Installation du module caméra Raspberry Pi
1. Ouvrez le port de la caméra en soulevant doucement le verrou en plastique vers le haut.
2. Insérez le connecteur de la nappe avec la languette bleue face aux ports USB/Ethernet. Les utilisateurs de Raspberry Pi Zero devront utiliser un adaptateur et connecter la caméra au port situé sur le côté droit de la carte.
3. Fermez le verrou du connecteur et tirez-le très doucement pour vous assurer qu’il est bien en place.
4. Allumez le Raspberry Pi sur le bureau. Ouvrez un terminal et installez les dernières mises à jour de Picamera.
sudo apt update && sudo apt upgrade -y
5. Depuis le terminal, vérifiez que votre caméra fonctionne correctement. La commande libcamera est pratique pour vérifier rapidement que notre caméra est connectée et fonctionne comme prévu.
libcamera-hello
Installation du point bleu
Blue Dot est la création de Martin O’Hanlon et fournit un moyen vraiment simple de contrôler à distance un Raspberry Pi. Le nom « Blue Dot » représente le gros point bleu qui domine l’écran de l’appareil Android. Nous allons utiliser Blue Dot comme un gros bouton bleu pour déclencher l’appareil photo pour prendre une photo.
1. Sur votre appareil Android, ouvrez le Google Play Store et recherchez Blue Dot. Alternativement Suivez ce lien.
2. Installez Blue Dot sur votre appareil Android.
3. Sur votre Raspberry Pi, ouvrez un terminal et installez la bibliothèque Python de Blue Dot.
sudo pip3 install bluedot
4. Allez dans le menu Bluetooth, faites un clic droit et sélectionnez « Rendre détectable ».
5. Sur votre appareil Android, accédez à Paramètres >> Appareils connectés et sélectionnez Associer un nouvel appareil.
6. Sélectionnez « raspberrypi » et suivez les instructions d’appariement. Si votre Raspberry Pi a un nom d’hôte différent, alors « raspberrypi » n’apparaîtra pas, recherchez votre nom d’hôte.
Avec notre appareil Android et Raspberry Pi maintenant connectés, nous allons écrire un script Python rapide pour vérifier que Blue Dot peut communiquer entre les deux appareils.
1. Ouvrir Thonnytrouvé dans le menu principal sous Programmation.
2. Créez un nouveau fichier et importez la bibliothèque Blue Dot Python.
from bluedot import BlueDot
3. Créer un objet, bd, que nous utiliserons pour travailler avec la bibliothèque.
sudo pip3 install bluedot
4. Attendez que l’utilisateur appuie sur le bouton bleu. Cette ligne de Python est un bloqueur. Il attendra que l’utilisateur interagisse. Lorsque cela se produit, le code passe à la ligne suivante.
bd.wait_for_press()
5. Imprimer un message dans le shell Python.
print("You pressed the blue dot!")
6. Enregistrez le code sous bd-test.py et cliquez sur Exécuter. Le code attendra une connexion de notre appareil Android.
7. Sur votre appareil Android, ouvrez Blue Dot.
8. Sélectionnez le nom d’hôte de votre Raspberry Pi. Il s’agit généralement de « raspberrypi ».
9. Cliquez sur le point bleu pour déclencher l’action du code Python. Vous devriez voir un message dans le shell Python.
Liste complète des codes de test
from bluedot import BlueDot
bd = BlueDot()
bd.wait_for_press()
print("You pressed the blue dot!")
Création d’un déclencheur de caméra avec Blue Dot
Le but de ce projet est de créer un déclencheur de caméra avec Blue Dot. Lorsque le bouton est enfoncé, une fonction est lancée sur le Raspberry Pi qui gère la prise de vue.
1. Créez un nouveau fichier et importez la bibliothèque Blue Dot Python.
from bluedot import BlueDot
2. Importez Picamera2 et libcamera. La classe de prévisualisation est utilisée pour générer des fenêtres de prévisualisation, utiles pour cadrer un plan. La classe de contrôle de libcamera nous permet d’utiliser l’autofocus avec le nouveau module de caméra 3.
from picamera2 import Picamera2, Preview
from libcamera import controls
3. Importez la fonction de pause à partir du signal, puis de la bibliothèque de temps. La pause sera utilisée pour empêcher le code de sortir. Le temps retardera le code après la création d’une fenêtre d’aperçu, nous donnant le temps de cadrer une photo.
from signal import pause
import time
4. Créer un objet, bd, que nous utiliserons pour travailler avec la bibliothèque.
bd = BlueDot()
5. Créez un objet, picam2, qui nous permettra d’utiliser facilement la librairie Picamera2.
picam2 = Picamera2()
6. Définissez une fonction, take_picture() qui sera utilisée pour prendre une photo. Les fonctions fonctionnent en appelant leur nom, ce qui déclenche l’exécution de toutes les étapes de la fonction.
7. Créez une configuration pour que la caméra prenne des images fixes. Cela définit la taille de l’image sur 1080p, tandis que les fenêtres d’aperçu seront en 720p.
camera_config = picam2.create_still_configuration(main="size": (1920, 1080), lores="size": (1280, 720), display="lores")
8. Configurez Picamera2 pour utiliser la nouvelle configuration.
picam2.configure(camera_config)
9. Démarrez une fenêtre d’aperçu avec une résolution de 720p. Nous définissons la position en utilisant les coordonnées X et Y, sinon la valeur par défaut est 0,0. Ajustez ceci pour répondre à vos besoins.
picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720)
dix. Afficher la fenêtre d’aperçu.
picam2.start(show_preview=True)
11. Réglez l’appareil photo pour qu’il utilise la mise au point automatique continue. Notez que cela ne fonctionne qu’avec le module de caméra 3.
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
12. Faites une pause de deux secondes avant de capturer l’image dans un fichier appelé picam1.jpg.
time.sleep(2)
picam2.capture_file("picam1.jpg")
13. Fermez la fenêtre d’aperçu puis arrêtez Picamera2.
picam2.stop_preview()
picam2.stop()
14. Hors de la fonction, utilisez la fonction « when_pressed » de Blue Dot pour réagir à l’entrée de l’utilisateur en exécutant la fonction take_picture.
bd.when_pressed = take_picture
15. Utilisez pause pour empêcher le code de sortir.
pause()
16. Enregistrez le code sous bluedot_camera.py et cliquez sur Exécuter pour lancer le code. Vous verrez que le code attend que l’appareil Android se connecte.
17. Sur votre appareil Android, ouvrir le point bleu.
18. Sélectionnez le nom d’hôte de votre Raspberry Pi. Il s’agit généralement de « raspberrypi ».
19. Cliquez sur le point bleu pour déclencher la caméra. Vous verrez apparaître la fenêtre de prévisualisation puis, deux secondes plus tard, une image sera enregistrée sur la carte micro SD. Des pressions répétées créeront une nouvelle image, mais comme le nom de fichier est le même, il sera écrasé à chaque fois.
Liste complète des codes
from bluedot import BlueDot
from picamera2 import Picamera2, Preview
from libcamera import controls
from signal import pause
import time
bd = BlueDot()
picam2 = Picamera2()
def take_picture():
camera_config = picam2.create_still_configuration(main="size": (1920, 1080), lores="size": (1280, 720), display="lores")
picam2.configure(camera_config)
picam2.start_preview(Preview.QTGL, x=100, y=200, width=1280, height=720)
picam2.start(show_preview=True)
picam2.set_controls("AfMode": controls.AfModeEnum.Continuous)
time.sleep(2)
picam2.capture_file("picam1.jpg")
picam2.stop_preview()
picam2.stop()
bd.when_pressed = take_picture
pause()