mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-23 01:21:40 +00:00
62 lines
2.0 KiB
Python
62 lines
2.0 KiB
Python
import cscore
|
|
import cv2
|
|
|
|
|
|
class CamerasHandler:
|
|
|
|
@staticmethod
|
|
def get_cameras_info():
|
|
|
|
if not getattr(CamerasHandler, "cams_info", False):
|
|
|
|
arr = []
|
|
|
|
usb_devices = cscore.UsbCamera.enumerateUsbCameras()
|
|
|
|
for index in range(len(usb_devices)):
|
|
cap = cv2.VideoCapture(index)
|
|
if cap.isOpened():
|
|
arr.append(index)
|
|
cap.release()
|
|
index += 1
|
|
|
|
setattr(CamerasHandler, "cams_info", [usb_devices[i] for i in arr])
|
|
|
|
return getattr(CamerasHandler, "cams_info")
|
|
|
|
@staticmethod
|
|
def get_or_start_cameras(usb_devices):
|
|
|
|
if not getattr(CamerasHandler, "cams", False):
|
|
cameras = {}
|
|
for device in usb_devices:
|
|
device_name = device.name
|
|
|
|
if device.name in cameras:
|
|
suffix = 0
|
|
device_name = device.name + str(suffix)
|
|
|
|
while device_name in cameras:
|
|
suffix += 1
|
|
device_name = "pipeline" + str(suffix)
|
|
|
|
camera = cscore.UsbCamera(name=device_name, dev=device.dev)
|
|
camera.setPixelFormat(pixelFormat=camera.enumerateVideoModes()[0].pixelFormat) #TODO if dictionary is empy do this else take from dictionary
|
|
camera.setFPS(camera.enumerateVideoModes()[0].fps)
|
|
camera.setResolution(width=camera.enumerateVideoModes()[0].width,height=camera.enumerateVideoModes()[0].height)
|
|
|
|
cameras[device_name] = camera
|
|
|
|
setattr(CamerasHandler, "cams", cameras)
|
|
|
|
return getattr(CamerasHandler, "cams")
|
|
|
|
@staticmethod
|
|
def get_usb_camera_by_name(cam_name):
|
|
return CamerasHandler.get_or_start_cameras(CamerasHandler.get_cameras_info())[cam_name]
|
|
|
|
@staticmethod
|
|
def change_camera_values(usb_camera: cscore.UsbCamera, dic):
|
|
usb_camera.setBrightness(dic["brightness"] or 50)
|
|
usb_camera.setExposureManual(dic["exposure"] or 50)
|