Utiliser la caméra Point Grey avec Python (PyCapture2)

La version officielle du wrapper Python pour le SDK FlyCapture a été publiée, j'ai donc essayé de l'utiliser. Le logiciel peut être téléchargé depuis: (Inscription de l'utilisateur requise) https://www.ptgrey.com/support/downloads

environnement de test

** Environnement / Logiciel **

caméra

Acquisition d'images depuis la caméra

Je veux traiter l'image acquise avec OpenCV, donc après l'avoir capturée avec PyCapture, convertissez-la en un tableau ~~ Numpy. ~~ Enregistrez et rouvrez! C'est plus rapide! !! !!

capture.py


# -*- coding: utf-8 -*-
import os
import cv2
import numpy as np
import PyCapture2

# set Camera
bus = PyCapture2.BusManager()
cam = PyCapture2.Camera()
uid = bus.getCameraFromIndex(0)
cam.connect(uid)

def capIm():
  try:
    img = cam.retrieveBuffer()
  except PyCapture2.Fc2error as fc2Err:
    print("Error retrieving buffer :", fc2Err)
    return False, []

  #Convertir en tableau Numpy
  # data = np.array(img.getData(), dtype=np.uint8)
  # data = data.reshape((img.getRows(), img.getCols()))
  
  #Enregistrer en tant que Bitmap et ouvrir avec OpenCV
  img.save('tmp.bmp'.encode("utf-8"), PyCapture2.IMAGE_FILE_FORMAT.BMP)
  data = cv2.imread('tmp.bmp', 0)
  return True, data


#Spécifiez la taille de l'image acquise.
width, height = 2048, 2048
fmt7info, supported = cam.getFormat7Info(0)
offsetX = int((fmt7info.maxWidth-width)/2)
offsetY = int((fmt7info.maxHeight-height)/2)
pxfmt = PyCapture2.PIXEL_FORMAT.RAW8
fmt7imgSet = PyCapture2.Format7ImageSettings(0, offsetX, offsetY, width, height, pxfmt)
fmt7pktInf, isValid = cam.validateFormat7Settings(fmt7imgSet)
cam.setFormat7ConfigurationPacket(fmt7pktInf.recommendedBytesPerPacket, fmt7imgSet)

#Définition des propriétés de la caméra
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.AUTO_EXPOSURE, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHARPNESS, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHUTTER, autoManualMode = False)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAIN, autoManualMode = False)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.FRAME_RATE, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.AUTO_EXPOSURE, onOff = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.FRAME_RATE, onOff = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAMMA, onOff = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHARPNESS, onOff = False)

SHUTTER, GAIN = 500, 100
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHUTTER, absValue = SHUTTER/40)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAIN, absValue = GAIN/20)

cam.startCapture()



def nothing(x):
  pass

cv2.namedWindow('PyCapImg', cv2.WINDOW_GUI_NORMAL)
cv2.resizeWindow('PyCapImg', 500,550)
cv2.createTrackbar('SHUTTER', 'PyCapImg', SHUTTER, 1000, nothing)
cv2.createTrackbar('GAIN', 'PyCapImg', GAIN, 1000, nothing)


while cv2.waitKey(1)&0xFF != 27:
  ret, im = capIm()
  if not ret:
    break

  ret = cv2.getTrackbarPos('SHUTTER', 'PyCapImg')
  if ret/40 != SHUTTER:
    SHUTTER = ret
    cam.stopCapture()
    cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHUTTER, absValue = SHUTTER/40)
    cam.startCapture()

  ret = cv2.getTrackbarPos('GAIN', 'PyCapImg')
  if ret/20 != GAIN:
    GAIN = ret
    cam.stopCapture()
    cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAIN, absValue = GAIN/20)
    cam.startCapture()

  sh = cam.getProperty(PyCapture2.PROPERTY_TYPE.SHUTTER)
  ga = cam.getProperty(PyCapture2.PROPERTY_TYPE.GAIN)
  cv2.displayOverlay('PyCapImg', 'SHUTTER:{:.2f}, GAIN:{:.2f}'.format(sh.absValue, ga.absValue))

  cv2.imshow('PyCapImg', im)



