diff --git a/Main/pom.xml b/Main/pom.xml index a96fc2933..867a9ab5e 100644 --- a/Main/pom.xml +++ b/Main/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.chameleon-vision.main chameleon-vision - 1.1.4-BETA + 2.0-SNAPSHOT diff --git a/Main/src/main/java/com/chameleonvision/Main.java b/Main/src/main/java/com/chameleonvision/Main.java index 6941cb7ea..59b544707 100644 --- a/Main/src/main/java/com/chameleonvision/Main.java +++ b/Main/src/main/java/com/chameleonvision/Main.java @@ -22,7 +22,7 @@ public class Main { private static final String NETWORK_MANAGE_KEY = "--unmanage-network"; // no args for this setting private static final String IGNORE_ROOT = "--ignore-root"; // no args for this setting - private static final int DEFAULT_PORT = 8888; + private static final int DEFAULT_PORT = 5800; private static boolean ntServerMode = false; private static boolean manageNetwork = true; diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java b/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java index a1ecd7f2a..d9d8a6551 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java @@ -147,12 +147,12 @@ public class Camera { } private void updateCvSource() { + CameraManager.getVisionProcessByCameraName(name).cameraProcess.updateFrameSize(); synchronized (cvSourceLock) { var newWidth = camVideoMode.width / streamDivisor.value; var newHeight = camVideoMode.height / streamDivisor.value; cvSource = cs.putVideo(name, newWidth, newHeight); } - CameraManager.getVisionProcessByCameraName(name).cameraProcess.updateFrameSize(); ServerHandler.sendFullSettings(); } diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java b/Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java index 313959ddb..3022af208 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java @@ -15,7 +15,7 @@ public class CameraSerializer implements JsonSerializer { var pipelines = context.serialize(camera.getPipelines()); obj.add("pipelines", pipelines); obj.addProperty("resolution", camera.getVideoModeIndex()); - obj.add("camVideoMode", context.serialize(camera.getVideoMode())); +// obj.add("camVideoMode", context.serialize(camera.getVideoMode())); obj.add("isDriver",context.serialize(camera.getDriverMode())); obj.add("driverExposure",context.serialize(camera.getDriverExposure())); obj.add("driverBrightness",context.serialize(camera.getDriverBrightness())); diff --git a/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java index 0f9405cf3..813c9d6e8 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java @@ -10,42 +10,40 @@ import org.opencv.imgproc.Imgproc; public class CameraProcess implements Runnable { private final Camera camera; - private final int maxFPS; - private final Object inputFrameLock = new Object(); + private final Object outputFrameLock = new Object(); - private Mat inputFrame; + private final Object inputFrameLock = new Object(); + private int maxFPS; private Mat outputFrame; + private Mat inputFrame; private long timestamp; private StreamDivisor divisor; CameraProcess(Camera camera) { this.camera = camera; - maxFPS = camera.getVideoMode().fps; updateFrameSize(); } public void updateFrameSize() { - var camVals = camera.getCamVals(); + maxFPS = camera.getVideoMode().fps; divisor = camera.getStreamDivisor(); - var newWidth = camVals.ImageWidth / divisor.value; - var newHeight = camVals.ImageHeight / divisor.value; - synchronized (inputFrameLock) { - inputFrame = new Mat(newWidth, newHeight, CvType.CV_8UC3); - } + var camVidMode = camera.getVideoMode(); + var newWidth = camVidMode.width / divisor.value; + var newHeight = camVidMode.height / divisor.value; synchronized (outputFrameLock) { outputFrame = new Mat(newWidth, newHeight, CvType.CV_8UC3); } } - void updateFrame(Mat inputFrame) { - synchronized (inputFrameLock) { - inputFrame.copyTo(this.inputFrame); + void setOutputFrame(Mat inputFrame) { + synchronized (outputFrameLock) { + inputFrame.copyTo(this.outputFrame); } } - long getLatestFrame(Mat outputFrame) { - synchronized (outputFrameLock) { - this.outputFrame.copyTo(outputFrame); + long getInputFrame(Mat inputFrame) { + synchronized (inputFrameLock) { + this.inputFrame.copyTo(inputFrame); return timestamp; } } @@ -53,18 +51,18 @@ public class CameraProcess implements Runnable { @Override public void run() { while (!Thread.interrupted()) { - synchronized (outputFrameLock) { - timestamp = camera.grabFrame(outputFrame); - } synchronized (inputFrameLock) { + timestamp = camera.grabFrame(inputFrame); + } + synchronized (outputFrameLock) { if (divisor.value != 1) { - var camVals = camera.getCamVals(); - var newWidth = camVals.ImageWidth / divisor.value; - var newHeight = camVals.ImageHeight / divisor.value; + var camVidMode = camera.getVideoMode(); + var newWidth = camVidMode.width / divisor.value; + var newHeight = camVidMode.height / divisor.value; Size newSize = new Size(newWidth, newHeight); - Imgproc.resize(inputFrame, inputFrame, newSize); + Imgproc.resize(outputFrame, outputFrame, newSize); } - camera.putFrame(inputFrame); + camera.putFrame(outputFrame); } var msToWait = (long) 1000 / maxFPS; try { diff --git a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java index 6e00b6477..c4580e47d 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java @@ -1,7 +1,6 @@ package com.chameleonvision.vision.process; import com.chameleonvision.settings.SettingsManager; -import com.chameleonvision.vision.CalibrationMode; import com.chameleonvision.vision.Orientation; import com.chameleonvision.vision.Pipeline; import com.chameleonvision.vision.camera.Camera; @@ -218,7 +217,7 @@ public class VisionProcess implements Runnable { currentPipeline = camera.getCurrentPipeline(); // start fps counter right before grabbing input frame - timeStamp = cameraProcess.getLatestFrame(cameraInputMat); + timeStamp = cameraProcess.getInputFrame(cameraInputMat); if (cameraInputMat.cols() == 0 && cameraInputMat.rows() == 0) { continue; } @@ -249,7 +248,7 @@ public class VisionProcess implements Runnable { ServerHandler.broadcastMessage(WebSend); } - cameraProcess.updateFrame(streamOutputMat); + cameraProcess.setOutputFrame(streamOutputMat); cameraInputMat.release(); hsvThreshMat.release(); diff --git a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java index 7f0db9d30..3573fcfa7 100644 --- a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java @@ -191,6 +191,9 @@ public class ServerHandler { case "driverExposure": cam.setDriverExposure((Integer) value); break; + case "isDriver": + cam.setDriverMode((boolean)value); + break; default: Field field = obj.getClass().getField(fieldName); if (field.getType().isEnum()) { diff --git a/Main/src/main/resources/web/js/app.415345a3.js b/Main/src/main/resources/web/js/app.415345a3.js index 86d438e65..1a1ad66b9 100644 --- a/Main/src/main/resources/web/js/app.415345a3.js +++ b/Main/src/main/resources/web/js/app.415345a3.js @@ -1,2 +1,2 @@ -(function(e){function t(t){for(var a,r,o=t[0],s=t[1],u=t[2],d=0,l=[];d({saveSnackbar:!1,timer:void 0}),created(){this.$options.sockets.onmessage=async e=>{try{var t=await e.data.arrayBuffer();let n=this.$msgPack.decode(t);for(let e in n)n.hasOwnProperty(e)&&this.handleMessage(e,n[e])}catch(n){console.error("error: "+e.data+" , "+n)}}}},o=c,s=(n("034f"),n("2877")),u=n("6544"),d=n.n(u),l=n("7496"),h=n("40dc"),f=n("a523"),p=n("a75b"),v=n("0e8f"),m=n("a722"),b=n("2db4"),k=n("71a3"),g=n("fe57"),y=n("2a7f"),w=Object(s["a"])(o,r,i,!1,null,null,null),S=w.exports;d()(w,{VApp:l["a"],VAppBar:h["a"],VContainer:f["a"],VContent:p["a"],VFlex:v["a"],VLayout:m["a"],VSnackbar:b["a"],VTab:k["a"],VTabs:g["a"],VToolbarItems:y["a"],VToolbarTitle:y["b"]});var x=n("8c4f");function C(e){return()=>n("1a5d")(`./${e}.vue`)}a["a"].use(x["a"]);var P=new x["a"]({base:"/",routes:[{path:"/",redirect:"/vision"},{path:"/vision",name:"Vision",component:C("Camera")},{path:"/settings",name:"Settings",component:C("Settings")}]}),V=n("2f62");a["a"].use(V["a"]);const L=e=>(t,n)=>{a["a"].set(t,e,n)};var T=new V["a"].Store({state:{settings:{teamNumber:1577,connectionType:0,ip:"",gateway:"",netmask:"",hostname:"Chameleon-vision"},pipeline:{exposure:0,brightness:0,orientation:0,hue:[0,15],saturation:[0,15],value:[0,25],erode:!1,dilate:!1,area:[0,12],ratio:[0,12],extent:[0,12],speckle:5,targetGrouping:0,targetIntersection:0,sortMode:0,isBinary:0,calibrationMode:0},driverMode:{isDriver:!1,driverExposure:0,driverBrightness:0},cameraSettings:{},resolutionList:[],port:1181,currentCameraIndex:0,currentPipelineIndex:0,cameraList:[],pipelineList:[],point:{}},mutations:{settings:L("settings"),pipeline:L("pipeline"),cameraSettings:L("cameraSettings"),resolutionList:L("resolutionList"),port:L("port"),currentCameraIndex:L("currentCameraIndex"),currentPipelineIndex:L("currentPipelineIndex"),cameraList:L("cameraList"),pipelineList:L("pipelineList"),point:L("point"),setPipeValues(e,t){for(let n in t)a["a"].set(e.pipeline,n,t[n])},driverMode:L("driverMode")},actions:{settings:e=>e.settings,pipeline:e=>e.pipeline,cameraSettings:e=>e.cameraSettings,resolutionList:e=>e.resolutionList,port:e=>e.port,currentCameraIndex:e=>e.currentCameraIndex,currentPipelineIndex:e=>e.currentPipelineIndex,cameraList:e=>e.cameraList,pipelineList:e=>e.pipelineList,point:e=>e.point,driverMode:e=>e.driverMode}}),O=(n("5363"),n("d1e7"),n("f309"));a["a"].use(O["a"]);var I=new O["a"]({icons:{}}),_=n("b408"),M=n.n(_),j=n("7d47"),E=n.n(j);a["a"].config.productionTip=!1,a["a"].use(M.a,"ws://"+location.hostname+":8888/websocket"),a["a"].prototype.$msgPack=E()(!0),a["a"].mixin({methods:{handleInput(e,t){let n=this.$msgPack.encode({[e]:t});this.$socket.send(n)}}}),new a["a"]({router:P,store:T,vuetify:I,render:e=>e(S)}).$mount("#app")},cf05:function(e,t,n){e.exports=n.p+"img/logo.e82307fd.png"}}); +(function(e){function t(t){for(var a,r,o=t[0],s=t[1],u=t[2],d=0,l=[];d({saveSnackbar:!1,timer:void 0}),created(){this.$options.sockets.onmessage=async e=>{try{var t=await e.data.arrayBuffer();let n=this.$msgPack.decode(t);for(let e in n)n.hasOwnProperty(e)&&this.handleMessage(e,n[e])}catch(n){console.error("error: "+e.data+" , "+n)}}}},o=c,s=(n("034f"),n("2877")),u=n("6544"),d=n.n(u),l=n("7496"),h=n("40dc"),f=n("a523"),p=n("a75b"),v=n("0e8f"),m=n("a722"),b=n("2db4"),k=n("71a3"),g=n("fe57"),y=n("2a7f"),w=Object(s["a"])(o,r,i,!1,null,null,null),S=w.exports;d()(w,{VApp:l["a"],VAppBar:h["a"],VContainer:f["a"],VContent:p["a"],VFlex:v["a"],VLayout:m["a"],VSnackbar:b["a"],VTab:k["a"],VTabs:g["a"],VToolbarItems:y["a"],VToolbarTitle:y["b"]});var x=n("8c4f");function C(e){return()=>n("1a5d")(`./${e}.vue`)}a["a"].use(x["a"]);var P=new x["a"]({base:"/",routes:[{path:"/",redirect:"/vision"},{path:"/vision",name:"Vision",component:C("Camera")},{path:"/settings",name:"Settings",component:C("Settings")}]}),V=n("2f62");a["a"].use(V["a"]);const L=e=>(t,n)=>{a["a"].set(t,e,n)};var T=new V["a"].Store({state:{settings:{teamNumber:1577,connectionType:0,ip:"",gateway:"",netmask:"",hostname:"Chameleon-vision"},pipeline:{exposure:0,brightness:0,orientation:0,hue:[0,15],saturation:[0,15],value:[0,25],erode:!1,dilate:!1,area:[0,12],ratio:[0,12],extent:[0,12],speckle:5,targetGrouping:0,targetIntersection:0,sortMode:0,isBinary:0,calibrationMode:0},driverMode:{isDriver:!1,driverExposure:0,driverBrightness:0},cameraSettings:{},resolutionList:[],port:1181,currentCameraIndex:0,currentPipelineIndex:0,cameraList:[],pipelineList:[],point:{}},mutations:{settings:L("settings"),pipeline:L("pipeline"),cameraSettings:L("cameraSettings"),resolutionList:L("resolutionList"),port:L("port"),currentCameraIndex:L("currentCameraIndex"),currentPipelineIndex:L("currentPipelineIndex"),cameraList:L("cameraList"),pipelineList:L("pipelineList"),point:L("point"),setPipeValues(e,t){for(let n in t)a["a"].set(e.pipeline,n,t[n])},driverMode:L("driverMode")},actions:{settings:e=>e.settings,pipeline:e=>e.pipeline,cameraSettings:e=>e.cameraSettings,resolutionList:e=>e.resolutionList,port:e=>e.port,currentCameraIndex:e=>e.currentCameraIndex,currentPipelineIndex:e=>e.currentPipelineIndex,cameraList:e=>e.cameraList,pipelineList:e=>e.pipelineList,point:e=>e.point,driverMode:e=>e.driverMode}}),O=(n("5363"),n("d1e7"),n("f309"));a["a"].use(O["a"]);var I=new O["a"]({icons:{}}),_=n("b408"),M=n.n(_),j=n("7d47"),E=n.n(j);a["a"].config.productionTip=!1,a["a"].use(M.a,"ws://"+location.hostname+":5800/websocket"),a["a"].prototype.$msgPack=E()(!0),a["a"].mixin({methods:{handleInput(e,t){let n=this.$msgPack.encode({[e]:t});this.$socket.send(n)}}}),new a["a"]({router:P,store:T,vuetify:I,render:e=>e(S)}).$mount("#app")},cf05:function(e,t,n){e.exports=n.p+"img/logo.e82307fd.png"}}); //# sourceMappingURL=app.415345a3.js.map \ No newline at end of file