Skip to content

Commit

Permalink
testing pypylon samples
Browse files Browse the repository at this point in the history
  • Loading branch information
Lab Computer 19716 committed Sep 11, 2024
1 parent 897abeb commit b68520d
Show file tree
Hide file tree
Showing 9 changed files with 520 additions and 0 deletions.
1 change: 1 addition & 0 deletions Cameras/.python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.12
Empty file added Cameras/README.md
Empty file.
58 changes: 58 additions & 0 deletions Cameras/multicamera_recording.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import pypylon.pylon as pylon
import cv2
import numpy as np
import matplotlib as mpl

tlf = pylon.TlFactory.GetInstance()

devices = tlf.EnumerateDevices()

# for device in devices:
# print(f"Model name: {device.GetModelName()} Serial Number: {device.GetSerialNumber()}")

nir_devices = [device for device in devices if "NIR" in device.GetModelName()]

cam_array = pylon.InstantCameraArray(len(nir_devices))

for index, cam in enumerate(cam_array):
cam.Attach(tlf.CreateDevice(nir_devices[index]))

cam_array.Open()

# store a unique number for each camera to identify the incoming images
for index, cam in enumerate(cam_array):
camera_serial = cam.DeviceInfo.GetSerialNumber()
print(f"set context {index} for camera {camera_serial}")
cam.SetCameraContext(index)

# set the exposure time for each camera
# for idx, cam in enumerate(cam_array):
# camera_serial = cam.DeviceInfo.GetSerialNumber()
# print(f"set Exposuretime {idx} for camera {camera_serial}")
# cam.ExposureTimeRaw = 10000

frames_to_grab = 10

frame_counts = [0] * len(nir_devices)

cam_array.StartGrabbing()
while True:
with cam_array.RetrieveResult(1000) as result:
if result.GrabSucceeded():
image_number = result.ImageNumber
cam_id = result.GetCameraContext()
frame_counts[cam_id] = image_number
print(f"cam #{cam_id} image #{image_number}")

# do something with the image ....

if min(frame_counts) >= frames_to_grab:
print( f"all cameras have acquired {frames_to_grab} frames")
break


cam_array.StopGrabbing()

print(frame_counts)


29 changes: 29 additions & 0 deletions Cameras/pylon_samples/enumerate_and_configure.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import pypylon.pylon as pylon
import cv2
import numpy as np
import matplotlib as mpl

tlf = pylon.TlFactory.GetInstance()

devices = tlf.EnumerateDevices()

# for device in devices:
# print(f"Model name: {device.GetModelName()} Serial Number: {device.GetSerialNumber()}")

nir_devices = [device for device in devices if "NIR" in device.GetModelName()]

print("NIR devices:")
for device in nir_devices:
print(f"Model name: {device.GetModelName()} Serial Number: {device.GetSerialNumber()}")

cam = pylon.InstantCamera(tlf.CreateDevice(device))

cam.Open()

result = cam.GrabOne(1000)
image = result.Array

cv2.imshow(device.GetSerialNumber(), image)
cv2.waitKey(0)

cam.Close()
36 changes: 36 additions & 0 deletions Cameras/pylon_samples/grab_and_display.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from pypylon import pylon
import cv2

camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())
camera.Open()

# demonstrate some feature access
# new_width = camera.Width.Value - camera.Width.Inc
# if new_width >= camera.Width.Min:
# camera.Width.Value = new_width

numberOfImagesToGrab = 60
camera.StartGrabbingMax(numberOfImagesToGrab)

frame = -1

while camera.IsGrabbing():
grabResult = camera.RetrieveResult(5000, pylon.TimeoutHandling_ThrowException)
frame += 1

if grabResult.GrabSucceeded():
# Access the image data.
print("SizeX: ", grabResult.Width)
print("SizeY: ", grabResult.Height)
print(f"Current frame: {frame}")
img = grabResult.Array
cv2.imshow(f"frame", img)

if cv2.waitKey(67) & 0xFF == ord("q"):
break


grabResult.Release()

cv2.destroyAllWindows()
camera.Close()
58 changes: 58 additions & 0 deletions Cameras/pylon_samples/multicamera_handling.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import pypylon.pylon as pylon
import cv2
import numpy as np
import matplotlib as mpl

tlf = pylon.TlFactory.GetInstance()

devices = tlf.EnumerateDevices()

# for device in devices:
# print(f"Model name: {device.GetModelName()} Serial Number: {device.GetSerialNumber()}")

nir_devices = [device for device in devices if "NIR" in device.GetModelName()]

cam_array = pylon.InstantCameraArray(len(nir_devices))

for index, cam in enumerate(cam_array):
cam.Attach(tlf.CreateDevice(nir_devices[index]))

cam_array.Open()

# store a unique number for each camera to identify the incoming images
for index, cam in enumerate(cam_array):
camera_serial = cam.DeviceInfo.GetSerialNumber()
print(f"set context {index} for camera {camera_serial}")
cam.SetCameraContext(index)

# set the exposure time for each camera
# for idx, cam in enumerate(cam_array):
# camera_serial = cam.DeviceInfo.GetSerialNumber()
# print(f"set Exposuretime {idx} for camera {camera_serial}")
# cam.ExposureTimeRaw = 10000

frames_to_grab = 10

frame_counts = [0] * len(nir_devices)

cam_array.StartGrabbing()
while True:
with cam_array.RetrieveResult(1000) as result:
if result.GrabSucceeded():
image_number = result.ImageNumber
cam_id = result.GetCameraContext()
frame_counts[cam_id] = image_number
print(f"cam #{cam_id} image #{image_number}")

# do something with the image ....

if min(frame_counts) >= frames_to_grab:
print( f"all cameras have acquired {frames_to_grab} frames")
break


cam_array.StopGrabbing()

print(frame_counts)


25 changes: 25 additions & 0 deletions Cameras/pylon_samples/simple_grab.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from pypylon import pylon

camera = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())
camera.Open()

# demonstrate some feature access
new_width = camera.Width.Value - camera.Width.Inc
if new_width >= camera.Width.Min:
camera.Width.Value = new_width

numberOfImagesToGrab = 100
camera.StartGrabbingMax(numberOfImagesToGrab)

while camera.IsGrabbing():
grabResult = camera.RetrieveResult(timeoutMs = 5000, timeoutHandling=pylon.TimeoutHandling_ThrowException)

if grabResult.GrabSucceeded():
# Access the image data.
print("SizeX: ", grabResult.Width)
print("SizeY: ", grabResult.Height)
img = grabResult.Array
print("Gray value of first pixel: ", img[0, 0])

grabResult.Release()
camera.Close()
12 changes: 12 additions & 0 deletions Cameras/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[project]
name = "cameras"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"matplotlib>=3.9.2",
"numpy>=2.1.1",
"opencv-python>=4.10.0.84",
"pypylon>=4.0.0",
]
Loading

0 comments on commit b68520d

Please sign in to comment.