Nous allons vous présenter comment acquérir facilement une image de caméra à l'aide d'opencv et comment l'exécuter régulièrement. Les caméras ici sont limitées aux caméras qui peuvent être contrôlées par opencv, telles que les caméras USB et les caméras intégrées. Les paramètres, etc. sont basés sur l'hypothèse que vous utilisez python avec la série anaconda3. Il fonctionne sur n'importe quel système d'exploitation tel que Windows, Mac et Linux.
Si vous souhaitez effectuer un contrôle automatique avec un appareil photo haut de gamme tel qu'un appareil photo reflex à objectif unique, gphoto semble être un must. Les modèles compatibles de gphoto sont http://www.gphoto.org/proj/libgphoto2/support.php, et plusieurs sont pris en charge. Contrôler un appareil photo reflex mono-objectif à partir d'une tarte aux râpes est utile.
Comme anaconda n'inclut pas opencv par défaut,
python
conda install -c conda-forge opencv
Exécutez et entrez.
schedule
Ceci n'est pas inclus dans anaconda, vous pouvez donc utiliser pip.
python
pip install schedule
La raison pour laquelle anaconda n'est pas inclus dépend des détails du développement, il n'est donc pas nécessaire de poursuivre profondément.
oneshot.py
#!/usr/bin/env python
import cv2
deviceid=0 # it depends on the order of USB connection.
capture = cv2.VideoCapture(deviceid)
ret, frame = capture.read()
cv2.imwrite('test.jpg', frame)
--Capture = cv2. Obtenez l'ID de l'appareil avec VideoCapture (deviceid). Cependant, notez que l'ID de l'appareil change en fonction de l'ordre de pointage dans le cas d'une caméra USB. Normalement, le n ° 0 doit être intégré et la caméra USB doit être le n ° 1. --ret, frame = capture.read () À ce moment, les données d'image sont enregistrées dans le cadre. --Utilisez cv2.imwrite ('test.jpg', frame) pour enregistrer l'image acquise au format jpg. Le format du fichier de sauvegarde est déterminé par l'extension.
Pour plus d'informations sur l'enregistrement d'images avec OpenCV, reportez-vous à Lecture et enregistrement de fichiers image avec Python, OpenCV. Capturer la vidéo de la caméra intégrée Mac avec python peut être utilisé comme référence pour déterminer les erreurs et passer en échelle de gris.
Dans le répertoire où se trouve oneshot.py, dans un environnement où python a un PATH
python
python oneshot.py
Ou
python
chmod +x oneshot.py
./oneshot.py
est. S'il s'agit de Linux ou Mac, utilisez le terminal. windows peut être une invite de commande, mais il peut être plus facile de l'exécuter à partir d'une application de type IDE.
scheduled_shot.py
#!/usr/bin/env python
import cv2
import datetime
import schedule
import time
deviceid=0 # it depends on the order of USB connection.
capture = cv2.VideoCapture(deviceid)
def job():
ret, frame = capture.read()
strdate=datetime.datetime.now().strftime('%Y%m%dT%H%M%S')
fname="image_" + strdate + ".jpg "
cv2.imwrite(fname, frame)
print(fname + " is created.")
#do job every 10 seconds
schedule.every(1/6).minutes.do(job)
while True:
schedule.run_pending()
time.sleep(1)
Cette fois, l'image est acquise toutes les 10 secondes. Pour savoir comment utiliser schedule, reportez-vous à Exécutons périodiquement des modules en utilisant schedule.
L'écriture while True n'est peut-être pas courante dans les logiciels, mais c'est un must pour le contrôle matériel. Avec cela, vous pouvez implémenter une fonction qui crée une boucle infinie, par exemple, dans le cas d'un cuiseur à riz, si vous pointez vers le cordon d'alimentation, il continuera à fonctionner. Ici, avec True, vous pouvez continuer à prendre des images une fois toutes les 10 secondes indéfiniment. Pour échapper à la boucle infinie, vous devez forcer la fin du programme avec cntl + c etc. (Dans cette façon d'écrire, vous pouvez également définir une minuterie pour qu'elle se termine après un certain laps de temps).
Générez le nom de fichier à l'aide de datetime afin que le nom de fichier ne soit pas réécrit et que les noms de fichier soient classés par ordre chronologique. Veuillez vous référer à Convertir la date, l'heure et la chaîne de caractères avec Python datetime.
Dans le cas d'une acquisition continue, une fois que vous avez acquis l'image, vérifiez la taille du fichier et considérez l'espace dont vous avez besoin. Si vous remarquez, la capacité restante du disque est souvent nulle.
python
python scheduled_shot.py
...
image_20201001T110144.jpg is created.
image_20201001T110154.jpg is created.
image_20201001T110204.jpg is created.
Désormais, une fois exécutée, l'image sera enregistrée toutes les 10 secondes. Puisqu'il n'y a qu'une terminaison forcée, elle est terminée en terminant de force le programme avec cntl + c ou similaire.
Si vous essayez de visualiser l'image avec imshow de python etc., la sortie des images récentes sera considérablement lente en raison de la grande capacité. Enregistrez l'image au format png ou jpeg avant de la visualiser.
Si cela ne suffit pas à utiliser, [Créons une interface graphique avec PyQt5! Vous pouvez facilement créer une interface graphique telle que Explication de l'introduction à l'utilisation. Cependant, du point de vue de la stabilité, il est préférable de le faire fonctionner correctement avec CUI.
En outre, dans un tel programme, il est préférable de concentrer le programme d'acquisition de données sur celui-ci. Le processeur et les programmes qui acquièrent et enregistrent les images de la caméra doivent se concentrer sur la non-perte des données. Les opérations secondaires telles que le téléchargement, le transfert et le traitement des données dans la dernière étape sont effectuées par un autre programme.
Recommended Posts