mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-24 01:31:44 +00:00
Settings and Cameras read and save
This commit is contained in:
@@ -1,10 +0,0 @@
|
||||
from .ChameleonPipeLine import ChameleonPipeline
|
||||
|
||||
|
||||
class ChameleonCamera:
|
||||
|
||||
def __init__(self, dic):
|
||||
self.pipelines = {}
|
||||
|
||||
for pipeline_id in dic:
|
||||
self.pipelines[pipeline_id] = ChameleonPipeline(dic[pipeline_id])
|
||||
@@ -1,7 +0,0 @@
|
||||
|
||||
|
||||
class ChameleonPipeline:
|
||||
|
||||
def __init__(self, dic):
|
||||
self.exposure = dic["exposure"]
|
||||
self.brightness = dic["brightness"]
|
||||
@@ -1,7 +1,6 @@
|
||||
import tornado.websocket
|
||||
import json
|
||||
import os
|
||||
from app.classes.ChameleonCamera import ChameleonCamera
|
||||
|
||||
|
||||
class ChameleonWebSocket(tornado.websocket.WebSocketHandler):
|
||||
@@ -17,6 +16,8 @@ class ChameleonWebSocket(tornado.websocket.WebSocketHandler):
|
||||
self.init_settings()
|
||||
self.init_actions()
|
||||
|
||||
# Init methods
|
||||
|
||||
def init_settings(self):
|
||||
with open(os.path.join(self.settings_path, 'settings.json')) as setting_file:
|
||||
self.settings = json.load(setting_file)
|
||||
@@ -34,28 +35,100 @@ class ChameleonWebSocket(tornado.websocket.WebSocketHandler):
|
||||
self.cams[curr_dir] = pipelines
|
||||
|
||||
def init_actions(self):
|
||||
self.actions["change_pipeline_value"] = self.change_pipeline_value
|
||||
self.actions["cam"] = self.change_curr_camera
|
||||
self.actions["pipeline"] = self.change_curr_pipeline
|
||||
self.actions["change_pipeline_values"] = self.change_pipeline_values
|
||||
|
||||
def check_origin(self, origin):
|
||||
return True
|
||||
|
||||
# Socket methods
|
||||
|
||||
def open(self):
|
||||
self.write_message(self.cams[self.settings["curr_camera"]][self.settings["curr_pipeline"]])
|
||||
|
||||
# TODO: send full settings(team number....)
|
||||
self.send_curr_cam()
|
||||
|
||||
print("WebSocket opened")
|
||||
|
||||
def on_message(self, message):
|
||||
|
||||
for key in message:
|
||||
if key in self.actions:
|
||||
self.actions[key](message[key])
|
||||
message_dic = json.loads(message)
|
||||
|
||||
for key in message_dic:
|
||||
self.actions.get(key, self.actions["change_pipeline_values"])(message_dic)
|
||||
|
||||
print(message)
|
||||
self.write_message(message)
|
||||
|
||||
def on_close(self):
|
||||
self.save_settings()
|
||||
self.save_cameras()
|
||||
print("WebSocket closed")
|
||||
|
||||
def change_pipeline_value(self, dic):
|
||||
def send_curr_cam(self):
|
||||
self.write_message(self.get_curr_pipeline())
|
||||
|
||||
# Access methods
|
||||
|
||||
def get_curr_pipeline(self):
|
||||
return self.cams[self.settings["curr_camera"]][self.settings["curr_pipeline"]]
|
||||
|
||||
def get_curr_cam(self):
|
||||
return self.cams[self.settings["curr_camera"]]
|
||||
|
||||
def set_curr_camera(self, cam_name):
|
||||
if cam_name in self.cams:
|
||||
self.settings["curr_camera"] = cam_name
|
||||
|
||||
def set_curr_pipeline(self, pipe_name):
|
||||
if pipe_name in self.cams:
|
||||
self.settings["curr_pipeline"] = pipe_name
|
||||
|
||||
# Actions
|
||||
|
||||
def change_pipeline_values(self, dic):
|
||||
for key in dic:
|
||||
self.cams[self.settings["curr_camera"]][self.settings["curr_pipeline"]][key] = dic[key]
|
||||
self.get_curr_pipeline()[key] = dic[key]
|
||||
|
||||
def change_curr_camera(self, dic):
|
||||
cam_name = 'cam' + dic["camera"]
|
||||
|
||||
if cam_name not in self.cams:
|
||||
self.create_new_cam(cam_name)
|
||||
|
||||
self.set_curr_camera(cam_name)
|
||||
self.send_curr_cam()
|
||||
|
||||
def change_curr_pipeline(self, dic):
|
||||
pipe_name = 'pipeline' + dic["pipeline"]
|
||||
|
||||
if pipe_name not in self.get_curr_cam():
|
||||
self.create_new_pipeline(pipe_name)
|
||||
|
||||
self.set_curr_pipeline(pipe_name)
|
||||
|
||||
# Creators
|
||||
|
||||
def create_new_pipeline(self, pipe_name, cam=None):
|
||||
if not cam:
|
||||
cam = self.settings["curr_camera"]
|
||||
|
||||
with open(os.path.join(self.settings_path, 'default_pipeline.json')) as default_pipeline:
|
||||
self.cams[cam][pipe_name] = json.load(default_pipeline)
|
||||
|
||||
def create_new_cam(self, cam):
|
||||
self.cams[cam] = {}
|
||||
self.create_new_pipeline('pipeline1', cam)
|
||||
|
||||
# Save data functions
|
||||
|
||||
def save_cameras(self):
|
||||
for cam in self.cams:
|
||||
for pipeline in self.cams[cam]:
|
||||
with open(os.path.join(self.cams_path, cam, pipeline + '.json'), 'w') as pipeline_file:
|
||||
json.dump(self.cams[cam][pipeline], pipeline_file)
|
||||
|
||||
def save_settings(self):
|
||||
with open(os.path.join(self.settings_path, 'settings.json'), 'w') as setting_file:
|
||||
json.dump(self.settings, setting_file)
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"exposure": 45,
|
||||
"brightness": 123123
|
||||
}
|
||||
1
backend/settings/cams/cam1/pipeline1.json
Normal file
1
backend/settings/cams/cam1/pipeline1.json
Normal file
@@ -0,0 +1 @@
|
||||
{"exposure": 21, "brightness": 71}
|
||||
@@ -1,4 +1 @@
|
||||
{
|
||||
"exposure": 23,
|
||||
"brightness": 12
|
||||
}
|
||||
{"exposure": 23, "brightness": 12}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"exposure": 2,
|
||||
"brightness": 4
|
||||
}
|
||||
1
backend/settings/cams/cam2/pipeline1.json
Normal file
1
backend/settings/cams/cam2/pipeline1.json
Normal file
@@ -0,0 +1 @@
|
||||
{"exposure": 0, "brightness": 100}
|
||||
@@ -1,4 +1 @@
|
||||
{
|
||||
"exposure": 2,
|
||||
"brightness": 3
|
||||
}
|
||||
{"exposure": 2, "brightness": 3}
|
||||
4
backend/settings/default_pipeline.json
Normal file
4
backend/settings/default_pipeline.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"exposure": 50,
|
||||
"brightness": 50
|
||||
}
|
||||
@@ -1,5 +1 @@
|
||||
{
|
||||
"team_number": 1577,
|
||||
"curr_camera": "cam1",
|
||||
"curr_pipeline": "pipeline1"
|
||||
}
|
||||
{"team_number": 1577, "curr_camera": "cam1", "curr_pipeline": "pipeline1"}
|
||||
Reference in New Issue
Block a user