From 3dbe097fce29f8b20d20a7d77970667d6aa997a5 Mon Sep 17 00:00:00 2001 From: ori Date: Fri, 14 Jun 2019 08:35:42 -0700 Subject: [PATCH] initial integration between ui and be --- .vscode/launch.json | 70 +++++++++++++++++++ backend/Main.py | 3 + backend/app/classes/SettingsManager.py | 17 ++--- backend/app/handlers/SocketHandler.py | 10 +-- backend/app/handlers/VisionHandler.py | 4 +- .../settings/cams/USB Camera-B4.09.24.1.json | 1 + backend/settings/settings.json | 1 + chameleon-client/src/store.js | 2 +- settings/cams/USB Camera-B4.09.24.1.json | 1 + settings/settings.json | 1 + 10 files changed, 95 insertions(+), 15 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 backend/settings/cams/USB Camera-B4.09.24.1.json create mode 100644 backend/settings/settings.json create mode 100644 settings/cams/USB Camera-B4.09.24.1.json create mode 100644 settings/settings.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..92a2fa2e9 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,70 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Current File (Integrated Terminal)", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal" + }, + { + "name": "Python: Remote Attach", + "type": "python", + "request": "attach", + "port": 5678, + "host": "localhost", + "pathMappings": [ + { + "localRoot": "${workspaceFolder}", + "remoteRoot": "." + } + ] + }, + { + "name": "Python: Module", + "type": "python", + "request": "launch", + "module": "enter-your-module-name-here", + "console": "integratedTerminal" + }, + { + "name": "Python: Django", + "type": "python", + "request": "launch", + "program": "${workspaceFolder}/manage.py", + "console": "integratedTerminal", + "args": [ + "runserver", + "--noreload", + "--nothreading" + ], + "django": true + }, + { + "name": "Python: Flask", + "type": "python", + "request": "launch", + "module": "flask", + "env": { + "FLASK_APP": "app.py" + }, + "args": [ + "run", + "--no-debugger", + "--no-reload" + ], + "jinja": true + }, + { + "name": "Python: Current File (External Terminal)", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "externalTerminal" + } + ] +} \ No newline at end of file diff --git a/backend/Main.py b/backend/Main.py index 6ec97a0f6..aa9e7ec39 100644 --- a/backend/Main.py +++ b/backend/Main.py @@ -25,4 +25,7 @@ if __name__ == "__main__": SettingsManager() VisionHandler().run() + run_server() + while True: + pass diff --git a/backend/app/classes/SettingsManager.py b/backend/app/classes/SettingsManager.py index 70906bdb6..a1933011b 100644 --- a/backend/app/classes/SettingsManager.py +++ b/backend/app/classes/SettingsManager.py @@ -47,13 +47,14 @@ class SettingsManager(metaclass=Singleton): self._init_cameras() self._init_usb_cameras_settings() - if self.general_settings["curr_camera"] not in self.cams and len(self.cams) > 0: - cam_name = list(self.cams.keys())[0] - self.general_settings["curr_camera"] = cam_name - self.general_settings["curr_pipeline"] = list(self.cams[cam_name]["pipelines"].keys())[0] - else: - self.general_settings["curr_camera"] = "" - self.general_settings["curr_pipeline"] = "" + if self.general_settings["curr_camera"] not in self.cams: + if len(self.cams) > 0: + cam_name = list(self.cams.keys())[0] + self.general_settings["curr_camera"] = cam_name + self.general_settings["curr_pipeline"] = list(self.cams[cam_name]["pipelines"].keys())[0] + else: + self.general_settings["curr_camera"] = "" + self.general_settings["curr_pipeline"] = "" def _init_general_settings(self): try: @@ -156,7 +157,7 @@ class SettingsManager(metaclass=Singleton): pipe_name = self.general_settings["curr_pipeline"] for key in dic: - if self.default_pipeline[key]: + if key in self.default_pipeline: self.cams[cam_name]["pipelines"][pipe_name][key] = dic[key] def change_general_settings_values(self, dic): diff --git a/backend/app/handlers/SocketHandler.py b/backend/app/handlers/SocketHandler.py index 344e90f40..6733506aa 100644 --- a/backend/app/handlers/SocketHandler.py +++ b/backend/app/handlers/SocketHandler.py @@ -21,7 +21,7 @@ class ChameleonWebSocket(tornado.websocket.WebSocketHandler): self.actions["change_pipeline"] = self.change_curr_pipeline def open(self): - + self.send_full_settings() print("WebSocket opened") @@ -31,7 +31,7 @@ class ChameleonWebSocket(tornado.websocket.WebSocketHandler): message_dic = json.loads(message) for key in message_dic: - self.actions.get(key, self.actions["change_pipeline_values"])(message_dic[key]) + self.actions.get(key, self.actions["change_pipeline_values"])(message_dic) print(message) @@ -59,9 +59,9 @@ class ChameleonWebSocket(tornado.websocket.WebSocketHandler): def send_full_settings(self): full_settings = self.settings_manager.general_settings.copy() - + full_settings["cameraList"] = list(self.settings_manager.cams.copy().keys()) try: - full_settings = self.settings_manager.get_curr_pipeline() + full_settings.update(self.settings_manager.get_curr_pipeline()) except NoCameraConnectedException: # TODO: return something if no camera connected full_settings["data"] = None @@ -82,4 +82,4 @@ class ChameleonWebSocket(tornado.websocket.WebSocketHandler): for key in self.set_this_camera_settings: if key in dic: self.settings_manager.set_camera_settings(self.settings_manager.general_settings["curr_camera"], - dic[key]) + dic) diff --git a/backend/app/handlers/VisionHandler.py b/backend/app/handlers/VisionHandler.py index 257d1c0a2..94d21735b 100644 --- a/backend/app/handlers/VisionHandler.py +++ b/backend/app/handlers/VisionHandler.py @@ -4,6 +4,7 @@ import networktables import cv2 import numpy from cscore import CameraServer +# from .app.classes.SettingsManager import SettingsManager from app.classes.SettingsManager import SettingsManager from ..classes.Singleton import Singleton import time @@ -85,6 +86,7 @@ class VisionHandler(metaclass=Singleton): def thread_proc(self, cs, cam_name, port="5557"): cv_sink = cs.getVideo(camera=SettingsManager.usb_cameras[cam_name]) + width = SettingsManager().cams[cam_name]["video_mode"]["width"] height = SettingsManager().cams[cam_name]["video_mode"]["height"] @@ -106,7 +108,7 @@ class VisionHandler(metaclass=Singleton): image = socket.recv_pyobj() cv_publish.putFrame(image) end = time.time() - print(cam_name + " " + str(1 / (end - start))) + # print(cam_name + " " + str(1 / (end - start))) def camera_process(self, cam_name, port): diff --git a/backend/settings/cams/USB Camera-B4.09.24.1.json b/backend/settings/cams/USB Camera-B4.09.24.1.json new file mode 100644 index 000000000..6d51fbd07 --- /dev/null +++ b/backend/settings/cams/USB Camera-B4.09.24.1.json @@ -0,0 +1 @@ +{"pipelines": {"pipeline0": {"exposure": 50, "brightness": 50, "orientation": "Normal", "resolution": [320, 160], "hue": [0, 58], "saturation": [0, 100], "value": [0, 100], "erode": false, "dilate": false, "area": [0, 100], "ratio": [0, 20], "extent": [0, 100], "is_binary": "Normal"}}, "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"}} \ No newline at end of file diff --git a/backend/settings/settings.json b/backend/settings/settings.json new file mode 100644 index 000000000..c89e02900 --- /dev/null +++ b/backend/settings/settings.json @@ -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"} \ No newline at end of file diff --git a/chameleon-client/src/store.js b/chameleon-client/src/store.js index cbd526919..f1f021862 100644 --- a/chameleon-client/src/store.js +++ b/chameleon-client/src/store.js @@ -33,7 +33,7 @@ export const store = new Vuex.Store({ gateWay:0, hostName:"", //live info - streamAdress:("http://"+location.hostname + ":1181/?stream"), + streamAdress:("http://"+location.hostname + ":1181/stream.mjpg"), isBinaryImage:0, //camera lists cameraList:[], diff --git a/settings/cams/USB Camera-B4.09.24.1.json b/settings/cams/USB Camera-B4.09.24.1.json new file mode 100644 index 000000000..ff8a54b9b --- /dev/null +++ b/settings/cams/USB Camera-B4.09.24.1.json @@ -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], "is_binary": "Normal"}}, "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"}} \ No newline at end of file diff --git a/settings/settings.json b/settings/settings.json new file mode 100644 index 000000000..c89e02900 --- /dev/null +++ b/settings/settings.json @@ -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"} \ No newline at end of file