#Restaurer les paramètres
cam.stopCapture()
fmt7imgSet = PyCapture2.Format7ImageSettings(0, 0, 0, fmt7info.maxWidth, fmt7info.maxHeight, pxfmt)
fmt7pktInf, isValid = cam.validateFormat7Settings(fmt7imgSet)
cam.setFormat7ConfigurationPacket(fmt7pktInf.recommendedBytesPerPacket, fmt7imgSet)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHUTTER, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.GAIN, autoManualMode = True)
cam.setProperty(type = PyCapture2.PROPERTY_TYPE.SHARPNESS, onOff = True)
cam.disconnect()

cv2.destroyAllWindows()

try:
  os.remove('tmp.bmp')
except:
  pass

Vous pouvez maintenant utiliser la caméra Point Gray ainsi que cam.read (). im.png

~~ En fait, je voulais spécifier la vitesse d'obturation, etc., mais ... (Une addition) Il semble qu'il soit nécessaire d'arrêter une fois la capture de la caméra pour modifier les propriétés telles que SHUTTER et GAIN, de sorte que le traitement n'est effectué que lorsqu'il est modifié sur la barre de piste. Vous pouvez voir les propriétés de la caméra qui peuvent être définies en vérifiant le visualiseur standard associé à FlyCapture.

img.png

Recommended Posts

Utiliser la caméra Point Grey avec Python (PyCapture2)
[Python] Utiliser JSON avec Python
Utiliser mecab avec Python 3
Utiliser DynamoDB avec Python
Utilisez Python 3.8 avec Anaconda
Utiliser python avec docker
Utiliser l'API Twitter avec Python
Capture de caméra avec Python + OpenCV
Utiliser TUN / TAP avec Python
Utiliser l'API subsonique avec python3
Python: comment utiliser async avec
Utilisez vl53l0x avec RaspberryPi (python)
Utilisez NAIF SPICE TOOL KIT avec Python
Utiliser rospy avec virtualenv dans Python3
Utiliser Python mis en pyenv avec NeoVim
Reconnaissance faciale avec caméra avec opencv3 + python2.7
Utiliser la synthèse vocale Windows 10 avec Python
Utiliser le fichier d'étalonnage de la caméra avec OpenCvSharp4
Utiliser OpenCV avec Python 3 dans Window
Utiliser PostgreSQL avec Lambda (Python + psycopg2)
Utilisez smbus avec python3 sous environnement pyenv
Utiliser DeepL avec python (pour la traduction d'articles)
Utiliser Amazon Simple Notification Service avec Python
[Introduction à Python] Utilisons foreach avec Python
Utilisez PIL ou Pillow avec Cygwin Python
Utiliser le chiffrement de la bibliothèque de chiffrement avec l'image Python de Docker
Caméra à pixel unique à expérimenter avec Python
Acquisition d'images depuis une caméra avec Python + OpenCV
Utiliser Application Insights avec Python 3 (y compris les bouteilles)
Utilisation des fonctions C ++ de python avec pybind11
Utilisez le pilote Web phantomjs de sélénium avec unittest de python
Jusqu'à ce que vous puissiez utiliser opencv avec python
Utiliser Python et MeCab avec Azure Functions
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Je veux utiliser MATLAB feval avec python
Utiliser des packages Python supplémentaires avec Serverless Framework (v1.x)
Comment utiliser Raspeye Pie Camera Python
Spécifiez le fichier exécutable Python à utiliser avec virtualenv
Utilisez Logger avec Python pour le moment
Python> Exécuter avec des arguments d'exécution> Utiliser import argparse
Utiliser plusieurs versions de l'environnement python avec pyenv