From da06e0af71990510826b0517532d5cfb5338e1d1 Mon Sep 17 00:00:00 2001 From: gac-S_Changer Date: Mon, 18 Jun 2018 15:48:44 +0200 Subject: [PATCH] --- config/devices - Copy.properties | 67 +++++++++++++++++++++++++++++ config/devices.properties | 1 + devices/gripper_cam.properties | 20 +++++++++ plugins/MXSC-1.10.0.jar | Bin 79151 -> 79376 bytes script/imgproc/CreateMask.py | 29 +++++++++++++ script/imgproc/LedDetectionProc.py | 17 ++++++-- 6 files changed, 130 insertions(+), 4 deletions(-) create mode 100644 config/devices - Copy.properties create mode 100644 devices/gripper_cam.properties create mode 100644 script/imgproc/CreateMask.py diff --git a/config/devices - Copy.properties b/config/devices - Copy.properties new file mode 100644 index 0000000..cc3672f --- /dev/null +++ b/config/devices - Copy.properties @@ -0,0 +1,67 @@ +img=ch.psi.pshell.prosilica.Prosilica|25001 "PacketSize=1522;PixelFormat=Mono8;BinningX=1;BinningY=1;RegionX=300;RegionY=200;Width=1000;Height=1000"|||false +gripper_cam=ch.psi.pshell.imaging.MjpegSource|http://129.129.110.114/axis-cgi/mjpg/video.cgi||-1000| +microscan=ch.psi.pshell.serial.TcpDevice|129.129.100.200:2001||| +microscan_cmd=ch.psi.pshell.serial.TcpDevice|129.129.100.200:2003||| +ue=LaserUE|COM4|||false +#robot=RobotTcp|127.0.0.1:1000||| +#onewire=ch.psi.pshell.serial.TcpDevice|129.129.126.83:5000||| +puck_detection=ch.psi.mxsc.PuckDetection|tell-raspberrypi:5556||| +#robot_modbus=ch.psi.pshell.modbus.ModbusTCP|129.129.126.100:502||| +#jf1=ch.psi.pshell.modbus.AnalogInput|robot_modbus 0||100| +#jf2=ch.psi.pshell.modbus.AnalogInput|robot_modbus 1||100| +#jf3=ch.psi.pshell.modbus.AnalogInput|robot_modbus 2||100| +#jf4=ch.psi.pshell.modbus.AnalogInput|robot_modbus 3||100| +#jf5=ch.psi.pshell.modbus.AnalogInput|robot_modbus 4||100| +#jf6=ch.psi.pshell.modbus.AnalogInput|robot_modbus 5||100| +#robot_sts=ch.psi.pshell.modbus.AnalogInputArray|robot_modbus 6 6||100| +#robot_cmd=ch.psi.pshell.modbus.AnalogOutput|robot_modbus 12||| +#robot_args=ch.psi.pshell.modbus.AnalogOutputArray|robot_modbus 47 12||| +#robot_req=ch.psi.pshell.modbus.AnalogOutput|robot_modbus 13||| +#robot_ack=ch.psi.pshell.modbus.AnalogInput|robot_modbus 14||| +#robot_ret=ch.psi.pshell.modbus.AnalogInputArray|robot_modbus 15 12||| +#wago_back=ch.psi.pshell.modbus.ModbusTCP|SF-TEST-WAGO1:502||| +wago=ch.psi.pshell.modbus.ModbusTCP|wago-mxsc-1:502||| +led_ok_1=ch.psi.pshell.modbus.DigitalInput|wago 0||1000| +led_ok_2=ch.psi.pshell.modbus.DigitalInput|wago 1||1000| +led_ok_3=ch.psi.pshell.modbus.DigitalInput|wago 2||1000| +feedback_local_safety=ch.psi.pshell.modbus.DigitalInput|wago 3||1000| +feedback_psys_safety=ch.psi.pshell.modbus.DigitalInput|wago 4||1000| +filling_phase_separator=ch.psi.pshell.modbus.DigitalInput|wago 5||1000| +filling_dewar=ch.psi.pshell.modbus.DigitalInput|wago 6||1000| +dewar_level_high_alarm=ch.psi.pshell.modbus.DigitalInput|wago 7||1000| +guiding_tool_park=ch.psi.pshell.modbus.DigitalInput|wago 8||1000| +air_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 9||1000|false +n2_pressure_ok=ch.psi.pshell.modbus.DigitalInput|wago 10||1000| +he_chamber_valve_1=ch.psi.pshell.modbus.DigitalInput|wago 15||1000| +he_chamber_valve_2=ch.psi.pshell.modbus.DigitalInput|wago 16||1000| +relays=ch.psi.pshell.modbus.DigitalOutputArray|wago 0 16||1000| +release_local_safety=ch.psi.pshell.modbus.DigitalOutput|wago 0||| +release_psys_safety=ch.psi.pshell.modbus.DigitalOutput|wago 1||| +ln2_main_power=ch.psi.pshell.modbus.DigitalOutput|wago 2||| +rim_heater=ch.psi.pshell.modbus.DigitalOutput|wago 3||| +phase_separator_ln2=ch.psi.pshell.modbus.DigitalOutput|wago 4||| +dewar_ln2=ch.psi.pshell.modbus.DigitalOutput|wago 5|||false +valve_he_chamber=ch.psi.pshell.modbus.DigitalOutput|wago 6||| +gripper_dryer=ch.psi.pshell.modbus.DigitalOutput|wago 7||| +valve_1=ch.psi.pshell.modbus.DigitalOutput|wago 8||| +valve_2=ch.psi.pshell.modbus.DigitalOutput|wago 9||| +valve_3=ch.psi.pshell.modbus.DigitalOutput|wago 10||| +valve_4=ch.psi.pshell.modbus.DigitalOutput|wago 11||| +#spare_do_1=ch.psi.pshell.modbus.DigitalOutput|wago 12||| +#spare_do_2=ch.psi.pshell.modbus.DigitalOutput|wago 13||| +#spare_do_3=ch.psi.pshell.modbus.DigitalOutput|wago 14||| +#spare_do_4=ch.psi.pshell.modbus.DigitalOutput|wago 15||| +phase_separator_level=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 0||10000| +dewar_level=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 1||10000| +rim_heater_temp=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 2||10000| +air_pressure=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 3||10000| +n2_pressure=ch.psi.pshell.modbus.ReadonlyProcessVariable|wago 4||10000| +#spare_ai_1=ch.psi.pshell.modbus.AnalogInput|wago 5||| +#spare_ai_2=ch.psi.pshell.modbus.AnalogInput|wago 6||| +#spare_ai_3=ch.psi.pshell.modbus.AnalogInput|wago 7||| +led_ctrl_1=ch.psi.pshell.modbus.ProcessVariable|wago 0||| +led_ctrl_2=ch.psi.pshell.modbus.ProcessVariable|wago 1||| +led_ctrl_3=ch.psi.pshell.modbus.ProcessVariable|wago 2||| +#spare_ao_3=ch.psi.pshell.modbus.AnalogOutput|wago 3||| +#cam=ch.psi.pshell.epics.AreaDetector|MX-SAMCAM||| +#img_back=ch.psi.pshell.imaging.CameraSource|cam||-100| diff --git a/config/devices.properties b/config/devices.properties index 37a20a1..bd8c792 100644 --- a/config/devices.properties +++ b/config/devices.properties @@ -1,4 +1,5 @@ img=ch.psi.pshell.prosilica.Prosilica|25001 "PacketSize=1522;PixelFormat=Mono8;BinningX=1;BinningY=1;RegionX=300;RegionY=200;Width=1000;Height=1000"|||false +gripper_cam=ch.psi.pshell.imaging.MjpegSource|http://129.129.110.114/axis-cgi/mjpg/video.cgi||100| microscan=ch.psi.pshell.serial.TcpDevice|129.129.100.200:2001||| microscan_cmd=ch.psi.pshell.serial.TcpDevice|129.129.100.200:2003||| ue=LaserUE|COM4|||false diff --git a/devices/gripper_cam.properties b/devices/gripper_cam.properties new file mode 100644 index 0000000..77b2bc4 --- /dev/null +++ b/devices/gripper_cam.properties @@ -0,0 +1,20 @@ +#Mon Jun 18 11:16:55 CEST 2018 +flipHorizontally=false +flipVertically=false +grayscale=false +invert=false +rescaleFactor=1.0 +rescaleOffset=0.0 +roiHeight=-1 +roiWidth=-1 +roiX=0 +roiY=0 +rotation=0.0 +rotationCrop=false +scale=1.0 +spatialCalOffsetX=NaN +spatialCalOffsetY=NaN +spatialCalScaleX=NaN +spatialCalScaleY=NaN +spatialCalUnits=mm +transpose=false diff --git a/plugins/MXSC-1.10.0.jar b/plugins/MXSC-1.10.0.jar index f4abe15f1f00f1e8b494f951e487cd44a2871021..d9bb0b3db3530a5a945ba38e53ff28113bf6da29 100644 GIT binary patch delta 6289 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 u`6uVCtA7%%&*fzY!F{4cry delta 6037 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 diff --git a/script/imgproc/CreateMask.py b/script/imgproc/CreateMask.py new file mode 100644 index 0000000..98b3498 --- /dev/null +++ b/script/imgproc/CreateMask.py @@ -0,0 +1,29 @@ + +mask_img = new_image(img.getOutput().getWidth(), img.getOutput().getHeight(), image_type="byte", title = "mask_img", fill_color = Color.BLACK) + +mask_radius = 14 +mask_points = [] + + +def to_img_coords(absolute_coords): + return [img.getCalibration().convertToImageX(absolute_coords[0]), img.getCalibration().convertToImageY(absolute_coords[1])] + +for p in _puck_list: + mask_points.append(to_img_coords(p.led_mini)) + mask_points.append(to_img_coords(p.led_uni)) + + + +i = mask_img.getBufferedImage() +for p in mask_points: + #i.setRGB(p[0], p[1], 0xFFFFFF) + for x in range (p[0]-mask_radius, p[0]+mask_radius): + for y in range (p[1]-mask_radius, p[1]+mask_radius): + if math.hypot(x-p[0], y-p[1]) <= mask_radius: + i.setRGB(x,y, 0xFFFFFF) + + +mask_img = load_image(i) +#show_panel( mask_img.getBufferedImage()) + +set_return(mask_img) \ No newline at end of file diff --git a/script/imgproc/LedDetectionProc.py b/script/imgproc/LedDetectionProc.py index 39c628c..37728d9 100644 --- a/script/imgproc/LedDetectionProc.py +++ b/script/imgproc/LedDetectionProc.py @@ -4,6 +4,7 @@ COVER_PRESENT = True ROOM_TEMP = is_room_temp() +USE_MASK = True if get_exec_pars().source == CommandSource.ui: PLOT = None @@ -23,9 +24,9 @@ print "Block id: ", block_id number_frames = 5 if ROOM_TEMP else 10 -number_backgrounds = 5 if ROOM_TEMP else 10 -minimum_size = 150 -maximum_size = 1500 +number_backgrounds = 5 if ROOM_TEMP else 5 +minimum_size = 78 # r = 5 # 150 +maximum_size = 750 # r = 15 #1500 min_circ = 0.2 threshold_method = "MaxEntropy" if ROOM_TEMP else "Default" #Apparently good for LN2: Default, Intermodes, IsoData, Otsu @@ -52,13 +53,21 @@ image = average_frames(number_frames) set_led_state(False) op_image(image, background, "subtract", float_result=True, in_place=True) +image=grayscale(image) -if RENDERER is not None: +if RENDERER is not None and RENDERER.isShowing(): RENDERER.setImage(None, image.getBufferedImage(), None) else: RENDERER = show_panel(image.getBufferedImage()) RENDERER.clearOverlays() +if USE_MASK: + mask_img = run("imgproc/CreateMask") + #mask_img=grayscale(mask_img) + #show_panel( mask_img.getBufferedImage()) + op_image(image, mask_img, "and", float_result=False, in_place=True) + RENDERER.setImage(None, image.getBufferedImage(), None) + invert(image) if threshold_method == "Manual": threshold(image, threshold_range[0], threshold_range[1])