mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-21 01:01:41 +00:00
Merge branch 'master' into dev
This commit is contained in:
@@ -10,7 +10,8 @@ if __name__ == "__main__":
|
||||
# SettingsManager()
|
||||
CamerasHandler.init_camera()
|
||||
|
||||
VisionHandler().run()
|
||||
#VisionHandler().run()
|
||||
SettingsManager().save_settings()
|
||||
|
||||
tornado.options.parse_command_line()
|
||||
app = ChameleonApplication()
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import os
|
||||
import json
|
||||
|
||||
from cscore._cscore import VideoMode
|
||||
|
||||
from .Singleton import Singleton
|
||||
from ..handlers.CamerasHandler import CamerasHandler
|
||||
from .Exceptions import PipelineAlreadyExistsException, NoCameraConnectedException
|
||||
@@ -67,6 +70,14 @@ class SettingsManager(metaclass=Singleton):
|
||||
|
||||
if "path" not in self.cams[cam.name]:
|
||||
self.cams[cam.name]["path"] = cam.otherPaths[0] if len(cam.otherPaths) == 1 else cam.otherPaths[1]
|
||||
if "video_mode" not in self.cams[cam.name]:
|
||||
video_mode: VideoMode = CamerasHandler.get_usb_camera_by_name(cam.name).enumerateVideoModes()[0]
|
||||
self.cams[cam.name]["video_mode"] = {
|
||||
"fps": video_mode.fps,
|
||||
"width": video_mode.width,
|
||||
"height": video_mode.height,
|
||||
"pixel_format": str(video_mode.pixelFormat).split('.')[1]
|
||||
}
|
||||
|
||||
# Access methods
|
||||
|
||||
@@ -85,6 +96,7 @@ class SettingsManager(metaclass=Singleton):
|
||||
def set_curr_camera(self, cam_name):
|
||||
if cam_name in self.cams:
|
||||
self.general_settings["curr_camera"] = cam_name
|
||||
self.general_settings["curr_pipeline"] = self.get_curr_cam()["pipelines"].keys()[0]
|
||||
|
||||
def set_curr_pipeline(self, pipe_name):
|
||||
if pipe_name in self.get_curr_cam()["pipelines"]:
|
||||
@@ -134,14 +146,21 @@ class SettingsManager(metaclass=Singleton):
|
||||
# Savers
|
||||
|
||||
def save_settings(self):
|
||||
self._save_cameras()
|
||||
self._save_general_settings()
|
||||
self._save_cameras()
|
||||
|
||||
def _save_cameras(self):
|
||||
|
||||
if not os.path.exists(self.cams_path):
|
||||
os.mkdir(self.cams_path)
|
||||
|
||||
for cam in self.cams:
|
||||
with open(os.path.join(self.cams_path, cam + '.json'), 'w+') as camera:
|
||||
json.dump(self.cams[cam], camera)
|
||||
|
||||
def _save_general_settings(self):
|
||||
if not os.path.exists(self.settings_path):
|
||||
os.mkdir(self.settings_path)
|
||||
|
||||
with open(os.path.join(self.settings_path, 'settings.json'), 'w+') as setting_file:
|
||||
json.dump(self.general_settings, setting_file)
|
||||
|
||||
@@ -66,6 +66,13 @@ class CamerasHandler:
|
||||
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)
|
||||
def set_camera_settings(usb_camera: cscore.UsbCamera, dic):
|
||||
|
||||
if "brightness" in dic:
|
||||
usb_camera.setBrightness(dic["brightness"])
|
||||
|
||||
if "exposure" in dic:
|
||||
usb_camera.setExposureManual(dic["exposure"])
|
||||
|
||||
if "video_mode" in dic:
|
||||
usb_camera.setVideoMode(dic["video_mode"])
|
||||
|
||||
@@ -7,9 +7,10 @@ from ..classes.SettingsManager import SettingsManager
|
||||
|
||||
|
||||
class ChameleonWebSocket(tornado.websocket.WebSocketHandler):
|
||||
|
||||
actions = {}
|
||||
|
||||
set_this_camera_settings = ["exposure", "brightness", "video_mode"]
|
||||
|
||||
def __init__(self, application, request, **kwargs):
|
||||
super().__init__(application, request, **kwargs)
|
||||
self.settings_manager = SettingsManager()
|
||||
@@ -44,12 +45,19 @@ class ChameleonWebSocket(tornado.websocket.WebSocketHandler):
|
||||
def check_origin(self, origin):
|
||||
return True
|
||||
|
||||
def send_curr_cam(self):
|
||||
def send_curr_pipeline(self):
|
||||
try:
|
||||
self.write_message(self.settings_manager.get_curr_pipeline())
|
||||
except NoCameraConnectedException:
|
||||
# TODO: return something if no camera connected
|
||||
self.write_message(None)
|
||||
self.write_message("No camera connected")
|
||||
|
||||
def send_curr_cam(self):
|
||||
try:
|
||||
self.write_message(self.settings_manager.get_curr_cam())
|
||||
except NoCameraConnectedException:
|
||||
# TODO: return something if no camera connected
|
||||
self.write_message("No camera connected")
|
||||
|
||||
def send_full_settings(self):
|
||||
full_settings = self.settings_manager.general_settings.copy()
|
||||
@@ -64,15 +72,17 @@ class ChameleonWebSocket(tornado.websocket.WebSocketHandler):
|
||||
|
||||
def change_curr_camera(self, dic):
|
||||
self.settings_manager.set_curr_camera(cam_name=dic["cam"])
|
||||
self.send_curr_cam()
|
||||
|
||||
def change_curr_pipeline(self, dic):
|
||||
self.settings_manager.set_curr_pipeline(pipe_name=dic["pipeline"])
|
||||
self.send_curr_pipeline()
|
||||
|
||||
def change_pipeline_values(self, dic):
|
||||
self.settings_manager.change_pipeline_values(dic)
|
||||
|
||||
CamerasHandler.change_camera_values(CamerasHandler.get_usb_camera_by_name(self.settings_manager.general_settings["curr_camera"]), dic)
|
||||
|
||||
|
||||
|
||||
|
||||
for key in self.set_this_camera_settings:
|
||||
if key in dic:
|
||||
CamerasHandler.set_camera_settings(
|
||||
CamerasHandler.get_usb_camera_by_name(self.settings_manager.general_settings["curr_camera"]),
|
||||
dic[key])
|
||||
|
||||
1
backend/settings/cams/USB Camera-B4.09.24.1.json
Normal file
1
backend/settings/cams/USB Camera-B4.09.24.1.json
Normal file
@@ -0,0 +1 @@
|
||||
{"pipelines": {"pipeline0": {"exposure": 50, "brightness": 50, "orientation": "Normal", "resolution": [320, 160], "hue": [0, 100], "saturation": [0, 100], "value": [0, 100], "erode": false, "dilate": false, "area": [0, 100], "ratio": [0, 20], "extent": [0, 100]}}, "path": "/dev/v4l/by-path/pci-0000:02:03.0-usb-0:1:1.0-video-index0", "video_mode": {"fps": 187, "width": 320, "height": 240, "pixel_format": "kYUYV"}}
|
||||
1
backend/settings/settings.json
Normal file
1
backend/settings/settings.json
Normal file
@@ -0,0 +1 @@
|
||||
{"team_number": 1577, "connection_type": "DHCP", "ip": "", "gateway": "", "hostname": "Chameleon-Vision", "curr_camera": "USB Camera-B4.09.24.1", "curr_pipeline": "pipeline0"}
|
||||
Reference in New Issue
Block a user