From 8988ddcdc58499e70d592f14a4415f96be7005c6 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 19 Aug 2016 10:29:06 +0200 Subject: [PATCH 01/99] Receiving first data elements. --- papart/pom.xml | 14 ++ .../papart/procam/camera/CameraRealSense.java | 207 ++++++++++++++++++ 2 files changed, 221 insertions(+) create mode 100755 papart/src/fr/inria/papart/procam/camera/CameraRealSense.java diff --git a/papart/pom.xml b/papart/pom.xml index a438cb39..51279584 100755 --- a/papart/pom.xml +++ b/papart/pom.xml @@ -131,6 +131,20 @@ ${platform} runtime + + + org.bytedeco.javacpp-presets + librealsense + 1.9.6-1.2.2 + + + + org.bytedeco.javacpp-presets + librealsense + 1.9.6-1.2.2 + ${platform} + runtime + org.bytedeco.javacpp-presets diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java new file mode 100755 index 00000000..8b030c44 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -0,0 +1,207 @@ +/* + * Part of the PapARt project - https://project.inria.fr/papart/ + * + * Copyright (C) 2014-2016 Inria + * Copyright (C) 2011-2013 Bordeaux University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; If not, see + * . + */ +package fr.inria.papart.procam.camera; + +import java.nio.ByteBuffer; +import java.nio.ShortBuffer; +import org.bytedeco.javacpp.BytePointer; +import org.bytedeco.javacpp.Pointer; +import org.bytedeco.javacpp.RealSense; +import org.bytedeco.javacpp.RealSense.context; +import org.bytedeco.javacpp.RealSense.device; +import org.bytedeco.javacpp.indexer.UShortBufferIndexer; +import org.bytedeco.javacpp.indexer.UShortIndexer; +import org.bytedeco.javacpp.opencv_core; +import org.bytedeco.javacpp.opencv_core.IplImage; +import org.bytedeco.javacv.FrameGrabber; +import org.bytedeco.javacv.OpenCVFrameConverter; +import org.bytedeco.javacv.OpenCVFrameGrabber; +import processing.core.PImage; + +/** + * + * @author Jeremy Laviole + */ +public class CameraRealSense extends Camera { + + public static void main(String[] args) { + + context context = new context(); + + System.out.println("Devices found: " + context.get_device_count()); + + device device = context.get_device(0); + + System.out.println("Using device 0, an " + device.get_name()); + System.out.println(" Serial number: " + device.get_serial()); + + device.enable_stream(RealSense.depth, 640, 480, RealSense.z16, 60); + device.enable_stream(RealSense.color, 640, 480, RealSense.rgb8, 60); + + device.start(); + + while(true){ + device.wait_for_frames(); + + System.out.println("Depth scale " + device.get_depth_scale()); +// glPixelTransferf(GL_RED_SCALE, 0xFFFF * dev->get_depth_scale() / 2.0f); + + float scale = device.get_depth_scale(); + Pointer data = (Pointer) device.get_frame_data(RealSense.depth); + ShortBuffer bb = data.position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); + + System.out.println("Capacity :" + bb.capacity()); +// UShortIndexer indexer = new UShortBufferIndexer(_frame_data.asByteBuffer().asShortBuffer()); + + for(int i = 0 ; i < bb.capacity(); i++){ + float value = bb.get(i); + if(value != 0){ + value = value * scale; + System.out.print(value + " "); + } + } +//System.out.println("Data : "+ bb.get(100)); + } + + } +// try{ +// +// }catch(Exception e){ +// System.out.println("Exception: " + e); +// e.printStackTrace(); +// } +// // Configure all streams to run at VGA resolution at 60 frames per second +// dev->enable_stream(rs::stream::depth, 640, 480, rs::format::z16, 60); +// dev->enable_stream(rs::stream::color, 640, 480, rs::format::rgb8, 60); +// dev->enable_stream(rs::stream::infrared, 640, 480, rs::format::y8, 60); +// try { dev->enable_stream(rs::stream::infrared2, 640, 480, rs::format::y8, 60); } +// catch(...) { printf("Device does not provide infrared2 stream.\n"); } +// dev->start(); +// +// // Open a GLFW window to display our output +// glfwInit(); +// GLFWwindow * win = glfwCreateWindow(1280, 960, "librealsense tutorial #2", nullptr, nullptr); +// glfwMakeContextCurrent(win); +// while(!glfwWindowShouldClose(win)) +// { +// // Wait for new frame data +// glfwPollEvents(); +// dev->wait_for_frames(); +// +// glClear(GL_COLOR_BUFFER_BIT); +// glPixelZoom(1, -1); +// +// // Display depth data by linearly mapping depth between 0 and 2 meters to the red channel +// glRasterPos2f(-1, 1); +// glPixelTransferf(GL_RED_SCALE, 0xFFFF * dev->get_depth_scale() / 2.0f); +// glDrawPixels(640, 480, GL_RED, GL_UNSIGNED_SHORT, dev->get_frame_data(rs::stream::depth)); +// glPixelTransferf(GL_RED_SCALE, 1.0f); +// +// // Display color image as RGB triples +// glRasterPos2f(0, 1); +// glDrawPixels(640, 480, GL_RGB, GL_UNSIGNED_BYTE, dev->get_frame_data(rs::stream::color)); +// +// // Display infrared image by mapping IR intensity to visible luminance +// glRasterPos2f(-1, 0); +// glDrawPixels(640, 480, GL_LUMINANCE, GL_UNSIGNED_BYTE, dev->get_frame_data(rs::stream::infrared)); +// +// // Display second infrared image by mapping IR intensity to visible luminance +// if(dev->is_stream_enabled(rs::stream::infrared2)) +// { +// glRasterPos2f(0, 0); +// glDrawPixels(640, 480, GL_LUMINANCE, GL_UNSIGNED_BYTE, dev->get_frame_data(rs::stream::infrared2)); +// } + + + private OpenCVFrameGrabber grabber; + private final OpenCVFrameConverter.ToIplImage converter; + + protected CameraRealSense(int cameraNo) { +// this.systemNumber = cameraNo; +// this.setPixelFormat(PixelFormat.BGR); +// converter = new OpenCVFrameConverter.ToIplImage(); + } + + @Override + public void start() { +// OpenCVFrameGrabber grabberCV = new OpenCVFrameGrabber(this.systemNumber); +// grabberCV.setImageWidth(width()); +// grabberCV.setImageHeight(height()); +//// grabberCV.setFrameRate(60); +// grabberCV.setImageMode(FrameGrabber.ImageMode.COLOR); +// +// try { +// grabberCV.start(); +// this.grabber = grabberCV; +// this.isConnected = true; +// } catch (Exception e) { +// System.err.println("Could not start frameGrabber... " + e); +// +// System.err.println("Could not camera start frameGrabber... " + e); +// System.err.println("Camera ID " + this.systemNumber + " could not start."); +// System.err.println("Check cable connection, ID and resolution asked."); +// +// this.grabber = null; +// } + } + + @Override + public void grab() { + +// if (this.isClosing()) { +// return; +// } +// try { +// IplImage img = converter.convertToIplImage(grabber.grab()); +// if (img != null) { +// this.updateCurrentImage(img); +// } +// } catch (Exception e) { +// System.err.println("Camera: OpenCV Grab() Error ! " + e); +// } + } + + @Override + public PImage getPImage() { + +// if (currentImage != null) { +// this.checkCamImage(); +// camImage.update(currentImage); +// return camImage; +// } +// // TODO: exceptions !!! + return null; + } + + @Override + public void close() { + this.setClosing(); +// if (grabber != null) { +// try { +// grabber.stop(); +// System.out.println("Stopping grabber (OpencV)"); +// +// } catch (Exception e) { +// System.out.println("Impossible to close " + e); +// } +// } + } + +} From 550acfb9b0d54a8d4c41ce036ad77f7d7459ea23 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 19 Aug 2016 11:09:33 +0200 Subject: [PATCH 02/99] got depth and color from realsense data. --- .../fr/inria/papart/procam/camera/Camera.java | 2 +- .../papart/procam/camera/CameraFactory.java | 3 + .../papart/procam/camera/CameraRealSense.java | 95 +++++++++++++------ 3 files changed, 68 insertions(+), 32 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index e8a17157..f1f41792 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -66,7 +66,7 @@ public abstract class Camera extends Node implements PConstants, HasExtrinsics { public enum Type { - OPENCV, FFMPEG, OPENCV_DEPTH, PROCESSING, OPEN_KINECT, FLY_CAPTURE, KINECT2_RGB, KINECT2_IR, FAKE + OPENCV, FFMPEG, OPENCV_DEPTH, PROCESSING, OPEN_KINECT, FLY_CAPTURE, KINECT2_RGB, KINECT2_IR, REALSENSE, FAKE } public enum PixelFormat { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index e5c0ad33..ecc92e63 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -52,6 +52,9 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { case OPENCV_DEPTH: camera = new CameraOpenCVDepth(cameraNo); break; + case REALSENSE: + camera = new CameraRealSense(cameraNo); + break; case OPEN_KINECT: camera = new CameraOpenKinect(cameraNo); break; diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 8b030c44..584b7746 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.procam.camera; +import fr.inria.papart.procam.Papart; import java.nio.ByteBuffer; import java.nio.ShortBuffer; import org.bytedeco.javacpp.BytePointer; @@ -33,6 +34,8 @@ import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.OpenCVFrameConverter; import org.bytedeco.javacv.OpenCVFrameGrabber; +import processing.core.PApplet; +import processing.core.PConstants; import processing.core.PImage; /** @@ -41,7 +44,7 @@ */ public class CameraRealSense extends Camera { - public static void main(String[] args) { + public static void main(String[] args) { context context = new context(); @@ -51,36 +54,36 @@ public static void main(String[] args) { System.out.println("Using device 0, an " + device.get_name()); System.out.println(" Serial number: " + device.get_serial()); - + device.enable_stream(RealSense.depth, 640, 480, RealSense.z16, 60); device.enable_stream(RealSense.color, 640, 480, RealSense.rgb8, 60); - + device.start(); - - while(true){ + + while (true) { device.wait_for_frames(); - + System.out.println("Depth scale " + device.get_depth_scale()); // glPixelTransferf(GL_RED_SCALE, 0xFFFF * dev->get_depth_scale() / 2.0f); float scale = device.get_depth_scale(); Pointer data = (Pointer) device.get_frame_data(RealSense.depth); ShortBuffer bb = data.position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); - + System.out.println("Capacity :" + bb.capacity()); // UShortIndexer indexer = new UShortBufferIndexer(_frame_data.asByteBuffer().asShortBuffer()); - - for(int i = 0 ; i < bb.capacity(); i++){ + + for (int i = 0; i < bb.capacity(); i++) { float value = bb.get(i); - if(value != 0){ + if (value != 0) { value = value * scale; System.out.print(value + " "); } } //System.out.println("Data : "+ bb.get(100)); } - - } + + } // try{ // // }catch(Exception e){ @@ -128,19 +131,32 @@ public static void main(String[] args) { // glRasterPos2f(0, 0); // glDrawPixels(640, 480, GL_LUMINANCE, GL_UNSIGNED_BYTE, dev->get_frame_data(rs::stream::infrared2)); // } - - - private OpenCVFrameGrabber grabber; - private final OpenCVFrameConverter.ToIplImage converter; + + private device device; + private context context; + PImage testImage; protected CameraRealSense(int cameraNo) { -// this.systemNumber = cameraNo; + + this.systemNumber = cameraNo; // this.setPixelFormat(PixelFormat.BGR); -// converter = new OpenCVFrameConverter.ToIplImage(); + + context = new context(); + device = context.get_device(cameraNo); + + // debug depth image + parent = Papart.getPapart().getApplet(); + + testImage = parent.createImage(640, 480, PApplet.RGB); + device.enable_stream(RealSense.depth, 640, 480, RealSense.z16, 60); + device.enable_stream(RealSense.color, 640, 480, RealSense.rgb8, 60); } @Override public void start() { + device.start(); + } + // OpenCVFrameGrabber grabberCV = new OpenCVFrameGrabber(this.systemNumber); // grabberCV.setImageWidth(width()); // grabberCV.setImageHeight(height()); @@ -160,34 +176,51 @@ public void start() { // // this.grabber = null; // } - } - @Override public void grab() { + System.out.println("Wait for frames..."); + + device.wait_for_frames(); -// if (this.isClosing()) { -// return; -// } -// try { -// IplImage img = converter.convertToIplImage(grabber.grab()); -// if (img != null) { -// this.updateCurrentImage(img); -// } -// } catch (Exception e) { -// System.err.println("Camera: OpenCV Grab() Error ! " + e); + + System.out.println("frames ok"); + testImage.loadPixels(); + int[] pixels = testImage.pixels; + +// float scale = device.get_depth_scale(); +// Pointer data = (Pointer) device.get_frame_data(RealSense.depth); +// ShortBuffer bb = data.position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); +// System.out.println("Sizes: " + pixels.length + " " + bb.limit()); + +// for (int i = 0; i < bb.capacity(); i++) { +// float value = bb.get(i); +// pixels[i] = (int) (value * scale * 1000f); // } + + Pointer data_color = (Pointer) device.get_frame_data(RealSense.color); + ByteBuffer bb_color = data_color.position(0).limit(640 * 480 * 3).asByteBuffer(); + + System.out.println("Sizes " + bb_color.capacity() + " " + pixels.length * 3); + + for (int i = 0; i < bb_color.capacity() / 3; i++) { + pixels[i] = (bb_color.get(i*3 + 0) & 0xFF) >> 0 | + (bb_color.get(i*3 + 1) & 0xFF) << 8 | + (bb_color.get(i*3 + 2) & 0xFF) << 16; + } + testImage.updatePixels(); } @Override public PImage getPImage() { + return testImage; // if (currentImage != null) { // this.checkCamImage(); // camImage.update(currentImage); // return camImage; // } // // TODO: exceptions !!! - return null; +// return null; } @Override From 750bf63f006e31df4ebe27c4c64eba6b56cf914a Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 19 Aug 2016 17:16:22 +0200 Subject: [PATCH 03/99] First working version. --- .../analysis/KinectDepthAnalysis.java | 57 ++-- .../papart/depthcam/devices/KinectDevice.java | 6 +- .../papart/depthcam/devices/RealSense.java | 139 ++++++++ papart/src/fr/inria/papart/procam/Papart.java | 12 + papart/src/fr/inria/papart/procam/Utils.java | 14 +- .../inria/papart/procam/camera/CamImage.java | 5 +- .../papart/procam/camera/CamImageColor.java | 17 +- .../papart/procam/camera/CamImageGray.java | 5 +- .../fr/inria/papart/procam/camera/Camera.java | 11 +- .../procam/camera/CameraOpenKinectDepth.java | 6 +- .../papart/procam/camera/CameraRealSense.java | 303 +++++++----------- .../procam/camera/CameraRealSenseDepth.java | 101 ++++++ .../papart/procam/camera/WithTouchInput.java | 31 ++ 13 files changed, 489 insertions(+), 218 deletions(-) create mode 100644 papart/src/fr/inria/papart/depthcam/devices/RealSense.java create mode 100755 papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java create mode 100644 papart/src/fr/inria/papart/procam/camera/WithTouchInput.java diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index 92ba65a3..2667d2b0 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -29,11 +29,14 @@ import fr.inria.papart.depthcam.devices.KinectOne; import static fr.inria.papart.depthcam.analysis.DepthAnalysis.INVALID_POINT; import static fr.inria.papart.depthcam.analysis.DepthAnalysis.papplet; +import fr.inria.papart.depthcam.devices.RealSense; import fr.inria.papart.procam.ProjectiveDeviceP; import fr.inria.papart.procam.Utils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraOpenKinect; +import fr.inria.papart.procam.camera.CameraRealSense; import java.nio.ByteBuffer; +import java.nio.ShortBuffer; import java.util.ArrayList; import java.util.Iterator; import java.util.concurrent.Callable; @@ -60,6 +63,7 @@ public class KinectDepthAnalysis extends DepthAnalysis { // private variables // Raw data from the Kinect Sensor + protected ShortBuffer depthRawShortBuffer; protected byte[] depthRaw; protected byte[] colorRaw; @@ -115,20 +119,23 @@ private void initMemory() { if (kinectDevice instanceof Kinect360) { depthComputationMethod = new Kinect360Depth(); - } else { - if (kinectDevice instanceof KinectOne) { - depthComputationMethod = new KinectOneDepth(); - } + } + if (kinectDevice instanceof KinectOne) { + depthComputationMethod = new KinectOneDepth(); + } + if (kinectDevice instanceof RealSense) { + float depthScale = ((CameraRealSense) ((RealSense) kinectDevice).getCameraRGB()).getDepthScale(); + depthComputationMethod = new RealSenseDepth(depthScale); } PixelOffset.initStaticMode(kinectDevice.depthWidth(), kinectDevice.depthHeight()); } - - public PVector findDepthAtRGB(PVector v){ + + public PVector findDepthAtRGB(PVector v) { return findDepthAtRGB(v.x, v.y, v.z); } - - public PVector findDepthAtRGB(float x, float y, float z){ + + public PVector findDepthAtRGB(float x, float y, float z) { PVector v = new PVector(x, y, z); PVector v2 = new PVector(); @@ -286,12 +293,11 @@ protected void doForEachValid3DPoint(int precision, DepthPointManiplation manip) } protected void updateRawDepth(opencv_core.IplImage depthImage) { -// ByteBuffer depthBuff = depthImage.imageData().asBuffer(); -// System.out.println("depthRaw size " + depthRaw.length + " image data size " + depthImage.getByteBuffer().capacity()); -// depthBuff.get(depthRaw); - - depthImage.getByteBuffer().get(depthRaw); -// depthImage.imageData().get(depthRaw); + if (kinectDevice().type() == KinectDevice.Type.REALSENSE) { + depthRawShortBuffer = depthImage.imageData().position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); + } else { + depthImage.getByteBuffer().get(depthRaw); + } } protected void updateRawColor(opencv_core.IplImage colorImage) { @@ -325,18 +331,33 @@ public float findDepth(int offset) { } public static final float KINECT_ONE_DEPTH_RATIO = 10f; - + class KinectOneDepth implements DepthComputation { @Override public float findDepth(int offset) { - float d = (depthRaw[offset * 3 + 1] & 0xFF) * 256 + - (depthRaw[offset * 3] & 0xFF); - + float d = (depthRaw[offset * 3 + 1] & 0xFF) * 256 + + (depthRaw[offset * 3] & 0xFF); + return d / KINECT_ONE_DEPTH_RATIO; // / 65535f * 10000f; } } + class RealSenseDepth implements DepthComputation { + + private float depthRatio; + + public RealSenseDepth(float depthRatio) { + this.depthRatio = depthRatio; + } + + @Override + public float findDepth(int offset) { + float d = depthRawShortBuffer.get(offset) * depthRatio * 1000f; + return d; + } + } + public void setNearFarValue(float near, float far) { this.closeThreshold = near; this.farThreshold = far; diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java index 4b6f46ea..1c9c7b5c 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java @@ -35,7 +35,7 @@ public abstract class KinectDevice implements DepthCameraDevice { public enum Type { - ONE, X360, NONE + ONE, X360, REALSENSE, NONE } // IR and Depth image size public static int WIDTH; @@ -81,6 +81,10 @@ public static KinectDevice createKinect360(PApplet parent) { public static KinectDevice createKinectOne(PApplet parent) { return new KinectOne(parent); } + + public static KinectDevice createRealSense(PApplet parent) { + return new RealSense(parent); + } public void setStereoCalibration(String fileName) { HomographyCalibration calib = new HomographyCalibration(); diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java new file mode 100644 index 00000000..550234bb --- /dev/null +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -0,0 +1,139 @@ +/* + * Part of the PapARt project - https://project.inria.fr/papart/ + * + * Copyright (C) 2014-2016 Inria + * Copyright (C) 2011-2013 Bordeaux University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; If not, see + * . + */ +package fr.inria.papart.depthcam.devices; + +import fr.inria.papart.multitouch.KinectTouchInput; +import fr.inria.papart.procam.Papart; +import fr.inria.papart.procam.camera.Camera; +import fr.inria.papart.procam.camera.CameraFactory; +import fr.inria.papart.procam.camera.CameraOpenCVDepth; +import fr.inria.papart.procam.camera.CameraOpenKinectDepth; +import fr.inria.papart.procam.camera.CameraRealSense; +import fr.inria.papart.procam.camera.CameraRealSenseDepth; +import processing.core.PApplet; + +/** + * + * @author Jeremy Laviole + */ +public final class RealSense extends KinectDevice { + + protected CameraRealSense cameraRGB; + protected CameraRealSenseDepth cameraDepth; + + public RealSense(PApplet parent) { + initSize(); + this.parent = parent; + initRGB(); + initDepth(); + + // get the stereo ? + setStereoCalibration(Papart.kinectStereoCalib); + } + + public RealSense(PApplet parent, CameraRealSense cameraRGB) { + initSize(); + this.parent = parent; + this.cameraRGB = cameraRGB; + initDepth(); + + // TODO: get the extrinsics ! +// setStereoCalibration(cameraRGB.getHardwareExtrinsics()); + setStereoCalibration(Papart.kinectStereoCalib); + } + + public static final int CAMERA_WIDTH = 640; + public static final int CAMERA_WIDTH_RGB = 1920; + public static final int CAMERA_HEIGHT = 480; + public static final int CAMERA_HEIGHT_RGB = 1080; + + private void initSize() { + // IR and Depth image size + WIDTH = 640; + HEIGHT = 480; + SIZE = WIDTH * HEIGHT; + + // RGB image size + RGB_WIDTH = 1920; + RGB_HEIGHT = 1080; + RGB_SIZE = RGB_WIDTH * RGB_HEIGHT; + } + + public void close() { + cameraRGB.close(); +// cameraIR.close(); + cameraDepth.close(); + } + + final void initRGB() { + cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); + cameraRGB.setParent(parent); + cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); + // TODO: calibration + cameraRGB.setCalibration(Papart.calibrationFolder + "camera-kinect2-rgb.yaml"); + cameraRGB.start(); + } + + final void initIR() { + // NO IR yet. + +// cameraIR = CameraFactory.createCamera(Camera.Type.OPENCV, 1); +// cameraIR.setParent(parent); +//// cameraIR.setSize(WIDTH, HEIGHT); +// cameraIR.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); +// cameraIR.start(); + } + + final void initDepth() { + cameraDepth = cameraRGB.getDepthCamera(); + cameraDepth.setParent(parent); + // TODO: calibration... + cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); + } + + @Override + public Camera getCameraRGB() { + return cameraRGB; + } + + public Camera getCameraIR() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Camera getCameraDepth() { + return cameraDepth; + } + + @Override + public int rawDepthSize() { + return SIZE * 2; + } + + @Override + public void setTouch(KinectTouchInput kinectTouchInput) { + cameraDepth.setTouchInput(kinectTouchInput); + } + + @Override + public Type type() { + return Type.REALSENSE; + } + +} diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 9d472858..ac7bc493 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -36,10 +36,12 @@ import fr.inria.papart.depthcam.analysis.KinectDepthAnalysis; import fr.inria.papart.depthcam.devices.KinectDevice; import fr.inria.papart.depthcam.devices.KinectOne; +import fr.inria.papart.depthcam.devices.RealSense; import fr.inria.papart.multitouch.TouchInput; import fr.inria.papart.multitouch.TUIOTouchInput; import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.camera.CameraFactory; +import fr.inria.papart.procam.camera.CameraRealSense; import java.io.File; import java.lang.reflect.Constructor; import java.util.Set; @@ -599,6 +601,7 @@ private void tryLoadExtrinsics() { } } + @Deprecated public void initKinectCamera(float quality) { assert (!cameraInitialized); kinectDevice = loadDefaultCameraKinect(); @@ -609,6 +612,8 @@ public void initKinectCamera(float quality) { checkInitialization(); } + //really deprecated ? + @Deprecated public void startDefaultKinectCamera() { assert (!cameraInitialized); kinectDevice = loadDefaultCameraKinect(); @@ -765,6 +770,13 @@ public void useKinectOne(boolean kinectOne) { */ public KinectDevice loadDefaultCameraKinect() { CameraConfiguration kinectConfiguration = Papart.getDefaultKinectConfiguration(applet); + if (kinectConfiguration.getCameraType() == Camera.Type.REALSENSE) { + if (cameraTracking != null && cameraTracking instanceof CameraRealSense) { + return new RealSense(applet, (CameraRealSense)cameraTracking); + } else { + return new RealSense(applet); + } + } if (kinectConfiguration.getCameraType() == Camera.Type.OPEN_KINECT) { return new Kinect360(applet); diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index f747d10a..745599eb 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -590,7 +590,6 @@ static public void byteBufferBRGtoARGB(ByteBuffer bgr, ByteBuffer argb) { for (int i = 0; i < bgr.capacity(); i += 3) { bgr.get(tmpArr); - argb.put(tmpArr[2]); argb.put(tmpArr[1]); argb.put(tmpArr[0]); @@ -598,6 +597,19 @@ static public void byteBufferBRGtoARGB(ByteBuffer bgr, ByteBuffer argb) { } argb.rewind(); } + + static public void byteBufferRGBtoARGB(ByteBuffer bgr, ByteBuffer argb) { + byte[] tmpArr = new byte[3]; + + for (int i = 0; i < bgr.capacity(); i += 3) { + bgr.get(tmpArr); + argb.put(tmpArr[0]); + argb.put(tmpArr[1]); + argb.put(tmpArr[2]); + argb.put((byte) 255); + } + argb.rewind(); + } // TODO private static byte[] kinectByteArray = null; diff --git a/papart/src/fr/inria/papart/procam/camera/CamImage.java b/papart/src/fr/inria/papart/procam/camera/CamImage.java index dcda5203..a4409b30 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImage.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImage.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.procam.camera; +import fr.inria.papart.procam.camera.Camera.PixelFormat; import java.awt.Image; import java.nio.ByteBuffer; import org.bytedeco.javacpp.opencv_core.IplImage; @@ -33,9 +34,11 @@ public abstract class CamImage extends PImage { protected Object bufferSink = null; protected ByteBuffer natBuffer = null; + protected Camera.PixelFormat incomingFormat; - protected CamImage(PApplet parent, int width, int height, int format) { + protected CamImage(PApplet parent, int width, int height, int format, PixelFormat incomingFormat) { super(width, height, format); + this.incomingFormat = incomingFormat; camInit(parent); } diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java index b4041968..1223034a 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java @@ -36,13 +36,12 @@ public class CamImageColor extends CamImage { protected ByteBuffer argbBuffer; - public CamImageColor(PApplet parent, Image img) { super(parent, img); } - - public CamImageColor(PApplet parent, int width, int height) { - super(parent, width, height, ARGB); + + public CamImageColor(PApplet parent, int width, int height, Camera.PixelFormat format) { + super(parent, width, height, ARGB, format); } @Override @@ -65,8 +64,16 @@ protected final void camInit(PApplet parent) { public void update(IplImage iplImage) { Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); ByteBuffer bgrBuffer = iplImage.getByteBuffer(); - Utils.byteBufferBRGtoARGB(bgrBuffer, argbBuffer); + + if (this.incomingFormat == Camera.PixelFormat.BGR) { + Utils.byteBufferBRGtoARGB(bgrBuffer, argbBuffer); + } + if (this.incomingFormat == Camera.PixelFormat.RGB) { + System.out.println("Here!"); + Utils.byteBufferRGBtoARGB(bgrBuffer, argbBuffer); + } tex.copyBufferFromSource(null, argbBuffer, width, height); + } } diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index 08a34682..20d8114f 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.procam.camera; +import fr.inria.papart.procam.camera.Camera.PixelFormat; import java.awt.Image; import java.nio.ByteBuffer; import org.bytedeco.javacpp.opencv_core; @@ -36,8 +37,8 @@ public CamImageGray(PApplet parent, Image img) { super(parent, img); } - public CamImageGray(PApplet parent, int width, int height) { - super(parent, width, height, GRAY); + public CamImageGray(PApplet parent, int width, int height, PixelFormat incomingFormat) { + super(parent, width, height, GRAY, incomingFormat); } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index f1f41792..dd0068df 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -339,9 +339,7 @@ public void forceCurrentImage(IplImage img) { * @param img */ protected void updateCurrentImage(IplImage img) { - if (undistort) { - if (pdp == null || !pdp.handleDistorsions()) { System.err.println("I cannot distort the image for processing. The " + "calibration did not contain information. "); @@ -368,12 +366,15 @@ protected void updateCurrentImage(IplImage img) { */ protected void checkCamImage() { if (camImage == null) { - if (this.isPixelFormatGray()) { - camImage = new CamImageGray(parent, width(), height()); + camImage = new CamImageGray(parent, width(), height(), this.format); } if (this.isPixelFormatColor()) { - camImage = new CamImageColor(parent, width(), height()); + camImage = new CamImageColor(parent, width(), height(), this.format); + } + + if(!this.isPixelFormatColor() && !this.isPixelFormatGray()){ + System.out.println("Error: No pixel format set for the camera!"); } } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java index ad0e6f58..c17dc3b0 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java @@ -30,7 +30,7 @@ * * @author Jeremy Laviole */ -public class CameraOpenKinectDepth extends Camera { +public class CameraOpenKinectDepth extends Camera implements WithTouchInput{ private CameraOpenKinect parent; private int depthFormat = freenect.FREENECT_DEPTH_MM; @@ -91,10 +91,12 @@ public void close() { setClosing(); } + @Override public KinectTouchInput getTouchInput() { return touchInput; } - + + @Override public void setTouchInput(KinectTouchInput touchInput) { this.touchInput = touchInput; } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 584b7746..7ad97c1d 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -19,24 +19,11 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.Papart; -import java.nio.ByteBuffer; -import java.nio.ShortBuffer; -import org.bytedeco.javacpp.BytePointer; -import org.bytedeco.javacpp.Pointer; import org.bytedeco.javacpp.RealSense; -import org.bytedeco.javacpp.RealSense.context; -import org.bytedeco.javacpp.RealSense.device; -import org.bytedeco.javacpp.indexer.UShortBufferIndexer; -import org.bytedeco.javacpp.indexer.UShortIndexer; -import org.bytedeco.javacpp.opencv_core; import org.bytedeco.javacpp.opencv_core.IplImage; -import org.bytedeco.javacv.FrameGrabber; -import org.bytedeco.javacv.OpenCVFrameConverter; -import org.bytedeco.javacv.OpenCVFrameGrabber; -import processing.core.PApplet; -import processing.core.PConstants; +import org.bytedeco.javacv.RealSenseFrameGrabber; import processing.core.PImage; +import processing.core.PMatrix3D; /** * @@ -44,197 +31,147 @@ */ public class CameraRealSense extends Camera { - public static void main(String[] args) { - - context context = new context(); - - System.out.println("Devices found: " + context.get_device_count()); - - device device = context.get_device(0); - - System.out.println("Using device 0, an " + device.get_name()); - System.out.println(" Serial number: " + device.get_serial()); - - device.enable_stream(RealSense.depth, 640, 480, RealSense.z16, 60); - device.enable_stream(RealSense.color, 640, 480, RealSense.rgb8, 60); - - device.start(); - - while (true) { - device.wait_for_frames(); - - System.out.println("Depth scale " + device.get_depth_scale()); -// glPixelTransferf(GL_RED_SCALE, 0xFFFF * dev->get_depth_scale() / 2.0f); - - float scale = device.get_depth_scale(); - Pointer data = (Pointer) device.get_frame_data(RealSense.depth); - ShortBuffer bb = data.position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); - - System.out.println("Capacity :" + bb.capacity()); -// UShortIndexer indexer = new UShortBufferIndexer(_frame_data.asByteBuffer().asShortBuffer()); - - for (int i = 0; i < bb.capacity(); i++) { - float value = bb.get(i); - if (value != 0) { - value = value * scale; - System.out.print(value + " "); - } - } -//System.out.println("Data : "+ bb.get(100)); - } - - } -// try{ -// -// }catch(Exception e){ -// System.out.println("Exception: " + e); -// e.printStackTrace(); -// } -// // Configure all streams to run at VGA resolution at 60 frames per second -// dev->enable_stream(rs::stream::depth, 640, 480, rs::format::z16, 60); -// dev->enable_stream(rs::stream::color, 640, 480, rs::format::rgb8, 60); -// dev->enable_stream(rs::stream::infrared, 640, 480, rs::format::y8, 60); -// try { dev->enable_stream(rs::stream::infrared2, 640, 480, rs::format::y8, 60); } -// catch(...) { printf("Device does not provide infrared2 stream.\n"); } -// dev->start(); -// -// // Open a GLFW window to display our output -// glfwInit(); -// GLFWwindow * win = glfwCreateWindow(1280, 960, "librealsense tutorial #2", nullptr, nullptr); -// glfwMakeContextCurrent(win); -// while(!glfwWindowShouldClose(win)) -// { -// // Wait for new frame data -// glfwPollEvents(); -// dev->wait_for_frames(); -// -// glClear(GL_COLOR_BUFFER_BIT); -// glPixelZoom(1, -1); -// -// // Display depth data by linearly mapping depth between 0 and 2 meters to the red channel -// glRasterPos2f(-1, 1); -// glPixelTransferf(GL_RED_SCALE, 0xFFFF * dev->get_depth_scale() / 2.0f); -// glDrawPixels(640, 480, GL_RED, GL_UNSIGNED_SHORT, dev->get_frame_data(rs::stream::depth)); -// glPixelTransferf(GL_RED_SCALE, 1.0f); -// -// // Display color image as RGB triples -// glRasterPos2f(0, 1); -// glDrawPixels(640, 480, GL_RGB, GL_UNSIGNED_BYTE, dev->get_frame_data(rs::stream::color)); -// -// // Display infrared image by mapping IR intensity to visible luminance -// glRasterPos2f(-1, 0); -// glDrawPixels(640, 480, GL_LUMINANCE, GL_UNSIGNED_BYTE, dev->get_frame_data(rs::stream::infrared)); -// -// // Display second infrared image by mapping IR intensity to visible luminance -// if(dev->is_stream_enabled(rs::stream::infrared2)) -// { -// glRasterPos2f(0, 0); -// glDrawPixels(640, 480, GL_LUMINANCE, GL_UNSIGNED_BYTE, dev->get_frame_data(rs::stream::infrared2)); -// } - - private device device; - private context context; - PImage testImage; - + protected RealSenseFrameGrabber grabber; + protected CameraRealSenseDepth depthCamera; + private boolean useDepth = true; + protected CameraRealSense(int cameraNo) { - this.systemNumber = cameraNo; -// this.setPixelFormat(PixelFormat.BGR); - - context = new context(); - device = context.get_device(cameraNo); - - // debug depth image - parent = Papart.getPapart().getApplet(); + setPixelFormat(PixelFormat.RGB); + depthCamera = new CameraRealSenseDepth(this); + } + + public CameraRealSenseDepth getDepthCamera(){ + return this.depthCamera; + } + + public PMatrix3D getHardwareExtrinsics(){ + + RealSense.extrinsics _extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.depth, RealSense.color); + // TODO: read this and convert to PMatrix3D + return new PMatrix3D(); + } + + public float getDepthScale(){ + return grabber.getDepthScale(); - testImage = parent.createImage(640, 480, PApplet.RGB); - device.enable_stream(RealSense.depth, 640, 480, RealSense.z16, 60); - device.enable_stream(RealSense.color, 640, 480, RealSense.rgb8, 60); + } + public void useDepth(boolean useDepth){ + this.useDepth = useDepth; } @Override public void start() { - device.start(); + grabber = new RealSenseFrameGrabber(this.systemNumber); + grabber.setImageWidth(width()); + grabber.setImageHeight(height()); + grabber.enableColorStream(); + + if(useDepth){ + depthCamera.start(); + } + + try { + grabber.start(); + this.isConnected = true; + } catch (Exception e) { + System.err.println("Could not start frameGrabber... " + e); + System.err.println("Could not camera start frameGrabber... " + e); + System.err.println("Camera ID " + this.systemNumber + " could not start."); + System.err.println("Check cable connection, ID and resolution asked."); + + this.grabber = null; + } } -// OpenCVFrameGrabber grabberCV = new OpenCVFrameGrabber(this.systemNumber); -// grabberCV.setImageWidth(width()); -// grabberCV.setImageHeight(height()); -//// grabberCV.setFrameRate(60); -// grabberCV.setImageMode(FrameGrabber.ImageMode.COLOR); -// -// try { -// grabberCV.start(); -// this.grabber = grabberCV; -// this.isConnected = true; -// } catch (Exception e) { -// System.err.println("Could not start frameGrabber... " + e); -// -// System.err.println("Could not camera start frameGrabber... " + e); -// System.err.println("Camera ID " + this.systemNumber + " could not start."); -// System.err.println("Check cable connection, ID and resolution asked."); -// -// this.grabber = null; -// } @Override public void grab() { - System.out.println("Wait for frames..."); - - device.wait_for_frames(); - - System.out.println("frames ok"); - testImage.loadPixels(); - int[] pixels = testImage.pixels; - -// float scale = device.get_depth_scale(); -// Pointer data = (Pointer) device.get_frame_data(RealSense.depth); -// ShortBuffer bb = data.position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); -// System.out.println("Sizes: " + pixels.length + " " + bb.limit()); + if (this.isClosing()) { + return; + } + // update the images. + try { + grabber.grab(); + + // get the color + IplImage img = grabber.grabVideo(); +// updateCurrentImage(img); + + currentImage = img; + + if(useDepth){ +// depthCamera.grab(); + } -// for (int i = 0; i < bb.capacity(); i++) { -// float value = bb.get(i); -// pixels[i] = (int) (value * scale * 1000f); -// } - - Pointer data_color = (Pointer) device.get_frame_data(RealSense.color); - ByteBuffer bb_color = data_color.position(0).limit(640 * 480 * 3).asByteBuffer(); - - System.out.println("Sizes " + bb_color.capacity() + " " + pixels.length * 3); - - for (int i = 0; i < bb_color.capacity() / 3; i++) { - pixels[i] = (bb_color.get(i*3 + 0) & 0xFF) >> 0 | - (bb_color.get(i*3 + 1) & 0xFF) << 8 | - (bb_color.get(i*3 + 2) & 0xFF) << 16; + } catch (Exception e) { + System.out.println("Exception :" + e); + e.printStackTrace(); } - testImage.updatePixels(); + } + + public IplImage getDepthImage(){ + return depthCamera.getIplImage(); + } + + public PImage getDepthPImage(){ + return depthCamera.getPImage(); } +// public void grab() { +// System.out.println("Wait for frames..."); +// device.wait_for_frames(); +// System.out.println("frames ok"); +// testImage.loadPixels(); +// int[] pixels = testImage.pixels; +// +//// float scale = device.get_depth_scale(); +//// Pointer data = (Pointer) device.get_frame_data(RealSense.depth); +//// ShortBuffer bb = data.position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); +//// System.out.println("Sizes: " + pixels.length + " " + bb.limit()); +// +//// for (int i = 0; i < bb.capacity(); i++) { +//// float value = bb.get(i); +//// pixels[i] = (int) (value * scale * 1000f); +//// } +// +// Pointer data_color = (Pointer) device.get_frame_data(RealSense.color); +// ByteBuffer bb_color = data_color.position(0).limit(640 * 480 * 3).asByteBuffer(); +// +// System.out.println("Sizes " + bb_color.capacity() + " " + pixels.length * 3); +// +// for (int i = 0; i < bb_color.capacity() / 3; i++) { +// pixels[i] = (bb_color.get(i*3 + 0) & 0xFF) >> 0 | +// (bb_color.get(i*3 + 1) & 0xFF) << 8 | +// (bb_color.get(i*3 + 2) & 0xFF) << 16; +// } +// testImage.updatePixels(); +// } + @Override public PImage getPImage() { - - return testImage; -// if (currentImage != null) { -// this.checkCamImage(); -// camImage.update(currentImage); -// return camImage; -// } -// // TODO: exceptions !!! -// return null; + this.checkCamImage(); + if (currentImage != null) { + camImage.update(currentImage); + return camImage; + } + // TODO: exceptions !!! + return null; } + @Override public void close() { this.setClosing(); -// if (grabber != null) { -// try { -// grabber.stop(); -// System.out.println("Stopping grabber (OpencV)"); -// -// } catch (Exception e) { -// System.out.println("Impossible to close " + e); -// } -// } + if (grabber != null) { + try { + grabber.stop(); + System.out.println("Stopping grabber (RealSense)"); + + } catch (Exception e) { + System.out.println("Impossible to close " + e); + } + } } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java new file mode 100755 index 00000000..559e0cf8 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java @@ -0,0 +1,101 @@ +/* + * Part of the PapARt project - https://project.inria.fr/papart/ + * + * Copyright (C) 2014-2016 Inria + * Copyright (C) 2011-2013 Bordeaux University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; If not, see + * . + */ +package fr.inria.papart.procam.camera; + +import fr.inria.papart.multitouch.KinectTouchInput; +import processing.core.PImage; + +/** + * + * @author Jeremy Laviole + */ +public class CameraRealSenseDepth extends Camera implements WithTouchInput { + + CameraRealSense colorCamera; + private KinectTouchInput touchInput; + + protected CameraRealSenseDepth(CameraRealSense colorCamera) { + this.colorCamera = colorCamera; + } + + @Override + public void start() { + colorCamera.grabber.setDepthImageWidth(width()); + colorCamera.grabber.setDepthImageHeight(height()); + colorCamera.grabber.enableDepthStream(); + this.isConnected = true; + } + + @Override + public void grab() { + System.out.println("grab in realSense depth "); + if (this.isClosing()) { + return; + } + + // update the images. + try { + currentImage = colorCamera.grabber.grabDepth(); + + System.out.println("Raw DepthImage " + currentImage); + if (touchInput != null) { + touchInput.lock(); + touchInput.update(); + touchInput.getTouch2DColors(colorCamera.currentImage); + touchInput.unlock(); + } else if (touchInput != null) { + System.err.println("Error, the TouchInput is set, but no DepthImg is grabbed."); + } + } catch (Exception e) { + System.out.println("Exception :" + e); + e.printStackTrace(); + } + } + + @Override + public PImage getPImage() { + this.checkCamImage(); + if (currentImage != null) { + camImage.update(currentImage); + return camImage; + } + // TODO: exceptions !!! + return null; + } + + @Override + public KinectTouchInput getTouchInput() { + return touchInput; + } + + @Override + public void setTouchInput(KinectTouchInput touchInput) { + this.touchInput = touchInput; + } + + @Override + public void close() { + this.setClosing(); + colorCamera.useDepth(false); + colorCamera.grabber.disableDepthStream(); + + } + +} diff --git a/papart/src/fr/inria/papart/procam/camera/WithTouchInput.java b/papart/src/fr/inria/papart/procam/camera/WithTouchInput.java new file mode 100644 index 00000000..8841e20d --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/WithTouchInput.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2016 Jérémy Laviole - jeremy.laviole@inria.fr. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package fr.inria.papart.procam.camera; + +import fr.inria.papart.multitouch.KinectTouchInput; + +/** + * + * @author Jérémy Laviole - jeremy.laviole@inria.fr + */ +public interface WithTouchInput { + + public KinectTouchInput getTouchInput(); + public void setTouchInput(KinectTouchInput touchInput) ; +} From 478f9e598876f76d74582907283597327ca30f13 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 24 Aug 2016 15:34:06 +0200 Subject: [PATCH 04/99] cleaning --- papart/data/markers/test1.cfg | 1 - 1 file changed, 1 deletion(-) delete mode 120000 papart/data/markers/test1.cfg diff --git a/papart/data/markers/test1.cfg b/papart/data/markers/test1.cfg deleted file mode 120000 index d9fd5234..00000000 --- a/papart/data/markers/test1.cfg +++ /dev/null @@ -1 +0,0 @@ -/home/jiii/papart/markerGen/artoolkitPlus/test1.cfg \ No newline at end of file From f1d0ae252a1b2712c5ff2bf4797c3d23fdc1ce24 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 25 Aug 2016 14:39:19 +0200 Subject: [PATCH 05/99] Work in progress librealsense. --- papart/pom.xml | 4 +- .../papart/depthcam/devices/Kinect360.java | 1 + .../papart/depthcam/devices/KinectDevice.java | 2 + .../papart/depthcam/devices/RealSense.java | 7 +-- papart/src/fr/inria/papart/procam/Papart.java | 1 - .../papart/procam/camera/CameraRealSense.java | 53 ++++++++++--------- 6 files changed, 37 insertions(+), 31 deletions(-) diff --git a/papart/pom.xml b/papart/pom.xml index 51279584..c5261f0e 100755 --- a/papart/pom.xml +++ b/papart/pom.xml @@ -135,13 +135,13 @@ org.bytedeco.javacpp-presets librealsense - 1.9.6-1.2.2 + 1.9.6-1.2 org.bytedeco.javacpp-presets librealsense - 1.9.6-1.2.2 + 1.9.6-1.2 ${platform} runtime diff --git a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java index 4b826cc3..310a8690 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java +++ b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java @@ -46,6 +46,7 @@ public Kinect360(PApplet parent) { camera.setParent(parent); camera.setCalibration(Papart.kinectRGBCalib); camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); + setStereoCalibration(Papart.kinectStereoCalib); camera.start(); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java index 1c9c7b5c..9183858c 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java @@ -93,6 +93,8 @@ public void setStereoCalibration(String fileName) { } public void setStereoCalibration(PMatrix3D matrix) { + System.out.println("Set stereo calib " + this); + matrix.print(); KinectRGBIRCalibration.set(matrix); KinectRGBIRCalibrationInv = KinectRGBIRCalibration.get(); KinectRGBIRCalibrationInv.invert(); diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 550234bb..ba10e6bb 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -45,7 +45,8 @@ public RealSense(PApplet parent) { initDepth(); // get the stereo ? - setStereoCalibration(Papart.kinectStereoCalib); + setStereoCalibration(cameraRGB.getHardwareExtrinsics()); +// setStereoCalibration(Papart.kinectStereoCalib); } public RealSense(PApplet parent, CameraRealSense cameraRGB) { @@ -55,8 +56,8 @@ public RealSense(PApplet parent, CameraRealSense cameraRGB) { initDepth(); // TODO: get the extrinsics ! -// setStereoCalibration(cameraRGB.getHardwareExtrinsics()); - setStereoCalibration(Papart.kinectStereoCalib); + setStereoCalibration(cameraRGB.getHardwareExtrinsics()); +// setStereoCalibration(Papart.kinectStereoCalib); } public static final int CAMERA_WIDTH = 640; diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index ac7bc493..ee471fe6 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -795,7 +795,6 @@ public KinectDevice loadDefaultCameraKinect() { private void loadDefaultTouchKinect() { - kinectDevice.setStereoCalibration(kinectStereoCalib); kinectDepthAnalysis = new KinectDepthAnalysis(this.applet, kinectDevice); PlaneAndProjectionCalibration calibration = new PlaneAndProjectionCalibration(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 7ad97c1d..c5531daa 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.procam.camera; +import java.nio.FloatBuffer; import org.bytedeco.javacpp.RealSense; import org.bytedeco.javacpp.opencv_core.IplImage; import org.bytedeco.javacv.RealSenseFrameGrabber; @@ -34,29 +35,33 @@ public class CameraRealSense extends Camera { protected RealSenseFrameGrabber grabber; protected CameraRealSenseDepth depthCamera; private boolean useDepth = true; - + protected CameraRealSense(int cameraNo) { this.systemNumber = cameraNo; setPixelFormat(PixelFormat.RGB); depthCamera = new CameraRealSenseDepth(this); } - - public CameraRealSenseDepth getDepthCamera(){ + + public CameraRealSenseDepth getDepthCamera() { return this.depthCamera; } - - public PMatrix3D getHardwareExtrinsics(){ - - RealSense.extrinsics _extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.depth, RealSense.color); - // TODO: read this and convert to PMatrix3D - return new PMatrix3D(); + + public PMatrix3D getHardwareExtrinsics() { + RealSense.extrinsics extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.color, RealSense.depth); + FloatBuffer fb = extrinsics.position(0).asByteBuffer().asFloatBuffer(); + return new PMatrix3D( + fb.get(0),fb.get(1),fb.get(2), fb.get(9) * 1000f, + fb.get(3),fb.get(4),fb.get(5), fb.get(10)* 1000f, + fb.get(6),fb.get(7),fb.get(8), fb.get(11)* 1000f, + 0, 0, 0, 1); } - - public float getDepthScale(){ + + public float getDepthScale() { return grabber.getDepthScale(); - + } - public void useDepth(boolean useDepth){ + + public void useDepth(boolean useDepth) { this.useDepth = useDepth; } @@ -66,11 +71,11 @@ public void start() { grabber.setImageWidth(width()); grabber.setImageHeight(height()); grabber.enableColorStream(); - - if(useDepth){ + + if (useDepth) { depthCamera.start(); } - + try { grabber.start(); this.isConnected = true; @@ -99,8 +104,8 @@ public void grab() { // updateCurrentImage(img); currentImage = img; - - if(useDepth){ + + if (useDepth) { // depthCamera.grab(); } @@ -109,12 +114,12 @@ public void grab() { e.printStackTrace(); } } - - public IplImage getDepthImage(){ + + public IplImage getDepthImage() { return depthCamera.getIplImage(); } - - public PImage getDepthPImage(){ + + public PImage getDepthPImage() { return depthCamera.getPImage(); } @@ -147,7 +152,6 @@ public PImage getDepthPImage(){ // } // testImage.updatePixels(); // } - @Override public PImage getPImage() { this.checkCamImage(); @@ -159,7 +163,6 @@ public PImage getPImage() { return null; } - @Override public void close() { this.setClosing(); @@ -167,7 +170,7 @@ public void close() { try { grabber.stop(); System.out.println("Stopping grabber (RealSense)"); - + } catch (Exception e) { System.out.println("Impossible to close " + e); } From 7c4e03e88cfe89ca0981286d71a83e731b0ce1ff Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 20 Oct 2016 12:36:21 +0200 Subject: [PATCH 06/99] resolution problem fixed for color camera, cleaning messages. --- .../fr/inria/papart/procam/camera/CamImageColor.java | 10 ++++------ .../fr/inria/papart/procam/camera/CameraRealSense.java | 8 ++++++++ .../papart/procam/camera/CameraRealSenseDepth.java | 4 ---- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java index 1223034a..b0705ced 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java @@ -56,24 +56,22 @@ protected final void camInit(PApplet parent) { tex.setBufferSource(this); // Second time with bufferSource. tex = ((PGraphicsOpenGL) parent.g).getTexture(this); - argbBuffer = ByteBuffer.allocateDirect(this.pixels.length * 4); } @Override public void update(IplImage iplImage) { Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); - ByteBuffer bgrBuffer = iplImage.getByteBuffer(); + ByteBuffer imageBuffer = iplImage.getByteBuffer(); if (this.incomingFormat == Camera.PixelFormat.BGR) { - Utils.byteBufferBRGtoARGB(bgrBuffer, argbBuffer); + Utils.byteBufferBRGtoARGB(imageBuffer, argbBuffer); } if (this.incomingFormat == Camera.PixelFormat.RGB) { - System.out.println("Here!"); - Utils.byteBufferRGBtoARGB(bgrBuffer, argbBuffer); + Utils.byteBufferRGBtoARGB(imageBuffer, argbBuffer); } tex.copyBufferFromSource(null, argbBuffer, width, height); - + argbBuffer.rewind(); } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index c5531daa..5936f10a 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -20,8 +20,11 @@ package fr.inria.papart.procam.camera; import java.nio.FloatBuffer; +import java.util.logging.Level; +import java.util.logging.Logger; import org.bytedeco.javacpp.RealSense; import org.bytedeco.javacpp.opencv_core.IplImage; +import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.RealSenseFrameGrabber; import processing.core.PImage; import processing.core.PMatrix3D; @@ -37,6 +40,11 @@ public class CameraRealSense extends Camera { private boolean useDepth = true; protected CameraRealSense(int cameraNo) { + try { + RealSenseFrameGrabber.tryLoad(); + } catch (FrameGrabber.Exception ex) { + Logger.getLogger(CameraRealSense.class.getName()).log(Level.SEVERE, null, ex); + } this.systemNumber = cameraNo; setPixelFormat(PixelFormat.RGB); depthCamera = new CameraRealSenseDepth(this); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java index 559e0cf8..fee9a670 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java @@ -45,16 +45,12 @@ public void start() { @Override public void grab() { - System.out.println("grab in realSense depth "); if (this.isClosing()) { return; } - // update the images. try { currentImage = colorCamera.grabber.grabDepth(); - - System.out.println("Raw DepthImage " + currentImage); if (touchInput != null) { touchInput.lock(); touchInput.update(); From 731e6edd1ffe051b360371cb17ed48f0ed0f76e3 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 20 Oct 2016 14:24:59 +0200 Subject: [PATCH 07/99] - Calibration from the device. added calibration for realsense sr300 --- .../data/calibration/saved/camera-SR300.yaml | 71 +++++++++++++++++++ .../papart/depthcam/devices/RealSense.java | 38 +++++++--- papart/src/fr/inria/papart/procam/Papart.java | 2 +- .../papart/procam/ProjectiveDeviceP.java | 15 +++- .../fr/inria/papart/procam/camera/Camera.java | 23 +++--- .../papart/procam/camera/CameraRealSense.java | 18 +++-- .../procam/camera/CameraRealSenseDepth.java | 12 ++++ 7 files changed, 156 insertions(+), 23 deletions(-) create mode 100644 papart/data/calibration/saved/camera-SR300.yaml diff --git a/papart/data/calibration/saved/camera-SR300.yaml b/papart/data/calibration/saved/camera-SR300.yaml new file mode 100644 index 00000000..07b57b62 --- /dev/null +++ b/papart/data/calibration/saved/camera-SR300.yaml @@ -0,0 +1,71 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + [] +Camera 0: + imageWidth: 1920 + imageHeight: 1080 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1.3656188960945180e+03, 0., 9.3637455568984967e+02, 0., + 1.3658996568328641e+03, 5.2242843924517877e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 1.2177352964304565e-01, -2.6007913105329256e-01, + -5.9578551006836851e-03, -1.4334539897586079e-03 ] + extrParams: !!opencv-matrix + rows: 10 + cols: 6 + dt: d + data: [ -1.7607844755616370e-01, -1.2820713376722212e-01, + 1.5460774537187465e+00, 3.9691618786981451e+01, + -2.0418669774626716e+02, 6.4351403964187080e+02, + -1.7811130302287448e-01, -1.4706364694033458e-01, + 1.5843252636738345e+00, 4.5596623077623697e+01, + -2.2165788108081981e+02, 6.3827216502127044e+02, + 2.4781484476754240e-01, -6.7208474024433540e-01, + 3.0240918432584216e+00, 3.0597905812808028e+02, + 8.7979651732451387e+01, 6.0729733866327001e+02, + -1.2602515731264630e-02, 1.0104651192342044e-01, + -1.7992790663995890e+00, -1.1842522426386454e+02, + 3.2234544947681246e+02, 7.6469853273604872e+02, + 5.1147621677178085e-03, 1.7371891574406548e-01, + -1.8097693911394694e+00, -8.9179918593347736e+01, + 2.6838940269947079e+02, 7.7410825633252318e+02, + -1.1794349372064081e-01, 1.9322399324060713e-01, + -3.0305507980128330e+00, 2.1837440238945572e+02, + 3.0684021053236972e+02, 7.1485559885164059e+02, + -1.3753434037022760e-01, 1.8470375069357825e-01, + -3.1243272857107169e+00, 2.5517623452792574e+02, + 3.2064272373774821e+02, 7.0213260954811710e+02, + 1.0433239555743316e-01, -2.8159889631200224e-01, + 3.1030888317227983e+00, 2.3864305820545394e+02, + 4.8062175037148895e+00, 5.9512481887669003e+02, + 1.1115187521034058e-01, -1.7039573484898449e-01, + 3.1095106342789514e+00, 2.4488515071801882e+02, + 6.2753077906758733e+01, 5.9891939499910268e+02, + -1.1577350344439789e-01, 7.9903129906887749e-02, + -3.1169111581000437e+00, 2.4176659799043321e+02, + 1.1668424414898595e+02, 5.9571494908538386e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 10 + dt: d + data: [ 4.1340083848000114e-01, 3.9111806492508300e-01, + 9.7959596925818160e-01, 5.7347563761640497e-01, + 5.0807880449963017e-01, 7.0972237707286367e-01, + 8.7904455182929297e-01, 6.3547446324029178e-01, + 5.8412414368759535e-01, 5.0332289266443064e-01 ] + avgReprojErr: 6.3779671784126868e-01 + maxReprojErr: 2.4731437660509830e+00 + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index ba10e6bb..3ab44242 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -45,8 +45,16 @@ public RealSense(PApplet parent) { initDepth(); // get the stereo ? - setStereoCalibration(cameraRGB.getHardwareExtrinsics()); + setStereoCalibration(cameraRGB.getHardwareExtrinsics()); // setStereoCalibration(Papart.kinectStereoCalib); + + try { + cameraRGB.useHarwareIntrinsics(); + cameraDepth.useHarwareIntrinsics(); + } catch (Exception e) { + System.out.println("Hardware intrinsics problem: " + e); + e.printStackTrace(); + } } public RealSense(PApplet parent, CameraRealSense cameraRGB) { @@ -59,7 +67,7 @@ public RealSense(PApplet parent, CameraRealSense cameraRGB) { setStereoCalibration(cameraRGB.getHardwareExtrinsics()); // setStereoCalibration(Papart.kinectStereoCalib); } - + public static final int CAMERA_WIDTH = 640; public static final int CAMERA_WIDTH_RGB = 1920; public static final int CAMERA_HEIGHT = 480; @@ -84,17 +92,29 @@ public void close() { } final void initRGB() { - cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); - cameraRGB.setParent(parent); - cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); - // TODO: calibration - cameraRGB.setCalibration(Papart.calibrationFolder + "camera-kinect2-rgb.yaml"); + // Check if it is the default camera... + Papart papart = Papart.getPapart(); + + if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE) { + // use the ID + int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); + + cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, id); + cameraRGB.setParent(parent); + // use the calibration + cameraRGB.setCalibration(Papart.cameraCalib); + } else { + cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); + cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); + cameraRGB.setParent(parent); + cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); + } cameraRGB.start(); } final void initIR() { // NO IR yet. - + // cameraIR = CameraFactory.createCamera(Camera.Type.OPENCV, 1); // cameraIR.setParent(parent); //// cameraIR.setSize(WIDTH, HEIGHT); @@ -115,7 +135,7 @@ public Camera getCameraRGB() { } public Camera getCameraIR() { - throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException("Not supported yet."); } public Camera getCameraDepth() { diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index ee471fe6..2e69bb5b 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -612,7 +612,7 @@ public void initKinectCamera(float quality) { checkInitialization(); } - //really deprecated ? + //WARNING not really deprecated !!! @Deprecated public void startDefaultKinectCamera() { assert (!cameraInitialized); diff --git a/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java b/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java index 6ca371e4..5a784e79 100755 --- a/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java +++ b/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java @@ -430,7 +430,20 @@ public void saveCameraTo(PApplet applet, String filename) { public void saveProjectorTo(PApplet applet, String filename) { saveTo(applet, filename, false); } - + + public static ProjectiveDeviceP createSimpleDevice(float fx, float fy, float cx, float cy, int w, int h) { + ProjectiveDeviceP p = new ProjectiveDeviceP(); + p.handleDistorsion = false; + p.w = w; + p.h = h; + p.intrinsics = new PMatrix3D(fx, 0, cx, 0, + 0, fy, cy, 0, + 0, 0, 0, 0, + 0, 0, 0, 0); + p.updateFromIntrinsics(); + p.device = null; + return p; + } public static ProjectiveDeviceP loadCameraDevice(PApplet parent, String filename) throws Exception { return loadCameraDevice(parent, filename, 0); } diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index dd0068df..45f83bfa 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -139,26 +139,33 @@ protected void checkParameters() { if (this.systemNumber == -1 && cameraDescription == null) { throw new RuntimeException("Camera: initalization failed"); } + } + public void setSimpleCalibration(float fx, float fy, float cx, float cy, int w, int h) { + this.calibrationFile = "noFile"; + pdp = ProjectiveDeviceP.createSimpleDevice(fx, fy, cx, cy, w, h); + updateCalibration(); } public void setCalibration(String fileName) { try { this.calibrationFile = fileName; - pdp = ProjectiveDeviceP.loadCameraDevice(parent, fileName); - camIntrinsicsP3D = pdp.getIntrinsics(); - this.width = pdp.getWidth(); - this.height = pdp.getHeight(); - this.undistort = pdp.handleDistorsions(); + updateCalibration(); } catch (Exception e) { e.printStackTrace(); - System.err.println("Camera: error reading the calibration " + pdp + "file" + fileName + " \n" + e); } } + private void updateCalibration() { + camIntrinsicsP3D = pdp.getIntrinsics(); + this.width = pdp.getWidth(); + this.height = pdp.getHeight(); + this.undistort = pdp.handleDistorsions(); + } + public PImage getPImageCopy() { PImage out = parent.createImage(this.width, this.height, RGB); Utils.IplImageToPImage(currentImage, false, out); @@ -372,8 +379,8 @@ protected void checkCamImage() { if (this.isPixelFormatColor()) { camImage = new CamImageColor(parent, width(), height(), this.format); } - - if(!this.isPixelFormatColor() && !this.isPixelFormatGray()){ + + if (!this.isPixelFormatColor() && !this.isPixelFormatGray()) { System.out.println("Error: No pixel format set for the camera!"); } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 5936f10a..71df76ff 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -58,12 +58,22 @@ public PMatrix3D getHardwareExtrinsics() { RealSense.extrinsics extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.color, RealSense.depth); FloatBuffer fb = extrinsics.position(0).asByteBuffer().asFloatBuffer(); return new PMatrix3D( - fb.get(0),fb.get(1),fb.get(2), fb.get(9) * 1000f, - fb.get(3),fb.get(4),fb.get(5), fb.get(10)* 1000f, - fb.get(6),fb.get(7),fb.get(8), fb.get(11)* 1000f, + fb.get(0),fb.get(3),fb.get(6), -fb.get(9) * 1000f, + fb.get(1),fb.get(4),fb.get(7), fb.get(10)* 1000f, + fb.get(2),fb.get(5),fb.get(8), fb.get(11)* 1000f, 0, 0, 0, 1); } - + + public void useHarwareIntrinsics(){ + RealSense.intrinsics intrinsics = grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.color); + FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); + float cx = fb.get(2); + float cy = fb.get(3); + float fx = fb.get(4); + float fy = fb.get(5); + this.setSimpleCalibration(fx, fy, cx, cy, this.width, this.height); + } + public float getDepthScale() { return grabber.getDepthScale(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java index fee9a670..dccc9ad1 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java @@ -20,6 +20,8 @@ package fr.inria.papart.procam.camera; import fr.inria.papart.multitouch.KinectTouchInput; +import java.nio.FloatBuffer; +import org.bytedeco.javacpp.RealSense; import processing.core.PImage; /** @@ -34,6 +36,16 @@ public class CameraRealSenseDepth extends Camera implements WithTouchInput { protected CameraRealSenseDepth(CameraRealSense colorCamera) { this.colorCamera = colorCamera; } + + public void useHarwareIntrinsics(){ + RealSense.intrinsics intrinsics = colorCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.depth); + FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); + float cx = fb.get(2); + float cy = fb.get(3); + float fx = fb.get(4); + float fy = fb.get(5); + setSimpleCalibration(fx, fy, cx, cy, width(), height()); + } @Override public void start() { From c826eae9aaac24bd1c19422ca50fc76274f8e805 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 20 Oct 2016 14:50:22 +0200 Subject: [PATCH 08/99] Depth calibration for SR300 --- .../calibration/saved/camera-SR300-depth.yaml | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 papart/data/calibration/saved/camera-SR300-depth.yaml diff --git a/papart/data/calibration/saved/camera-SR300-depth.yaml b/papart/data/calibration/saved/camera-SR300-depth.yaml new file mode 100644 index 00000000..c9eef5ec --- /dev/null +++ b/papart/data/calibration/saved/camera-SR300-depth.yaml @@ -0,0 +1,71 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + [] +Camera 0: + imageWidth: 640 + imageHeight: 480 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 4.761198e+02, 0., 3.1486e+02, 0., + 4.761198e+02, 2.460912e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 1.2177352964304565e-01, -2.6007913105329256e-01, + -5.9578551006836851e-03, -1.4334539897586079e-03 ] + extrParams: !!opencv-matrix + rows: 10 + cols: 6 + dt: d + data: [ -1.7607844755616370e-01, -1.2820713376722212e-01, + 1.5460774537187465e+00, 3.9691618786981451e+01, + -2.0418669774626716e+02, 6.4351403964187080e+02, + -1.7811130302287448e-01, -1.4706364694033458e-01, + 1.5843252636738345e+00, 4.5596623077623697e+01, + -2.2165788108081981e+02, 6.3827216502127044e+02, + 2.4781484476754240e-01, -6.7208474024433540e-01, + 3.0240918432584216e+00, 3.0597905812808028e+02, + 8.7979651732451387e+01, 6.0729733866327001e+02, + -1.2602515731264630e-02, 1.0104651192342044e-01, + -1.7992790663995890e+00, -1.1842522426386454e+02, + 3.2234544947681246e+02, 7.6469853273604872e+02, + 5.1147621677178085e-03, 1.7371891574406548e-01, + -1.8097693911394694e+00, -8.9179918593347736e+01, + 2.6838940269947079e+02, 7.7410825633252318e+02, + -1.1794349372064081e-01, 1.9322399324060713e-01, + -3.0305507980128330e+00, 2.1837440238945572e+02, + 3.0684021053236972e+02, 7.1485559885164059e+02, + -1.3753434037022760e-01, 1.8470375069357825e-01, + -3.1243272857107169e+00, 2.5517623452792574e+02, + 3.2064272373774821e+02, 7.0213260954811710e+02, + 1.0433239555743316e-01, -2.8159889631200224e-01, + 3.1030888317227983e+00, 2.3864305820545394e+02, + 4.8062175037148895e+00, 5.9512481887669003e+02, + 1.1115187521034058e-01, -1.7039573484898449e-01, + 3.1095106342789514e+00, 2.4488515071801882e+02, + 6.2753077906758733e+01, 5.9891939499910268e+02, + -1.1577350344439789e-01, 7.9903129906887749e-02, + -3.1169111581000437e+00, 2.4176659799043321e+02, + 1.1668424414898595e+02, 5.9571494908538386e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 10 + dt: d + data: [ 4.1340083848000114e-01, 3.9111806492508300e-01, + 9.7959596925818160e-01, 5.7347563761640497e-01, + 5.0807880449963017e-01, 7.0972237707286367e-01, + 8.7904455182929297e-01, 6.3547446324029178e-01, + 5.8412414368759535e-01, 5.0332289266443064e-01 ] + avgReprojErr: 6.3779671784126868e-01 + maxReprojErr: 2.4731437660509830e+00 + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. From 02739b38b63bc16d0ef4fea12117c4d893a49a73 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 20 Oct 2016 19:28:30 +0200 Subject: [PATCH 09/99] Work in progress. --- .../papart/depthcam/devices/KinectDevice.java | 2 - .../papart/depthcam/devices/RealSense.java | 71 +++++++++++-------- .../fr/inria/papart/procam/camera/Camera.java | 2 +- .../papart/procam/camera/CameraRealSense.java | 2 +- .../procam/camera/CameraRealSenseDepth.java | 4 +- 5 files changed, 46 insertions(+), 35 deletions(-) diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java index 9183858c..1c9c7b5c 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java @@ -93,8 +93,6 @@ public void setStereoCalibration(String fileName) { } public void setStereoCalibration(PMatrix3D matrix) { - System.out.println("Set stereo calib " + this); - matrix.print(); KinectRGBIRCalibration.set(matrix); KinectRGBIRCalibrationInv = KinectRGBIRCalibration.get(); KinectRGBIRCalibrationInv.invert(); diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 3ab44242..9866f696 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -42,36 +42,54 @@ public RealSense(PApplet parent) { initSize(); this.parent = parent; initRGB(); - initDepth(); + + cameraRGB.start(); + + cameraDepth = cameraRGB.getDepthCamera(); + + // TODO: setSize is not working on camera side... + //cameraDepth.setSize(WIDTH, HEIGHT); + cameraDepth.setParent(parent); + + // TODO: calibration... +// cameraDepth.useHarwareIntrinsics(); // get the stereo ? setStereoCalibration(cameraRGB.getHardwareExtrinsics()); // setStereoCalibration(Papart.kinectStereoCalib); - try { - cameraRGB.useHarwareIntrinsics(); - cameraDepth.useHarwareIntrinsics(); - } catch (Exception e) { - System.out.println("Hardware intrinsics problem: " + e); - e.printStackTrace(); - } + cameraRGB.useHarwareIntrinsics(); + cameraDepth.useHarwareIntrinsics(); + +// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); + +// cameraRGB.getProjectiveDevice().getIntrinsics().print(); + + // Warning Start both depth & color camera for now. + } public RealSense(PApplet parent, CameraRealSense cameraRGB) { - initSize(); - this.parent = parent; - this.cameraRGB = cameraRGB; - initDepth(); - - // TODO: get the extrinsics ! - setStereoCalibration(cameraRGB.getHardwareExtrinsics()); -// setStereoCalibration(Papart.kinectStereoCalib); + throw new UnsupportedOperationException("Not supported yet: RealSense(PApplet parent, CameraRealSense cameraRGB)"); +// initSize(); +// this.parent = parent; +// this.cameraRGB = cameraRGB; +// +// cameraDepth = cameraRGB.getDepthCamera(); +// cameraDepth.setParent(parent); +// // TODO: calibration... +// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); +// +// // TODO: get the extrinsics ! +// setStereoCalibration(cameraRGB.getHardwareExtrinsics()); +//// setStereoCalibration(Papart.kinectStereoCalib); } public static final int CAMERA_WIDTH = 640; - public static final int CAMERA_WIDTH_RGB = 1920; public static final int CAMERA_HEIGHT = 480; - public static final int CAMERA_HEIGHT_RGB = 1080; + +// public static final int CAMERA_WIDTH_RGB = 1920; +// public static final int CAMERA_HEIGHT_RGB = 1080; private void initSize() { // IR and Depth image size @@ -80,14 +98,13 @@ private void initSize() { SIZE = WIDTH * HEIGHT; // RGB image size - RGB_WIDTH = 1920; - RGB_HEIGHT = 1080; + RGB_WIDTH = 960; + RGB_HEIGHT = 540; RGB_SIZE = RGB_WIDTH * RGB_HEIGHT; } public void close() { cameraRGB.close(); -// cameraIR.close(); cameraDepth.close(); } @@ -96,6 +113,7 @@ final void initRGB() { Papart papart = Papart.getPapart(); if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE) { + System.out.println("REALSENSE: Using configuration ID & Resolution."); // use the ID int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); @@ -104,12 +122,14 @@ final void initRGB() { // use the calibration cameraRGB.setCalibration(Papart.cameraCalib); } else { + + System.out.println("REALSENSE: Using DEFAULT configuration."); cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); cameraRGB.setParent(parent); cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); } - cameraRGB.start(); + } final void initIR() { @@ -122,13 +142,6 @@ final void initIR() { // cameraIR.start(); } - final void initDepth() { - cameraDepth = cameraRGB.getDepthCamera(); - cameraDepth.setParent(parent); - // TODO: calibration... - cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); - } - @Override public Camera getCameraRGB() { return cameraRGB; diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 45f83bfa..e31b0122 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -142,7 +142,7 @@ protected void checkParameters() { } public void setSimpleCalibration(float fx, float fy, float cx, float cy, int w, int h) { - this.calibrationFile = "noFile"; + this.calibrationFile = "manual calibration"; pdp = ProjectiveDeviceP.createSimpleDevice(fx, fy, cx, cy, w, h); updateCalibration(); } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 71df76ff..564d3613 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -47,6 +47,7 @@ protected CameraRealSense(int cameraNo) { } this.systemNumber = cameraNo; setPixelFormat(PixelFormat.RGB); + grabber = new RealSenseFrameGrabber(this.systemNumber); depthCamera = new CameraRealSenseDepth(this); } @@ -85,7 +86,6 @@ public void useDepth(boolean useDepth) { @Override public void start() { - grabber = new RealSenseFrameGrabber(this.systemNumber); grabber.setImageWidth(width()); grabber.setImageHeight(height()); grabber.enableColorStream(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java index dccc9ad1..cf42ac2c 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java @@ -36,8 +36,8 @@ public class CameraRealSenseDepth extends Camera implements WithTouchInput { protected CameraRealSenseDepth(CameraRealSense colorCamera) { this.colorCamera = colorCamera; } - - public void useHarwareIntrinsics(){ + + public void useHarwareIntrinsics() { RealSense.intrinsics intrinsics = colorCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.depth); FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); float cx = fb.get(2); From fe9b5ff303b23a60838ea31219617614b0c9d085 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 21 Oct 2016 10:08:58 +0200 Subject: [PATCH 10/99] Extended compatibility with vanilla Processing. --- .../tracking/MarkerBoardARToolKitPlus.java | 2 +- .../fr/inria/papart/tracking/MarkerSvg.java | 11 +- .../papart/tracking/PShapeSVGExtended.java | 1998 +++++++++++++++++ 3 files changed, 2004 insertions(+), 7 deletions(-) create mode 100644 papart/src/fr/inria/papart/tracking/PShapeSVGExtended.java diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java b/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java index 4bb8d52b..9457f4c9 100644 --- a/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java @@ -120,7 +120,7 @@ protected void addTrackerImpl(Camera camera) { System.err.println("Init ARTOOLKIT Error " + camera.getCalibrationARToolkit() + " " + this.getFileName()); } - loadSizeConfig(); + // loadSizeConfig(); // float[] transfo = new float[16]; // for (int i = 0; i < 3; i++) { // transfo[12 + i] = 0; diff --git a/papart/src/fr/inria/papart/tracking/MarkerSvg.java b/papart/src/fr/inria/papart/tracking/MarkerSvg.java index 6e13704d..bf40a53f 100644 --- a/papart/src/fr/inria/papart/tracking/MarkerSvg.java +++ b/papart/src/fr/inria/papart/tracking/MarkerSvg.java @@ -27,7 +27,6 @@ import processing.core.PMatrix2D; import processing.core.PMatrix3D; import processing.core.PShape; -import processing.core.PShapeSVG; import processing.core.PVector; import processing.data.XML; @@ -98,10 +97,10 @@ public static float mmToPixel() { return 1.0f / pixelToMm(); } - static private void findMarkers(PShapeSVG shape, ArrayList markers) { + static private void findMarkers(PShapeSVGExtended shape, ArrayList markers) { try { for (PShape child : shape.getChildren()) { - findMarkers((PShapeSVG) child, markers); + findMarkers((PShapeSVGExtended) child, markers); } } catch (NullPointerException npe) { // Sometimes no child causes a null pointer exception. @@ -128,9 +127,9 @@ static public MarkerList getMarkersFromSVG(XML xml) { float pageHeight = computeSize(xml.getString("height")); // System.out.println("Height : " + pageHeight); - PShape svg = new PShapeSVG(xml); + PShape svg = new PShapeSVGExtended(xml); ArrayList markersSVG = new ArrayList<>(); - findMarkers((PShapeSVG) svg, markersSVG); + findMarkers((PShapeSVGExtended) svg, markersSVG); // ArrayList markers = new ArrayList<>(); MarkerList markers = new MarkerList(); @@ -177,7 +176,7 @@ static public MarkerList getMarkersFromSVG(XML xml) { private static PMatrix getMatrix(PShape shape) { - PMatrix matrix = shape.getMatrix(); + PMatrix matrix = ((PShapeSVGExtended)shape).getMatrix(); boolean useParams = true; float[] params = null; diff --git a/papart/src/fr/inria/papart/tracking/PShapeSVGExtended.java b/papart/src/fr/inria/papart/tracking/PShapeSVGExtended.java new file mode 100644 index 00000000..77c5b0de --- /dev/null +++ b/papart/src/fr/inria/papart/tracking/PShapeSVGExtended.java @@ -0,0 +1,1998 @@ +/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ + +/* + Part of the Processing project - http://processing.org + + Copyright (c) 2012-15 The Processing Foundation + Copyright (c) 2006-12 Ben Fry and Casey Reas + Copyright (c) 2004-06 Michael Chang + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA +*/ + +package fr.inria.papart.tracking; + +import static java.awt.Font.BOLD; +import static java.awt.Font.ITALIC; +import static java.awt.Font.PLAIN; +import processing.data.*; + +// TODO replace these with PMatrix2D +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; + +import java.util.Map; +import java.util.HashMap; +import processing.core.PApplet; +import processing.core.PConstants; +import processing.core.PFont; +import processing.core.PGraphics; +import processing.core.PMatrix; +import processing.core.PMatrix2D; +import processing.core.PShape; + + +/** + * This class is not part of the Processing API and should not be used + * directly. Instead, use loadShape() and methods like it, which will make + * use of this class. Using this class directly will cause your code to break + * when combined with future versions of Processing. + *

+ * SVG stands for Scalable Vector Graphics, a portable graphics format. + * It is a vector format so it allows for "infinite" resolution and relatively + * small file sizes. Most modern media software can view SVG files, including + * Adobe products, Firefox, etc. Illustrator and Inkscape can edit SVG files. + * View the SVG specification here. + *

+ * We have no intention of turning this into a full-featured SVG library. + * The goal of this project is a basic shape importer that originally was small + * enough to be included with applets, meaning that its download size should be + * in the neighborhood of 25-30 Kb. Though we're far less limited nowadays on + * size constraints, we remain extremely limited in terms of time, and do not + * have volunteers who are available to maintain a larger SVG library. + *

+ * For more sophisticated import/export, consider the + * Batik + * library from the Apache Software Foundation. + *

+ * Batik is used in the SVG Export library in Processing 3, however using it + * for full SVG import is still a considerable amount of work. Wiring it to + * Java2D wouldn't be too bad, but using it with OpenGL, JavaFX, and features + * like begin/endRecord() and begin/endRaw() would be considerable effort. + *

+ * Future improvements to this library may focus on this properly supporting + * a specific subset of SVG, for instance the simpler SVG profiles known as + * SVG Tiny or Basic, + * although we still would not support the interactivity options. + * + *


+ * + * A minimal example program using SVG: + * (assuming a working moo.svg is in your data folder) + * + *

+ * PShape moo;
+ *
+ * void setup() {
+ *   size(400, 400);
+ *   moo = loadShape("moo.svg");
+ * }
+ * void draw() {
+ *   background(255);
+ *   shape(moo, mouseX, mouseY);
+ * }
+ * 
+ */ +public class PShapeSVGExtended extends PShape { + XML element; + + /// Values between 0 and 1. + protected float opacity; + float strokeOpacity; + float fillOpacity; + + /** Width of containing SVG (used for percentages). */ + protected float svgWidth; + + /** Height of containing SVG (used for percentages). */ + protected float svgHeight; + + /** √((w² + h²)/2) of containing SVG (used for percentages). */ + protected float svgSizeXY; + + protected Gradient strokeGradient; + String strokeName; // id of another object, gradients only? + + protected Gradient fillGradient; + String fillName; // id of another object + + private String imagePath; + + + /** + * Initializes a new SVG object from the given XML object. + */ + public PShapeSVGExtended(XML svg) { + this(null, svg, true); + + if (!svg.getName().equals("svg")) { + if (svg.getName().toLowerCase().equals("html")) { + // Common case is that files aren't downloaded properly + throw new RuntimeException("This appears to be a web page, not an SVG file."); + } else { + throw new RuntimeException("The root node is not , it's <" + svg.getName() + ">"); + } + } + } + + + protected PShapeSVGExtended(PShapeSVGExtended parent, XML properties, boolean parseKids) { + setParent(parent); + + // Need to get width/height in early. + if (properties.getName().equals("svg")) { + String unitWidth = properties.getString("width"); + String unitHeight = properties.getString("height"); + + // Can't handle width/height as percentages easily. I'm just going + // to put in 100 as a dummy value, beacuse this means that it will + // come out as a reasonable value. + if (unitWidth != null) width = parseUnitSize(unitWidth, 100); + if (unitHeight != null) height = parseUnitSize(unitHeight, 100); + + String viewBoxStr = properties.getString("viewBox"); + if (viewBoxStr != null) { + float[] viewBox = PApplet.parseFloat(PApplet.splitTokens(viewBoxStr)); + if (unitWidth == null || unitHeight == null) { + // Not proper parsing of the viewBox, but will cover us for cases where + // the width and height of the object is not specified. + width = viewBox[2]; + height = viewBox[3]; + } else { + // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute + // TODO: preserveAspectRatio. + if (matrix == null) matrix = new PMatrix2D(); + matrix.scale(width/viewBox[2], height/viewBox[3]); + matrix.translate(-viewBox[0], -viewBox[1]); + } + } + + // Negative size is illegal. + if (width < 0 || height < 0) + throw new RuntimeException(": width (" + width + + ") and height (" + height + ") must not be negative."); + + // It's technically valid to have width or height == 0. Not specified at + // all is what to test for. + if ((unitWidth == null || unitHeight == null) && viewBoxStr == null) { + //throw new RuntimeException("width/height not specified"); + PGraphics.showWarning("The width and/or height is not " + + "readable in the tag of this file."); + // For the spec, the default is 100% and 100%. For purposes + // here, insert a dummy value because this is prolly just a + // font or something for which the w/h doesn't matter. + width = 1; + height = 1; + } + + svgWidth = width; + svgHeight = height; + svgSizeXY = PApplet.sqrt((svgWidth*svgWidth + svgHeight*svgHeight)/2.0f); + } + + element = properties; + name = properties.getString("id"); + // @#$(* adobe illustrator mangles names of objects when re-saving + if (name != null) { + while (true) { + String[] m = PApplet.match(name, "_x([A-Za-z0-9]{2})_"); + if (m == null) break; + char repair = (char) PApplet.unhex(m[1]); + name = name.replace(m[0], "" + repair); + } + } + + String displayStr = properties.getString("display", "inline"); + visible = !displayStr.equals("none"); + + String transformStr = properties.getString("transform"); + if (transformStr != null) { + if (matrix == null) { + matrix = parseTransform(transformStr); + } else { + matrix.preApply(parseTransform(transformStr)); + } + } + + if (parseKids) { + parseColors(properties); + parseChildren(properties); + } + } + + + // Broken out so that subclasses can copy any additional variables + // (i.e. fillGradientPaint and strokeGradientPaint) + protected void setParent(PShapeSVGExtended parent) { + // Need to set this so that findChild() works. + // Otherwise 'parent' is null until addChild() is called later. + this.parent = parent; + + if (parent == null) { + // set values to their defaults according to the SVG spec + stroke = false; + strokeColor = 0xff000000; + strokeWeight = 1; + strokeCap = PConstants.SQUARE; // equivalent to BUTT in svg spec + strokeJoin = PConstants.MITER; + strokeGradient = null; +// strokeGradientPaint = null; + strokeName = null; + + fill = true; + fillColor = 0xff000000; + fillGradient = null; +// fillGradientPaint = null; + fillName = null; + + //hasTransform = false; + //transformation = null; //new float[] { 1, 0, 0, 1, 0, 0 }; + + // svgWidth, svgHeight, and svgXYSize done below. + + strokeOpacity = 1; + fillOpacity = 1; + opacity = 1; + + } else { + stroke = parent.stroke; + strokeColor = parent.strokeColor; + strokeWeight = parent.strokeWeight; + strokeCap = parent.strokeCap; + strokeJoin = parent.strokeJoin; + strokeGradient = parent.strokeGradient; +// strokeGradientPaint = parent.strokeGradientPaint; + strokeName = parent.strokeName; + + fill = parent.fill; + fillColor = parent.fillColor; + fillGradient = parent.fillGradient; +// fillGradientPaint = parent.fillGradientPaint; + fillName = parent.fillName; + + svgWidth = parent.svgWidth; + svgHeight = parent.svgHeight; + svgSizeXY = parent.svgSizeXY; + + opacity = parent.opacity; + } + + // The rect and ellipse modes are set to CORNER since it is the expected + // mode for svg shapes. + rectMode = CORNER; + ellipseMode = CORNER; + } + + + /** Factory method for subclasses. */ + protected PShapeSVGExtended createShape(PShapeSVGExtended parent, XML properties, boolean parseKids) { + return new PShapeSVGExtended(parent, properties, parseKids); + } + + + protected void parseChildren(XML graphics) { + XML[] elements = graphics.getChildren(); + children = new PShape[elements.length]; + childCount = 0; + + for (XML elem : elements) { + PShape kid = parseChild(elem); + if (kid != null) addChild(kid); + } + children = (PShape[]) PApplet.subset(children, 0, childCount); + } + + + /** + * Parse a child XML element. + * Override this method to add parsing for more SVG elements. + */ + protected PShape parseChild(XML elem) { +// System.err.println("parsing child in pshape " + elem.getName()); + String name = elem.getName(); + PShapeSVGExtended shape = null; + + + if (name == null) { + // just some whitespace that can be ignored (hopefully) + + } else if (name.equals("g")) { + shape = createShape(this, elem, true); + + } else if (name.equals("defs")) { + // generally this will contain gradient info, so may + // as well just throw it into a group element for parsing + shape = createShape(this, elem, true); + + } else if (name.equals("line")) { + shape = createShape(this, elem, true); + shape.parseLine(); + + } else if (name.equals("circle")) { + shape = createShape(this, elem, true); + shape.parseEllipse(true); + + } else if (name.equals("ellipse")) { + shape = createShape(this, elem, true); + shape.parseEllipse(false); + + } else if (name.equals("rect")) { + shape = createShape(this, elem, true); + shape.parseRect(); + + } else if (name.equals("image")) { + shape = createShape(this, elem, true); + shape.parseImage(); + + } else if (name.equals("polygon")) { + shape = createShape(this, elem, true); + shape.parsePoly(true); + + } else if (name.equals("polyline")) { + shape = createShape(this, elem, true); + shape.parsePoly(false); + + } else if (name.equals("path")) { + shape = createShape(this, elem, true); + shape.parsePath(); + + } else if (name.equals("radialGradient")) { + return new RadialGradient(this, elem); + + } else if (name.equals("linearGradient")) { + return new LinearGradient(this, elem); + + } else if (name.equals("font")) { + return new Font(this, elem); + +// } else if (name.equals("font-face")) { +// return new FontFace(this, elem); + +// } else if (name.equals("glyph") || name.equals("missing-glyph")) { +// return new FontGlyph(this, elem); + + } else if (name.equals("text")) { // || name.equals("font")) { + return new Text(this, elem); + + } else if (name.equals("tspan")) { + return new LineOfText(this, elem); + + } else if (name.equals("filter")) { + PGraphics.showWarning("Filters are not supported."); + + } else if (name.equals("mask")) { + PGraphics.showWarning("Masks are not supported."); + + } else if (name.equals("pattern")) { + PGraphics.showWarning("Patterns are not supported."); + + } else if (name.equals("stop")) { + // stop tag is handled by gradient parser, so don't warn about it + + } else if (name.equals("sodipodi:namedview")) { + // these are always in Inkscape files, the warnings get tedious + + } else if (name.equals("metadata") + || name.equals("title") || name.equals("desc")) { + // fontforge just stuffs in as a comment. + // All harmless stuff, irrelevant to rendering. + return null; + + } else if (!name.startsWith("#")) { + PGraphics.showWarning("Ignoring <" + name + "> tag."); +// new Exception().printStackTrace(); + } + return shape; + } + + + protected void parseLine() { + kind = LINE; + family = PRIMITIVE; + params = new float[] { + getFloatWithUnit(element, "x1", svgWidth), + getFloatWithUnit(element, "y1", svgHeight), + getFloatWithUnit(element, "x2", svgWidth), + getFloatWithUnit(element, "y2", svgHeight) + }; + } + + + /** + * Handles parsing ellipse and circle tags. + * @param circle true if this is a circle and not an ellipse + */ + protected void parseEllipse(boolean circle) { + kind = ELLIPSE; + family = PRIMITIVE; + params = new float[4]; + + params[0] = getFloatWithUnit(element, "cx", svgWidth); + params[1] = getFloatWithUnit(element, "cy", svgHeight); + + float rx, ry; + if (circle) { + rx = ry = getFloatWithUnit(element, "r", svgSizeXY); + } else { + rx = getFloatWithUnit(element, "rx", svgWidth); + ry = getFloatWithUnit(element, "ry", svgHeight); + } + params[0] -= rx; + params[1] -= ry; + + params[2] = rx*2; + params[3] = ry*2; + } + + + protected void parseRect() { + kind = RECT; + family = PRIMITIVE; + params = new float[] { + getFloatWithUnit(element, "x", svgWidth), + getFloatWithUnit(element, "y", svgHeight), + getFloatWithUnit(element, "width", svgWidth), + getFloatWithUnit(element, "height", svgHeight) + }; + } + + + protected void parseImage() { + kind = RECT; + textureMode = NORMAL; + + family = PRIMITIVE; + params = new float[] { + getFloatWithUnit(element, "x", svgWidth), + getFloatWithUnit(element, "y", svgHeight), + getFloatWithUnit(element, "width", svgWidth), + getFloatWithUnit(element, "height", svgHeight) + }; + + this.imagePath = element.getString("xlink:href"); + } + + /** + * Parse a polyline or polygon from an SVG file. + * Syntax defined at http://www.w3.org/TR/SVG/shapes.html#PointsBNF + * @param close true if shape is closed (polygon), false if not (polyline) + */ + protected void parsePoly(boolean close) { + family = PATH; + this.close = close; + + String pointsAttr = element.getString("points"); + if (pointsAttr != null) { + String[] pointsBuffer = PApplet.splitTokens(pointsAttr); + vertexCount = pointsBuffer.length; + vertices = new float[vertexCount][2]; + for (int i = 0; i < vertexCount; i++) { + String pb[] = PApplet.splitTokens(pointsBuffer[i], ", \t\r\n"); + vertices[i][X] = Float.parseFloat(pb[0]); + vertices[i][Y] = Float.parseFloat(pb[1]); + } + } + } + + + protected void parsePath() { + family = PATH; + kind = 0; + + String pathData = element.getString("d"); + if (pathData == null || PApplet.trim(pathData).length() == 0) { + return; + } + char[] pathDataChars = pathData.toCharArray(); + + StringBuilder pathBuffer = new StringBuilder(); + boolean lastSeparate = false; + + for (int i = 0; i < pathDataChars.length; i++) { + char c = pathDataChars[i]; + boolean separate = false; + + if (c == 'M' || c == 'm' || + c == 'L' || c == 'l' || + c == 'H' || c == 'h' || + c == 'V' || c == 'v' || + c == 'C' || c == 'c' || // beziers + c == 'S' || c == 's' || + c == 'Q' || c == 'q' || // quadratic beziers + c == 'T' || c == 't' || + c == 'A' || c == 'a' || // elliptical arc + c == 'Z' || c == 'z' || // closepath + c == ',') { + separate = true; + if (i != 0) { + pathBuffer.append("|"); + } + } + if (c == 'Z' || c == 'z') { + separate = false; + } + if (c == '-' && !lastSeparate) { + // allow for 'e' notation in numbers, e.g. 2.10e-9 + // http://dev.processing.org/bugs/show_bug.cgi?id=1408 + if (i == 0 || pathDataChars[i-1] != 'e') { + pathBuffer.append("|"); + } + } + if (c != ',') { + pathBuffer.append(c); //"" + pathDataBuffer.charAt(i)); + } + if (separate && c != ',' && c != '-') { + pathBuffer.append("|"); + } + lastSeparate = separate; + } + + // use whitespace constant to get rid of extra spaces and CR or LF + String[] pathTokens = + PApplet.splitTokens(pathBuffer.toString(), "|" + WHITESPACE); + vertices = new float[pathTokens.length][2]; + vertexCodes = new int[pathTokens.length]; + + float cx = 0; + float cy = 0; + int i = 0; + + char implicitCommand = '\0'; +// char prevCommand = '\0'; + boolean prevCurve = false; + float ctrlX, ctrlY; + // store values for closepath so that relative coords work properly + float movetoX = 0; + float movetoY = 0; + + while (i < pathTokens.length) { + char c = pathTokens[i].charAt(0); + if (((c >= '0' && c <= '9') || (c == '-')) && implicitCommand != '\0') { + c = implicitCommand; + i--; + } else { + implicitCommand = c; + } + switch (c) { + + case 'M': // M - move to (absolute) + cx = PApplet.parseFloat(pathTokens[i + 1]); + cy = PApplet.parseFloat(pathTokens[i + 2]); + movetoX = cx; + movetoY = cy; + parsePathMoveto(cx, cy); + implicitCommand = 'L'; + i += 3; + break; + + case 'm': // m - move to (relative) + cx = cx + PApplet.parseFloat(pathTokens[i + 1]); + cy = cy + PApplet.parseFloat(pathTokens[i + 2]); + movetoX = cx; + movetoY = cy; + parsePathMoveto(cx, cy); + implicitCommand = 'l'; + i += 3; + break; + + case 'L': + cx = PApplet.parseFloat(pathTokens[i + 1]); + cy = PApplet.parseFloat(pathTokens[i + 2]); + parsePathLineto(cx, cy); + i += 3; + break; + + case 'l': + cx = cx + PApplet.parseFloat(pathTokens[i + 1]); + cy = cy + PApplet.parseFloat(pathTokens[i + 2]); + parsePathLineto(cx, cy); + i += 3; + break; + + // horizontal lineto absolute + case 'H': + cx = PApplet.parseFloat(pathTokens[i + 1]); + parsePathLineto(cx, cy); + i += 2; + break; + + // horizontal lineto relative + case 'h': + cx = cx + PApplet.parseFloat(pathTokens[i + 1]); + parsePathLineto(cx, cy); + i += 2; + break; + + case 'V': + cy = PApplet.parseFloat(pathTokens[i + 1]); + parsePathLineto(cx, cy); + i += 2; + break; + + case 'v': + cy = cy + PApplet.parseFloat(pathTokens[i + 1]); + parsePathLineto(cx, cy); + i += 2; + break; + + // C - curve to (absolute) + case 'C': { + float ctrlX1 = PApplet.parseFloat(pathTokens[i + 1]); + float ctrlY1 = PApplet.parseFloat(pathTokens[i + 2]); + float ctrlX2 = PApplet.parseFloat(pathTokens[i + 3]); + float ctrlY2 = PApplet.parseFloat(pathTokens[i + 4]); + float endX = PApplet.parseFloat(pathTokens[i + 5]); + float endY = PApplet.parseFloat(pathTokens[i + 6]); + parsePathCurveto(ctrlX1, ctrlY1, ctrlX2, ctrlY2, endX, endY); + cx = endX; + cy = endY; + i += 7; + prevCurve = true; + } + break; + + // c - curve to (relative) + case 'c': { + float ctrlX1 = cx + PApplet.parseFloat(pathTokens[i + 1]); + float ctrlY1 = cy + PApplet.parseFloat(pathTokens[i + 2]); + float ctrlX2 = cx + PApplet.parseFloat(pathTokens[i + 3]); + float ctrlY2 = cy + PApplet.parseFloat(pathTokens[i + 4]); + float endX = cx + PApplet.parseFloat(pathTokens[i + 5]); + float endY = cy + PApplet.parseFloat(pathTokens[i + 6]); + parsePathCurveto(ctrlX1, ctrlY1, ctrlX2, ctrlY2, endX, endY); + cx = endX; + cy = endY; + i += 7; + prevCurve = true; + } + break; + + // S - curve to shorthand (absolute) + // Draws a cubic Bézier curve from the current point to (x,y). The first + // control point is assumed to be the reflection of the second control + // point on the previous command relative to the current point. + // (x2,y2) is the second control point (i.e., the control point + // at the end of the curve). S (uppercase) indicates that absolute + // coordinates will follow; s (lowercase) indicates that relative + // coordinates will follow. Multiple sets of coordinates may be specified + // to draw a polybézier. At the end of the command, the new current point + // becomes the final (x,y) coordinate pair used in the polybézier. + case 'S': { + // (If there is no previous command or if the previous command was not + // an C, c, S or s, assume the first control point is coincident with + // the current point.) + if (!prevCurve) { + ctrlX = cx; + ctrlY = cy; + } else { + float ppx = vertices[vertexCount-2][X]; + float ppy = vertices[vertexCount-2][Y]; + float px = vertices[vertexCount-1][X]; + float py = vertices[vertexCount-1][Y]; + ctrlX = px + (px - ppx); + ctrlY = py + (py - ppy); + } + float ctrlX2 = PApplet.parseFloat(pathTokens[i + 1]); + float ctrlY2 = PApplet.parseFloat(pathTokens[i + 2]); + float endX = PApplet.parseFloat(pathTokens[i + 3]); + float endY = PApplet.parseFloat(pathTokens[i + 4]); + parsePathCurveto(ctrlX, ctrlY, ctrlX2, ctrlY2, endX, endY); + cx = endX; + cy = endY; + i += 5; + prevCurve = true; + } + break; + + // s - curve to shorthand (relative) + case 's': { + if (!prevCurve) { + ctrlX = cx; + ctrlY = cy; + } else { + float ppx = vertices[vertexCount-2][X]; + float ppy = vertices[vertexCount-2][Y]; + float px = vertices[vertexCount-1][X]; + float py = vertices[vertexCount-1][Y]; + ctrlX = px + (px - ppx); + ctrlY = py + (py - ppy); + } + float ctrlX2 = cx + PApplet.parseFloat(pathTokens[i + 1]); + float ctrlY2 = cy + PApplet.parseFloat(pathTokens[i + 2]); + float endX = cx + PApplet.parseFloat(pathTokens[i + 3]); + float endY = cy + PApplet.parseFloat(pathTokens[i + 4]); + parsePathCurveto(ctrlX, ctrlY, ctrlX2, ctrlY2, endX, endY); + cx = endX; + cy = endY; + i += 5; + prevCurve = true; + } + break; + + // Q - quadratic curve to (absolute) + // Draws a quadratic Bézier curve from the current point to (x,y) using + // (x1,y1) as the control point. Q (uppercase) indicates that absolute + // coordinates will follow; q (lowercase) indicates that relative + // coordinates will follow. Multiple sets of coordinates may be specified + // to draw a polybézier. At the end of the command, the new current point + // becomes the final (x,y) coordinate pair used in the polybézier. + case 'Q': { + ctrlX = PApplet.parseFloat(pathTokens[i + 1]); + ctrlY = PApplet.parseFloat(pathTokens[i + 2]); + float endX = PApplet.parseFloat(pathTokens[i + 3]); + float endY = PApplet.parseFloat(pathTokens[i + 4]); + //parsePathQuadto(cx, cy, ctrlX, ctrlY, endX, endY); + parsePathQuadto(ctrlX, ctrlY, endX, endY); + cx = endX; + cy = endY; + i += 5; + prevCurve = true; + } + break; + + // q - quadratic curve to (relative) + case 'q': { + ctrlX = cx + PApplet.parseFloat(pathTokens[i + 1]); + ctrlY = cy + PApplet.parseFloat(pathTokens[i + 2]); + float endX = cx + PApplet.parseFloat(pathTokens[i + 3]); + float endY = cy + PApplet.parseFloat(pathTokens[i + 4]); + //parsePathQuadto(cx, cy, ctrlX, ctrlY, endX, endY); + parsePathQuadto(ctrlX, ctrlY, endX, endY); + cx = endX; + cy = endY; + i += 5; + prevCurve = true; + } + break; + + // T - quadratic curveto shorthand (absolute) + // The control point is assumed to be the reflection of the control + // point on the previous command relative to the current point. + case 'T': { + // If there is no previous command or if the previous command was + // not a Q, q, T or t, assume the control point is coincident + // with the current point. + if (!prevCurve) { + ctrlX = cx; + ctrlY = cy; + } else { + float ppx = vertices[vertexCount-2][X]; + float ppy = vertices[vertexCount-2][Y]; + float px = vertices[vertexCount-1][X]; + float py = vertices[vertexCount-1][Y]; + ctrlX = px + (px - ppx); + ctrlY = py + (py - ppy); + } + float endX = PApplet.parseFloat(pathTokens[i + 1]); + float endY = PApplet.parseFloat(pathTokens[i + 2]); + //parsePathQuadto(cx, cy, ctrlX, ctrlY, endX, endY); + parsePathQuadto(ctrlX, ctrlY, endX, endY); + cx = endX; + cy = endY; + i += 3; + prevCurve = true; + } + break; + + // t - quadratic curveto shorthand (relative) + case 't': { + if (!prevCurve) { + ctrlX = cx; + ctrlY = cy; + } else { + float ppx = vertices[vertexCount-2][X]; + float ppy = vertices[vertexCount-2][Y]; + float px = vertices[vertexCount-1][X]; + float py = vertices[vertexCount-1][Y]; + ctrlX = px + (px - ppx); + ctrlY = py + (py - ppy); + } + float endX = cx + PApplet.parseFloat(pathTokens[i + 1]); + float endY = cy + PApplet.parseFloat(pathTokens[i + 2]); + //parsePathQuadto(cx, cy, ctrlX, ctrlY, endX, endY); + parsePathQuadto(ctrlX, ctrlY, endX, endY); + cx = endX; + cy = endY; + i += 3; + prevCurve = true; + } + break; + + // A - elliptical arc to (absolute) + case 'A': { + float rx = PApplet.parseFloat(pathTokens[i + 1]); + float ry = PApplet.parseFloat(pathTokens[i + 2]); + float angle = PApplet.parseFloat(pathTokens[i + 3]); + boolean fa = PApplet.parseFloat(pathTokens[i + 4]) != 0; + boolean fs = PApplet.parseFloat(pathTokens[i + 5]) != 0; + float endX = PApplet.parseFloat(pathTokens[i + 6]); + float endY = PApplet.parseFloat(pathTokens[i + 7]); + parsePathArcto(cx, cy, rx, ry, angle, fa, fs, endX, endY); + cx = endX; + cy = endY; + i += 8; + prevCurve = true; + } + break; + + // a - elliptical arc to (relative) + case 'a': { + float rx = PApplet.parseFloat(pathTokens[i + 1]); + float ry = PApplet.parseFloat(pathTokens[i + 2]); + float angle = PApplet.parseFloat(pathTokens[i + 3]); + boolean fa = PApplet.parseFloat(pathTokens[i + 4]) != 0; + boolean fs = PApplet.parseFloat(pathTokens[i + 5]) != 0; + float endX = cx + PApplet.parseFloat(pathTokens[i + 6]); + float endY = cy + PApplet.parseFloat(pathTokens[i + 7]); + parsePathArcto(cx, cy, rx, ry, angle, fa, fs, endX, endY); + cx = endX; + cy = endY; + i += 8; + prevCurve = true; + } + break; + + case 'Z': + case 'z': + // since closing the path, the 'current' point needs + // to return back to the last moveto location. + // http://code.google.com/p/processing/issues/detail?id=1058 + cx = movetoX; + cy = movetoY; + close = true; + i++; + break; + + default: + String parsed = + PApplet.join(PApplet.subset(pathTokens, 0, i), ","); + String unparsed = + PApplet.join(PApplet.subset(pathTokens, i), ","); + System.err.println("parsed: " + parsed); + System.err.println("unparsed: " + unparsed); + throw new RuntimeException("shape command not handled: " + pathTokens[i]); + } +// prevCommand = c; + } + } + + +// private void parsePathCheck(int num) { +// if (vertexCount + num-1 >= vertices.length) { +// //vertices = (float[][]) PApplet.expand(vertices); +// float[][] temp = new float[vertexCount << 1][2]; +// System.arraycopy(vertices, 0, temp, 0, vertexCount); +// vertices = temp; +// } +// } + + private void parsePathVertex(float x, float y) { + if (vertexCount == vertices.length) { + //vertices = (float[][]) PApplet.expand(vertices); + float[][] temp = new float[vertexCount << 1][2]; + System.arraycopy(vertices, 0, temp, 0, vertexCount); + vertices = temp; + } + vertices[vertexCount][X] = x; + vertices[vertexCount][Y] = y; + vertexCount++; + } + + + private void parsePathCode(int what) { + if (vertexCodeCount == vertexCodes.length) { + vertexCodes = PApplet.expand(vertexCodes); + } + vertexCodes[vertexCodeCount++] = what; + } + + + private void parsePathMoveto(float px, float py) { + if (vertexCount > 0) { + parsePathCode(BREAK); + } + parsePathCode(VERTEX); + parsePathVertex(px, py); + } + + + private void parsePathLineto(float px, float py) { + parsePathCode(VERTEX); + parsePathVertex(px, py); + } + + + private void parsePathCurveto(float x1, float y1, + float x2, float y2, + float x3, float y3) { + parsePathCode(BEZIER_VERTEX); + parsePathVertex(x1, y1); + parsePathVertex(x2, y2); + parsePathVertex(x3, y3); + } + +// private void parsePathQuadto(float x1, float y1, +// float cx, float cy, +// float x2, float y2) { +// //System.out.println("quadto: " + x1 + "," + y1 + " " + cx + "," + cy + " " + x2 + "," + y2); +//// parsePathCode(BEZIER_VERTEX); +// parsePathCode(QUAD_BEZIER_VERTEX); +// // x1/y1 already covered by last moveto, lineto, or curveto +// +// parsePathVertex(x1 + ((cx-x1)*2/3.0f), y1 + ((cy-y1)*2/3.0f)); +// parsePathVertex(x2 + ((cx-x2)*2/3.0f), y2 + ((cy-y2)*2/3.0f)); +// parsePathVertex(x2, y2); +// } + + private void parsePathQuadto(float cx, float cy, + float x2, float y2) { + //System.out.println("quadto: " + x1 + "," + y1 + " " + cx + "," + cy + " " + x2 + "," + y2); +// parsePathCode(BEZIER_VERTEX); + parsePathCode(QUADRATIC_VERTEX); + // x1/y1 already covered by last moveto, lineto, or curveto + parsePathVertex(cx, cy); + parsePathVertex(x2, y2); + } + + + // Approximates elliptical arc by several bezier segments. + // Meets SVG standard requirements from: + // http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands + // http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes + // Based on arc to bezier curve equations from: + // http://www.spaceroots.org/documents/ellipse/node22.html + private void parsePathArcto(float x1, float y1, + float rx, float ry, + float angle, + boolean fa, boolean fs, + float x2, float y2) { + if (x1 == x2 && y1 == y2) return; + if (rx == 0 || ry == 0) { parsePathLineto(x2, y2); return; } + + rx = PApplet.abs(rx); ry = PApplet.abs(ry); + + float phi = PApplet.radians(((angle % 360) + 360) % 360); + float cosPhi = PApplet.cos(phi), sinPhi = PApplet.sin(phi); + + float x1r = ( cosPhi * (x1 - x2) + sinPhi * (y1 - y2)) / 2; + float y1r = (-sinPhi * (x1 - x2) + cosPhi * (y1 - y2)) / 2; + + float cxr, cyr; + { + float A = (x1r*x1r) / (rx*rx) + (y1r*y1r) / (ry*ry); + if (A > 1) { + // No solution, scale ellipse up according to SVG standard + float sqrtA = PApplet.sqrt(A); + rx *= sqrtA; cxr = 0; + ry *= sqrtA; cyr = 0; + } else { + float k = ((fa == fs) ? -1f : 1f) * + PApplet.sqrt((rx*rx * ry*ry) / ((rx*rx * y1r*y1r) + (ry*ry * x1r*x1r)) - 1f); + cxr = k * rx * y1r / ry; + cyr = -k * ry * x1r / rx; + } + } + + float cx = cosPhi * cxr - sinPhi * cyr + (x1 + x2) / 2; + float cy = sinPhi * cxr + cosPhi * cyr + (y1 + y2) / 2; + + float phi1, phiDelta; + { + float sx = ( x1r - cxr) / rx, sy = ( y1r - cyr) / ry; + float tx = (-x1r - cxr) / rx, ty = (-y1r - cyr) / ry; + phi1 = PApplet.atan2(sy, sx); + phiDelta = (((PApplet.atan2(ty, tx) - phi1) % TWO_PI) + TWO_PI) % TWO_PI; + if (!fs) phiDelta -= TWO_PI; + } + + // One segment can not cover more that PI, less than PI/2 is + // recommended to avoid visible inaccuracies caused by rounding errors + int segmentCount = PApplet.ceil(PApplet.abs(phiDelta) / TWO_PI * 4); + + float inc = phiDelta / segmentCount; + float a = PApplet.sin(inc) * + (PApplet.sqrt(4 + 3 * PApplet.sq(PApplet.tan(inc / 2))) - 1) / 3; + + float sinPhi1 = PApplet.sin(phi1), cosPhi1 = PApplet.cos(phi1); + + float p1x = x1; + float p1y = y1; + float relq1x = a * (-rx * cosPhi * sinPhi1 - ry * sinPhi * cosPhi1); + float relq1y = a * (-rx * sinPhi * sinPhi1 + ry * cosPhi * cosPhi1); + + for (int i = 0; i < segmentCount; i++) { + float eta = phi1 + (i + 1) * inc; + float sinEta = PApplet.sin(eta), cosEta = PApplet.cos(eta); + + float p2x = cx + rx * cosPhi * cosEta - ry * sinPhi * sinEta; + float p2y = cy + rx * sinPhi * cosEta + ry * cosPhi * sinEta; + float relq2x = a * (-rx * cosPhi * sinEta - ry * sinPhi * cosEta); + float relq2y = a * (-rx * sinPhi * sinEta + ry * cosPhi * cosEta); + + if (i == segmentCount - 1) { p2x = x2; p2y = y2; } + + parsePathCode(BEZIER_VERTEX); + parsePathVertex(p1x + relq1x, p1y + relq1y); + parsePathVertex(p2x - relq2x, p2y - relq2y); + parsePathVertex(p2x, p2y); + + p1x = p2x; relq1x = relq2x; + p1y = p2y; relq1y = relq2y; + } + } + + + /** + * Parse the specified SVG matrix into a PMatrix2D. Note that PMatrix2D + * is rotated relative to the SVG definition, so parameters are rearranged + * here. More about the transformation matrices in + * this section + * of the SVG documentation. + * @param matrixStr text of the matrix param. + * @return a good old-fashioned PMatrix2D + */ + static protected PMatrix2D parseTransform(String matrixStr) { + matrixStr = matrixStr.trim(); + PMatrix2D outgoing = null; + int start = 0; + int stop = -1; + while ((stop = matrixStr.indexOf(')', start)) != -1) { + PMatrix2D m = parseSingleTransform(matrixStr.substring(start, stop+1)); + if (outgoing == null) { + outgoing = m; + } else { + outgoing.apply(m); + } + start = stop + 1; + } + return outgoing; + } + + + static protected PMatrix2D parseSingleTransform(String matrixStr) { + //String[] pieces = PApplet.match(matrixStr, "^\\s*(\\w+)\\((.*)\\)\\s*$"); + String[] pieces = PApplet.match(matrixStr, "[,\\s]*(\\w+)\\((.*)\\)"); + if (pieces == null) { + System.err.println("Could not parse transform " + matrixStr); + return null; + } + float[] m = PApplet.parseFloat(PApplet.splitTokens(pieces[2], ", ")); + if (pieces[1].equals("matrix")) { + return new PMatrix2D(m[0], m[2], m[4], m[1], m[3], m[5]); + + } else if (pieces[1].equals("translate")) { + float tx = m[0]; + float ty = (m.length == 2) ? m[1] : m[0]; + return new PMatrix2D(1, 0, tx, 0, 1, ty); + + } else if (pieces[1].equals("scale")) { + float sx = m[0]; + float sy = (m.length == 2) ? m[1] : m[0]; + return new PMatrix2D(sx, 0, 0, 0, sy, 0); + + } else if (pieces[1].equals("rotate")) { + float angle = m[0]; + + if (m.length == 1) { + float c = PApplet.cos(angle); + float s = PApplet.sin(angle); + // SVG version is cos(a) sin(a) -sin(a) cos(a) 0 0 + return new PMatrix2D(c, -s, 0, s, c, 0); + + } else if (m.length == 3) { + PMatrix2D mat = new PMatrix2D(0, 1, m[1], 1, 0, m[2]); + mat.rotate(m[0]); + mat.translate(-m[1], -m[2]); + return mat; + } + + } else if (pieces[1].equals("skewX")) { + return new PMatrix2D(1, 0, 1, PApplet.tan(m[0]), 0, 0); + + } else if (pieces[1].equals("skewY")) { + return new PMatrix2D(1, 0, 1, 0, PApplet.tan(m[0]), 0); + } + return null; + } + + + protected void parseColors(XML properties) { + if (properties.hasAttribute("opacity")) { + String opacityText = properties.getString("opacity"); + setOpacity(opacityText); + } + + if (properties.hasAttribute("stroke")) { + String strokeText = properties.getString("stroke"); + setColor(strokeText, false); + } + + if (properties.hasAttribute("stroke-opacity")) { + String strokeOpacityText = properties.getString("stroke-opacity"); + setStrokeOpacity(strokeOpacityText); + } + + if (properties.hasAttribute("stroke-width")) { + // if NaN (i.e. if it's 'inherit') then default back to the inherit setting + String lineweight = properties.getString("stroke-width"); + setStrokeWeight(lineweight); + } + + if (properties.hasAttribute("stroke-linejoin")) { + String linejoin = properties.getString("stroke-linejoin"); + setStrokeJoin(linejoin); + } + + if (properties.hasAttribute("stroke-linecap")) { + String linecap = properties.getString("stroke-linecap"); + setStrokeCap(linecap); + } + + // fill defaults to black (though stroke defaults to "none") + // http://www.w3.org/TR/SVG/painting.html#FillProperties + if (properties.hasAttribute("fill")) { + String fillText = properties.getString("fill"); + setColor(fillText, true); + } + + if (properties.hasAttribute("fill-opacity")) { + String fillOpacityText = properties.getString("fill-opacity"); + setFillOpacity(fillOpacityText); + } + + if (properties.hasAttribute("style")) { + String styleText = properties.getString("style"); + String[] styleTokens = PApplet.splitTokens(styleText, ";"); + + //PApplet.println(styleTokens); + for (int i = 0; i < styleTokens.length; i++) { + String[] tokens = PApplet.splitTokens(styleTokens[i], ":"); + //PApplet.println(tokens); + + tokens[0] = PApplet.trim(tokens[0]); + + if (tokens[0].equals("fill")) { + setColor(tokens[1], true); + + } else if(tokens[0].equals("fill-opacity")) { + setFillOpacity(tokens[1]); + + } else if(tokens[0].equals("stroke")) { + setColor(tokens[1], false); + + } else if(tokens[0].equals("stroke-width")) { + setStrokeWeight(tokens[1]); + + } else if(tokens[0].equals("stroke-linecap")) { + setStrokeCap(tokens[1]); + + } else if(tokens[0].equals("stroke-linejoin")) { + setStrokeJoin(tokens[1]); + + } else if(tokens[0].equals("stroke-opacity")) { + setStrokeOpacity(tokens[1]); + + } else if(tokens[0].equals("opacity")) { + setOpacity(tokens[1]); + + } else { + // Other attributes are not yet implemented + } + } + } + } + + + void setOpacity(String opacityText) { + opacity = PApplet.parseFloat(opacityText); + strokeColor = ((int) (opacity * 255)) << 24 | strokeColor & 0xFFFFFF; + fillColor = ((int) (opacity * 255)) << 24 | fillColor & 0xFFFFFF; + } + + + void setStrokeWeight(String lineweight) { + strokeWeight = parseUnitSize(lineweight, svgSizeXY); + } + + + void setStrokeOpacity(String opacityText) { + strokeOpacity = PApplet.parseFloat(opacityText); + strokeColor = ((int) (strokeOpacity * 255)) << 24 | strokeColor & 0xFFFFFF; + } + + + void setStrokeJoin(String linejoin) { + if (linejoin.equals("inherit")) { + // do nothing, will inherit automatically + + } else if (linejoin.equals("miter")) { + strokeJoin = PConstants.MITER; + + } else if (linejoin.equals("round")) { + strokeJoin = PConstants.ROUND; + + } else if (linejoin.equals("bevel")) { + strokeJoin = PConstants.BEVEL; + } + } + + + void setStrokeCap(String linecap) { + if (linecap.equals("inherit")) { + // do nothing, will inherit automatically + + } else if (linecap.equals("butt")) { + strokeCap = PConstants.SQUARE; + + } else if (linecap.equals("round")) { + strokeCap = PConstants.ROUND; + + } else if (linecap.equals("square")) { + strokeCap = PConstants.PROJECT; + } + } + + + void setFillOpacity(String opacityText) { + fillOpacity = PApplet.parseFloat(opacityText); + fillColor = ((int) (fillOpacity * 255)) << 24 | fillColor & 0xFFFFFF; + } + + + void setColor(String colorText, boolean isFill) { + colorText = colorText.trim(); + int opacityMask = fillColor & 0xFF000000; + boolean visible = true; + int color = 0; + String name = ""; +// String lColorText = colorText.toLowerCase(); + Gradient gradient = null; +// Object paint = null; + if (colorText.equals("none")) { + visible = false; + } else if (colorText.startsWith("url(#")) { + name = colorText.substring(5, colorText.length() - 1); + Object object = findChild(name); + if (object instanceof Gradient) { + gradient = (Gradient) object; + // in 3.0a11, do this on first draw inside PShapeJava2D +// paint = calcGradientPaint(gradient); //, opacity); + } else { +// visible = false; + System.err.println("url " + name + " refers to unexpected data: " + object); + } + } else { + // Prints errors itself. + color = opacityMask | parseSimpleColor(colorText); + } + if (isFill) { + fill = visible; + fillColor = color; + fillName = name; + fillGradient = gradient; +// fillGradientPaint = paint; + } else { + stroke = visible; + strokeColor = color; + strokeName = name; + strokeGradient = gradient; +// strokeGradientPaint = paint; + } + } + + + /** + * Parses the "color" datatype only, and prints an error if it is not of this form. + * http://www.w3.org/TR/SVG/types.html#DataTypeColor + * @return 0xRRGGBB (no alpha). Zero on error. + */ + static protected int parseSimpleColor(String colorText) { + colorText = colorText.toLowerCase().trim(); + //if (colorNames.containsKey(colorText)) { + if (colorNames.hasKey(colorText)) { + return colorNames.get(colorText); + } else if (colorText.startsWith("#")) { + if (colorText.length() == 4) { + // Short form: #ABC, transform to long form #AABBCC + colorText = colorText.replaceAll("^#(.)(.)(.)$", "#$1$1$2$2$3$3"); + } + return (Integer.parseInt(colorText.substring(1), 16)) & 0xFFFFFF; + //System.out.println("hex for fill is " + PApplet.hex(fillColor)); + } else if (colorText.startsWith("rgb")) { + return parseRGB(colorText); + } else { + System.err.println("Cannot parse \"" + colorText + "\"."); + return 0; + } + } + + + /** + * Deliberately conforms to the HTML 4.01 color spec + en-gb grey, rather + * than the (unlikely to be useful) entire 147-color system used in SVG. + */ + static protected IntDict colorNames = new IntDict(new Object[][] { + { "aqua", 0x00ffff }, + { "black", 0x000000 }, + { "blue", 0x0000ff }, + { "fuchsia", 0xff00ff }, + { "gray", 0x808080 }, + { "grey", 0x808080 }, + { "green", 0x008000 }, + { "lime", 0x00ff00 }, + { "maroon", 0x800000 }, + { "navy", 0x000080 }, + { "olive", 0x808000 }, + { "purple", 0x800080 }, + { "red", 0xff0000 }, + { "silver", 0xc0c0c0 }, + { "teal", 0x008080 }, + { "white", 0xffffff }, + { "yellow", 0xffff00 } + }); + + /* + static protected Map colorNames; + static { + colorNames = new HashMap(); + colorNames.put("aqua", 0x00ffff); + colorNames.put("black", 0x000000); + colorNames.put("blue", 0x0000ff); + colorNames.put("fuchsia", 0xff00ff); + colorNames.put("gray", 0x808080); + colorNames.put("grey", 0x808080); + colorNames.put("green", 0x008000); + colorNames.put("lime", 0x00ff00); + colorNames.put("maroon", 0x800000); + colorNames.put("navy", 0x000080); + colorNames.put("olive", 0x808000); + colorNames.put("purple", 0x800080); + colorNames.put("red", 0xff0000); + colorNames.put("silver", 0xc0c0c0); + colorNames.put("teal", 0x008080); + colorNames.put("white", 0xffffff); + colorNames.put("yellow", 0xffff00); + } + */ + + static protected int parseRGB(String what) { + int leftParen = what.indexOf('(') + 1; + int rightParen = what.indexOf(')'); + String sub = what.substring(leftParen, rightParen); + String[] values = PApplet.splitTokens(sub, ", "); + int rgbValue = 0; + if (values.length == 3) { + // Color spec allows for rgb values to be percentages. + for (int i = 0; i < 3; i++) { + rgbValue <<= 8; + if (values[i].endsWith("%")) { + rgbValue |= (int)(PApplet.constrain(255*parseFloatOrPercent(values[i]), 0, 255)); + } else { + rgbValue |= PApplet.constrain(PApplet.parseInt(values[i]), 0, 255); + } + } + } else System.err.println("Could not read color \"" + what + "\"."); + + return rgbValue; + } + + + //static protected Map parseStyleAttributes(String style) { + static protected StringDict parseStyleAttributes(String style) { + //Map table = new HashMap(); + StringDict table = new StringDict(); +// if (style == null) return table; + if (style != null) { + String[] pieces = style.split(";"); + for (int i = 0; i < pieces.length; i++) { + String[] parts = pieces[i].split(":"); + //table.put(parts[0], parts[1]); + table.set(parts[0], parts[1]); + } + } + return table; + } + + + /** + * Used in place of element.getFloatAttribute(a) because we can + * have a unit suffix (length or coordinate). + * @param element what to parse + * @param attribute name of the attribute to get + * @param relativeTo (float) Used for %. When relative to viewbox, should + * be svgWidth for horizontal dimentions, svgHeight for vertical, and + * svgXYSize for anything else. + * @return unit-parsed version of the data + */ + static protected float getFloatWithUnit(XML element, String attribute, float relativeTo) { + String val = element.getString(attribute); + return (val == null) ? 0 : parseUnitSize(val, relativeTo); + } + + + /** + * Parse a size that may have a suffix for its units. + * This assumes 90dpi, which implies, as given in the + * units spec: + *
    + *
  • "1pt" equals "1.25px" (and therefore 1.25 user units) + *
  • "1pc" equals "15px" (and therefore 15 user units) + *
  • "1mm" would be "3.543307px" (3.543307 user units) + *
  • "1cm" equals "35.43307px" (and therefore 35.43307 user units) + *
  • "1in" equals "90px" (and therefore 90 user units) + *
+ * @param relativeTo (float) Used for %. When relative to viewbox, should + * be svgWidth for horizontal dimentions, svgHeight for vertical, and + * svgXYSize for anything else. + */ + static protected float parseUnitSize(String text, float relativeTo) { + int len = text.length() - 2; + + if (text.endsWith("pt")) { + return PApplet.parseFloat(text.substring(0, len)) * 1.25f; + } else if (text.endsWith("pc")) { + return PApplet.parseFloat(text.substring(0, len)) * 15; + } else if (text.endsWith("mm")) { + return PApplet.parseFloat(text.substring(0, len)) * 3.543307f; + } else if (text.endsWith("cm")) { + return PApplet.parseFloat(text.substring(0, len)) * 35.43307f; + } else if (text.endsWith("in")) { + return PApplet.parseFloat(text.substring(0, len)) * 90; + } else if (text.endsWith("px")) { + return PApplet.parseFloat(text.substring(0, len)); + } else if (text.endsWith("%")) { + return relativeTo * parseFloatOrPercent(text); + } else { + return PApplet.parseFloat(text); + } + } + + + static protected float parseFloatOrPercent(String text) { + text = text.trim(); + if (text.endsWith("%")) { + return Float.parseFloat(text.substring(0, text.length() - 1)) / 100.0f; + } else { + return Float.parseFloat(text); + } + } + + + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + static public class Gradient extends PShapeSVGExtended { + AffineTransform transform; + + public float[] offset; + public int[] color; + public int count; + + public Gradient(PShapeSVGExtended parent, XML properties) { + super(parent, properties, true); + + XML elements[] = properties.getChildren(); + offset = new float[elements.length]; + color = new int[elements.length]; + + // + for (int i = 0; i < elements.length; i++) { + XML elem = elements[i]; + String name = elem.getName(); + if (name.equals("stop")) { + String offsetAttr = elem.getString("offset"); + offset[count] = parseFloatOrPercent(offsetAttr); + + String style = elem.getString("style"); + //Map styles = parseStyleAttributes(style); + StringDict styles = parseStyleAttributes(style); + + String colorStr = styles.get("stop-color"); + if (colorStr == null) { + colorStr = elem.getString("stop-color"); + if (colorStr == null) colorStr = "#000000"; + } + String opacityStr = styles.get("stop-opacity"); + if (opacityStr == null) { + opacityStr = elem.getString("stop-opacity"); + if (opacityStr == null) opacityStr = "1"; + } + int tupacity = PApplet.constrain( + (int)(PApplet.parseFloat(opacityStr) * 255), 0, 255); + color[count] = (tupacity << 24) | parseSimpleColor(colorStr); + count++; + } + } + offset = PApplet.subset(offset, 0, count); + color = PApplet.subset(color, 0, count); + } + } + + + public class LinearGradient extends Gradient { + public float x1, y1, x2, y2; + + public LinearGradient(PShapeSVGExtended parent, XML properties) { + super(parent, properties); + + this.x1 = getFloatWithUnit(properties, "x1", svgWidth); + this.y1 = getFloatWithUnit(properties, "y1", svgHeight); + this.x2 = getFloatWithUnit(properties, "x2", svgWidth); + this.y2 = getFloatWithUnit(properties, "y2", svgHeight); + + String transformStr = + properties.getString("gradientTransform"); + + if (transformStr != null) { + float t[] = parseTransform(transformStr).get(null); + this.transform = new AffineTransform(t[0], t[3], t[1], t[4], t[2], t[5]); + + Point2D t1 = transform.transform(new Point2D.Float(x1, y1), null); + Point2D t2 = transform.transform(new Point2D.Float(x2, y2), null); + + this.x1 = (float) t1.getX(); + this.y1 = (float) t1.getY(); + this.x2 = (float) t2.getX(); + this.y2 = (float) t2.getY(); + } + } + } + + + public class RadialGradient extends Gradient { + public float cx, cy, r; + + public RadialGradient(PShapeSVGExtended parent, XML properties) { + super(parent, properties); + + this.cx = getFloatWithUnit(properties, "cx", svgWidth); + this.cy = getFloatWithUnit(properties, "cy", svgHeight); + this.r = getFloatWithUnit(properties, "r", svgSizeXY); + + String transformStr = + properties.getString("gradientTransform"); + + if (transformStr != null) { + float t[] = parseTransform(transformStr).get(null); + this.transform = new AffineTransform(t[0], t[3], t[1], t[4], t[2], t[5]); + + Point2D t1 = transform.transform(new Point2D.Float(cx, cy), null); + Point2D t2 = transform.transform(new Point2D.Float(cx + r, cy), null); + + this.cx = (float) t1.getX(); + this.cy = (float) t1.getY(); + this.r = (float) (t2.getX() - t1.getX()); + } + } + } + + + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + public static float TEXT_QUALITY = 1; + protected PFont parseFont(XML properties) { + +// FontFace fontFace = new FontFace(this, properties); + String fontFamily = null; + float size = 10; + int weight = PLAIN; // 0 + int italic = 0; + + if (properties.hasAttribute("style")) { + String styleText = properties.getString("style"); + String[] styleTokens = PApplet.splitTokens(styleText, ";"); + + //PApplet.println(styleTokens); + for (int i = 0; i < styleTokens.length; i++) { + + String[] tokens = PApplet.splitTokens(styleTokens[i], ":"); + //PApplet.println(tokens); + + tokens[0] = PApplet.trim(tokens[0]); + + if (tokens[0].equals("font-style")) { + // PApplet.println("font-style: " + tokens[1]); + if (tokens[1].contains("italic")) { + italic = ITALIC; + } + } else if (tokens[0].equals("font-variant")) { + // PApplet.println("font-variant: " + tokens[1]); + // setFillOpacity(tokens[1]); + + } else if (tokens[0].equals("font-weight")) { + // PApplet.println("font-weight: " + tokens[1]); + + if (tokens[1].contains("bold")) { + weight = BOLD; + // PApplet.println("Bold weight ! "); + } + + + } else if (tokens[0].equals("font-stretch")) { + // not supported. + + } else if (tokens[0].equals("font-size")) { + // PApplet.println("font-size: " + tokens[1]); + size = Float.parseFloat(tokens[1].split("px")[0]); + // PApplet.println("font-size-parsed: " + size); + } else if (tokens[0].equals("line-height")) { + // not supported + + } else if (tokens[0].equals("font-family")) { + PApplet.println("Font-family: " + tokens[1]); + fontFamily = tokens[1]; + if(fontFamily.contains("'")){ + fontFamily = fontFamily.replace("'", ""); + } + + } else if (tokens[0].equals("text-align")) { + // not supported + + } else if (tokens[0].equals("letter-spacing")) { + // not supported + + } else if (tokens[0].equals("word-spacing")) { + // not supported + + } else if (tokens[0].equals("writing-mode")) { + // not supported + + } else if (tokens[0].equals("text-anchor")) { + // not supported + + } else { + // Other attributes are not yet implemented + } + } + } + if (fontFamily == null) { + return null; + } + size = size * TEXT_QUALITY; + + return createFont(fontFamily, weight | italic, size, true); + } + + protected PFont createFont(String name, int weight, float size, boolean smooth) { + +// System.out.println("Try to create a font of " + name + " family, " + weight); + java.awt.Font baseFont = new java.awt.Font(name, weight, (int) size); // PFont.findFont(name);ç + +// System.out.println("Resulting family : " + baseFont.getFamily() + " " + baseFont.getStyle()); + PFont outputPFont = new PFont(baseFont.deriveFont(size), smooth, null); + +// System.out.println("Resulting PFont family : " + outputPFont.getName()); + return outputPFont; + } + + public static class Text extends PShapeSVGExtended { + + protected PFont font; + + public Text(PShapeSVGExtended parent, XML properties) { + super(parent, properties, true); + + // get location + float x = Float.parseFloat(properties.getString("x")); + float y = Float.parseFloat(properties.getString("y")); + + if (matrix == null) { + matrix = new PMatrix2D(); + } + matrix.translate(x, y); + + family = GROUP; + + font = parseFont(properties); + + } + +// @Override +// public void drawImpl(PGraphics g){ +// } + } + + public static class LineOfText extends PShapeSVGExtended { + + String textToDisplay; + PFont font; + + public LineOfText(PShapeSVGExtended parent, XML properties) { + + // TODO: child should ideally be parsed too... + // for inline content. + super(parent, properties, false); + +// // get location + float x = Float.parseFloat(properties.getString("x")); + float y = Float.parseFloat(properties.getString("y")); + + float parentX = Float.parseFloat(parent.element.getString("x")); + float parentY = Float.parseFloat(parent.element.getString("y")); + + if (matrix == null) matrix = new PMatrix2D(); + matrix.translate(x - parentX, (y - parentY) / 2f); + + // get the first properties + parseColors(properties); + font = parseFont(properties); + + // It is a line.. + boolean isALine = properties.getString("role") == "line"; + // NO inline content yet. + if (this.childCount > 0) { + } + + String text = properties.getContent(); + textToDisplay = text; + } + + @Override + public void drawImpl(PGraphics g) { + if (font == null) { + font = ((Text) parent).font; + if (font == null) { + return; + } + } + + pre(g); + g.textFont(font, font.getSize() / TEXT_QUALITY); + g.text(textToDisplay, 0, 0); + post(g); + } + + } + + public static class Font extends PShapeSVGExtended { + public FontFace face; + + public Map namedGlyphs; + public Map unicodeGlyphs; + + public int glyphCount; + public FontGlyph[] glyphs; + public FontGlyph missingGlyph; + + int horizAdvX; + + + public Font(PShapeSVGExtended parent, XML properties) { + super(parent, properties, false); +// handle(parent, properties); + + XML[] elements = properties.getChildren(); + + horizAdvX = properties.getInt("horiz-adv-x", 0); + + namedGlyphs = new HashMap(); + unicodeGlyphs = new HashMap(); + glyphCount = 0; + glyphs = new FontGlyph[elements.length]; + + for (int i = 0; i < elements.length; i++) { + String name = elements[i].getName(); + XML elem = elements[i]; + if (name == null) { + // skip it + } else if (name.equals("glyph")) { + FontGlyph fg = new FontGlyph(this, elem, this); + if (fg.isLegit()) { + if (fg.name != null) { + namedGlyphs.put(fg.name, fg); + } + if (fg.unicode != 0) { + unicodeGlyphs.put(Character.valueOf(fg.unicode), fg); + } + } + glyphs[glyphCount++] = fg; + + } else if (name.equals("missing-glyph")) { +// System.out.println("got missing glyph inside "); + missingGlyph = new FontGlyph(this, elem, this); + } else if (name.equals("font-face")) { + face = new FontFace(this, elem); + } else { + System.err.println("Ignoring " + name + " inside "); + } + } + } + + + protected void drawShape() { + // does nothing for fonts + } + + + public void drawString(PGraphics g, String str, float x, float y, float size) { + // 1) scale by the 1.0/unitsPerEm + // 2) scale up by a font size + g.pushMatrix(); + float s = size / face.unitsPerEm; + //System.out.println("scale is " + s); + // swap y coord at the same time, since fonts have y=0 at baseline + g.translate(x, y); + g.scale(s, -s); + char[] c = str.toCharArray(); + for (int i = 0; i < c.length; i++) { + // call draw on each char (pulling it w/ the unicode table) + FontGlyph fg = unicodeGlyphs.get(Character.valueOf(c[i])); + if (fg != null) { + fg.draw(g); + // add horizAdvX/unitsPerEm to the x coordinate along the way + g.translate(fg.horizAdvX, 0); + } else { + System.err.println("'" + c[i] + "' not available."); + } + } + g.popMatrix(); + } + + + public void drawChar(PGraphics g, char c, float x, float y, float size) { + g.pushMatrix(); + float s = size / face.unitsPerEm; + g.translate(x, y); + g.scale(s, -s); + FontGlyph fg = unicodeGlyphs.get(Character.valueOf(c)); + if (fg != null) g.shape(fg); + g.popMatrix(); + } + + + public float textWidth(String str, float size) { + float w = 0; + char[] c = str.toCharArray(); + for (int i = 0; i < c.length; i++) { + // call draw on each char (pulling it w/ the unicode table) + FontGlyph fg = unicodeGlyphs.get(Character.valueOf(c[i])); + if (fg != null) { + w += (float) fg.horizAdvX / face.unitsPerEm; + } + } + return w * size; + } + } + + + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + static class FontFace extends PShapeSVGExtended { + int horizOriginX; // dflt 0 + int horizOriginY; // dflt 0 +// int horizAdvX; // no dflt? + int vertOriginX; // dflt horizAdvX/2 + int vertOriginY; // dflt ascent + int vertAdvY; // dflt 1em (unitsPerEm value) + + String fontFamily; + int fontWeight; // can also be normal or bold (also comma separated) + String fontStretch; + int unitsPerEm; // dflt 1000 + int[] panose1; // dflt "0 0 0 0 0 0 0 0 0 0" + int ascent; + int descent; + int[] bbox; // spec says comma separated, tho not w/ forge + int underlineThickness; + int underlinePosition; + //String unicodeRange; // gonna ignore for now + + + public FontFace(PShapeSVGExtended parent, XML properties) { + super(parent, properties, true); + + unitsPerEm = properties.getInt("units-per-em", 1000); + } + + + protected void drawShape() { + // nothing to draw in the font face attribute + } + } + + + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + public static class FontGlyph extends PShapeSVGExtended { // extends Path + public String name; + char unicode; + int horizAdvX; + + public FontGlyph(PShapeSVGExtended parent, XML properties, Font font) { + super(parent, properties, true); + super.parsePath(); // ?? + + name = properties.getString("glyph-name"); + String u = properties.getString("unicode"); + unicode = 0; + if (u != null) { + if (u.length() == 1) { + unicode = u.charAt(0); + //System.out.println("unicode for " + name + " is " + u); + } else { + System.err.println("unicode for " + name + + " is more than one char: " + u); + } + } + if (properties.hasAttribute("horiz-adv-x")) { + horizAdvX = properties.getInt("horiz-adv-x"); + } else { + horizAdvX = font.horizAdvX; + } + } + + + protected boolean isLegit() { // TODO need a better way to handle this... + return vertexCount != 0; + } + } + + + // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + /** + * Get a particular element based on its SVG ID. When editing SVG by hand, + * this is the id="" tag on any SVG element. When editing from Illustrator, + * these IDs can be edited by expanding the layers palette. The names used + * in the layers palette, both for the layers or the shapes and groups + * beneath them can be used here. + *
+   * // This code grabs "Layer 3" and the shapes beneath it.
+   * PShape layer3 = svg.getChild("Layer 3");
+   * 
+ */ + @Override + public PShape getChild(String name) { + PShape found = super.getChild(name); + if (found == null) { + // Otherwise try with underscores instead of spaces + // (this is how Illustrator handles spaces in the layer names). + found = super.getChild(name.replace(' ', '_')); + } + // Set bounding box based on the parent bounding box + if (found != null) { +// found.x = this.x; +// found.y = this.y; + found.width = this.width; + found.height = this.height; + } + return found; + } + + public PMatrix getMatrix(){ + return this.matrix; + } + + + /** + * Prints out the SVG document. Useful for parsing. + */ + public void print() { + PApplet.println(element.toString()); + } +} From 7624fbc0ecc1b0aef12b6fa1d7dae42a720c508f Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 21 Oct 2016 10:09:47 +0200 Subject: [PATCH 11/99] Vanilla processing instead of custom. --- papart/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/papart/pom.xml b/papart/pom.xml index c5261f0e..a36b5c97 100755 --- a/papart/pom.xml +++ b/papart/pom.xml @@ -162,7 +162,7 @@ org.processing core - 3.1.2-papart-SNAPSHOT + 3.1.2 From 7f9b47da31619b27521d7997258cfb9a275246f2 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 26 Oct 2016 15:08:35 +0200 Subject: [PATCH 12/99] =?UTF-8?q?WIP=20-=C2=A0NOT=C2=A0WORKING?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- papart/SR300.txt | 38 +++++++++++ .../papart/depthcam/devices/RealSense.java | 63 ++++++++----------- .../papart/procam/camera/CameraRealSense.java | 11 ++++ 3 files changed, 76 insertions(+), 36 deletions(-) create mode 100644 papart/SR300.txt diff --git a/papart/SR300.txt b/papart/SR300.txt new file mode 100644 index 00000000..a52f0f50 --- /dev/null +++ b/papart/SR300.txt @@ -0,0 +1,38 @@ +## Working options + +## Not working auto range + +# Change les points 3D +F200_FILTER_OPTION +0 - 7 + +# F200_ACCURACY +1 - 3 + +# F200_CONFIDENCE_THRESHOLD +0 - 15 + +# F200_LASER_POWER +0 - 1 (more has no effect) + +# Color Options + +# COLOR_SHARPNESS +0 - 100 + +# COLOR_GAMMA +100 - 500 // 300 - mid + +# COLOR_GAIN +0 - 128 + +# COLOR_CONTRAST +0 - 100 + +# COLOR_BRIGHTNESS +-64 - 64 + + +IVCAM options preset +0 - 8 + diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 9866f696..17b3b674 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -34,41 +34,31 @@ * @author Jeremy Laviole */ public final class RealSense extends KinectDevice { - + protected CameraRealSense cameraRGB; protected CameraRealSenseDepth cameraDepth; - + public RealSense(PApplet parent) { initSize(); this.parent = parent; - initRGB(); + initCamera(); + // Warning Start both depth & color camera for now. cameraRGB.start(); cameraDepth = cameraRGB.getDepthCamera(); - - // TODO: setSize is not working on camera side... - //cameraDepth.setSize(WIDTH, HEIGHT); - cameraDepth.setParent(parent); - - // TODO: calibration... -// cameraDepth.useHarwareIntrinsics(); - // get the stereo ? setStereoCalibration(cameraRGB.getHardwareExtrinsics()); // setStereoCalibration(Papart.kinectStereoCalib); - cameraRGB.useHarwareIntrinsics(); - cameraDepth.useHarwareIntrinsics(); - -// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); +// cameraRGB.useHarwareIntrinsics(); +// cameraDepth.useHarwareIntrinsics(); + cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300-960.yaml"); + cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); // cameraRGB.getProjectiveDevice().getIntrinsics().print(); - - // Warning Start both depth & color camera for now. - } - + public RealSense(PApplet parent, CameraRealSense cameraRGB) { throw new UnsupportedOperationException("Not supported yet: RealSense(PApplet parent, CameraRealSense cameraRGB)"); // initSize(); @@ -84,13 +74,12 @@ public RealSense(PApplet parent, CameraRealSense cameraRGB) { // setStereoCalibration(cameraRGB.getHardwareExtrinsics()); //// setStereoCalibration(Papart.kinectStereoCalib); } - + public static final int CAMERA_WIDTH = 640; public static final int CAMERA_HEIGHT = 480; // public static final int CAMERA_WIDTH_RGB = 1920; // public static final int CAMERA_HEIGHT_RGB = 1080; - private void initSize() { // IR and Depth image size WIDTH = 640; @@ -102,36 +91,38 @@ private void initSize() { RGB_HEIGHT = 540; RGB_SIZE = RGB_WIDTH * RGB_HEIGHT; } - + public void close() { cameraRGB.close(); cameraDepth.close(); } - - final void initRGB() { + + final void initCamera() { // Check if it is the default camera... Papart papart = Papart.getPapart(); - + if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE) { System.out.println("REALSENSE: Using configuration ID & Resolution."); // use the ID int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); - + cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, id); cameraRGB.setParent(parent); // use the calibration cameraRGB.setCalibration(Papart.cameraCalib); } else { - + System.out.println("REALSENSE: Using DEFAULT configuration."); cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); cameraRGB.setParent(parent); cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); } - + + cameraDepth = cameraRGB.getDepthCamera(); + cameraDepth.setSize(WIDTH, HEIGHT); } - + final void initIR() { // NO IR yet. @@ -141,33 +132,33 @@ final void initIR() { // cameraIR.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); // cameraIR.start(); } - + @Override public Camera getCameraRGB() { return cameraRGB; } - + public Camera getCameraIR() { throw new UnsupportedOperationException("Not supported yet."); } - + public Camera getCameraDepth() { return cameraDepth; } - + @Override public int rawDepthSize() { return SIZE * 2; } - + @Override public void setTouch(KinectTouchInput kinectTouchInput) { cameraDepth.setTouchInput(kinectTouchInput); } - + @Override public Type type() { return Type.REALSENSE; } - + } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 564d3613..bbd08ae0 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -26,6 +26,7 @@ import org.bytedeco.javacpp.opencv_core.IplImage; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.RealSenseFrameGrabber; +import processing.core.PApplet; import processing.core.PImage; import processing.core.PMatrix3D; @@ -50,6 +51,16 @@ protected CameraRealSense(int cameraNo) { grabber = new RealSenseFrameGrabber(this.systemNumber); depthCamera = new CameraRealSenseDepth(this); } + + @Override + public void setParent(PApplet parent){ + super.setParent(parent); + depthCamera.setParent(parent); + } + + public RealSenseFrameGrabber getFrameGrabber(){ + return this.grabber; + } public CameraRealSenseDepth getDepthCamera() { return this.depthCamera; From 063eea306ac07c688b89467b78f103c364a50257 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 26 Oct 2016 15:31:05 +0200 Subject: [PATCH 13/99] Working again, thep setSize is problematic... It MUST be done after the start, to investigate. --- .../papart/depthcam/devices/RealSense.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 17b3b674..9d6fa413 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -47,15 +47,18 @@ public RealSense(PApplet parent) { cameraRGB.start(); cameraDepth = cameraRGB.getDepthCamera(); - + cameraDepth = cameraRGB.getDepthCamera(); + cameraDepth.setSize(WIDTH, HEIGHT); + cameraDepth.setParent(parent); + setStereoCalibration(cameraRGB.getHardwareExtrinsics()); // setStereoCalibration(Papart.kinectStereoCalib); -// cameraRGB.useHarwareIntrinsics(); -// cameraDepth.useHarwareIntrinsics(); + cameraRGB.useHarwareIntrinsics(); + cameraDepth.useHarwareIntrinsics(); - cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300-960.yaml"); - cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); +// cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300-960.yaml"); +// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); // cameraRGB.getProjectiveDevice().getIntrinsics().print(); } @@ -118,9 +121,7 @@ final void initCamera() { cameraRGB.setParent(parent); cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); } - - cameraDepth = cameraRGB.getDepthCamera(); - cameraDepth.setSize(WIDTH, HEIGHT); + } final void initIR() { From 692649d9d0ba16dd6b8f11f57de5a17c16065e72 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 26 Oct 2016 16:05:45 +0200 Subject: [PATCH 14/99] RealSense 960 working good. --- .../papart/depthcam/devices/RealSense.java | 53 ++++++++----------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 9d6fa413..5573fab9 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -34,34 +34,23 @@ * @author Jeremy Laviole */ public final class RealSense extends KinectDevice { - + protected CameraRealSense cameraRGB; protected CameraRealSenseDepth cameraDepth; - + public RealSense(PApplet parent) { initSize(); this.parent = parent; - initCamera(); + initCameras(); // Warning Start both depth & color camera for now. cameraRGB.start(); - - cameraDepth = cameraRGB.getDepthCamera(); - cameraDepth = cameraRGB.getDepthCamera(); - cameraDepth.setSize(WIDTH, HEIGHT); - cameraDepth.setParent(parent); - - setStereoCalibration(cameraRGB.getHardwareExtrinsics()); -// setStereoCalibration(Papart.kinectStereoCalib); + setStereoCalibration(cameraRGB.getHardwareExtrinsics()); cameraRGB.useHarwareIntrinsics(); cameraDepth.useHarwareIntrinsics(); - -// cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300-960.yaml"); -// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); -// cameraRGB.getProjectiveDevice().getIntrinsics().print(); } - + public RealSense(PApplet parent, CameraRealSense cameraRGB) { throw new UnsupportedOperationException("Not supported yet: RealSense(PApplet parent, CameraRealSense cameraRGB)"); // initSize(); @@ -77,7 +66,7 @@ public RealSense(PApplet parent, CameraRealSense cameraRGB) { // setStereoCalibration(cameraRGB.getHardwareExtrinsics()); //// setStereoCalibration(Papart.kinectStereoCalib); } - + public static final int CAMERA_WIDTH = 640; public static final int CAMERA_HEIGHT = 480; @@ -94,27 +83,27 @@ private void initSize() { RGB_HEIGHT = 540; RGB_SIZE = RGB_WIDTH * RGB_HEIGHT; } - + public void close() { cameraRGB.close(); cameraDepth.close(); } - - final void initCamera() { + + final void initCameras() { // Check if it is the default camera... Papart papart = Papart.getPapart(); - + if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE) { System.out.println("REALSENSE: Using configuration ID & Resolution."); // use the ID int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); - + cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, id); cameraRGB.setParent(parent); // use the calibration cameraRGB.setCalibration(Papart.cameraCalib); } else { - + System.out.println("REALSENSE: Using DEFAULT configuration."); cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); @@ -122,8 +111,10 @@ final void initCamera() { cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); } + cameraDepth = cameraRGB.getDepthCamera(); + cameraDepth.setSize(WIDTH, HEIGHT); } - + final void initIR() { // NO IR yet. @@ -133,33 +124,33 @@ final void initIR() { // cameraIR.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); // cameraIR.start(); } - + @Override public Camera getCameraRGB() { return cameraRGB; } - + public Camera getCameraIR() { throw new UnsupportedOperationException("Not supported yet."); } - + public Camera getCameraDepth() { return cameraDepth; } - + @Override public int rawDepthSize() { return SIZE * 2; } - + @Override public void setTouch(KinectTouchInput kinectTouchInput) { cameraDepth.setTouchInput(kinectTouchInput); } - + @Override public Type type() { return Type.REALSENSE; } - + } From aa9b8798335d21a7cdef5039cd73ff6cea36e7a6 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 26 Oct 2016 17:37:45 +0200 Subject: [PATCH 15/99] Work in progress, to get Color, IR and Depth from RealSense. --- .../analysis/KinectDepthAnalysis.java | 3 +- .../depthcam/devices/RealSense-TMP.java | 173 ++++++++++++++++++ .../papart/depthcam/devices/RealSense.java | 39 ++-- papart/src/fr/inria/papart/procam/Utils.java | 13 ++ .../inria/papart/procam/camera/CamImage.java | 1 + .../papart/procam/camera/CamImageColor.java | 1 + .../papart/procam/camera/CamImageGray.java | 14 +- .../papart/procam/camera/CameraFactory.java | 5 +- .../papart/procam/camera/CameraRealSense.java | 131 ++++++------- .../procam/camera/CameraRealSenseColor.java | 92 ++++++++++ .../procam/camera/CameraRealSenseDepth.java | 24 ++- .../procam/camera/CameraRealSenseIR.java | 92 ++++++++++ 12 files changed, 491 insertions(+), 97 deletions(-) create mode 100644 papart/src/fr/inria/papart/depthcam/devices/RealSense-TMP.java create mode 100755 papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java create mode 100755 papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index 2667d2b0..dc33fa99 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -35,6 +35,7 @@ import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraOpenKinect; import fr.inria.papart.procam.camera.CameraRealSense; +import fr.inria.papart.procam.camera.CameraRealSenseDepth; import java.nio.ByteBuffer; import java.nio.ShortBuffer; import java.util.ArrayList; @@ -124,7 +125,7 @@ private void initMemory() { depthComputationMethod = new KinectOneDepth(); } if (kinectDevice instanceof RealSense) { - float depthScale = ((CameraRealSense) ((RealSense) kinectDevice).getCameraRGB()).getDepthScale(); + float depthScale = ((CameraRealSenseDepth)((RealSense) kinectDevice).getCameraDepth()).getDepthScale(); depthComputationMethod = new RealSenseDepth(depthScale); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense-TMP.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense-TMP.java new file mode 100644 index 00000000..6db08abe --- /dev/null +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense-TMP.java @@ -0,0 +1,173 @@ +///* +// * Part of the PapARt project - https://project.inria.fr/papart/ +// * +// * Copyright (C) 2014-2016 Inria +// * Copyright (C) 2011-2013 Bordeaux University +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation, version 2.1. +// * +// * This library is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General +// * Public License along with this library; If not, see +// * . +// */ +//package fr.inria.papart.depthcam.devices; +// +//import fr.inria.papart.multitouch.KinectTouchInput; +//import fr.inria.papart.procam.Papart; +//import fr.inria.papart.procam.camera.Camera; +//import fr.inria.papart.procam.camera.CameraFactory; +//import fr.inria.papart.procam.camera.CameraOpenCVDepth; +//import fr.inria.papart.procam.camera.CameraOpenKinectDepth; +//import fr.inria.papart.procam.camera.CameraRealSense; +//import fr.inria.papart.procam.camera.CameraRealSenseDepth; +//import processing.core.PApplet; +// +///** +// * +// * @author Jeremy Laviole +// */ +//public final class RealSense extends KinectDevice { +// +// protected CameraRealSense cameraRGB; +// protected CameraRealSenseDepth cameraDepth; +// +// public RealSense(PApplet parent) { +// initSize(); +// this.parent = parent; +// initRGB(); +// +// cameraRGB.start(); +// +// cameraDepth = cameraRGB.getDepthCamera(); +// +// // TODO: setSize is not working on camera side... +// cameraDepth.setSize(WIDTH, HEIGHT); +// cameraDepth.setParent(parent); +// +// // TODO: calibration... +//// cameraDepth.useHarwareIntrinsics(); +// +// // get the stereo ? +// setStereoCalibration(cameraRGB.getHardwareExtrinsics()); +//// setStereoCalibration(Papart.kinectStereoCalib); +// +// cameraRGB.useHarwareIntrinsics(); +// cameraDepth.useHarwareIntrinsics(); +// +//// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); +// +//// cameraRGB.getProjectiveDevice().getIntrinsics().print(); +// +// // Warning Start both depth & color camera for now. +// +// } +// +// public RealSense(PApplet parent, CameraRealSense cameraRGB) { +// throw new UnsupportedOperationException("Not supported yet: RealSense(PApplet parent, CameraRealSense cameraRGB)"); +//// initSize(); +//// this.parent = parent; +//// this.cameraRGB = cameraRGB; +//// +//// cameraDepth = cameraRGB.getDepthCamera(); +//// cameraDepth.setParent(parent); +//// // TODO: calibration... +//// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); +//// +//// // TODO: get the extrinsics ! +//// setStereoCalibration(cameraRGB.getHardwareExtrinsics()); +////// setStereoCalibration(Papart.kinectStereoCalib); +// } +// +// public static final int CAMERA_WIDTH = 640; +// public static final int CAMERA_HEIGHT = 480; +// +//// public static final int CAMERA_WIDTH_RGB = 1920; +//// public static final int CAMERA_HEIGHT_RGB = 1080; +// +// private void initSize() { +// // IR and Depth image size +// WIDTH = 640; +// HEIGHT = 480; +// SIZE = WIDTH * HEIGHT; +// +// // RGB image size +// RGB_WIDTH = 960; +// RGB_HEIGHT = 540; +// RGB_SIZE = RGB_WIDTH * RGB_HEIGHT; +// } +// +// public void close() { +// cameraRGB.close(); +// cameraDepth.close(); +// } +// +// final void initRGB() { +// // Check if it is the default camera... +// Papart papart = Papart.getPapart(); +// +// if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE) { +// System.out.println("REALSENSE: Using configuration ID & Resolution."); +// // use the ID +// int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); +// +// cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, id); +// cameraRGB.setParent(parent); +// // use the calibration +// cameraRGB.setCalibration(Papart.cameraCalib); +// } else { +// +// System.out.println("REALSENSE: Using DEFAULT configuration."); +// cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); +// cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); +// cameraRGB.setParent(parent); +// cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); +// } +// +// } +// +// final void initIR() { +// // NO IR yet. +// +//// cameraIR = CameraFactory.createCamera(Camera.Type.OPENCV, 1); +//// cameraIR.setParent(parent); +////// cameraIR.setSize(WIDTH, HEIGHT); +//// cameraIR.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); +//// cameraIR.start(); +// } +// +// @Override +// public Camera getCameraRGB() { +// return cameraRGB; +// } +// +// public Camera getCameraIR() { +// throw new UnsupportedOperationException("Not supported yet."); +// } +// +// public Camera getCameraDepth() { +// return cameraDepth; +// } +// +// @Override +// public int rawDepthSize() { +// return SIZE * 2; +// } +// +// @Override +// public void setTouch(KinectTouchInput kinectTouchInput) { +// cameraDepth.setTouchInput(kinectTouchInput); +// } +// +// @Override +// public Type type() { +// return Type.REALSENSE; +// } +// +//} diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 5573fab9..c90982e1 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -26,7 +26,9 @@ import fr.inria.papart.procam.camera.CameraOpenCVDepth; import fr.inria.papart.procam.camera.CameraOpenKinectDepth; import fr.inria.papart.procam.camera.CameraRealSense; +import fr.inria.papart.procam.camera.CameraRealSenseColor; import fr.inria.papart.procam.camera.CameraRealSenseDepth; +import fr.inria.papart.procam.camera.CameraRealSenseIR; import processing.core.PApplet; /** @@ -35,8 +37,10 @@ */ public final class RealSense extends KinectDevice { - protected CameraRealSense cameraRGB; + protected CameraRealSense cameraRS; protected CameraRealSenseDepth cameraDepth; + protected CameraRealSenseColor cameraColor; + protected CameraRealSenseIR cameraIR; public RealSense(PApplet parent) { initSize(); @@ -44,10 +48,10 @@ public RealSense(PApplet parent) { initCameras(); // Warning Start both depth & color camera for now. - cameraRGB.start(); + cameraRS.start(); - setStereoCalibration(cameraRGB.getHardwareExtrinsics()); - cameraRGB.useHarwareIntrinsics(); + setStereoCalibration(cameraRS.getHardwareExtrinsics()); + cameraColor.useHarwareIntrinsics(); cameraDepth.useHarwareIntrinsics(); } @@ -85,7 +89,7 @@ private void initSize() { } public void close() { - cameraRGB.close(); + cameraRS.close(); cameraDepth.close(); } @@ -98,20 +102,23 @@ final void initCameras() { // use the ID int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); - cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, id); - cameraRGB.setParent(parent); - // use the calibration - cameraRGB.setCalibration(Papart.cameraCalib); + cameraRS = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, id); + cameraRS.setParent(parent); + + cameraColor = cameraRS.getColorCamera(); + cameraColor.setCalibration(Papart.cameraCalib); } else { System.out.println("REALSENSE: Using DEFAULT configuration."); - cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); - cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); - cameraRGB.setParent(parent); - cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); + cameraRS = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); + cameraRS.setParent(parent); + + cameraColor = cameraRS.getColorCamera(); + cameraColor.setSize(RGB_WIDTH, RGB_HEIGHT); + cameraColor.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); } - cameraDepth = cameraRGB.getDepthCamera(); + cameraDepth = cameraRS.getDepthCamera(); cameraDepth.setSize(WIDTH, HEIGHT); } @@ -127,11 +134,11 @@ final void initIR() { @Override public Camera getCameraRGB() { - return cameraRGB; + return cameraColor; } public Camera getCameraIR() { - throw new UnsupportedOperationException("Not supported yet."); + return cameraIR; } public Camera getCameraDepth() { diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index 745599eb..ea5a89f8 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -610,6 +610,19 @@ static public void byteBufferRGBtoARGB(ByteBuffer bgr, ByteBuffer argb) { } argb.rewind(); } + + static public void byteBufferGRAYtoARGB(ByteBuffer gray, ByteBuffer argb) { + byte[] tmpArr = new byte[1]; + + for (int i = 0; i < gray.capacity(); i++) { + gray.get(tmpArr); + argb.put(tmpArr[0]); + argb.put(tmpArr[0]); + argb.put(tmpArr[0]); + argb.put((byte) 255); + } + argb.rewind(); + } // TODO private static byte[] kinectByteArray = null; diff --git a/papart/src/fr/inria/papart/procam/camera/CamImage.java b/papart/src/fr/inria/papart/procam/camera/CamImage.java index a4409b30..0f907986 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImage.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImage.java @@ -39,6 +39,7 @@ public abstract class CamImage extends PImage { protected CamImage(PApplet parent, int width, int height, int format, PixelFormat incomingFormat) { super(width, height, format); this.incomingFormat = incomingFormat; + System.out.println("Creating a CamImage " + width + " " + height + " " + format); camInit(parent); } diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java index b0705ced..a2d68d39 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java @@ -61,6 +61,7 @@ protected final void camInit(PApplet parent) { @Override public void update(IplImage iplImage) { + Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); ByteBuffer imageBuffer = iplImage.getByteBuffer(); diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index 20d8114f..59b71fba 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.procam.camera; +import fr.inria.papart.procam.Utils; import fr.inria.papart.procam.camera.Camera.PixelFormat; import java.awt.Image; import java.nio.ByteBuffer; @@ -33,6 +34,8 @@ */ public class CamImageGray extends CamImage { + protected ByteBuffer argbBuffer; + public CamImageGray(PApplet parent, Image img) { super(parent, img); } @@ -53,18 +56,21 @@ protected final void camInit(PApplet parent) { // Second time with bufferSource. tex = ((PGraphicsOpenGL) parent.g).getTexture(this); -// imageBuffer = ByteBuffer.allocateDirect(this.pixels.length); + argbBuffer = ByteBuffer.allocateDirect(this.pixels.length * 4); } @Override public void update(opencv_core.IplImage iplImage) { Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); - ByteBuffer buffer = iplImage.getByteBuffer(); + ByteBuffer imageBuffer = iplImage.getByteBuffer(); + + // P5 does not know real Gray textures, we need to convert it... + Utils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); // Utils.byteBufferBRGtoARGB(bgrBuffer, argbBuffer); - tex.copyBufferFromSource(null, buffer, width, height); - buffer.rewind(); + tex.copyBufferFromSource(null, argbBuffer, width, height); + imageBuffer.rewind(); } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index ecc92e63..b39a42f0 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -39,6 +39,7 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { } Camera camera; + CameraRealSense camRS; switch (type) { case OPENCV: camera = new CameraOpenCV(cameraNo); @@ -53,7 +54,9 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { camera = new CameraOpenCVDepth(cameraNo); break; case REALSENSE: - camera = new CameraRealSense(cameraNo); + camRS = new CameraRealSense(cameraNo); + camRS.useColor(true); + camera = camRS; break; case OPEN_KINECT: camera = new CameraOpenKinect(cameraNo); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index bbd08ae0..97991cdf 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -38,7 +38,11 @@ public class CameraRealSense extends Camera { protected RealSenseFrameGrabber grabber; protected CameraRealSenseDepth depthCamera; + protected CameraRealSenseColor colorCamera; + protected CameraRealSenseIR IRCamera; + private boolean useIR = true; private boolean useDepth = true; + private boolean useColor = true; protected CameraRealSense(int cameraNo) { try { @@ -47,18 +51,23 @@ protected CameraRealSense(int cameraNo) { Logger.getLogger(CameraRealSense.class.getName()).log(Level.SEVERE, null, ex); } this.systemNumber = cameraNo; - setPixelFormat(PixelFormat.RGB); + grabber = new RealSenseFrameGrabber(this.systemNumber); + depthCamera = new CameraRealSenseDepth(this); + colorCamera = new CameraRealSenseColor(this); + IRCamera = new CameraRealSenseIR(this); } - + @Override - public void setParent(PApplet parent){ + public void setParent(PApplet parent) { super.setParent(parent); depthCamera.setParent(parent); + IRCamera.setParent(parent); + colorCamera.setParent(parent); } - - public RealSenseFrameGrabber getFrameGrabber(){ + + public RealSenseFrameGrabber getFrameGrabber() { return this.grabber; } @@ -66,44 +75,52 @@ public CameraRealSenseDepth getDepthCamera() { return this.depthCamera; } + public CameraRealSenseIR getIRCamera() { + return this.IRCamera; + } + + public CameraRealSenseColor getColorCamera() { + return this.colorCamera; + } + public PMatrix3D getHardwareExtrinsics() { RealSense.extrinsics extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.color, RealSense.depth); FloatBuffer fb = extrinsics.position(0).asByteBuffer().asFloatBuffer(); return new PMatrix3D( - fb.get(0),fb.get(3),fb.get(6), -fb.get(9) * 1000f, - fb.get(1),fb.get(4),fb.get(7), fb.get(10)* 1000f, - fb.get(2),fb.get(5),fb.get(8), fb.get(11)* 1000f, + fb.get(0), fb.get(3), fb.get(6), -fb.get(9) * 1000f, + fb.get(1), fb.get(4), fb.get(7), fb.get(10) * 1000f, + fb.get(2), fb.get(5), fb.get(8), fb.get(11) * 1000f, 0, 0, 0, 1); } - - public void useHarwareIntrinsics(){ - RealSense.intrinsics intrinsics = grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.color); - FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); - float cx = fb.get(2); - float cy = fb.get(3); - float fx = fb.get(4); - float fy = fb.get(5); - this.setSimpleCalibration(fx, fy, cx, cy, this.width, this.height); + + public void useDepth(boolean useDepth) { + this.useDepth = useDepth; } - - public float getDepthScale() { - return grabber.getDepthScale(); + public void useIR(boolean useIR) { + this.useIR = useIR; } - public void useDepth(boolean useDepth) { - this.useDepth = useDepth; + public void useColor(boolean useColor) { + this.useColor = useColor; + } + + public void setSize(int w, int h) { + colorCamera.setSize(w, h); } @Override public void start() { - grabber.setImageWidth(width()); - grabber.setImageHeight(height()); - grabber.enableColorStream(); if (useDepth) { depthCamera.start(); } + if (useColor) { + colorCamera.start(); + } + if (useIR) { + IRCamera.start(); + } try { grabber.start(); @@ -129,15 +146,20 @@ public void grab() { grabber.grab(); // get the color - IplImage img = grabber.grabVideo(); +// IplImage img = grabber.grabVideo(); // updateCurrentImage(img); - - currentImage = img; - +// currentImage = img; +// Auto grab ? +// if (useDepth) { -// depthCamera.grab(); + depthCamera.grab(); + } + if (useColor) { + colorCamera.grab(); + } + if (useIR) { + IRCamera.grab(); } - } catch (Exception e) { System.out.println("Exception :" + e); e.printStackTrace(); @@ -152,43 +174,22 @@ public PImage getDepthPImage() { return depthCamera.getPImage(); } -// public void grab() { -// System.out.println("Wait for frames..."); -// device.wait_for_frames(); -// System.out.println("frames ok"); -// testImage.loadPixels(); -// int[] pixels = testImage.pixels; -// -//// float scale = device.get_depth_scale(); -//// Pointer data = (Pointer) device.get_frame_data(RealSense.depth); -//// ShortBuffer bb = data.position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); -//// System.out.println("Sizes: " + pixels.length + " " + bb.limit()); -// -//// for (int i = 0; i < bb.capacity(); i++) { -//// float value = bb.get(i); -//// pixels[i] = (int) (value * scale * 1000f); -//// } -// -// Pointer data_color = (Pointer) device.get_frame_data(RealSense.color); -// ByteBuffer bb_color = data_color.position(0).limit(640 * 480 * 3).asByteBuffer(); -// -// System.out.println("Sizes " + bb_color.capacity() + " " + pixels.length * 3); -// -// for (int i = 0; i < bb_color.capacity() / 3; i++) { -// pixels[i] = (bb_color.get(i*3 + 0) & 0xFF) >> 0 | -// (bb_color.get(i*3 + 1) & 0xFF) << 8 | -// (bb_color.get(i*3 + 2) & 0xFF) << 16; -// } -// testImage.updatePixels(); -// } + public PImage getColorImage() { + return colorCamera.getPImage(); + } + + public PImage getIRImage() { + return IRCamera.getPImage(); + } + @Override public PImage getPImage() { - this.checkCamImage(); - if (currentImage != null) { - camImage.update(currentImage); - return camImage; + if (useColor) { + return colorCamera.getPImage(); + } + if (useDepth) { + return IRCamera.getPImage(); } - // TODO: exceptions !!! return null; } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java new file mode 100755 index 00000000..ea03afef --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java @@ -0,0 +1,92 @@ +/* + * Part of the PapARt project - https://project.inria.fr/papart/ + * + * Copyright (C) 2014-2016 Inria + * Copyright (C) 2011-2013 Bordeaux University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; If not, see + * . + */ +package fr.inria.papart.procam.camera; + +import java.nio.FloatBuffer; +import org.bytedeco.javacpp.RealSense; +import processing.core.PImage; + +/** + * + * @author Jeremy Laviole + */ +public class CameraRealSenseColor extends Camera { + + CameraRealSense mainCamera; + + protected CameraRealSenseColor(CameraRealSense mainCamera) { + setPixelFormat(PixelFormat.RGB); + this.mainCamera = mainCamera; + } + + public void useHarwareIntrinsics() { + RealSense.intrinsics intrinsics = mainCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.color); + FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); + float cx = fb.get(2); + float cy = fb.get(3); + float fx = fb.get(4); + float fy = fb.get(5); + setSimpleCalibration(fx, fy, cx, cy, width(), height()); + } + + @Override + public void start() { + mainCamera.grabber.setImageWidth(width()); + mainCamera.grabber.setImageHeight(height()); + mainCamera.grabber.enableColorStream(); + this.isConnected = true; + } + + @Override + public void grab() { + if (this.isClosing()) { + return; + } + // update the images. + try { + System.out.println("Grabbing color"); + currentImage = mainCamera.grabber.grabVideo(); + + } catch (Exception e) { + System.out.println("Exception :" + e); + e.printStackTrace(); + } + } + + @Override + public PImage getPImage() { + this.checkCamImage(); + if (currentImage != null) { + camImage.update(currentImage); + return camImage; + } + // TODO: exceptions !!! + return null; + } + + @Override + public void close() { + this.setClosing(); + mainCamera.useColor(false); + mainCamera.grabber.disableColorStream(); + + } + +} diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java index cf42ac2c..bbf92404 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java @@ -30,15 +30,15 @@ */ public class CameraRealSenseDepth extends Camera implements WithTouchInput { - CameraRealSense colorCamera; + CameraRealSense mainCamera; private KinectTouchInput touchInput; protected CameraRealSenseDepth(CameraRealSense colorCamera) { - this.colorCamera = colorCamera; + this.mainCamera = colorCamera; } public void useHarwareIntrinsics() { - RealSense.intrinsics intrinsics = colorCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.depth); + RealSense.intrinsics intrinsics = mainCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.depth); FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); float cx = fb.get(2); float cy = fb.get(3); @@ -49,12 +49,16 @@ public void useHarwareIntrinsics() { @Override public void start() { - colorCamera.grabber.setDepthImageWidth(width()); - colorCamera.grabber.setDepthImageHeight(height()); - colorCamera.grabber.enableDepthStream(); + mainCamera.grabber.setDepthImageWidth(width()); + mainCamera.grabber.setDepthImageHeight(height()); + mainCamera.grabber.enableDepthStream(); this.isConnected = true; } + public float getDepthScale() { + return mainCamera.grabber.getDepthScale(); + } + @Override public void grab() { if (this.isClosing()) { @@ -62,11 +66,11 @@ public void grab() { } // update the images. try { - currentImage = colorCamera.grabber.grabDepth(); + currentImage = mainCamera.grabber.grabDepth(); if (touchInput != null) { touchInput.lock(); touchInput.update(); - touchInput.getTouch2DColors(colorCamera.currentImage); + touchInput.getTouch2DColors(mainCamera.currentImage); touchInput.unlock(); } else if (touchInput != null) { System.err.println("Error, the TouchInput is set, but no DepthImg is grabbed."); @@ -101,8 +105,8 @@ public void setTouchInput(KinectTouchInput touchInput) { @Override public void close() { this.setClosing(); - colorCamera.useDepth(false); - colorCamera.grabber.disableDepthStream(); + mainCamera.useDepth(false); + mainCamera.grabber.disableDepthStream(); } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java new file mode 100755 index 00000000..4b0fa661 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java @@ -0,0 +1,92 @@ +/* + * Part of the PapARt project - https://project.inria.fr/papart/ + * + * Copyright (C) 2014-2016 Inria + * Copyright (C) 2011-2013 Bordeaux University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; If not, see + * . + */ +package fr.inria.papart.procam.camera; + +import java.nio.FloatBuffer; +import org.bytedeco.javacpp.RealSense; +import processing.core.PImage; + +/** + * + * @author Jeremy Laviole + */ +public class CameraRealSenseIR extends Camera { + + CameraRealSense colorCamera; + + protected CameraRealSenseIR(CameraRealSense colorCamera) { + this.colorCamera = colorCamera; + this.width = 640; + this.height = 480; + setPixelFormat(PixelFormat.GRAY); + } + + public void useHarwareIntrinsics() { + RealSense.intrinsics intrinsics = colorCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.infrared); + FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); + float cx = fb.get(2); + float cy = fb.get(3); + float fx = fb.get(4); + float fy = fb.get(5); + setSimpleCalibration(fx, fy, cx, cy, width(), height()); + } + + @Override + public void start() { + colorCamera.grabber.setIRImageWidth(width()); + colorCamera.grabber.setIRImageHeight(height()); + colorCamera.grabber.enableIRStream(); + this.isConnected = true; + } + + @Override + public void grab() { + if (this.isClosing()) { + return; + } + // update the images. + try { + currentImage = colorCamera.grabber.grabIR(); + } catch (Exception e) { + System.out.println("Exception :" + e); + e.printStackTrace(); + } + } + + @Override + public PImage getPImage() { + this.checkCamImage(); + if (currentImage != null) { + camImage.update(currentImage); + return camImage; + } + // TODO: exceptions !!! + return null; + } + + @Override + public void close() { + this.setClosing(); + colorCamera.useIR(false); + colorCamera.grabber.disableIRStream(); + + } + +} From c6533ddb95bc770fc18e1f6e65c5f6fc1646e23a Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 26 Oct 2016 17:52:08 +0200 Subject: [PATCH 16/99] Depth working also. --- papart/src/fr/inria/papart/procam/Utils.java | 12 ++++++++++++ .../fr/inria/papart/procam/camera/CamImageGray.java | 10 +++++++++- papart/src/fr/inria/papart/procam/camera/Camera.java | 3 ++- .../papart/procam/camera/CameraRealSenseDepth.java | 2 ++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index ea5a89f8..45a1f089 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -623,6 +623,18 @@ static public void byteBufferGRAYtoARGB(ByteBuffer gray, ByteBuffer argb) { } argb.rewind(); } + static public void byteBufferZ16toARGB(ByteBuffer gray, ByteBuffer argb) { + byte[] tmpArr = new byte[2]; + + for (int i = 0; i < gray.capacity(); i +=2) { + gray.get(tmpArr); + argb.put(tmpArr[0]); + argb.put(tmpArr[1]); + argb.put((byte) 128); + argb.put((byte) 255); + } + argb.rewind(); + } // TODO private static byte[] kinectByteArray = null; diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index 59b71fba..eba92d9b 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -56,6 +56,7 @@ protected final void camInit(PApplet parent) { // Second time with bufferSource. tex = ((PGraphicsOpenGL) parent.g).getTexture(this); + System.out.println("Allocating.. " + this.pixels.length * 4); argbBuffer = ByteBuffer.allocateDirect(this.pixels.length * 4); } @@ -65,8 +66,15 @@ public void update(opencv_core.IplImage iplImage) { Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); ByteBuffer imageBuffer = iplImage.getByteBuffer(); + + if(incomingFormat == PixelFormat.GRAY){ // P5 does not know real Gray textures, we need to convert it... - Utils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); + Utils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); + } + if(incomingFormat == PixelFormat.REALSENSE_Z16){ + + Utils.byteBufferZ16toARGB(imageBuffer, argbBuffer); + } // Utils.byteBufferBRGtoARGB(bgrBuffer, argbBuffer); tex.copyBufferFromSource(null, argbBuffer, width, height); diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index e31b0122..5e9fb625 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -71,7 +71,7 @@ public enum Type { public enum PixelFormat { - RGB, BGR, ARGB, RGBA, GRAY, DEPTH_KINECT_MM, DEPTH_KINECT_RAW + RGB, BGR, ARGB, RGBA, GRAY, DEPTH_KINECT_MM, DEPTH_KINECT_RAW, REALSENSE_Z16 } protected PixelFormat format; @@ -389,6 +389,7 @@ protected void checkCamImage() { protected boolean isPixelFormatGray() { PixelFormat pixelFormat = getPixelFormat(); return pixelFormat == PixelFormat.GRAY + || pixelFormat == PixelFormat.REALSENSE_Z16 || pixelFormat == PixelFormat.DEPTH_KINECT_MM || pixelFormat == PixelFormat.DEPTH_KINECT_RAW; } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java index bbf92404..a840f98b 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java @@ -34,7 +34,9 @@ public class CameraRealSenseDepth extends Camera implements WithTouchInput { private KinectTouchInput touchInput; protected CameraRealSenseDepth(CameraRealSense colorCamera) { + setPixelFormat(PixelFormat.REALSENSE_Z16); this.mainCamera = colorCamera; + this.setSize(640, 480); } public void useHarwareIntrinsics() { From 0eba0703916e51fddd07f85add3288dccbf496a7 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 27 Oct 2016 11:35:39 +0200 Subject: [PATCH 17/99] Working version -> Depth + Color + IR with realsense. --- .../analysis/KinectDepthAnalysis.java | 14 +++--- .../depthcam/analysis/KinectProcessing.java | 7 +-- .../papart/depthcam/devices/RealSense.java | 50 +++++++------------ .../papart/procam/camera/CamImageGray.java | 18 +++---- .../procam/camera/CameraRealSenseColor.java | 9 ++-- .../procam/camera/CameraRealSenseDepth.java | 5 ++ .../procam/camera/CameraRealSenseIR.java | 23 +++++---- 7 files changed, 58 insertions(+), 68 deletions(-) diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index dc33fa99..59c43dd1 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 Jérémy Laviole * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -19,7 +20,6 @@ */ package fr.inria.papart.depthcam.analysis; -import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.calibration.PlaneAndProjectionCalibration; import fr.inria.papart.depthcam.PixelOffset; import fr.inria.papart.depthcam.TouchAttributes; @@ -32,9 +32,6 @@ import fr.inria.papart.depthcam.devices.RealSense; import fr.inria.papart.procam.ProjectiveDeviceP; import fr.inria.papart.procam.Utils; -import fr.inria.papart.procam.camera.Camera; -import fr.inria.papart.procam.camera.CameraOpenKinect; -import fr.inria.papart.procam.camera.CameraRealSense; import fr.inria.papart.procam.camera.CameraRealSenseDepth; import java.nio.ByteBuffer; import java.nio.ShortBuffer; @@ -48,7 +45,6 @@ import org.bytedeco.javacpp.opencv_core; import org.bytedeco.javacpp.opencv_core.IplImage; import processing.core.PApplet; -import processing.core.PMatrix3D; import processing.core.PVector; import toxi.geom.Vec3D; @@ -65,6 +61,7 @@ public class KinectDepthAnalysis extends DepthAnalysis { // private variables // Raw data from the Kinect Sensor protected ShortBuffer depthRawShortBuffer; + protected ByteBuffer depthRawBuffer; protected byte[] depthRaw; protected byte[] colorRaw; @@ -125,7 +122,7 @@ private void initMemory() { depthComputationMethod = new KinectOneDepth(); } if (kinectDevice instanceof RealSense) { - float depthScale = ((CameraRealSenseDepth)((RealSense) kinectDevice).getCameraDepth()).getDepthScale(); + float depthScale = ((CameraRealSenseDepth) ((RealSense) kinectDevice).getCameraDepth()).getDepthScale(); depthComputationMethod = new RealSenseDepth(depthScale); } @@ -293,9 +290,12 @@ protected void doForEachValid3DPoint(int precision, DepthPointManiplation manip) } } + // WARNING MAGIC NUMBER protected void updateRawDepth(opencv_core.IplImage depthImage) { if (kinectDevice().type() == KinectDevice.Type.REALSENSE) { - depthRawShortBuffer = depthImage.imageData().position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); +// depthRawShortBuffer = depthImage.imageData().position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); + depthRawBuffer = depthImage.getByteBuffer(); + depthRawShortBuffer = depthRawBuffer.asShortBuffer(); } else { depthImage.getByteBuffer().get(depthRaw); } diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java index 675730a8..e4e59684 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 Jérémy Laviole * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -19,23 +20,17 @@ */ package fr.inria.papart.depthcam.analysis; -import static fr.inria.papart.depthcam.analysis.DepthAnalysis.papplet; -import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.calibration.PlaneAndProjectionCalibration; -import fr.inria.papart.calibration.PlaneCalibration; import fr.inria.papart.depthcam.PixelOffset; import fr.inria.papart.depthcam.devices.KinectDevice; import fr.inria.papart.depthcam.devices.KinectOne; import static fr.inria.papart.depthcam.analysis.DepthAnalysis.papplet; -import fr.inria.papart.procam.camera.CameraOpenKinect; import java.util.ArrayList; import java.util.Arrays; -import org.bytedeco.javacpp.indexer.Indexer; import org.bytedeco.javacpp.indexer.UByteIndexer; import org.bytedeco.javacpp.opencv_core; import static org.bytedeco.javacpp.opencv_core.*; import static org.bytedeco.javacpp.opencv_imgproc.*; -import org.bytedeco.javacpp.opencv_core.CvSize; import org.bytedeco.javacpp.opencv_core.IplImage; import processing.core.PApplet; import processing.core.PConstants; diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index c90982e1..74d31c10 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 Jérémy Laviole * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -23,8 +24,6 @@ import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraFactory; -import fr.inria.papart.procam.camera.CameraOpenCVDepth; -import fr.inria.papart.procam.camera.CameraOpenKinectDepth; import fr.inria.papart.procam.camera.CameraRealSense; import fr.inria.papart.procam.camera.CameraRealSenseColor; import fr.inria.papart.procam.camera.CameraRealSenseDepth; @@ -53,29 +52,13 @@ public RealSense(PApplet parent) { setStereoCalibration(cameraRS.getHardwareExtrinsics()); cameraColor.useHarwareIntrinsics(); cameraDepth.useHarwareIntrinsics(); + cameraIR.useHarwareIntrinsics(); } public RealSense(PApplet parent, CameraRealSense cameraRGB) { throw new UnsupportedOperationException("Not supported yet: RealSense(PApplet parent, CameraRealSense cameraRGB)"); -// initSize(); -// this.parent = parent; -// this.cameraRGB = cameraRGB; -// -// cameraDepth = cameraRGB.getDepthCamera(); -// cameraDepth.setParent(parent); -// // TODO: calibration... -// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); -// -// // TODO: get the extrinsics ! -// setStereoCalibration(cameraRGB.getHardwareExtrinsics()); -//// setStereoCalibration(Papart.kinectStereoCalib); } - public static final int CAMERA_WIDTH = 640; - public static final int CAMERA_HEIGHT = 480; - -// public static final int CAMERA_WIDTH_RGB = 1920; -// public static final int CAMERA_HEIGHT_RGB = 1080; private void initSize() { // IR and Depth image size WIDTH = 640; @@ -96,7 +79,6 @@ public void close() { final void initCameras() { // Check if it is the default camera... Papart papart = Papart.getPapart(); - if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE) { System.out.println("REALSENSE: Using configuration ID & Resolution."); // use the ID @@ -109,7 +91,6 @@ final void initCameras() { cameraColor.setCalibration(Papart.cameraCalib); } else { - System.out.println("REALSENSE: Using DEFAULT configuration."); cameraRS = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); cameraRS.setParent(parent); @@ -120,28 +101,31 @@ final void initCameras() { cameraDepth = cameraRS.getDepthCamera(); cameraDepth.setSize(WIDTH, HEIGHT); + + cameraIR = cameraRS.getIRCamera(); + cameraIR.setSize(WIDTH, HEIGHT); } - - final void initIR() { - // NO IR yet. - -// cameraIR = CameraFactory.createCamera(Camera.Type.OPENCV, 1); -// cameraIR.setParent(parent); -//// cameraIR.setSize(WIDTH, HEIGHT); -// cameraIR.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); -// cameraIR.start(); + + public void grab(){ + cameraRS.grab(); + } + + public CameraRealSense getMainCamera(){ + return cameraRS; } @Override - public Camera getCameraRGB() { + public CameraRealSenseColor getCameraRGB() { return cameraColor; } - public Camera getCameraIR() { + @Override + public CameraRealSenseIR getCameraIR() { return cameraIR; } - public Camera getCameraDepth() { + @Override + public CameraRealSenseDepth getCameraDepth() { return cameraDepth; } diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index eba92d9b..839373da 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 Jérémy Laviole * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -35,7 +36,7 @@ public class CamImageGray extends CamImage { protected ByteBuffer argbBuffer; - + public CamImageGray(PApplet parent, Image img) { super(parent, img); } @@ -56,8 +57,7 @@ protected final void camInit(PApplet parent) { // Second time with bufferSource. tex = ((PGraphicsOpenGL) parent.g).getTexture(this); - System.out.println("Allocating.. " + this.pixels.length * 4); - argbBuffer = ByteBuffer.allocateDirect(this.pixels.length * 4); + argbBuffer = ByteBuffer.allocateDirect(this.pixels.length * 4); } @Override @@ -66,16 +66,14 @@ public void update(opencv_core.IplImage iplImage) { Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); ByteBuffer imageBuffer = iplImage.getByteBuffer(); - - if(incomingFormat == PixelFormat.GRAY){ - // P5 does not know real Gray textures, we need to convert it... + if (incomingFormat == PixelFormat.GRAY) { + // P5 does not know real Gray textures, we need to convert it... Utils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); - } - if(incomingFormat == PixelFormat.REALSENSE_Z16){ - + } + if (incomingFormat == PixelFormat.REALSENSE_Z16) { Utils.byteBufferZ16toARGB(imageBuffer, argbBuffer); } - + // Utils.byteBufferBRGtoARGB(bgrBuffer, argbBuffer); tex.copyBufferFromSource(null, argbBuffer, width, height); imageBuffer.rewind(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java index ea03afef..cbd52e9f 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 Jérémy Laviole * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -29,12 +30,16 @@ */ public class CameraRealSenseColor extends Camera { - CameraRealSense mainCamera; + private CameraRealSense mainCamera; protected CameraRealSenseColor(CameraRealSense mainCamera) { setPixelFormat(PixelFormat.RGB); this.mainCamera = mainCamera; } + + public CameraRealSense getMainCamera(){ + return mainCamera; + } public void useHarwareIntrinsics() { RealSense.intrinsics intrinsics = mainCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.color); @@ -61,9 +66,7 @@ public void grab() { } // update the images. try { - System.out.println("Grabbing color"); currentImage = mainCamera.grabber.grabVideo(); - } catch (Exception e) { System.out.println("Exception :" + e); e.printStackTrace(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java index a840f98b..ed6f3018 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 Jérémy Laviole * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -39,6 +40,10 @@ protected CameraRealSenseDepth(CameraRealSense colorCamera) { this.setSize(640, 480); } + public CameraRealSense getMainCamera() { + return mainCamera; + } + public void useHarwareIntrinsics() { RealSense.intrinsics intrinsics = mainCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.depth); FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java index 4b0fa661..b6a62653 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 Jérémy Laviole * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -29,17 +30,21 @@ */ public class CameraRealSenseIR extends Camera { - CameraRealSense colorCamera; + CameraRealSense mainCamera; protected CameraRealSenseIR(CameraRealSense colorCamera) { - this.colorCamera = colorCamera; + this.mainCamera = colorCamera; this.width = 640; this.height = 480; setPixelFormat(PixelFormat.GRAY); } + public CameraRealSense getMainCamera() { + return mainCamera; + } + public void useHarwareIntrinsics() { - RealSense.intrinsics intrinsics = colorCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.infrared); + RealSense.intrinsics intrinsics = mainCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.infrared); FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); float cx = fb.get(2); float cy = fb.get(3); @@ -50,9 +55,9 @@ public void useHarwareIntrinsics() { @Override public void start() { - colorCamera.grabber.setIRImageWidth(width()); - colorCamera.grabber.setIRImageHeight(height()); - colorCamera.grabber.enableIRStream(); + mainCamera.grabber.setIRImageWidth(width()); + mainCamera.grabber.setIRImageHeight(height()); + mainCamera.grabber.enableIRStream(); this.isConnected = true; } @@ -63,7 +68,7 @@ public void grab() { } // update the images. try { - currentImage = colorCamera.grabber.grabIR(); + currentImage = mainCamera.grabber.grabIR(); } catch (Exception e) { System.out.println("Exception :" + e); e.printStackTrace(); @@ -84,8 +89,8 @@ public PImage getPImage() { @Override public void close() { this.setClosing(); - colorCamera.useIR(false); - colorCamera.grabber.disableIRStream(); + mainCamera.useIR(false); + mainCamera.grabber.disableIRStream(); } From 9158d6167dd9396b601e0f7eebc245aed0c107f6 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 27 Oct 2016 14:29:26 +0200 Subject: [PATCH 18/99] RealSenseCamera AR --- .../papart/calibration/CalibrationPopup.java | 2 +- .../calibration/CalibrationVideoPopup.java | 2 +- .../papart/depthcam/devices/Kinect360.java | 10 + .../papart/depthcam/devices/KinectDevice.java | 12 - .../depthcam/devices/RealSense-TMP.java | 173 --------- .../papart/depthcam/devices/RealSense.java | 36 +- papart/src/fr/inria/papart/procam/Papart.java | 107 +++--- .../fr/inria/papart/procam/PaperScreen.java | 4 +- .../inria/papart/procam/PaperTouchScreen.java | 6 +- .../fr/inria/papart/procam/camera/Camera.java | 24 +- .../papart/procam/camera/CameraFactory.java | 15 +- .../papart/procam/camera/CameraRealSense.java | 333 ++++++++++++++++-- .../procam/camera/CameraRealSenseColor.java | 1 + .../papart/procam/camera/CameraThread.java | 23 +- 14 files changed, 425 insertions(+), 323 deletions(-) delete mode 100644 papart/src/fr/inria/papart/depthcam/devices/RealSense-TMP.java diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index 0ecc84d2..66cc6dc0 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -127,7 +127,7 @@ public void setup() { calibrationApp.pre(); board = calibrationApp.getBoard(); - cameraTracking = Papart.getPapart().getCameraTracking(); + cameraTracking = Papart.getPapart().getPublicCameraTracking(); projector = Papart.getPapart().getProjectorDisplay(); projector.setCalibrationMode(true); diff --git a/papart/src/fr/inria/papart/calibration/CalibrationVideoPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationVideoPopup.java index 7c6c9de4..565cfa27 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationVideoPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationVideoPopup.java @@ -63,7 +63,7 @@ public void setSize() { frame.setUndecorated(true); frame.addNotify(); // surface.setLocation(screenOffsetX, screenOffsetY); - cameraTracking = Papart.getPapart().getCameraTracking(); + cameraTracking = Papart.getPapart().getPublicCameraTracking(); surface.setSize(cameraTracking.width(), cameraTracking.height()); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java index 310a8690..e7b11f63 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java +++ b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java @@ -49,6 +49,16 @@ public Kinect360(PApplet parent) { setStereoCalibration(Papart.kinectStereoCalib); camera.start(); } + public Kinect360(PApplet parent, CameraOpenKinect camera) { + initSizes(parent); + this.camera = camera; +// camera = (CameraOpenKinect) CameraFactory.createCamera(Camera.Type.OPEN_KINECT, 0); +// camera.setParent(parent); +// camera.setCalibration(Papart.kinectRGBCalib); + camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); + setStereoCalibration(Papart.kinectStereoCalib); + camera.start(); + } private void initSizes(PApplet parent) { this.parent = parent; diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java index 1c9c7b5c..8858b28e 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java @@ -74,18 +74,6 @@ public void close() { getCameraRGB().close(); } - public static KinectDevice createKinect360(PApplet parent) { - return new Kinect360(parent); - } - - public static KinectDevice createKinectOne(PApplet parent) { - return new KinectOne(parent); - } - - public static KinectDevice createRealSense(PApplet parent) { - return new RealSense(parent); - } - public void setStereoCalibration(String fileName) { HomographyCalibration calib = new HomographyCalibration(); calib.loadFrom(parent, fileName); diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense-TMP.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense-TMP.java deleted file mode 100644 index 6db08abe..00000000 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense-TMP.java +++ /dev/null @@ -1,173 +0,0 @@ -///* -// * Part of the PapARt project - https://project.inria.fr/papart/ -// * -// * Copyright (C) 2014-2016 Inria -// * Copyright (C) 2011-2013 Bordeaux University -// * -// * This library is free software; you can redistribute it and/or -// * modify it under the terms of the GNU Lesser General Public -// * License as published by the Free Software Foundation, version 2.1. -// * -// * This library is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// * Lesser General Public License for more details. -// * -// * You should have received a copy of the GNU Lesser General -// * Public License along with this library; If not, see -// * . -// */ -//package fr.inria.papart.depthcam.devices; -// -//import fr.inria.papart.multitouch.KinectTouchInput; -//import fr.inria.papart.procam.Papart; -//import fr.inria.papart.procam.camera.Camera; -//import fr.inria.papart.procam.camera.CameraFactory; -//import fr.inria.papart.procam.camera.CameraOpenCVDepth; -//import fr.inria.papart.procam.camera.CameraOpenKinectDepth; -//import fr.inria.papart.procam.camera.CameraRealSense; -//import fr.inria.papart.procam.camera.CameraRealSenseDepth; -//import processing.core.PApplet; -// -///** -// * -// * @author Jeremy Laviole -// */ -//public final class RealSense extends KinectDevice { -// -// protected CameraRealSense cameraRGB; -// protected CameraRealSenseDepth cameraDepth; -// -// public RealSense(PApplet parent) { -// initSize(); -// this.parent = parent; -// initRGB(); -// -// cameraRGB.start(); -// -// cameraDepth = cameraRGB.getDepthCamera(); -// -// // TODO: setSize is not working on camera side... -// cameraDepth.setSize(WIDTH, HEIGHT); -// cameraDepth.setParent(parent); -// -// // TODO: calibration... -//// cameraDepth.useHarwareIntrinsics(); -// -// // get the stereo ? -// setStereoCalibration(cameraRGB.getHardwareExtrinsics()); -//// setStereoCalibration(Papart.kinectStereoCalib); -// -// cameraRGB.useHarwareIntrinsics(); -// cameraDepth.useHarwareIntrinsics(); -// -//// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); -// -//// cameraRGB.getProjectiveDevice().getIntrinsics().print(); -// -// // Warning Start both depth & color camera for now. -// -// } -// -// public RealSense(PApplet parent, CameraRealSense cameraRGB) { -// throw new UnsupportedOperationException("Not supported yet: RealSense(PApplet parent, CameraRealSense cameraRGB)"); -//// initSize(); -//// this.parent = parent; -//// this.cameraRGB = cameraRGB; -//// -//// cameraDepth = cameraRGB.getDepthCamera(); -//// cameraDepth.setParent(parent); -//// // TODO: calibration... -//// cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); -//// -//// // TODO: get the extrinsics ! -//// setStereoCalibration(cameraRGB.getHardwareExtrinsics()); -////// setStereoCalibration(Papart.kinectStereoCalib); -// } -// -// public static final int CAMERA_WIDTH = 640; -// public static final int CAMERA_HEIGHT = 480; -// -//// public static final int CAMERA_WIDTH_RGB = 1920; -//// public static final int CAMERA_HEIGHT_RGB = 1080; -// -// private void initSize() { -// // IR and Depth image size -// WIDTH = 640; -// HEIGHT = 480; -// SIZE = WIDTH * HEIGHT; -// -// // RGB image size -// RGB_WIDTH = 960; -// RGB_HEIGHT = 540; -// RGB_SIZE = RGB_WIDTH * RGB_HEIGHT; -// } -// -// public void close() { -// cameraRGB.close(); -// cameraDepth.close(); -// } -// -// final void initRGB() { -// // Check if it is the default camera... -// Papart papart = Papart.getPapart(); -// -// if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE) { -// System.out.println("REALSENSE: Using configuration ID & Resolution."); -// // use the ID -// int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); -// -// cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, id); -// cameraRGB.setParent(parent); -// // use the calibration -// cameraRGB.setCalibration(Papart.cameraCalib); -// } else { -// -// System.out.println("REALSENSE: Using DEFAULT configuration."); -// cameraRGB = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); -// cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); -// cameraRGB.setParent(parent); -// cameraRGB.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); -// } -// -// } -// -// final void initIR() { -// // NO IR yet. -// -//// cameraIR = CameraFactory.createCamera(Camera.Type.OPENCV, 1); -//// cameraIR.setParent(parent); -////// cameraIR.setSize(WIDTH, HEIGHT); -//// cameraIR.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); -//// cameraIR.start(); -// } -// -// @Override -// public Camera getCameraRGB() { -// return cameraRGB; -// } -// -// public Camera getCameraIR() { -// throw new UnsupportedOperationException("Not supported yet."); -// } -// -// public Camera getCameraDepth() { -// return cameraDepth; -// } -// -// @Override -// public int rawDepthSize() { -// return SIZE * 2; -// } -// -// @Override -// public void setTouch(KinectTouchInput kinectTouchInput) { -// cameraDepth.setTouchInput(kinectTouchInput); -// } -// -// @Override -// public Type type() { -// return Type.REALSENSE; -// } -// -//} diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 74d31c10..cbe36179 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -56,7 +56,23 @@ public RealSense(PApplet parent) { } public RealSense(PApplet parent, CameraRealSense cameraRGB) { - throw new UnsupportedOperationException("Not supported yet: RealSense(PApplet parent, CameraRealSense cameraRGB)"); + initSize(); + this.parent = parent; + + cameraColor = cameraRS.getColorCamera(); + cameraDepth = cameraRS.getDepthCamera(); + cameraIR = cameraRS.getIRCamera(); + + cameraDepth.setSize(WIDTH, HEIGHT); + cameraIR.setSize(WIDTH, HEIGHT); + + // Warning Start both depth & color camera for now. + cameraRS.start(); + + setStereoCalibration(cameraRS.getHardwareExtrinsics()); + cameraColor.useHarwareIntrinsics(); + cameraDepth.useHarwareIntrinsics(); + cameraIR.useHarwareIntrinsics(); } private void initSize() { @@ -79,19 +95,15 @@ public void close() { final void initCameras() { // Check if it is the default camera... Papart papart = Papart.getPapart(); - if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE) { + if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE_RGB) { System.out.println("REALSENSE: Using configuration ID & Resolution."); // use the ID int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); - cameraRS = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, id); - cameraRS.setParent(parent); - cameraColor = cameraRS.getColorCamera(); cameraColor.setCalibration(Papart.cameraCalib); } else { - - cameraRS = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE, 0); + cameraRS = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE_RGB, 0); cameraRS.setParent(parent); cameraColor = cameraRS.getColorCamera(); @@ -101,16 +113,16 @@ final void initCameras() { cameraDepth = cameraRS.getDepthCamera(); cameraDepth.setSize(WIDTH, HEIGHT); - + cameraIR = cameraRS.getIRCamera(); cameraIR.setSize(WIDTH, HEIGHT); } - - public void grab(){ + + public void grab() { cameraRS.grab(); } - - public CameraRealSense getMainCamera(){ + + public CameraRealSense getMainCamera() { return cameraRS; } diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 2e69bb5b..4e8c55a0 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -41,6 +41,7 @@ import fr.inria.papart.multitouch.TUIOTouchInput; import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.camera.CameraFactory; +import fr.inria.papart.procam.camera.CameraOpenKinect; import fr.inria.papart.procam.camera.CameraRealSense; import java.io.File; import java.lang.reflect.Constructor; @@ -298,19 +299,6 @@ public static Papart projection2D(PApplet applet) { return papart; } - public static KinectDevice loadDefaultKinectDevice(PApplet applet) { - CameraConfiguration kinectConfiguration = Papart.getDefaultKinectConfiguration(applet); - - if (kinectConfiguration.getCameraType() == Camera.Type.OPEN_KINECT) { - return new Kinect360(applet); - } - if (kinectConfiguration.getCameraType() == Camera.Type.KINECT2_RGB) { - return new KinectOne(applet); - } - System.err.println("Papart: Could not identify default Kinect Device."); - return null; - } - private boolean shouldSetWindowLocation = false; private boolean shouldSetWindowSize = false; @@ -539,7 +527,7 @@ public PlaneCalibration getTablePlane() { */ public void moveToTablePosition(PaperScreen paperScreen) { paperScreen.useManualLocation(true); - paperScreen.screen.setMainLocation(HomographyCalibration.getMatFrom(applet, tablePosition), cameraTracking); + paperScreen.screen.setMainLocation(HomographyCalibration.getMatFrom(applet, tablePosition), getPublicCameraTracking()); } @Deprecated @@ -588,7 +576,7 @@ public void initProjectorCamera(String cameraNo, Camera.Type cameraType, String cameraTracking.start(); loadTracking(cameraCalib); cameraTracking.setThread(); - projector.setCamera(cameraTracking); + projector.setCamera(getPublicCameraTracking()); checkInitialization(); } @@ -601,25 +589,6 @@ private void tryLoadExtrinsics() { } } - @Deprecated - public void initKinectCamera(float quality) { - assert (!cameraInitialized); - kinectDevice = loadDefaultCameraKinect(); - cameraTracking = kinectDevice.getCameraRGB(); - loadTracking(kinectRGBCalib); - cameraTracking.setThread(); - initARDisplay(quality); - checkInitialization(); - } - - //WARNING not really deprecated !!! - @Deprecated - public void startDefaultKinectCamera() { - assert (!cameraInitialized); - kinectDevice = loadDefaultCameraKinect(); - cameraTracking = kinectDevice.getCameraRGB(); - } - /** * Initialize the default camera for object tracking. * @@ -678,7 +647,7 @@ private void initProjectorDisplay(float quality) { private void initARDisplay(float quality) { assert (this.cameraTracking != null && this.applet != null); - arDisplay = new ARDisplay(this.applet, cameraTracking); + arDisplay = new ARDisplay(this.applet, getPublicCameraTracking()); arDisplay.setZNearFar(zNear, zFar); arDisplay.setQuality(quality); arDisplay.init(); @@ -710,7 +679,7 @@ private void checkInitialization() { private void loadTracking(String calibrationPath) { // TODO: check if file exists ! Camera.convertARParams(this.applet, calibrationPath, camCalibARtoolkit); - cameraTracking.initMarkerDetection(camCalibARtoolkit); + getPublicCameraTracking().initMarkerDetection(camCalibARtoolkit); // The camera view is handled in another thread; cameraInitialized = true; @@ -722,21 +691,19 @@ private void loadTracking(String calibrationPath) { */ public void loadTouchInputKinectOnly() { - if (this.kinectDevice == null) { - kinectDevice = loadDefaultCameraKinect(); - cameraTracking = kinectDevice.getCameraRGB(); - kinectDevice.getCameraRGB().setThread(); - kinectDevice.getCameraDepth().setThread(); - cameraInitialized = true; - - checkInitialization(); - } + loadDefaultCameraKinect(); +// cameraTracking = kinectDevice.getCameraRGB(); +// kinectDevice.getCameraRGB().setThread(); +// kinectDevice.getCameraDepth().setThread(); +// cameraInitialized = true; loadDefaultTouchKinect(); + // Specific ? PMatrix3D extr = kinectDevice.getStereoCalibration(); kinectDevice.setExtrinsics(extr); + // Specific ((KinectTouchInput) this.touchInput).useRawDepth(); } @@ -746,10 +713,10 @@ public void loadTouchInputKinectOnly() { * */ public void loadTouchInput() { - kinectDevice = loadDefaultCameraKinect(); - kinectDevice.getCameraRGB().setThread(); - kinectDevice.getCameraDepth().setThread(); + loadDefaultCameraKinect(); +// kinectDevice.getCameraRGB().setThread(); +// kinectDevice.getCameraDepth().setThread(); loadDefaultTouchKinect(); // setExtrinsics must after the kinect stereo calibration is loaded @@ -768,33 +735,35 @@ public void useKinectOne(boolean kinectOne) { * * @return */ - public KinectDevice loadDefaultCameraKinect() { + public void loadDefaultCameraKinect() { + CameraConfiguration kinectConfiguration = Papart.getDefaultKinectConfiguration(applet); - if (kinectConfiguration.getCameraType() == Camera.Type.REALSENSE) { - if (cameraTracking != null && cameraTracking instanceof CameraRealSense) { - return new RealSense(applet, (CameraRealSense)cameraTracking); - } else { - return new RealSense(applet); - } + + // If the camera is not instanciated, it is not correct ! + if (cameraTracking == null) { + System.err.println("You must choose a camera to create a DepthCamera."); + } + + if (kinectConfiguration.getCameraType() == Camera.Type.REALSENSE_RGB + || kinectConfiguration.getCameraType() == Camera.Type.REALSENSE_IR) { + kinectDevice = new RealSense(applet, (CameraRealSense) cameraTracking); + return; } if (kinectConfiguration.getCameraType() == Camera.Type.OPEN_KINECT) { - return new Kinect360(applet); + kinectDevice = new Kinect360(applet, (CameraOpenKinect) cameraTracking); + return; } - if (kinectConfiguration.getCameraType() == Camera.Type.KINECT2_RGB) { - if (this.cameraTracking == null) { - return new KinectOne(applet); - } else { - return new KinectOne(applet, cameraTracking); - } + if (kinectConfiguration.getCameraType() == Camera.Type.KINECT2_RGB) { + kinectDevice = new KinectOne(applet, cameraTracking); + return; } System.err.println("Could not load the Kinect !" + "Camera Type " + kinectConfiguration.getCameraType()); - return null; + kinectDevice = null; } private void loadDefaultTouchKinect() { - kinectDepthAnalysis = new KinectDepthAnalysis(this.applet, kinectDevice); PlaneAndProjectionCalibration calibration = new PlaneAndProjectionCalibration(); @@ -873,7 +842,7 @@ public void startTracking() { System.err.println("Start Tracking requires a Camera..."); return; } - this.cameraTracking.trackSheets(true); + this.getPublicCameraTracking().trackSheets(true); } public void stop() { @@ -928,7 +897,13 @@ public ARDisplay getARDisplay() { } public Camera getCameraTracking() { -// assert (cameraInitialized); + return this.cameraTracking; + } + + public Camera getPublicCameraTracking() { + if (cameraTracking instanceof CameraRealSense) { + return ((CameraRealSense) cameraTracking).getActingCamera(); + } return this.cameraTracking; } diff --git a/papart/src/fr/inria/papart/procam/PaperScreen.java b/papart/src/fr/inria/papart/procam/PaperScreen.java index b4b987be..bf093224 100755 --- a/papart/src/fr/inria/papart/procam/PaperScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperScreen.java @@ -26,8 +26,6 @@ import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.procam.display.BaseDisplay; import fr.inria.papart.procam.display.ARDisplay; -import fr.inria.papart.drawingapp.DrawUtils; -import static fr.inria.papart.procam.Papart.tablePosition; import fr.inria.papart.tracking.ObjectFinder; import java.awt.Image; import java.util.ArrayList; @@ -102,7 +100,7 @@ public PaperScreen() { this.parent = papart.getApplet(); this.isWithoutCamera = papart.isWithoutCamera(); if (!this.isWithoutCamera) { - this.cameraTracking = papart.getCameraTracking(); + this.cameraTracking = papart.getPublicCameraTracking(); } mainDisplay = papart.getDisplay(); displays.add(papart.getDisplay()); diff --git a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java index 10843ca6..a59bca74 100755 --- a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java @@ -50,7 +50,7 @@ public PaperTouchScreen() { } public PaperTouchScreen(Papart papart) { - this(papart.getCameraTracking(), + this(papart.getPublicCameraTracking(), papart.getDisplay(), papart.getTouchInput()); } @@ -260,10 +260,10 @@ public int getColorOccurencesFrom(PVector coord, int radius, int col, int thresh return k; } - public int getColorFrom3D(PVector point){ + public int getColorFrom3D(PVector point) { return getColorAt(getPxCoordinates(point)); } - + /** * Unsafe do not use unless you are sure. */ diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 5e9fb625..571f33a6 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -28,9 +28,6 @@ import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.ProjectiveDeviceP; import fr.inria.papart.procam.Utils; -import fr.inria.papart.procam.camera.CamImage; -import fr.inria.papart.procam.camera.CamImageColor; -import fr.inria.papart.procam.camera.CamImageGray; import fr.inria.papart.tracking.DetectedMarker; import fr.inria.papart.tracking.MarkerList; import org.bytedeco.javacpp.opencv_core.CvMat; @@ -65,8 +62,8 @@ public abstract class Camera extends Node implements PConstants, HasExtrinsics { private boolean hasExtrinsics = false; public enum Type { - - OPENCV, FFMPEG, OPENCV_DEPTH, PROCESSING, OPEN_KINECT, FLY_CAPTURE, KINECT2_RGB, KINECT2_IR, REALSENSE, FAKE + OPENCV, FFMPEG, OPENCV_DEPTH, PROCESSING, OPEN_KINECT, FLY_CAPTURE, KINECT2_RGB, KINECT2_IR, + REALSENSE_RGB, REALSENSE_IR, REALSENSE_DEPTH, FAKE } public enum PixelFormat { @@ -100,14 +97,15 @@ public enum PixelFormat { protected PApplet parent = null; private List sheets = null; - - protected final Semaphore sheetsSemaphore = new Semaphore(1); + private final Semaphore sheetsSemaphore = new Semaphore(1); // ARToolkit protected String calibrationARToolkit; + protected CameraThread thread = null; - private CameraThread thread = null; - + protected List getSheets(){ + return sheets; + } abstract public void start(); @Override @@ -265,6 +263,10 @@ public String getCalibrationARToolkit() { return calibrationARToolkit; } + + protected Semaphore getSheetSemaphore(){ + return sheetsSemaphore; + } /** * Add a markerboard to track with this camera. * @@ -273,9 +275,9 @@ public String getCalibrationARToolkit() { public void trackMarkerBoard(MarkerBoard sheet) { sheet.addTracker(parent, this); try { - sheetsSemaphore.acquire(); + getSheetSemaphore().acquire(); this.sheets.add(sheet); - sheetsSemaphore.release(); + getSheetSemaphore().release(); } catch (InterruptedException ex) { System.out.println("Interrupted !"); Logger.getLogger(Camera.class.getName()).log(Level.SEVERE, null, ex); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index b39a42f0..a4649d2c 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -53,11 +53,21 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { case OPENCV_DEPTH: camera = new CameraOpenCVDepth(cameraNo); break; - case REALSENSE: + case REALSENSE_RGB: camRS = new CameraRealSense(cameraNo); - camRS.useColor(true); + camRS.actAsColorCamera(true); camera = camRS; break; + case REALSENSE_IR: + camRS = new CameraRealSense(cameraNo); + camRS.actAsIRCamera(true); + camera = camRS; + break; +// case REALSENSE_DEPTH: +// camRS = new CameraRealSense(cameraNo); +// camRS.useColor(true); +// camera = camRS; +// break; case OPEN_KINECT: camera = new CameraOpenKinect(cameraNo); break; @@ -90,6 +100,7 @@ public static Camera createCamera(Camera.Type type, String description, String f break; case PROCESSING: camera = new CameraProcessing(description); + break; default: boolean isInt = checkInt(description); if (!isInt) { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 97991cdf..cd8ab9c2 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -19,7 +19,12 @@ */ package fr.inria.papart.procam.camera; +import fr.inria.papart.procam.ProjectiveDeviceP; +import fr.inria.papart.tracking.DetectedMarker; +import fr.inria.papart.tracking.MarkerBoard; import java.nio.FloatBuffer; +import java.util.List; +import java.util.concurrent.Semaphore; import java.util.logging.Level; import java.util.logging.Logger; import org.bytedeco.javacpp.RealSense; @@ -29,6 +34,7 @@ import processing.core.PApplet; import processing.core.PImage; import processing.core.PMatrix3D; +import processing.core.PVector; /** * @@ -44,6 +50,11 @@ public class CameraRealSense extends Camera { private boolean useDepth = true; private boolean useColor = true; + private boolean actAsColorCamera = false; + private boolean actAsIRCamera = false; + + private Camera actAsCamera = null; + protected CameraRealSense(int cameraNo) { try { RealSenseFrameGrabber.tryLoad(); @@ -83,6 +94,10 @@ public CameraRealSenseColor getColorCamera() { return this.colorCamera; } + public Camera getActingCamera() { + return this.actAsCamera; + } + public PMatrix3D getHardwareExtrinsics() { RealSense.extrinsics extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.color, RealSense.depth); FloatBuffer fb = extrinsics.position(0).asByteBuffer().asFloatBuffer(); @@ -93,18 +108,6 @@ public PMatrix3D getHardwareExtrinsics() { 0, 0, 0, 1); } - public void useDepth(boolean useDepth) { - this.useDepth = useDepth; - } - - public void useIR(boolean useIR) { - this.useIR = useIR; - } - - public void useColor(boolean useColor) { - this.useColor = useColor; - } - public void setSize(int w, int h) { colorCamera.setSize(w, h); } @@ -145,20 +148,22 @@ public void grab() { try { grabber.grab(); - // get the color -// IplImage img = grabber.grabVideo(); -// updateCurrentImage(img); -// currentImage = img; -// Auto grab ? -// - if (useDepth) { - depthCamera.grab(); - } if (useColor) { colorCamera.grab(); + if (actAsColorCamera) { + currentImage = colorCamera.currentImage; + } } + if (useIR) { IRCamera.grab(); + if (actAsIRCamera) { + currentImage = IRCamera.currentImage; + } + } + + if (useDepth) { + depthCamera.grab(); } } catch (Exception e) { System.out.println("Exception :" + e); @@ -182,17 +187,6 @@ public PImage getIRImage() { return IRCamera.getPImage(); } - @Override - public PImage getPImage() { - if (useColor) { - return colorCamera.getPImage(); - } - if (useDepth) { - return IRCamera.getPImage(); - } - return null; - } - @Override public void close() { this.setClosing(); @@ -207,4 +201,279 @@ public void close() { } } + public void useDepth(boolean useDepth) { + this.useDepth = useDepth; + } + + public void useIR(boolean useIR) { + this.useIR = useIR; + } + + public void useColor(boolean useColor) { + this.useColor = useColor; + } + + public void actAsColorCamera(boolean isColorCam) { + this.actAsColorCamera = isColorCam; + if (isColorCam) { + actAsCamera = colorCamera; + } + } + + public void actAsIRCamera(boolean isIRCam) { + this.actAsIRCamera = isIRCam; + if (isIRCam) { + actAsCamera = IRCamera; + } + } + + // Generated delegate methods... + @Override + public PImage getPImage() { + return actAsCamera.getPImage(); + } + + @Override + public String toString() { + return actAsCamera.toString(); + } + + @Override + public PImage getImage() { + return actAsCamera.getImage(); + } + + @Override + void setMarkers(DetectedMarker[] detectedMarkers) { + actAsCamera.setMarkers(detectedMarkers); + } + + @Override + protected void checkParameters() { + actAsCamera.checkParameters(); + } + + @Override + public void setSimpleCalibration(float fx, float fy, float cx, float cy, int w, int h) { + actAsCamera.setSimpleCalibration(fx, fy, cx, cy, w, h); + } + + @Override + public void setCalibration(String fileName) { + actAsCamera.setCalibration(fileName); + } + + @Override + public PImage getPImageCopy() { + return actAsCamera.getPImageCopy(); + } + + @Override + public PImage getPImageCopy(PApplet context) { + return actAsCamera.getPImageCopy(context); + } + + @Override + public PImage getPImageCopyTo(PImage out) { + return actAsCamera.getPImageCopyTo(out); + } + + @Override + public void setCameraDevice(String description) { + actAsCamera.setCameraDevice(description); + } + + @Override + protected String getCameraDevice() { + return actAsCamera.getCameraDevice(); + } + + @Override + public void setSystemNumber(int systemNumber) { + actAsCamera.setSystemNumber(systemNumber); + } + + @Override + public void setFrameRate(int frameRate) { + actAsCamera.setFrameRate(frameRate); + } + + @Override + public int width() { + return actAsCamera.width(); + } + + @Override + public int height() { + return actAsCamera.height(); + } + + @Override + public int getFrameRate() { + return actAsCamera.getFrameRate(); + } + + @Override + public boolean isUndistort() { + return actAsCamera.isUndistort(); + } + + @Override + public void setUndistort(boolean undistort) { + actAsCamera.setUndistort(undistort); + } + + @Override + public boolean isCalibrated() { + return actAsCamera.isCalibrated(); + } + + @Override + public String getCalibrationFile() { + return actAsCamera.getCalibrationFile(); + } + + @Override + public void initMarkerDetection(String calibrationARToolkit) { + actAsCamera.initMarkerDetection(calibrationARToolkit); + } + + @Override + public String getCalibrationARToolkit() { + return actAsCamera.getCalibrationARToolkit(); + } +// +// @Override +// public void trackMarkerBoard(MarkerBoard sheet) { +// sheet.addTracker(parent, actAsCamera); +// try { +// getSheetSemaphore().acquire(); +// actAsCamera.getSheets().add(sheet); +// getSheetSemaphore().release(); +// } catch (InterruptedException ex) { +// System.out.println("Interrupted !"); +// Logger.getLogger(Camera.class.getName()).log(Level.SEVERE, null, ex); +// } catch (NullPointerException e) { +// throw new RuntimeException("Marker detection not initialized. " + e); +// } +// } + + @Override + public void trackMarkerBoard(MarkerBoard sheet) { + System.out.println("In trackMarkerboard in CameaRealSense BAAAADD"); + actAsCamera.trackMarkerBoard(sheet); + } + + @Override + public void trackSheets(boolean auto) { + actAsCamera.trackSheets(auto); + } + + @Override + public boolean tracks(MarkerBoard board) { + return actAsCamera.tracks(board); + } + + @Override + public List getTrackedSheets() { + return actAsCamera.getTrackedSheets(); + } + + @Override + public DetectedMarker[] getDetectedMarkers() { + return actAsCamera.getDetectedMarkers(); + } + + @Override + protected Semaphore getSheetSemaphore() { + return actAsCamera.getSheetSemaphore(); + } + // + @Override + public void setThread() { + if (thread == null) { + thread = new CameraThread(this); + thread.setCompute(actAsCamera.trackSheets); + actAsCamera.thread = thread; + thread.start(); + } else { + System.err.println("Camera: Error Thread already launched"); + } + } + + @Override + public void forceCurrentImage(IplImage img) { + actAsCamera.forceCurrentImage(img); + } + + @Override + protected void updateCurrentImage(IplImage img) { + actAsCamera.updateCurrentImage(img); + } + + @Override + protected void checkCamImage() { + actAsCamera.checkCamImage(); + } + + @Override + protected boolean isPixelFormatGray() { + return actAsCamera.isPixelFormatGray(); + } + + @Override + protected boolean isPixelFormatColor() { + return actAsCamera.isPixelFormatColor(); + } + + @Override + public IplImage getIplImage() { + return actAsCamera.getIplImage(); + } + + @Override + public ProjectiveDeviceP getProjectiveDevice() { + return actAsCamera.getProjectiveDevice(); + } + + @Override + protected void setClosing() { + actAsCamera.setClosing(); + } + + @Override + public boolean isClosing() { + return actAsCamera.isClosing(); + } + + @Override + public PixelFormat getPixelFormat() { + return actAsCamera.getPixelFormat(); + } + + @Override + public void setPixelFormat(PixelFormat format) { + actAsCamera.setPixelFormat(format); + } + + @Override + public boolean hasExtrinsics() { + return actAsCamera.hasExtrinsics(); + } + + @Override + public PMatrix3D getExtrinsics() { + return actAsCamera.getExtrinsics(); + } + + @Override + public void setExtrinsics(PMatrix3D extrinsics) { + actAsCamera.setExtrinsics(extrinsics); + } + + @Override + public PVector getViewPoint(PVector point) { + return actAsCamera.getViewPoint(point); + } + } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java index cbd52e9f..0656eac0 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java @@ -64,6 +64,7 @@ public void grab() { if (this.isClosing()) { return; } + // update the images. try { currentImage = mainCamera.grabber.grabVideo(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index 6657018c..6b8674a6 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -30,9 +30,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.bytedeco.javacpp.ARToolKitPlus; -import static org.bytedeco.javacpp.ARToolKitPlus.MARKER_ID_BCH; -import static org.bytedeco.javacpp.ARToolKitPlus.PIXEL_FORMAT_LUM; -import static org.bytedeco.javacpp.ARToolKitPlus.UNDIST_NONE; import static org.bytedeco.javacpp.opencv_core.IPL_DEPTH_8U; import static org.bytedeco.javacpp.opencv_imgproc.CV_BGR2GRAY; import static org.bytedeco.javacpp.opencv_imgproc.cvCvtColor; @@ -44,6 +41,7 @@ class CameraThread extends Thread { private final Camera camera; + Camera cameraForMarkerboard; private boolean compute; private IplImage image, grayImage; private DetectedMarker[] detectedMarkers; @@ -72,11 +70,20 @@ private void initThreadPool() { // threadPool = Executors.newCachedThreadPool(); } + + @Override public void run() { + + cameraForMarkerboard = camera; + if (camera instanceof CameraRealSense) { + cameraForMarkerboard = ((CameraRealSense) camera).getActingCamera(); + } + while (!stop) { camera.grab(); image = camera.getIplImage(); + // TODO: check if img can be null... if (image != null && compute && !camera.getTrackedSheets().isEmpty()) { this.compute(); @@ -87,7 +94,7 @@ public void run() { public void compute() { try { - camera.sheetsSemaphore.acquire(); + camera.getSheetSemaphore().acquire(); tryComputeGrayScale(); tryToFindMarkers(); @@ -95,7 +102,7 @@ public void compute() { // updateSequential(); updateParallel(); - camera.sheetsSemaphore.release(); + camera.getSheetSemaphore().release(); } catch (InterruptedException ex) { Logger.getLogger(CameraThread.class.getName()).log(Level.SEVERE, null, ex); } @@ -156,10 +163,12 @@ protected void updateSequential() { } protected void updateBoardLocation(MarkerBoard markerBoard) { + + // The markerboard will know the real camera, not the top-level camera. if (markerBoard.useGrayscaleImages()) { - markerBoard.updateLocation(camera, grayImage, this.detectedMarkers); + markerBoard.updateLocation(cameraForMarkerboard, grayImage, this.detectedMarkers); } else { - markerBoard.updateLocation(camera, image, null); + markerBoard.updateLocation(cameraForMarkerboard, image, null); } } From 5d1c19d4d2612ee031525a145aed2a008e47057e Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 27 Oct 2016 14:34:04 +0200 Subject: [PATCH 19/99] grayscale support for tracking. --- .../fr/inria/papart/procam/camera/CameraThread.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index 6b8674a6..411eae06 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -41,7 +41,7 @@ class CameraThread extends Thread { private final Camera camera; - Camera cameraForMarkerboard; + Camera cameraForMarkerboard; private boolean compute; private IplImage image, grayImage; private DetectedMarker[] detectedMarkers; @@ -70,8 +70,6 @@ private void initThreadPool() { // threadPool = Executors.newCachedThreadPool(); } - - @Override public void run() { @@ -109,6 +107,12 @@ public void compute() { } private void tryComputeGrayScale() { + + if (image.depth() == IPL_DEPTH_8U) { + grayImage = image; + return; + } + for (MarkerBoard sheet : camera.getTrackedSheets()) { if (sheet.useGrayscaleImages()) { if (grayImage == null) { From 38f4d82d116de330954a3e18394ca1257e66813e Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 27 Oct 2016 23:16:25 +0200 Subject: [PATCH 20/99] Kinect, IR tracking and viewing. --- .../fr/inria/papart/procam/camera/Camera.java | 4 ++-- .../papart/procam/camera/CameraFactory.java | 5 +++++ .../procam/camera/CameraOpenKinect.java | 20 ++++++++++++++----- .../papart/procam/camera/CameraThread.java | 3 ++- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 571f33a6..f5b116a9 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -62,8 +62,8 @@ public abstract class Camera extends Node implements PConstants, HasExtrinsics { private boolean hasExtrinsics = false; public enum Type { - OPENCV, FFMPEG, OPENCV_DEPTH, PROCESSING, OPEN_KINECT, FLY_CAPTURE, KINECT2_RGB, KINECT2_IR, - REALSENSE_RGB, REALSENSE_IR, REALSENSE_DEPTH, FAKE + OPENCV, FFMPEG, PROCESSING, OPEN_KINECT, OPEN_KINECT_IR, FLY_CAPTURE, KINECT2_RGB, REALSENSE_RGB, REALSENSE_IR, KINECT2_IR, + REALSENSE_DEPTH, OPENCV_DEPTH, FAKE } public enum PixelFormat { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index a4649d2c..6391777c 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -68,8 +68,13 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { // camRS.useColor(true); // camera = camRS; // break; + case OPEN_KINECT_IR: + camera = new CameraOpenKinect(cameraNo); + ((CameraOpenKinect) camera).getIRVideo(); + break; case OPEN_KINECT: camera = new CameraOpenKinect(cameraNo); + ((CameraOpenKinect) camera).getRGBVideo(); break; case FLY_CAPTURE: camera = new CameraFlyCapture(cameraNo); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java index c136bb74..3cea0eeb 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java @@ -38,13 +38,24 @@ public class CameraOpenKinect extends Camera implements Displayable { private boolean isGrabbingDepth = false; protected OpenKinectFrameGrabber grabber; - private CameraOpenKinectDepth depthCamera; + int kinectVideoFormat; + private final CameraOpenKinectDepth depthCamera; protected CameraOpenKinect(int cameraNo) { this.systemNumber = cameraNo; - this.setPixelFormat(PixelFormat.BGR); depthCamera = new CameraOpenKinectDepth(this); + getRGBVideo(); + } + + public void getIRVideo() { + this.setPixelFormat(PixelFormat.GRAY); + kinectVideoFormat = freenect.FREENECT_VIDEO_IR_8BIT; + } + + public void getRGBVideo() { + this.setPixelFormat(PixelFormat.BGR); + kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; } @Override @@ -55,7 +66,7 @@ public void start() { try { grabber.start(); - grabber.setVideoFormat(freenect.FREENECT_VIDEO_RGB); + grabber.setVideoFormat(kinectVideoFormat); depthCamera.start(); @@ -107,7 +118,7 @@ public void close() { System.out.println("Stopping KinectGrabber"); this.stopThread(); grabber.stop(); - if(this.isGrabbingDepth){ + if (this.isGrabbingDepth) { depthCamera.close(); } } catch (Exception e) { @@ -149,6 +160,5 @@ public PImage getDisplayedOn(PApplet display) { public boolean canBeDisplayedOn(PApplet display) { return imageMap.containsKey(display); } - } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index 411eae06..1adb0cd5 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -108,7 +108,8 @@ public void compute() { private void tryComputeGrayScale() { - if (image.depth() == IPL_DEPTH_8U) { +// if (image.depth() == IPL_DEPTH_8U) { + if (image.nChannels() == 1) { grayImage = image; return; } From c801a0d26d213862fefb15febe0d8bb7dbad14b2 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 3 Nov 2016 11:55:14 +0100 Subject: [PATCH 21/99] work in progress -> Kinect 2 rgb image received. --- .../papart/procam/camera/CamImageColor.java | 9 +- .../fr/inria/papart/procam/camera/Camera.java | 2 +- .../papart/procam/camera/CameraFactory.java | 3 + .../procam/camera/CameraOpenKinect2.java | 115 ++++++++++++++++++ 4 files changed, 126 insertions(+), 3 deletions(-) create mode 100755 papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java index a2d68d39..23c87536 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java @@ -56,12 +56,14 @@ protected final void camInit(PApplet parent) { tex.setBufferSource(this); // Second time with bufferSource. tex = ((PGraphicsOpenGL) parent.g).getTexture(this); - argbBuffer = ByteBuffer.allocateDirect(this.pixels.length * 4); + if (this.incomingFormat != Camera.PixelFormat.ARGB) { + argbBuffer = ByteBuffer.allocateDirect(this.pixels.length * 4); + } } @Override public void update(IplImage iplImage) { - + Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); ByteBuffer imageBuffer = iplImage.getByteBuffer(); @@ -71,6 +73,9 @@ public void update(IplImage iplImage) { if (this.incomingFormat == Camera.PixelFormat.RGB) { Utils.byteBufferRGBtoARGB(imageBuffer, argbBuffer); } + if (this.incomingFormat == Camera.PixelFormat.ARGB) { + argbBuffer = iplImage.getByteBuffer(); + } tex.copyBufferFromSource(null, argbBuffer, width, height); argbBuffer.rewind(); } diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index f5b116a9..70c4d7c3 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -63,7 +63,7 @@ public abstract class Camera extends Node implements PConstants, HasExtrinsics { public enum Type { OPENCV, FFMPEG, PROCESSING, OPEN_KINECT, OPEN_KINECT_IR, FLY_CAPTURE, KINECT2_RGB, REALSENSE_RGB, REALSENSE_IR, KINECT2_IR, - REALSENSE_DEPTH, OPENCV_DEPTH, FAKE + REALSENSE_DEPTH, OPENCV_DEPTH, OPEN_KINECT_2_RGB, FAKE } public enum PixelFormat { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index 6391777c..64e6fc84 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -44,6 +44,9 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { case OPENCV: camera = new CameraOpenCV(cameraNo); break; + case OPEN_KINECT_2_RGB: // Hack for now with V4L loopback. + camera = new CameraOpenKinect2(0); + break; case KINECT2_RGB: // Hack for now with V4L loopback. camera = new CameraOpenCV(0); break; diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java new file mode 100755 index 00000000..54a586c0 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java @@ -0,0 +1,115 @@ +/* + * Part of the PapARt project - https://project.inria.fr/papart/ + * + * Copyright (C) 2014-2016 Inria + * Copyright (C) 2011-2013 Bordeaux University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; If not, see + * . + */ +package fr.inria.papart.procam.camera; + +import org.bytedeco.javacpp.opencv_core.IplImage; +import org.bytedeco.javacv.OpenKinect2FrameGrabber; +import processing.core.PImage; + +/** + * + * @author Jeremy Laviole + */ +public class CameraOpenKinect2 extends Camera { + + protected OpenKinect2FrameGrabber grabber; + + protected CameraOpenKinect2(int cameraNo) { + this.systemNumber = cameraNo; + this.setPixelFormat(PixelFormat.ARGB); + } + +// public void getIRVideo() { +// this.setPixelFormat(PixelFormat.GRAY); +// kinectVideoFormat = freenect.FREENECT_VIDEO_IR_8BIT; +// } + @Override + public void start() { + + grabber = new OpenKinect2FrameGrabber(this.systemNumber); + grabber.enableColorStream(); + try { + + grabber.start(); + this.isConnected = true; + } catch (Exception e) { + System.err.println("Could not Kinect start frameGrabber... " + e); + System.err.println("Kinect ID " + this.systemNumber + " could not start."); + System.err.println("Check cable connection and ID."); + } + } + + @Override + public void grab() { + + if (this.isClosing()) { + return; + } + + try { + grabber.grab(); + IplImage img = grabber.getVideoImage(); + updateCurrentImage(img); + + } catch (Exception e) { + System.err.println("Camera: OpenKinect2 Grab() Error ! " + e); + e.printStackTrace(); + } + } + + @Override + public PImage getPImage() { + this.checkCamImage(); + if (currentImage != null) { + camImage.update(currentImage); + return camImage; + } + // TODO: exceptions !!! + return null; + } + + @Override + public void close() { + setClosing(); + if (grabber != null) { + try { + System.out.println("Stopping OpenKinect2Grabber"); + this.stopThread(); + grabber.stop(); + } catch (Exception e) { + } + } + + } + +// public void setTouch(KinectTouchInput touchInput) { +// this.setGrabDepth(true); +// depthCamera.setTouchInput(touchInput); +// } +// +// public CameraOpenKinectDepth getDepthCamera() { +// this.setGrabDepth(true); +// return this.depthCamera; +// } +// +// public void setGrabDepth(boolean grabDepth) { +// this.isGrabbingDepth = grabDepth; +// } +} From 02641de9da1a4f9c235e1a9b96f103ffcee5cbf0 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 8 Nov 2016 17:16:30 +0100 Subject: [PATCH 22/99] big WIP in the camera handling. new? features Kinect 2: RGB, IR & Depth? RealSense : RGB, IR & Depth --- .../calibration/CalibrationExtrinsic.java | 17 - .../analysis/KinectDepthAnalysis.java | 4 +- .../depthcam/devices/DepthCameraDevice.java | 35 -- .../papart/depthcam/devices/Kinect360.java | 6 +- .../papart/depthcam/devices/KinectDevice.java | 17 +- .../papart/depthcam/devices/KinectOne.java | 9 +- .../papart/depthcam/devices/RealSense.java | 31 +- .../papart/multitouch/KinectTouchInput.java | 1 - papart/src/fr/inria/papart/procam/Utils.java | 47 +- .../inria/papart/procam/camera/CamImage.java | 2 +- .../papart/procam/camera/CamImageColor.java | 1 - .../papart/procam/camera/CamImageGray.java | 14 +- .../fr/inria/papart/procam/camera/Camera.java | 18 +- .../papart/procam/camera/CameraFactory.java | 11 +- .../procam/camera/CameraOpenKinect2.java | 117 +++-- .../procam/camera/CameraOpenKinectDepth.java | 10 + .../procam/camera/CameraRGBIRDepth.java | 424 +++++++++++++++++ .../papart/procam/camera/CameraRealSense.java | 449 ++++-------------- .../procam/camera/CameraRealSenseColor.java | 96 ---- .../procam/camera/CameraRealSenseDepth.java | 120 ----- .../procam/camera/CameraRealSenseIR.java | 97 ---- .../inria/papart/procam/camera/SubCamera.java | 72 +++ .../papart/procam/camera/SubDepthCamera.java | 68 +++ .../papart/procam/camera/WithTouchInput.java | 3 + 24 files changed, 838 insertions(+), 831 deletions(-) delete mode 100644 papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java create mode 100644 papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java delete mode 100755 papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java delete mode 100755 papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java delete mode 100755 papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java create mode 100644 papart/src/fr/inria/papart/procam/camera/SubCamera.java create mode 100644 papart/src/fr/inria/papart/procam/camera/SubDepthCamera.java diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index de47bfd2..6ca2dee2 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -19,34 +19,17 @@ */ package fr.inria.papart.calibration; -import static fr.inria.papart.calibration.CalibrationPopup.KINECT_ARTOOLKIT_NAME; -import fr.inria.papart.depthcam.devices.Kinect360; import fr.inria.papart.depthcam.devices.KinectDevice; import fr.inria.papart.depthcam.devices.KinectDevice.Type; -import fr.inria.papart.depthcam.devices.KinectOne; import fr.inria.papart.multitouch.KinectTouchInput; -import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.Papart; -import fr.inria.papart.procam.ProjectiveDeviceP; -import fr.inria.papart.procam.camera.Camera; -import fr.inria.papart.procam.camera.ProjectorAsCamera; -import fr.inria.papart.procam.camera.TrackedView; import fr.inria.papart.procam.display.ProjectorDisplay; -import fr.inria.skatolo.gui.group.Textarea; import java.util.ArrayList; -import org.bytedeco.javacpp.opencv_core; -import static org.bytedeco.javacpp.opencv_core.IPL_DEPTH_8U; -import static org.bytedeco.javacpp.opencv_imgproc.CV_BGR2GRAY; -import static org.bytedeco.javacpp.opencv_imgproc.cvCvtColor; import processing.core.PApplet; -import static processing.core.PApplet.println; import processing.core.PMatrix3D; import processing.core.PVector; import toxi.geom.Plane; -import toxi.geom.Ray3D; -import toxi.geom.ReadonlyVec3D; import toxi.geom.Vec3D; -import static processing.core.PApplet.println; /** * diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index 59c43dd1..b8e98e54 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -32,7 +32,7 @@ import fr.inria.papart.depthcam.devices.RealSense; import fr.inria.papart.procam.ProjectiveDeviceP; import fr.inria.papart.procam.Utils; -import fr.inria.papart.procam.camera.CameraRealSenseDepth; +import fr.inria.papart.procam.camera.CameraRealSense; import java.nio.ByteBuffer; import java.nio.ShortBuffer; import java.util.ArrayList; @@ -122,7 +122,7 @@ private void initMemory() { depthComputationMethod = new KinectOneDepth(); } if (kinectDevice instanceof RealSense) { - float depthScale = ((CameraRealSenseDepth) ((RealSense) kinectDevice).getCameraDepth()).getDepthScale(); + float depthScale = ((CameraRealSense) ((RealSense) kinectDevice).getMainCamera()).getDepthScale(); depthComputationMethod = new RealSenseDepth(depthScale); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java deleted file mode 100644 index 6080b755..00000000 --- a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.depthcam.devices; - -/** - * - * @author Jérémy Laviole - jeremy.laviole@inria.fr - */ -public interface DepthCameraDevice { - - public int colorWidth(); - public int colorHeight(); - public int colorSize(); - - public int depthWidth(); - public int depthHeight(); - public int depthSize(); -} diff --git a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java index e7b11f63..ebfd6cf4 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java +++ b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java @@ -71,17 +71,17 @@ private void initSizes(PApplet parent) { } @Override - public Camera getCameraRGB() { + public SubCamera getCameraRGB() { return camera; } @Override - public Camera getCameraIR() { + public SubCamera getCameraIR() { throw new UnsupportedOperationException("Not supported yet."); } @Override - public Camera getCameraDepth() { + public SubCamera getCameraDepth() { return camera.getDepthCamera(); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java index 8858b28e..3b988d92 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java @@ -23,6 +23,8 @@ import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.HasExtrinsics; import fr.inria.papart.procam.camera.Camera; +import fr.inria.papart.procam.camera.SubCamera; +import fr.inria.papart.procam.camera.SubDepthCamera; import processing.core.PApplet; import processing.core.PMatrix3D; import processing.core.PVector; @@ -32,7 +34,7 @@ * * @author Jérémy Laviole - jeremy.laviole@inria.fr */ -public abstract class KinectDevice implements DepthCameraDevice { +public abstract class KinectDevice { public enum Type { ONE, X360, REALSENSE, NONE @@ -57,11 +59,11 @@ public enum Type { protected PApplet parent; - abstract public Camera getCameraRGB(); + abstract public SubCamera getCameraRGB(); - abstract public Camera getCameraIR(); + abstract public SubCamera getCameraIR(); - abstract public Camera getCameraDepth(); + abstract public SubDepthCamera getCameraDepth(); abstract public int rawDepthSize(); @@ -138,32 +140,27 @@ public int findColorOffset(float x, float y, float z) { return getCameraRGB().getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); } - @Override + // TODO: find the use of all this.. public int colorWidth() { return RGB_WIDTH; } - @Override public int colorHeight() { return RGB_HEIGHT; } - @Override public int colorSize() { return RGB_SIZE; } - @Override public int depthWidth() { return WIDTH; } - @Override public int depthHeight() { return HEIGHT; } - @Override public int depthSize() { return SIZE; } diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java index e588d307..cda80c11 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java @@ -25,6 +25,7 @@ import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraOpenCVDepth; import fr.inria.papart.procam.camera.CameraOpenKinectDepth; +import fr.inria.papart.procam.camera.SubCamera; import processing.core.PApplet; /** @@ -55,7 +56,7 @@ public KinectOne(PApplet parent, Camera cameraRGB) { setStereoCalibration(Papart.kinectStereoCalib); } - + public static final int CAMERA_WIDTH = 512; public static final int CAMERA_WIDTH_RGB = 1920; public static final int CAMERA_HEIGHT = 424; @@ -106,15 +107,15 @@ final void initDepth() { } @Override - public Camera getCameraRGB() { + public SubCamera getCameraRGB() { return cameraRGB; } - public Camera getCameraIR() { + public SubCamera getCameraIR() { return cameraIR; } - public Camera getCameraDepth() { + public SubDepthCamera getCameraDepth() { return cameraDepth; } diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index cbe36179..0c6cb1d4 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -25,9 +25,8 @@ import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraRealSense; -import fr.inria.papart.procam.camera.CameraRealSenseColor; -import fr.inria.papart.procam.camera.CameraRealSenseDepth; -import fr.inria.papart.procam.camera.CameraRealSenseIR; +import fr.inria.papart.procam.camera.SubCamera; +import fr.inria.papart.procam.camera.SubDepthCamera; import processing.core.PApplet; /** @@ -37,9 +36,9 @@ public final class RealSense extends KinectDevice { protected CameraRealSense cameraRS; - protected CameraRealSenseDepth cameraDepth; - protected CameraRealSenseColor cameraColor; - protected CameraRealSenseIR cameraIR; + protected SubDepthCamera cameraDepth; + protected SubCamera cameraColor; + protected SubCamera cameraIR; public RealSense(PApplet parent) { initSize(); @@ -50,9 +49,7 @@ public RealSense(PApplet parent) { cameraRS.start(); setStereoCalibration(cameraRS.getHardwareExtrinsics()); - cameraColor.useHarwareIntrinsics(); - cameraDepth.useHarwareIntrinsics(); - cameraIR.useHarwareIntrinsics(); + useHardwareIntrinsics(); } public RealSense(PApplet parent, CameraRealSense cameraRGB) { @@ -70,9 +67,13 @@ public RealSense(PApplet parent, CameraRealSense cameraRGB) { cameraRS.start(); setStereoCalibration(cameraRS.getHardwareExtrinsics()); - cameraColor.useHarwareIntrinsics(); - cameraDepth.useHarwareIntrinsics(); - cameraIR.useHarwareIntrinsics(); + useHardwareIntrinsics(); + } + + private void useHardwareIntrinsics() { + CameraRealSense.useHarwareIntrinsics(cameraColor, cameraRS.getFrameGrabber()); + CameraRealSense.useHarwareIntrinsics(cameraDepth, cameraRS.getFrameGrabber()); + CameraRealSense.useHarwareIntrinsics(cameraIR, cameraRS.getFrameGrabber()); } private void initSize() { @@ -127,17 +128,17 @@ public CameraRealSense getMainCamera() { } @Override - public CameraRealSenseColor getCameraRGB() { + public SubCamera getCameraRGB() { return cameraColor; } @Override - public CameraRealSenseIR getCameraIR() { + public SubCamera getCameraIR() { return cameraIR; } @Override - public CameraRealSenseDepth getCameraDepth() { + public SubDepthCamera getCameraDepth() { return cameraDepth; } diff --git a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java index d506c80d..90c34cc7 100755 --- a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java @@ -99,7 +99,6 @@ public void setTouchDetectionCalibration3D(PlanarTouchCalibration touchCalib) { @Override public void update() { try { - IplImage depthImage = kinectDevice.getCameraDepth().getIplImage(); IplImage colImage = kinectDevice.getCameraRGB().getIplImage(); diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index 45a1f089..3d38b06e 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -39,6 +39,8 @@ import toxi.geom.Matrix4x4; import toxi.geom.Vec3D; import java.io.*; +import java.nio.FloatBuffer; +import static processing.core.PConstants.HSB; /** * @@ -597,7 +599,7 @@ static public void byteBufferBRGtoARGB(ByteBuffer bgr, ByteBuffer argb) { } argb.rewind(); } - + static public void byteBufferRGBtoARGB(ByteBuffer bgr, ByteBuffer argb) { byte[] tmpArr = new byte[3]; @@ -610,7 +612,7 @@ static public void byteBufferRGBtoARGB(ByteBuffer bgr, ByteBuffer argb) { } argb.rewind(); } - + static public void byteBufferGRAYtoARGB(ByteBuffer gray, ByteBuffer argb) { byte[] tmpArr = new byte[1]; @@ -622,11 +624,50 @@ static public void byteBufferGRAYtoARGB(ByteBuffer gray, ByteBuffer argb) { argb.put((byte) 255); } argb.rewind(); + argb.rewind(); } + + static public void byteBufferGRAY32toARGB(ByteBuffer gray, ByteBuffer argb) { + + FloatBuffer floatGray = gray.asFloatBuffer(); + float[] tmpArr = new float[1]; + + for (int i = 0; i < argb.capacity(); i += 4) { + floatGray.get(tmpArr); + + byte v = (byte) (tmpArr[0] / 65535.0 * 255); +// byte v = (byte) (tmpArr[0] << 8 | tmpArr[1]); + argb.put((byte) (v)); + argb.put((byte) (v)); + argb.put((byte) (v)); + argb.put((byte) 255); + } + argb.rewind(); + } + + static public void byteBufferDepthK2toARGB(ByteBuffer gray, ByteBuffer argb) { + FloatBuffer floatGray = gray.asFloatBuffer(); + float[] tmpArr = new float[1]; + + for (int i = 0; i < argb.capacity(); i += 4) { + floatGray.get(tmpArr); + + // 8 meters + byte v = (byte) (tmpArr[0] / 8000 * 255); +// byte v = (byte) (tmpArr[0] << 8 | tmpArr[1]); + argb.put((byte) (v)); + argb.put((byte) (v)); + argb.put((byte) (v)); + argb.put((byte) 255); + } + argb.rewind(); + } + static public void byteBufferZ16toARGB(ByteBuffer gray, ByteBuffer argb) { byte[] tmpArr = new byte[2]; - for (int i = 0; i < gray.capacity(); i +=2) { + gray.rewind(); + for (int i = 0; i < argb.capacity(); i += 4) { gray.get(tmpArr); argb.put(tmpArr[0]); argb.put(tmpArr[1]); diff --git a/papart/src/fr/inria/papart/procam/camera/CamImage.java b/papart/src/fr/inria/papart/procam/camera/CamImage.java index 0f907986..6cc07327 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImage.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImage.java @@ -39,7 +39,7 @@ public abstract class CamImage extends PImage { protected CamImage(PApplet parent, int width, int height, int format, PixelFormat incomingFormat) { super(width, height, format); this.incomingFormat = incomingFormat; - System.out.println("Creating a CamImage " + width + " " + height + " " + format); + System.out.println("Creating a CamImage " + width + " " + height + " " + format + " " + incomingFormat.name()); camInit(parent); } diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java index 23c87536..4f6fd870 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java @@ -63,7 +63,6 @@ protected final void camInit(PApplet parent) { @Override public void update(IplImage iplImage) { - Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); ByteBuffer imageBuffer = iplImage.getByteBuffer(); diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index 839373da..fa49a710 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -65,11 +65,23 @@ public void update(opencv_core.IplImage iplImage) { Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); ByteBuffer imageBuffer = iplImage.getByteBuffer(); - + System.out.println("Sizes: " + imageBuffer.limit() + " " + this.pixels.length + " " + argbBuffer.limit()); + if (imageBuffer == null || imageBuffer.limit() == 0 || imageBuffer.capacity() == 0) { + System.out.println("imageBuffer null: The incoming image is empty."); + return; + } if (incomingFormat == PixelFormat.GRAY) { // P5 does not know real Gray textures, we need to convert it... Utils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); } + if (incomingFormat == PixelFormat.GRAY_32) { + // P5 does not know real Gray textures, we need to convert it... + Utils.byteBufferGRAY32toARGB(imageBuffer, argbBuffer); + } + if (incomingFormat == PixelFormat.FLOAT_DEPTH_KINECT2) { + // P5 does not know real Gray textures, we need to convert it... + Utils.byteBufferDepthK2toARGB(imageBuffer, argbBuffer); + } if (incomingFormat == PixelFormat.REALSENSE_Z16) { Utils.byteBufferZ16toARGB(imageBuffer, argbBuffer); } diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 70c4d7c3..79f5c0b0 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -62,13 +62,13 @@ public abstract class Camera extends Node implements PConstants, HasExtrinsics { private boolean hasExtrinsics = false; public enum Type { - OPENCV, FFMPEG, PROCESSING, OPEN_KINECT, OPEN_KINECT_IR, FLY_CAPTURE, KINECT2_RGB, REALSENSE_RGB, REALSENSE_IR, KINECT2_IR, - REALSENSE_DEPTH, OPENCV_DEPTH, OPEN_KINECT_2_RGB, FAKE + OPENCV, FFMPEG, PROCESSING, OPEN_KINECT, OPEN_KINECT_IR, FLY_CAPTURE, KINECT2_RGB, REALSENSE_RGB, REALSENSE_IR, KINECT2_IR, + REALSENSE_DEPTH, OPENCV_DEPTH, OPEN_KINECT_2_RGB, OPEN_KINECT_2_IR, FAKE } public enum PixelFormat { - RGB, BGR, ARGB, RGBA, GRAY, DEPTH_KINECT_MM, DEPTH_KINECT_RAW, REALSENSE_Z16 + RGB, BGR, ARGB, RGBA, GRAY, GRAY_32, FLOAT_DEPTH_KINECT2, DEPTH_KINECT_MM, DEPTH_KINECT_RAW, REALSENSE_Z16 } protected PixelFormat format; @@ -103,9 +103,10 @@ public enum PixelFormat { protected String calibrationARToolkit; protected CameraThread thread = null; - protected List getSheets(){ + protected List getSheets() { return sheets; } + abstract public void start(); @Override @@ -139,6 +140,9 @@ protected void checkParameters() { } } + public void setSimpleCalibration(float fx, float fy, float cx, float cy) { + setSimpleCalibration(fx, fy, cx, cy, width(), height()); + } public void setSimpleCalibration(float fx, float fy, float cx, float cy, int w, int h) { this.calibrationFile = "manual calibration"; pdp = ProjectiveDeviceP.createSimpleDevice(fx, fy, cx, cy, w, h); @@ -263,10 +267,10 @@ public String getCalibrationARToolkit() { return calibrationARToolkit; } - - protected Semaphore getSheetSemaphore(){ + protected Semaphore getSheetSemaphore() { return sheetsSemaphore; } + /** * Add a markerboard to track with this camera. * @@ -391,7 +395,9 @@ protected void checkCamImage() { protected boolean isPixelFormatGray() { PixelFormat pixelFormat = getPixelFormat(); return pixelFormat == PixelFormat.GRAY + || pixelFormat == PixelFormat.GRAY_32 || pixelFormat == PixelFormat.REALSENSE_Z16 + || pixelFormat == PixelFormat.FLOAT_DEPTH_KINECT2 || pixelFormat == PixelFormat.DEPTH_KINECT_MM || pixelFormat == PixelFormat.DEPTH_KINECT_RAW; } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index 64e6fc84..6786d91c 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -44,8 +44,13 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { case OPENCV: camera = new CameraOpenCV(cameraNo); break; - case OPEN_KINECT_2_RGB: // Hack for now with V4L loopback. + case OPEN_KINECT_2_RGB: camera = new CameraOpenKinect2(0); + ((CameraRGBIRDepth)camera).actAsColorCamera(); + break; + case OPEN_KINECT_2_IR: + camera = new CameraOpenKinect2(0); + ((CameraRGBIRDepth)camera).actAsIRCamera(); break; case KINECT2_RGB: // Hack for now with V4L loopback. camera = new CameraOpenCV(0); @@ -58,12 +63,12 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { break; case REALSENSE_RGB: camRS = new CameraRealSense(cameraNo); - camRS.actAsColorCamera(true); + camRS.actAsColorCamera(); camera = camRS; break; case REALSENSE_IR: camRS = new CameraRealSense(cameraNo); - camRS.actAsIRCamera(true); + camRS.actAsIRCamera(); camera = camRS; break; // case REALSENSE_DEPTH: diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java index 54a586c0..5a19e399 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java @@ -19,34 +19,44 @@ */ package fr.inria.papart.procam.camera; -import org.bytedeco.javacpp.opencv_core.IplImage; import org.bytedeco.javacv.OpenKinect2FrameGrabber; -import processing.core.PImage; /** * * @author Jeremy Laviole */ -public class CameraOpenKinect2 extends Camera { +public class CameraOpenKinect2 extends CameraRGBIRDepth { protected OpenKinect2FrameGrabber grabber; protected CameraOpenKinect2(int cameraNo) { this.systemNumber = cameraNo; - this.setPixelFormat(PixelFormat.ARGB); + + depthCamera = new SubDepthCamera(this); + depthCamera.setPixelFormat(PixelFormat.FLOAT_DEPTH_KINECT2); + depthCamera.type = SubCamera.Type.DEPTH; + depthCamera.setSize(512, 424); + + colorCamera = new SubCamera(this); + colorCamera.setPixelFormat(PixelFormat.ARGB); + colorCamera.type = SubCamera.Type.COLOR; + colorCamera.setSize(1920, 1080); + + IRCamera = new SubCamera(this); + IRCamera.setPixelFormat(PixelFormat.GRAY_32); + IRCamera.type = SubCamera.Type.IR; + IRCamera.setSize(512, 424); } -// public void getIRVideo() { -// this.setPixelFormat(PixelFormat.GRAY); -// kinectVideoFormat = freenect.FREENECT_VIDEO_IR_8BIT; -// } @Override public void start() { - grabber = new OpenKinect2FrameGrabber(this.systemNumber); - grabber.enableColorStream(); - try { + colorCamera.start(); + IRCamera.start(); + depthCamera.start(); + + try { grabber.start(); this.isConnected = true; } catch (Exception e) { @@ -57,32 +67,8 @@ public void start() { } @Override - public void grab() { - - if (this.isClosing()) { - return; - } - - try { - grabber.grab(); - IplImage img = grabber.getVideoImage(); - updateCurrentImage(img); - - } catch (Exception e) { - System.err.println("Camera: OpenKinect2 Grab() Error ! " + e); - e.printStackTrace(); - } - } - - @Override - public PImage getPImage() { - this.checkCamImage(); - if (currentImage != null) { - camImage.update(currentImage); - return camImage; - } - // TODO: exceptions !!! - return null; + protected void internalGrab() throws Exception { + grabber.grab(); } @Override @@ -96,20 +82,51 @@ public void close() { } catch (Exception e) { } } + } + @Override + public void enableIR() { + grabber.enableIRStream(); + } + + @Override + public void disableIR() { + // Not implemented yet. + } + + @Override + public void enableDepth() { + grabber.enableDepthStream(); + } + + @Override + public void disableDepth() { + // Not implemented yet. + } + + @Override + public void enableColor() { + grabber.enableColorStream(); + } + + @Override + public void disableColor() { + // Not implemented yet. + } + + @Override + public void grabIR() { + IRCamera.updateCurrentImage(grabber.getIRImage()); + } + + @Override + public void grabDepth() { + depthCamera.currentImage = grabber.getDepthImage(); + } + + @Override + public void grabColor() { + colorCamera.updateCurrentImage(grabber.getVideoImage()); } -// public void setTouch(KinectTouchInput touchInput) { -// this.setGrabDepth(true); -// depthCamera.setTouchInput(touchInput); -// } -// -// public CameraOpenKinectDepth getDepthCamera() { -// this.setGrabDepth(true); -// return this.depthCamera; -// } -// -// public void setGrabDepth(boolean grabDepth) { -// this.isGrabbingDepth = grabDepth; -// } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java index c17dc3b0..432a4909 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java @@ -109,4 +109,14 @@ public void setDepthFormat(int depthFormat) { this.depthFormat = depthFormat; } + @Override + public void newTouchImage() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void newTouchImageWithColor(IplImage image) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java new file mode 100644 index 00000000..0845adf4 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -0,0 +1,424 @@ +/* + * Copyright (C) 2016 jiii. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package fr.inria.papart.procam.camera; + +import fr.inria.papart.procam.ProjectiveDeviceP; +import fr.inria.papart.tracking.DetectedMarker; +import fr.inria.papart.tracking.MarkerBoard; +import java.util.List; +import java.util.concurrent.Semaphore; +import org.bytedeco.javacpp.opencv_core; +import processing.core.PApplet; +import processing.core.PImage; +import processing.core.PMatrix3D; +import processing.core.PVector; + +/** + * + * @author jiii + */ +public abstract class CameraRGBIRDepth extends Camera { + + protected SubDepthCamera depthCamera; + protected SubCamera colorCamera; + protected SubCamera IRCamera; + private SubCamera actAsCamera = null; + + protected boolean useIR = true; + protected boolean useDepth = true; + protected boolean useColor = true; + protected boolean actAsColorCamera = false; + protected boolean actAsIRCamera = false; + + @Override + public void setParent(PApplet parent) { + super.setParent(parent); + depthCamera.setParent(parent); + IRCamera.setParent(parent); + colorCamera.setParent(parent); + } + + public SubDepthCamera getDepthCamera() { + return this.depthCamera; + } + + public SubCamera getIRCamera() { + return this.IRCamera; + } + + public SubCamera getColorCamera() { + return this.colorCamera; + } + + public SubCamera getActingCamera() { + return this.actAsCamera; + } + + public opencv_core.IplImage getDepthImage() { + return depthCamera.getIplImage(); + } + + public PImage getDepthPImage() { + return depthCamera.getPImage(); + } + + public PImage getColorImage() { + return colorCamera.getPImage(); + } + + public PImage getIRImage() { + return IRCamera.getPImage(); + } + + public abstract void enableIR(); + + public abstract void disableIR(); + + public abstract void enableDepth(); + + public abstract void disableDepth(); + + public abstract void enableColor(); + + public abstract void disableColor(); + + public abstract void grabIR(); + + public abstract void grabDepth(); + + public abstract void grabColor(); + + public void disable(SubCamera camera) { + if (camera.type == SubCamera.Type.DEPTH) { + disableDepth(); + } + if (camera.type == SubCamera.Type.IR) { + disableIR(); + } + if (camera.type == SubCamera.Type.COLOR) { + disableColor(); + } + } + + void start(SubCamera camera) { + if (camera.type == SubCamera.Type.DEPTH) { + enableDepth(); + } + if (camera.type == SubCamera.Type.IR) { + enableIR(); + } + if (camera.type == SubCamera.Type.COLOR) { + enableColor(); + } + } + + void grab(SubCamera camera) { + if (camera.type == SubCamera.Type.DEPTH) { + grabDepth(); + } + if (camera.type == SubCamera.Type.IR) { + grabIR(); + } + if (camera.type == SubCamera.Type.COLOR) { + grabColor(); + } + } + + protected abstract void internalGrab() throws Exception; + + @Override + public void grab() { + + if (this.isClosing()) { + return; + } + // update the images. + try { + internalGrab(); + + if (useColor) { + colorCamera.grab(); + } + + if (useIR) { + IRCamera.grab(); + } + + if (useDepth) { + depthCamera.grab(); + } + + if (actAsColorCamera || actAsIRCamera) { + currentImage = actAsCamera.currentImage; + } + } catch (Exception e) { + System.out.println("Exception :" + e); + e.printStackTrace(); + } + } + + public void actAsColorCamera() { + actAsCamera = colorCamera; + } + + public void actAsIRCamera() { + actAsCamera = IRCamera; + } + + // Generated delegate methods... + @Override + public PImage getPImage() { + return actAsCamera.getPImage(); + } + + @Override + public String toString() { + return actAsCamera.toString(); + } + + @Override + public PImage getImage() { + return actAsCamera.getImage(); + } + + @Override + void setMarkers(DetectedMarker[] detectedMarkers) { + actAsCamera.setMarkers(detectedMarkers); + } + + @Override + protected void checkParameters() { + actAsCamera.checkParameters(); + } + + @Override + public void setSimpleCalibration(float fx, float fy, float cx, float cy, int w, int h) { + actAsCamera.setSimpleCalibration(fx, fy, cx, cy, w, h); + } + + @Override + public void setCalibration(String fileName) { + actAsCamera.setCalibration(fileName); + } + + @Override + public PImage getPImageCopy() { + return actAsCamera.getPImageCopy(); + } + + @Override + public PImage getPImageCopy(PApplet context) { + return actAsCamera.getPImageCopy(context); + } + + @Override + public PImage getPImageCopyTo(PImage out) { + return actAsCamera.getPImageCopyTo(out); + } + + @Override + public void setCameraDevice(String description) { + actAsCamera.setCameraDevice(description); + } + + @Override + protected String getCameraDevice() { + return actAsCamera.getCameraDevice(); + } + + @Override + public void setSystemNumber(int systemNumber) { + actAsCamera.setSystemNumber(systemNumber); + } + + @Override + public void setFrameRate(int frameRate) { + actAsCamera.setFrameRate(frameRate); + } + + @Override + public int width() { + return actAsCamera.width(); + } + + @Override + public int height() { + return actAsCamera.height(); + } + + @Override + public void setSize(int width, int height) { + actAsCamera.setSize(width, height); + } + + @Override + public int getFrameRate() { + return actAsCamera.getFrameRate(); + } + + @Override + public boolean isUndistort() { + return actAsCamera.isUndistort(); + } + + @Override + public void setUndistort(boolean undistort) { + actAsCamera.setUndistort(undistort); + } + + @Override + public boolean isCalibrated() { + return actAsCamera.isCalibrated(); + } + + @Override + public String getCalibrationFile() { + return actAsCamera.getCalibrationFile(); + } + + @Override + public void initMarkerDetection(String calibrationARToolkit) { + actAsCamera.initMarkerDetection(calibrationARToolkit); + } + + @Override + public String getCalibrationARToolkit() { + return actAsCamera.getCalibrationARToolkit(); + } + + @Override + public void trackMarkerBoard(MarkerBoard sheet) { + System.out.println("In trackMarkerboard in CameaRealSense BAAAADD"); + actAsCamera.trackMarkerBoard(sheet); + } + + @Override + public void trackSheets(boolean auto) { + actAsCamera.trackSheets(auto); + } + + @Override + public boolean tracks(MarkerBoard board) { + return actAsCamera.tracks(board); + } + + @Override + public List getTrackedSheets() { + return actAsCamera.getTrackedSheets(); + } + + @Override + public DetectedMarker[] getDetectedMarkers() { + return actAsCamera.getDetectedMarkers(); + } + + @Override + protected Semaphore getSheetSemaphore() { + return actAsCamera.getSheetSemaphore(); + } + + // + @Override + public void setThread() { + if (thread == null) { + thread = new CameraThread(this); + thread.setCompute(actAsCamera.trackSheets); + actAsCamera.thread = thread; + thread.start(); + } else { + System.err.println("Camera: Error Thread already launched"); + } + } + + @Override + public void forceCurrentImage(opencv_core.IplImage img) { + actAsCamera.forceCurrentImage(img); + } + + @Override + protected void updateCurrentImage(opencv_core.IplImage img) { + actAsCamera.updateCurrentImage(img); + } + + @Override + protected void checkCamImage() { + actAsCamera.checkCamImage(); + } + + @Override + protected boolean isPixelFormatGray() { + return actAsCamera.isPixelFormatGray(); + } + + @Override + protected boolean isPixelFormatColor() { + return actAsCamera.isPixelFormatColor(); + } + + @Override + public opencv_core.IplImage getIplImage() { + return actAsCamera.getIplImage(); + } + + @Override + public ProjectiveDeviceP getProjectiveDevice() { + return actAsCamera.getProjectiveDevice(); + } + + @Override + protected void setClosing() { + actAsCamera.setClosing(); + } + + @Override + public boolean isClosing() { + return actAsCamera.isClosing(); + } + + @Override + public Camera.PixelFormat getPixelFormat() { + return actAsCamera.getPixelFormat(); + } + + @Override + public void setPixelFormat(Camera.PixelFormat format) { + actAsCamera.setPixelFormat(format); + } + + @Override + public boolean hasExtrinsics() { + return actAsCamera.hasExtrinsics(); + } + + @Override + public PMatrix3D getExtrinsics() { + return actAsCamera.getExtrinsics(); + } + + @Override + public void setExtrinsics(PMatrix3D extrinsics) { + actAsCamera.setExtrinsics(extrinsics); + } + + @Override + public PVector getViewPoint(PVector point) { + return actAsCamera.getViewPoint(point); + } + +} diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index cd8ab9c2..716a247c 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -1,59 +1,39 @@ /* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . + * Part of the PapARt project - https://project.inria.fr/papart/ + * + * Copyright (C) 2014-2016 Inria + * Copyright (C) 2011-2013 Bordeaux University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; If not, see + * . */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.ProjectiveDeviceP; -import fr.inria.papart.tracking.DetectedMarker; -import fr.inria.papart.tracking.MarkerBoard; import java.nio.FloatBuffer; -import java.util.List; -import java.util.concurrent.Semaphore; import java.util.logging.Level; import java.util.logging.Logger; import org.bytedeco.javacpp.RealSense; -import org.bytedeco.javacpp.opencv_core.IplImage; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.RealSenseFrameGrabber; -import processing.core.PApplet; -import processing.core.PImage; import processing.core.PMatrix3D; -import processing.core.PVector; /** * * @author Jeremy Laviole */ -public class CameraRealSense extends Camera { +public class CameraRealSense extends CameraRGBIRDepth { protected RealSenseFrameGrabber grabber; - protected CameraRealSenseDepth depthCamera; - protected CameraRealSenseColor colorCamera; - protected CameraRealSenseIR IRCamera; - private boolean useIR = true; - private boolean useDepth = true; - private boolean useColor = true; - - private boolean actAsColorCamera = false; - private boolean actAsIRCamera = false; - - private Camera actAsCamera = null; protected CameraRealSense(int cameraNo) { try { @@ -65,39 +45,26 @@ protected CameraRealSense(int cameraNo) { grabber = new RealSenseFrameGrabber(this.systemNumber); - depthCamera = new CameraRealSenseDepth(this); - colorCamera = new CameraRealSenseColor(this); - IRCamera = new CameraRealSenseIR(this); - } + depthCamera = new SubDepthCamera(this); + depthCamera.setPixelFormat(PixelFormat.REALSENSE_Z16); + depthCamera.setSize(640, 480); + depthCamera.type = SubCamera.Type.DEPTH; - @Override - public void setParent(PApplet parent) { - super.setParent(parent); - depthCamera.setParent(parent); - IRCamera.setParent(parent); - colorCamera.setParent(parent); + colorCamera = new SubCamera(this); + colorCamera.setPixelFormat(PixelFormat.RGB); + colorCamera.type = SubCamera.Type.COLOR; + colorCamera.setSize(960, 540); + + IRCamera = new SubCamera(this); + IRCamera.setSize(640, 480); + IRCamera.setPixelFormat(PixelFormat.GRAY); + IRCamera.type = SubCamera.Type.IR; } public RealSenseFrameGrabber getFrameGrabber() { return this.grabber; } - public CameraRealSenseDepth getDepthCamera() { - return this.depthCamera; - } - - public CameraRealSenseIR getIRCamera() { - return this.IRCamera; - } - - public CameraRealSenseColor getColorCamera() { - return this.colorCamera; - } - - public Camera getActingCamera() { - return this.actAsCamera; - } - public PMatrix3D getHardwareExtrinsics() { RealSense.extrinsics extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.color, RealSense.depth); FloatBuffer fb = extrinsics.position(0).asByteBuffer().asFloatBuffer(); @@ -108,29 +75,19 @@ public PMatrix3D getHardwareExtrinsics() { 0, 0, 0, 1); } - public void setSize(int w, int h) { - colorCamera.setSize(w, h); - } - @Override public void start() { - if (useDepth) { - depthCamera.start(); - } - if (useColor) { - colorCamera.start(); - } - if (useIR) { - IRCamera.start(); - } + depthCamera.start(); + colorCamera.start(); + IRCamera.start(); try { grabber.start(); this.isConnected = true; } catch (Exception e) { - System.err.println("Could not start frameGrabber... " + e); - System.err.println("Could not camera start frameGrabber... " + e); + System.err.println("Could not start RealSenseGrabber... " + e); + System.err.println("Could not camera start RealSenseGrabber... " + e); System.err.println("Camera ID " + this.systemNumber + " could not start."); System.err.println("Check cable connection, ID and resolution asked."); @@ -139,52 +96,13 @@ public void start() { } @Override - public void grab() { - - if (this.isClosing()) { - return; - } - // update the images. - try { - grabber.grab(); - - if (useColor) { - colorCamera.grab(); - if (actAsColorCamera) { - currentImage = colorCamera.currentImage; - } - } - - if (useIR) { - IRCamera.grab(); - if (actAsIRCamera) { - currentImage = IRCamera.currentImage; - } - } - - if (useDepth) { - depthCamera.grab(); - } - } catch (Exception e) { - System.out.println("Exception :" + e); - e.printStackTrace(); - } - } - - public IplImage getDepthImage() { - return depthCamera.getIplImage(); - } - - public PImage getDepthPImage() { - return depthCamera.getPImage(); - } - - public PImage getColorImage() { - return colorCamera.getPImage(); + public void internalGrab() throws Exception { + System.out.println("Realsense: main grab"); + grabber.grab(); } - public PImage getIRImage() { - return IRCamera.getPImage(); + public float getDepthScale() { + return grabber.getDepthScale(); } @Override @@ -201,279 +119,78 @@ public void close() { } } - public void useDepth(boolean useDepth) { - this.useDepth = useDepth; - } - - public void useIR(boolean useIR) { - this.useIR = useIR; - } - - public void useColor(boolean useColor) { - this.useColor = useColor; - } - - public void actAsColorCamera(boolean isColorCam) { - this.actAsColorCamera = isColorCam; - if (isColorCam) { - actAsCamera = colorCamera; + public static void useHarwareIntrinsics(SubCamera camera, RealSenseFrameGrabber grabber) { + int camType = 0; + if (camera.type == SubCamera.Type.COLOR) { + camType = RealSense.color; } - } - - public void actAsIRCamera(boolean isIRCam) { - this.actAsIRCamera = isIRCam; - if (isIRCam) { - actAsCamera = IRCamera; + if (camera.type == SubCamera.Type.IR) { + camType = RealSense.infrared; } - } - - // Generated delegate methods... - @Override - public PImage getPImage() { - return actAsCamera.getPImage(); - } - - @Override - public String toString() { - return actAsCamera.toString(); - } - - @Override - public PImage getImage() { - return actAsCamera.getImage(); - } - - @Override - void setMarkers(DetectedMarker[] detectedMarkers) { - actAsCamera.setMarkers(detectedMarkers); - } - - @Override - protected void checkParameters() { - actAsCamera.checkParameters(); - } - - @Override - public void setSimpleCalibration(float fx, float fy, float cx, float cy, int w, int h) { - actAsCamera.setSimpleCalibration(fx, fy, cx, cy, w, h); - } - - @Override - public void setCalibration(String fileName) { - actAsCamera.setCalibration(fileName); - } - - @Override - public PImage getPImageCopy() { - return actAsCamera.getPImageCopy(); - } - - @Override - public PImage getPImageCopy(PApplet context) { - return actAsCamera.getPImageCopy(context); - } - - @Override - public PImage getPImageCopyTo(PImage out) { - return actAsCamera.getPImageCopyTo(out); - } - - @Override - public void setCameraDevice(String description) { - actAsCamera.setCameraDevice(description); - } - - @Override - protected String getCameraDevice() { - return actAsCamera.getCameraDevice(); - } - - @Override - public void setSystemNumber(int systemNumber) { - actAsCamera.setSystemNumber(systemNumber); - } - - @Override - public void setFrameRate(int frameRate) { - actAsCamera.setFrameRate(frameRate); - } - - @Override - public int width() { - return actAsCamera.width(); - } - - @Override - public int height() { - return actAsCamera.height(); - } - - @Override - public int getFrameRate() { - return actAsCamera.getFrameRate(); - } - - @Override - public boolean isUndistort() { - return actAsCamera.isUndistort(); - } - - @Override - public void setUndistort(boolean undistort) { - actAsCamera.setUndistort(undistort); - } - - @Override - public boolean isCalibrated() { - return actAsCamera.isCalibrated(); - } - - @Override - public String getCalibrationFile() { - return actAsCamera.getCalibrationFile(); - } - - @Override - public void initMarkerDetection(String calibrationARToolkit) { - actAsCamera.initMarkerDetection(calibrationARToolkit); - } - - @Override - public String getCalibrationARToolkit() { - return actAsCamera.getCalibrationARToolkit(); - } -// -// @Override -// public void trackMarkerBoard(MarkerBoard sheet) { -// sheet.addTracker(parent, actAsCamera); -// try { -// getSheetSemaphore().acquire(); -// actAsCamera.getSheets().add(sheet); -// getSheetSemaphore().release(); -// } catch (InterruptedException ex) { -// System.out.println("Interrupted !"); -// Logger.getLogger(Camera.class.getName()).log(Level.SEVERE, null, ex); -// } catch (NullPointerException e) { -// throw new RuntimeException("Marker detection not initialized. " + e); -// } -// } - - @Override - public void trackMarkerBoard(MarkerBoard sheet) { - System.out.println("In trackMarkerboard in CameaRealSense BAAAADD"); - actAsCamera.trackMarkerBoard(sheet); - } - - @Override - public void trackSheets(boolean auto) { - actAsCamera.trackSheets(auto); - } - - @Override - public boolean tracks(MarkerBoard board) { - return actAsCamera.tracks(board); - } - - @Override - public List getTrackedSheets() { - return actAsCamera.getTrackedSheets(); - } - - @Override - public DetectedMarker[] getDetectedMarkers() { - return actAsCamera.getDetectedMarkers(); - } - - @Override - protected Semaphore getSheetSemaphore() { - return actAsCamera.getSheetSemaphore(); - } - // - @Override - public void setThread() { - if (thread == null) { - thread = new CameraThread(this); - thread.setCompute(actAsCamera.trackSheets); - actAsCamera.thread = thread; - thread.start(); - } else { - System.err.println("Camera: Error Thread already launched"); + if (camera.type == SubCamera.Type.DEPTH) { + camType = RealSense.depth; } + RealSense.intrinsics intrinsics = grabber.getRealSenseDevice().get_stream_intrinsics(camType); + FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); + float cx = fb.get(2); + float cy = fb.get(3); + float fx = fb.get(4); + float fy = fb.get(5); + camera.setSimpleCalibration(fx, fy, cx, cy); } @Override - public void forceCurrentImage(IplImage img) { - actAsCamera.forceCurrentImage(img); - } - - @Override - protected void updateCurrentImage(IplImage img) { - actAsCamera.updateCurrentImage(img); - } - - @Override - protected void checkCamImage() { - actAsCamera.checkCamImage(); - } - - @Override - protected boolean isPixelFormatGray() { - return actAsCamera.isPixelFormatGray(); - } - - @Override - protected boolean isPixelFormatColor() { - return actAsCamera.isPixelFormatColor(); - } - - @Override - public IplImage getIplImage() { - return actAsCamera.getIplImage(); - } - - @Override - public ProjectiveDeviceP getProjectiveDevice() { - return actAsCamera.getProjectiveDevice(); + public void grabColor() { + System.out.println("Realsense: Grab Color"); + colorCamera.updateCurrentImage(grabber.grabVideo()); } @Override - protected void setClosing() { - actAsCamera.setClosing(); + public void grabIR() { + IRCamera.updateCurrentImage(grabber.grabIR()); } @Override - public boolean isClosing() { - return actAsCamera.isClosing(); + public void grabDepth() { + depthCamera.updateCurrentImage(grabber.grabDepth()); + // update the touch input + ((WithTouchInput) depthCamera).newTouchImageWithColor(colorCamera.currentImage); } @Override - public PixelFormat getPixelFormat() { - return actAsCamera.getPixelFormat(); + public void enableIR() { + grabber.setIRImageWidth(IRCamera.width()); + grabber.setIRImageHeight(IRCamera.height()); + grabber.enableIRStream(); } @Override - public void setPixelFormat(PixelFormat format) { - actAsCamera.setPixelFormat(format); + public void disableIR() { + grabber.disableIRStream(); } @Override - public boolean hasExtrinsics() { - return actAsCamera.hasExtrinsics(); + public void enableDepth() { + grabber.setDepthImageWidth(depthCamera.width()); + grabber.setDepthImageHeight(depthCamera.height()); + grabber.enableDepthStream(); } @Override - public PMatrix3D getExtrinsics() { - return actAsCamera.getExtrinsics(); + public void disableDepth() { + grabber.disableDepthStream(); } @Override - public void setExtrinsics(PMatrix3D extrinsics) { - actAsCamera.setExtrinsics(extrinsics); + public void enableColor() { + grabber.setImageWidth(colorCamera.width()); + grabber.setImageHeight(colorCamera.height()); + grabber.enableColorStream(); } @Override - public PVector getViewPoint(PVector point) { - return actAsCamera.getViewPoint(point); + public void disableColor() { + grabber.disableColorStream(); } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java deleted file mode 100755 index 0656eac0..00000000 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseColor.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2016 Jérémy Laviole - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.procam.camera; - -import java.nio.FloatBuffer; -import org.bytedeco.javacpp.RealSense; -import processing.core.PImage; - -/** - * - * @author Jeremy Laviole - */ -public class CameraRealSenseColor extends Camera { - - private CameraRealSense mainCamera; - - protected CameraRealSenseColor(CameraRealSense mainCamera) { - setPixelFormat(PixelFormat.RGB); - this.mainCamera = mainCamera; - } - - public CameraRealSense getMainCamera(){ - return mainCamera; - } - - public void useHarwareIntrinsics() { - RealSense.intrinsics intrinsics = mainCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.color); - FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); - float cx = fb.get(2); - float cy = fb.get(3); - float fx = fb.get(4); - float fy = fb.get(5); - setSimpleCalibration(fx, fy, cx, cy, width(), height()); - } - - @Override - public void start() { - mainCamera.grabber.setImageWidth(width()); - mainCamera.grabber.setImageHeight(height()); - mainCamera.grabber.enableColorStream(); - this.isConnected = true; - } - - @Override - public void grab() { - if (this.isClosing()) { - return; - } - - // update the images. - try { - currentImage = mainCamera.grabber.grabVideo(); - } catch (Exception e) { - System.out.println("Exception :" + e); - e.printStackTrace(); - } - } - - @Override - public PImage getPImage() { - this.checkCamImage(); - if (currentImage != null) { - camImage.update(currentImage); - return camImage; - } - // TODO: exceptions !!! - return null; - } - - @Override - public void close() { - this.setClosing(); - mainCamera.useColor(false); - mainCamera.grabber.disableColorStream(); - - } - -} diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java deleted file mode 100755 index ed6f3018..00000000 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseDepth.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2016 Jérémy Laviole - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.procam.camera; - -import fr.inria.papart.multitouch.KinectTouchInput; -import java.nio.FloatBuffer; -import org.bytedeco.javacpp.RealSense; -import processing.core.PImage; - -/** - * - * @author Jeremy Laviole - */ -public class CameraRealSenseDepth extends Camera implements WithTouchInput { - - CameraRealSense mainCamera; - private KinectTouchInput touchInput; - - protected CameraRealSenseDepth(CameraRealSense colorCamera) { - setPixelFormat(PixelFormat.REALSENSE_Z16); - this.mainCamera = colorCamera; - this.setSize(640, 480); - } - - public CameraRealSense getMainCamera() { - return mainCamera; - } - - public void useHarwareIntrinsics() { - RealSense.intrinsics intrinsics = mainCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.depth); - FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); - float cx = fb.get(2); - float cy = fb.get(3); - float fx = fb.get(4); - float fy = fb.get(5); - setSimpleCalibration(fx, fy, cx, cy, width(), height()); - } - - @Override - public void start() { - mainCamera.grabber.setDepthImageWidth(width()); - mainCamera.grabber.setDepthImageHeight(height()); - mainCamera.grabber.enableDepthStream(); - this.isConnected = true; - } - - public float getDepthScale() { - return mainCamera.grabber.getDepthScale(); - } - - @Override - public void grab() { - if (this.isClosing()) { - return; - } - // update the images. - try { - currentImage = mainCamera.grabber.grabDepth(); - if (touchInput != null) { - touchInput.lock(); - touchInput.update(); - touchInput.getTouch2DColors(mainCamera.currentImage); - touchInput.unlock(); - } else if (touchInput != null) { - System.err.println("Error, the TouchInput is set, but no DepthImg is grabbed."); - } - } catch (Exception e) { - System.out.println("Exception :" + e); - e.printStackTrace(); - } - } - - @Override - public PImage getPImage() { - this.checkCamImage(); - if (currentImage != null) { - camImage.update(currentImage); - return camImage; - } - // TODO: exceptions !!! - return null; - } - - @Override - public KinectTouchInput getTouchInput() { - return touchInput; - } - - @Override - public void setTouchInput(KinectTouchInput touchInput) { - this.touchInput = touchInput; - } - - @Override - public void close() { - this.setClosing(); - mainCamera.useDepth(false); - mainCamera.grabber.disableDepthStream(); - - } - -} diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java deleted file mode 100755 index b6a62653..00000000 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSenseIR.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2016 Jérémy Laviole - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.procam.camera; - -import java.nio.FloatBuffer; -import org.bytedeco.javacpp.RealSense; -import processing.core.PImage; - -/** - * - * @author Jeremy Laviole - */ -public class CameraRealSenseIR extends Camera { - - CameraRealSense mainCamera; - - protected CameraRealSenseIR(CameraRealSense colorCamera) { - this.mainCamera = colorCamera; - this.width = 640; - this.height = 480; - setPixelFormat(PixelFormat.GRAY); - } - - public CameraRealSense getMainCamera() { - return mainCamera; - } - - public void useHarwareIntrinsics() { - RealSense.intrinsics intrinsics = mainCamera.grabber.getRealSenseDevice().get_stream_intrinsics(RealSense.infrared); - FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); - float cx = fb.get(2); - float cy = fb.get(3); - float fx = fb.get(4); - float fy = fb.get(5); - setSimpleCalibration(fx, fy, cx, cy, width(), height()); - } - - @Override - public void start() { - mainCamera.grabber.setIRImageWidth(width()); - mainCamera.grabber.setIRImageHeight(height()); - mainCamera.grabber.enableIRStream(); - this.isConnected = true; - } - - @Override - public void grab() { - if (this.isClosing()) { - return; - } - // update the images. - try { - currentImage = mainCamera.grabber.grabIR(); - } catch (Exception e) { - System.out.println("Exception :" + e); - e.printStackTrace(); - } - } - - @Override - public PImage getPImage() { - this.checkCamImage(); - if (currentImage != null) { - camImage.update(currentImage); - return camImage; - } - // TODO: exceptions !!! - return null; - } - - @Override - public void close() { - this.setClosing(); - mainCamera.useIR(false); - mainCamera.grabber.disableIRStream(); - - } - -} diff --git a/papart/src/fr/inria/papart/procam/camera/SubCamera.java b/papart/src/fr/inria/papart/procam/camera/SubCamera.java new file mode 100644 index 00000000..c8efcbdf --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/SubCamera.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2016 jiii. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package fr.inria.papart.procam.camera; + +import processing.core.PImage; + +/** + * + * @author jiii + */ +public class SubCamera extends Camera { + + public enum Type { + IR, COLOR, DEPTH + } + + protected CameraRGBIRDepth mainCamera; + public Type type; + + public SubCamera(CameraRGBIRDepth mainCamera) { + this.mainCamera = mainCamera; + } + + public Camera getMainCamera() { + return mainCamera; + } + + @Override + public void start() { + mainCamera.start(this); + isConnected = true; + } + + @Override + public void grab() { + mainCamera.grab(this); + } + + @Override + public void close() { + this.setClosing(); + this.isConnected = false; + mainCamera.disable(this); + } + + @Override + public PImage getPImage() { + this.checkCamImage(); + if (currentImage != null) { + camImage.update(currentImage); + return camImage; + } + // TODO: exceptions !!! + return null; + } +} diff --git a/papart/src/fr/inria/papart/procam/camera/SubDepthCamera.java b/papart/src/fr/inria/papart/procam/camera/SubDepthCamera.java new file mode 100644 index 00000000..be700171 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/camera/SubDepthCamera.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2016 jiii. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package fr.inria.papart.procam.camera; + +import fr.inria.papart.multitouch.KinectTouchInput; +import fr.inria.papart.multitouch.TouchInput; +import org.bytedeco.javacpp.opencv_core; + +/** + * + * @author jiii + */ +public class SubDepthCamera extends SubCamera implements WithTouchInput{ + + private KinectTouchInput touchInput; + + public SubDepthCamera(CameraRGBIRDepth mainCamera) { + super(mainCamera); + } + + @Override + public KinectTouchInput getTouchInput() { + return touchInput; + } + + @Override + public void setTouchInput(KinectTouchInput touchInput) { + this.touchInput = touchInput; + } + + @Override + public void newTouchImageWithColor(opencv_core.IplImage colorImage) { + if (touchInput != null) { + touchInput.lock(); + touchInput.update(); + touchInput.getTouch2DColors(colorImage); + touchInput.unlock(); + } else if (touchInput != null) { + System.err.println("Error, the TouchInput is set, but no DepthImg is grabbed."); + } + } + @Override + public void newTouchImage() { + if (touchInput != null) { + touchInput.lock(); + touchInput.update(); + touchInput.unlock(); + } else if (touchInput != null) { + System.err.println("Error, the TouchInput is set, but no DepthImg is grabbed."); + } + } +} diff --git a/papart/src/fr/inria/papart/procam/camera/WithTouchInput.java b/papart/src/fr/inria/papart/procam/camera/WithTouchInput.java index 8841e20d..62feac8b 100644 --- a/papart/src/fr/inria/papart/procam/camera/WithTouchInput.java +++ b/papart/src/fr/inria/papart/procam/camera/WithTouchInput.java @@ -19,6 +19,7 @@ package fr.inria.papart.procam.camera; import fr.inria.papart.multitouch.KinectTouchInput; +import org.bytedeco.javacpp.opencv_core.IplImage; /** * @@ -28,4 +29,6 @@ public interface WithTouchInput { public KinectTouchInput getTouchInput(); public void setTouchInput(KinectTouchInput touchInput) ; + public void newTouchImage(); + public void newTouchImageWithColor(IplImage image); } From 65a72a065a322d7f94b6802ec3335a224547903a Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 8 Nov 2016 17:47:40 +0100 Subject: [PATCH 23/99] Kinect 1 also converted partially. --- papart/src/fr/inria/papart/procam/Utils.java | 17 +++ .../papart/procam/camera/CamImageGray.java | 6 +- .../fr/inria/papart/procam/camera/Camera.java | 5 +- .../papart/procam/camera/CameraFactory.java | 12 +- .../procam/camera/CameraOpenKinect.java | 123 +++++++++--------- .../procam/camera/CameraOpenKinectDepth.java | 122 ----------------- .../procam/camera/CameraRGBIRDepth.java | 27 +++- 7 files changed, 110 insertions(+), 202 deletions(-) delete mode 100755 papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index 3d38b06e..09e5ec6d 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -662,6 +662,23 @@ static public void byteBufferDepthK2toARGB(ByteBuffer gray, ByteBuffer argb) { } argb.rewind(); } + static public void byteBufferDepthK1MMtoARGB(ByteBuffer gray, ByteBuffer argb) { + byte[] depthRaw = new byte[2]; + + for (int i = 0; i < argb.capacity(); i += 4) { + gray.get(depthRaw); + + int d = (depthRaw[0] & 0xFF) << 8 | (depthRaw[1] & 0xFF); + + // min depth: 400 + byte dValue = (byte) ((d - 300f) / 3000f * 255f); + argb.put(dValue); + argb.put(dValue); + argb.put(dValue); + argb.put((byte) 255); + } + argb.rewind(); + } static public void byteBufferZ16toARGB(ByteBuffer gray, ByteBuffer argb) { byte[] tmpArr = new byte[2]; diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index fa49a710..aab07e4d 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -71,17 +71,17 @@ public void update(opencv_core.IplImage iplImage) { return; } if (incomingFormat == PixelFormat.GRAY) { - // P5 does not know real Gray textures, we need to convert it... Utils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); } if (incomingFormat == PixelFormat.GRAY_32) { - // P5 does not know real Gray textures, we need to convert it... Utils.byteBufferGRAY32toARGB(imageBuffer, argbBuffer); } if (incomingFormat == PixelFormat.FLOAT_DEPTH_KINECT2) { - // P5 does not know real Gray textures, we need to convert it... Utils.byteBufferDepthK2toARGB(imageBuffer, argbBuffer); } + if (incomingFormat == PixelFormat.DEPTH_KINECT_MM) { + Utils.byteBufferDepthK1MMtoARGB(imageBuffer, argbBuffer); + } if (incomingFormat == PixelFormat.REALSENSE_Z16) { Utils.byteBufferZ16toARGB(imageBuffer, argbBuffer); } diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 79f5c0b0..57af6656 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -68,7 +68,7 @@ public enum Type { public enum PixelFormat { - RGB, BGR, ARGB, RGBA, GRAY, GRAY_32, FLOAT_DEPTH_KINECT2, DEPTH_KINECT_MM, DEPTH_KINECT_RAW, REALSENSE_Z16 + RGB, BGR, ARGB, RGBA, GRAY, GRAY_32, FLOAT_DEPTH_KINECT2, DEPTH_KINECT_MM, REALSENSE_Z16 } protected PixelFormat format; @@ -398,8 +398,7 @@ protected boolean isPixelFormatGray() { || pixelFormat == PixelFormat.GRAY_32 || pixelFormat == PixelFormat.REALSENSE_Z16 || pixelFormat == PixelFormat.FLOAT_DEPTH_KINECT2 - || pixelFormat == PixelFormat.DEPTH_KINECT_MM - || pixelFormat == PixelFormat.DEPTH_KINECT_RAW; + || pixelFormat == PixelFormat.DEPTH_KINECT_MM; } protected boolean isPixelFormatColor() { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index 6786d91c..e0460d58 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -39,18 +39,18 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { } Camera camera; - CameraRealSense camRS; + CameraRealSense camRS; switch (type) { case OPENCV: camera = new CameraOpenCV(cameraNo); break; - case OPEN_KINECT_2_RGB: + case OPEN_KINECT_2_RGB: camera = new CameraOpenKinect2(0); - ((CameraRGBIRDepth)camera).actAsColorCamera(); + ((CameraRGBIRDepth) camera).actAsColorCamera(); break; - case OPEN_KINECT_2_IR: + case OPEN_KINECT_2_IR: camera = new CameraOpenKinect2(0); - ((CameraRGBIRDepth)camera).actAsIRCamera(); + ((CameraRGBIRDepth) camera).actAsIRCamera(); break; case KINECT2_RGB: // Hack for now with V4L loopback. camera = new CameraOpenCV(0); @@ -82,7 +82,7 @@ public static Camera createCamera(Camera.Type type, int cameraNo) { break; case OPEN_KINECT: camera = new CameraOpenKinect(cameraNo); - ((CameraOpenKinect) camera).getRGBVideo(); + ((CameraRGBIRDepth) camera).actAsColorCamera(); break; case FLY_CAPTURE: camera = new CameraFlyCapture(cameraNo); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java index 3cea0eeb..d69dc7c1 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java @@ -23,8 +23,11 @@ import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Utils; import java.util.HashMap; +import java.util.logging.Level; +import java.util.logging.Logger; import org.bytedeco.javacpp.freenect; import org.bytedeco.javacpp.opencv_core.IplImage; +import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.OpenKinectFrameGrabber; import processing.core.PApplet; import processing.core.PImage; @@ -33,36 +36,44 @@ * * @author Jeremy Laviole */ -public class CameraOpenKinect extends Camera implements Displayable { +public class CameraOpenKinect extends CameraRGBIRDepth { - private boolean isGrabbingDepth = false; protected OpenKinectFrameGrabber grabber; - int kinectVideoFormat; - private final CameraOpenKinectDepth depthCamera; protected CameraOpenKinect(int cameraNo) { this.systemNumber = cameraNo; - depthCamera = new CameraOpenKinectDepth(this); + depthCamera = new SubDepthCamera(this); + depthCamera.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); + depthCamera.type = SubCamera.Type.DEPTH; + depthCamera.setSize(640, 480); + + colorCamera = new SubCamera(this); + colorCamera.setPixelFormat(PixelFormat.BGR); + colorCamera.type = SubCamera.Type.COLOR; + colorCamera.setSize(640, 480); getRGBVideo(); + + useIR = false; } public void getIRVideo() { - this.setPixelFormat(PixelFormat.GRAY); + colorCamera.setPixelFormat(PixelFormat.GRAY); kinectVideoFormat = freenect.FREENECT_VIDEO_IR_8BIT; } public void getRGBVideo() { - this.setPixelFormat(PixelFormat.BGR); + colorCamera.setPixelFormat(PixelFormat.BGR); kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; } @Override public void start() { grabber = new OpenKinectFrameGrabber(this.systemNumber); - grabber.setImageWidth(width()); - grabber.setImageHeight(height()); + + colorCamera.start(); + depthCamera.start(); try { grabber.start(); @@ -78,38 +89,6 @@ public void start() { } } - @Override - public void grab() { - - if (this.isClosing()) { - return; - } - - try { - IplImage img = grabber.grabVideo(); - updateCurrentImage(img); - - if (this.isGrabbingDepth) { - depthCamera.grab(); - } - - } catch (Exception e) { - System.err.println("Camera: Kinect Grab() Error ! " + e); - e.printStackTrace(); - } - } - - @Override - public PImage getPImage() { - this.checkCamImage(); - if (currentImage != null) { - camImage.update(currentImage); - return camImage; - } - // TODO: exceptions !!! - return null; - } - @Override public void close() { setClosing(); @@ -118,47 +97,67 @@ public void close() { System.out.println("Stopping KinectGrabber"); this.stopThread(); grabber.stop(); - if (this.isGrabbingDepth) { - depthCamera.close(); - } + depthCamera.close(); } catch (Exception e) { } } } - public void setTouch(KinectTouchInput touchInput) { - this.setGrabDepth(true); - depthCamera.setTouchInput(touchInput); + @Override + public void enableIR() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } - public CameraOpenKinectDepth getDepthCamera() { - this.setGrabDepth(true); - return this.depthCamera; + @Override + public void disableIR() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } - public void setGrabDepth(boolean grabDepth) { - this.isGrabbingDepth = grabDepth; + @Override + public void enableDepth() { } - HashMap imageMap = new HashMap(); + @Override + public void disableDepth() { + } + + @Override + public void enableColor() { + grabber.setImageWidth(width()); + grabber.setImageHeight(height()); + } @Override - public void prepareToDisplayOn(PApplet display) { - PImage image = display.createImage(this.width, this.height, RGB); - imageMap.put(display, image); + public void disableColor() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override - public PImage getDisplayedOn(PApplet display) { - PImage image = imageMap.get(display); - Utils.IplImageToPImage(currentImage, false, image); - return image; + public void grabIR() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void grabDepth() { + try { + depthCamera.currentImage = grabber.grabDepth(); + } catch (FrameGrabber.Exception ex) { + Logger.getLogger(CameraOpenKinect.class.getName()).log(Level.SEVERE, null, ex); + } + } + + @Override + public void grabColor() { + try { + colorCamera.updateCurrentImage(grabber.grabVideo()); + } catch (FrameGrabber.Exception ex) { + Logger.getLogger(CameraOpenKinect.class.getName()).log(Level.SEVERE, null, ex); + } } @Override - public boolean canBeDisplayedOn(PApplet display) { - return imageMap.containsKey(display); + protected void internalGrab() throws Exception { } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java deleted file mode 100755 index 432a4909..00000000 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinectDepth.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.procam.camera; - -import fr.inria.papart.multitouch.KinectTouchInput; -import fr.inria.papart.procam.Utils; -import org.bytedeco.javacpp.freenect; -import org.bytedeco.javacpp.opencv_core.IplImage; -import processing.core.PApplet; -import processing.core.PImage; - -/** - * - * @author Jeremy Laviole - */ -public class CameraOpenKinectDepth extends Camera implements WithTouchInput{ - - private CameraOpenKinect parent; - private int depthFormat = freenect.FREENECT_DEPTH_MM; - // other possibility freenect.FREENECT_DEPTH_10_BIT -> Obselete; - - private IplImage depthImage; - private KinectTouchInput touchInput; - private PImage camImageDepth = null; - - protected CameraOpenKinectDepth(CameraOpenKinect parent) { - this.parent = parent; - this.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); - } - - // Nothing, this is virtual... - @Override - public void start() { - parent.grabber.setDepthFormat(depthFormat); - } - - @Override - public void grab() { - try { - IplImage img = parent.grabber.grabDepth(); - - this.currentImage = img; - if (touchInput != null) { - touchInput.lock(); - touchInput.update(); - touchInput.getTouch2DColors(parent.currentImage); - touchInput.unlock(); - } else { - if (touchInput != null) { - System.err.println("Error, the TouchInput is set, but no DepthImg is grabbed."); - } - } - } catch (Exception e) { - System.err.println("Camera: Kinect Grab depth Error ! " + e); - e.printStackTrace(); - } - - } - - @Override - public PImage getPImage() { - if (camImageDepth == null) { - camImageDepth = parent.parent.createImage(width, height, PApplet.ALPHA); - } - - if (depthImage != null) { - Utils.IplImageToPImageKinect(depthImage, false, camImageDepth); - } - return camImageDepth; - } - - @Override - public void close() { - setClosing(); - } - - @Override - public KinectTouchInput getTouchInput() { - return touchInput; - } - - @Override - public void setTouchInput(KinectTouchInput touchInput) { - this.touchInput = touchInput; - } - - public int getDepthFormat() { - return depthFormat; - } - - public void setDepthFormat(int depthFormat) { - this.depthFormat = depthFormat; - } - - @Override - public void newTouchImage() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void newTouchImageWithColor(IplImage image) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - -} diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java index 0845adf4..08219f18 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -49,9 +49,15 @@ public abstract class CameraRGBIRDepth extends Camera { @Override public void setParent(PApplet parent) { super.setParent(parent); - depthCamera.setParent(parent); - IRCamera.setParent(parent); - colorCamera.setParent(parent); + if (depthCamera != null) { + depthCamera.setParent(parent); + } + if (IRCamera != null) { + IRCamera.setParent(parent); + } + if (colorCamera != null) { + colorCamera.setParent(parent); + } } public SubDepthCamera getDepthCamera() { @@ -75,15 +81,24 @@ public opencv_core.IplImage getDepthImage() { } public PImage getDepthPImage() { - return depthCamera.getPImage(); + if (useDepth) { + return depthCamera.getPImage(); + } + return null; } public PImage getColorImage() { - return colorCamera.getPImage(); + if (useColor) { + return colorCamera.getPImage(); + } + return null; } public PImage getIRImage() { - return IRCamera.getPImage(); + if (useIR) { + return IRCamera.getPImage(); + } + return null; } public abstract void enableIR(); From 48e1e625b7e1ff30ce1669cf3e38bc2973ca648a Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 10 Nov 2016 16:07:48 +0100 Subject: [PATCH 24/99] Update on how depth + color cameras are handled. --- papart/src/fr/inria/papart/procam/Papart.java | 5 +- .../inria/papart/procam/camera/CamImage.java | 4 +- .../papart/procam/camera/CamImageColor.java | 1 - .../papart/procam/camera/CamImageGray.java | 6 +- .../fr/inria/papart/procam/camera/Camera.java | 4 +- .../papart/procam/camera/CameraFactory.java | 127 ++++++++---------- .../procam/camera/CameraOpenKinect.java | 76 ++++------- .../procam/camera/CameraOpenKinect2.java | 55 ++++---- .../procam/camera/CameraRGBIRDepth.java | 83 ++++++++++-- .../papart/procam/camera/CameraRealSense.java | 54 +++----- .../inria/papart/procam/camera/SubCamera.java | 5 +- 11 files changed, 218 insertions(+), 202 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 4e8c55a0..12a2894e 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -744,8 +744,7 @@ public void loadDefaultCameraKinect() { System.err.println("You must choose a camera to create a DepthCamera."); } - if (kinectConfiguration.getCameraType() == Camera.Type.REALSENSE_RGB - || kinectConfiguration.getCameraType() == Camera.Type.REALSENSE_IR) { + if (kinectConfiguration.getCameraType() == Camera.Type.REALSENSE) { kinectDevice = new RealSense(applet, (CameraRealSense) cameraTracking); return; } @@ -755,7 +754,7 @@ public void loadDefaultCameraKinect() { return; } - if (kinectConfiguration.getCameraType() == Camera.Type.KINECT2_RGB) { + if (kinectConfiguration.getCameraType() == Camera.Type.OPEN_KINECT_2) { kinectDevice = new KinectOne(applet, cameraTracking); return; } diff --git a/papart/src/fr/inria/papart/procam/camera/CamImage.java b/papart/src/fr/inria/papart/procam/camera/CamImage.java index 6cc07327..b7da58a0 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImage.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImage.java @@ -38,9 +38,11 @@ public abstract class CamImage extends PImage { protected CamImage(PApplet parent, int width, int height, int format, PixelFormat incomingFormat) { super(width, height, format); + System.out.println("CamImage: create..."); this.incomingFormat = incomingFormat; - System.out.println("Creating a CamImage " + width + " " + height + " " + format + " " + incomingFormat.name()); + System.out.println("CamImage: Creating a CamImage " + width + " " + height + " " + format + " " + incomingFormat.name()); camInit(parent); + System.out.println("CamImage: done."); } public CamImage(PApplet parent, Image img) { diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java index 4f6fd870..d95a342c 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java @@ -47,7 +47,6 @@ public CamImageColor(PApplet parent, int width, int height, Camera.PixelFormat f @Override protected final void camInit(PApplet parent) { this.parent = parent; - Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); if (tex == null) { throw new RuntimeException("CamImage: Impossible to get the Processing Texture. " diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index aab07e4d..3c21f32b 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -65,11 +65,7 @@ public void update(opencv_core.IplImage iplImage) { Texture tex = ((PGraphicsOpenGL) parent.g).getTexture(this); ByteBuffer imageBuffer = iplImage.getByteBuffer(); - System.out.println("Sizes: " + imageBuffer.limit() + " " + this.pixels.length + " " + argbBuffer.limit()); - if (imageBuffer == null || imageBuffer.limit() == 0 || imageBuffer.capacity() == 0) { - System.out.println("imageBuffer null: The incoming image is empty."); - return; - } + if (incomingFormat == PixelFormat.GRAY) { Utils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); } diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 57af6656..59abd936 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -62,8 +62,8 @@ public abstract class Camera extends Node implements PConstants, HasExtrinsics { private boolean hasExtrinsics = false; public enum Type { - OPENCV, FFMPEG, PROCESSING, OPEN_KINECT, OPEN_KINECT_IR, FLY_CAPTURE, KINECT2_RGB, REALSENSE_RGB, REALSENSE_IR, KINECT2_IR, - REALSENSE_DEPTH, OPENCV_DEPTH, OPEN_KINECT_2_RGB, OPEN_KINECT_2_IR, FAKE + OPENCV, FFMPEG, PROCESSING, OPEN_KINECT, FLY_CAPTURE, + REALSENSE, OPEN_KINECT_2, FAKE } public enum PixelFormat { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index e0460d58..11de9395 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -27,70 +27,8 @@ */ public class CameraFactory { - /** - * - * @param type either OPENCV_VIDEO or KINECT_VIDEO - * @param cameraNo id of the Camera starting from 0. - * @return - */ - public static Camera createCamera(Camera.Type type, int cameraNo) { - if (type == Type.PROCESSING) { - throw new RuntimeException("PROCESSING_VIDEO requires a String describing the camera."); - } - - Camera camera; - CameraRealSense camRS; - switch (type) { - case OPENCV: - camera = new CameraOpenCV(cameraNo); - break; - case OPEN_KINECT_2_RGB: - camera = new CameraOpenKinect2(0); - ((CameraRGBIRDepth) camera).actAsColorCamera(); - break; - case OPEN_KINECT_2_IR: - camera = new CameraOpenKinect2(0); - ((CameraRGBIRDepth) camera).actAsIRCamera(); - break; - case KINECT2_RGB: // Hack for now with V4L loopback. - camera = new CameraOpenCV(0); - break; - case KINECT2_IR: // Hack for now with V4L loopback. - camera = new CameraOpenCV(2); - break; - case OPENCV_DEPTH: - camera = new CameraOpenCVDepth(cameraNo); - break; - case REALSENSE_RGB: - camRS = new CameraRealSense(cameraNo); - camRS.actAsColorCamera(); - camera = camRS; - break; - case REALSENSE_IR: - camRS = new CameraRealSense(cameraNo); - camRS.actAsIRCamera(); - camera = camRS; - break; -// case REALSENSE_DEPTH: -// camRS = new CameraRealSense(cameraNo); -// camRS.useColor(true); -// camera = camRS; -// break; - case OPEN_KINECT_IR: - camera = new CameraOpenKinect(cameraNo); - ((CameraOpenKinect) camera).getIRVideo(); - break; - case OPEN_KINECT: - camera = new CameraOpenKinect(cameraNo); - ((CameraRGBIRDepth) camera).actAsColorCamera(); - break; - case FLY_CAPTURE: - camera = new CameraFlyCapture(cameraNo); - break; - default: - throw new RuntimeException("ProCam, Camera: Unspported camera Type"); - } - return camera; + public static Camera createCamera(Camera.Type type) { + return createCamera(type, "0", ""); } public static Camera createCamera(Camera.Type type, String description) { @@ -102,11 +40,28 @@ public static Camera createCamera(Camera.Type type, String description) { * @param type must be PROCESSING_VIDEO or FFMPEG * @param description device of the camera (/dev/video0) or name. see the * Processing GettingStartedCamera example to get the name. + * @param format either ffmpeg format information, or RGB, IR, DEPTH to + * specify the default camera type. * @return */ public static Camera createCamera(Camera.Type type, String description, String format) { - Camera camera; + Camera camera = null; + CameraRGBIRDepth cameraMulti = null; + int cameraNo = 0; + boolean isInt = false; + try { + cameraNo = Integer.parseInt(description); + isInt = true; + } catch (NumberFormatException e) { + isInt = false; + } + boolean isRGB = format.equalsIgnoreCase("rgb") || format.equalsIgnoreCase("color"); + boolean isIR = format.equalsIgnoreCase("ir"); + boolean isDepth = format.equalsIgnoreCase("depth"); + + // classes to remove: + // camera = new CameraOpenCVDepth(cameraNo); switch (type) { case FFMPEG: camera = new CameraFFMPEG(description, format); @@ -114,15 +69,45 @@ public static Camera createCamera(Camera.Type type, String description, String f case PROCESSING: camera = new CameraProcessing(description); break; + // Depth Cameras + case OPEN_KINECT_2: + cameraMulti = new CameraOpenKinect2(cameraNo); + break; + case REALSENSE: + cameraMulti = new CameraRealSense(cameraNo); + break; + case OPEN_KINECT: + cameraMulti = new CameraOpenKinect(cameraNo); + break; + case OPENCV: + camera = new CameraOpenCV(cameraNo); + break; + case FLY_CAPTURE: + camera = new CameraFlyCapture(cameraNo); + break; default: - boolean isInt = checkInt(description); - if (!isInt) { - throw new RuntimeException("The description must be a number for this type."); - } - return createCamera(type, Integer.parseInt(description)); + throw new RuntimeException("ProCam, Camera: Unspported camera Type"); } - return camera; + if (cameraMulti != null) { + if (isRGB) { + cameraMulti.setUseColor(true); + cameraMulti.actAsColorCamera(); + } + if (isIR) { + cameraMulti.setUseIR(true); + cameraMulti.actAsIRCamera(); + } + if (isDepth) { + cameraMulti.setUseDepth(true); + cameraMulti.actAsDepthCamera(); + } + return cameraMulti; + } + if (camera != null) { + return camera; + } + throw new RuntimeException("ProCam, Camera: Unspported camera Type"); } private static boolean checkInt(String str) { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java index d69dc7c1..f7b67002 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java @@ -19,18 +19,11 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.graph.Displayable; -import fr.inria.papart.multitouch.KinectTouchInput; -import fr.inria.papart.procam.Utils; -import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; import org.bytedeco.javacpp.freenect; -import org.bytedeco.javacpp.opencv_core.IplImage; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.OpenKinectFrameGrabber; -import processing.core.PApplet; -import processing.core.PImage; /** * @@ -43,50 +36,31 @@ public class CameraOpenKinect extends CameraRGBIRDepth { protected CameraOpenKinect(int cameraNo) { this.systemNumber = cameraNo; - - depthCamera = new SubDepthCamera(this); - depthCamera.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); - depthCamera.type = SubCamera.Type.DEPTH; - depthCamera.setSize(640, 480); - - colorCamera = new SubCamera(this); - colorCamera.setPixelFormat(PixelFormat.BGR); - colorCamera.type = SubCamera.Type.COLOR; - colorCamera.setSize(640, 480); - getRGBVideo(); - - useIR = false; - } - - public void getIRVideo() { - colorCamera.setPixelFormat(PixelFormat.GRAY); - kinectVideoFormat = freenect.FREENECT_VIDEO_IR_8BIT; - } - - public void getRGBVideo() { - colorCamera.setPixelFormat(PixelFormat.BGR); - kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; } @Override - public void start() { + public void internalInit() { + if (isUseDepth()) { + depthCamera.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); + depthCamera.type = SubCamera.Type.DEPTH; + depthCamera.setSize(640, 480); + } + if (isUseColor()) { + colorCamera.setPixelFormat(PixelFormat.BGR); + colorCamera.type = SubCamera.Type.COLOR; + colorCamera.setSize(640, 480); + } + if (isUseIR()) { + IRCamera.setPixelFormat(PixelFormat.GRAY); + IRCamera.type = SubCamera.Type.IR; + IRCamera.setSize(640, 480); + } grabber = new OpenKinectFrameGrabber(this.systemNumber); + } - colorCamera.start(); - depthCamera.start(); - - try { - grabber.start(); - grabber.setVideoFormat(kinectVideoFormat); - - depthCamera.start(); - - this.isConnected = true; - } catch (Exception e) { - System.err.println("Could not Kinect start frameGrabber... " + e); - System.err.println("Kinect ID " + this.systemNumber + " could not start."); - System.err.println("Check cable connection and ID."); - } + @Override + public void internalStart() throws FrameGrabber.Exception { + grabber.start(); } @Override @@ -106,12 +80,10 @@ public void close() { @Override public void enableIR() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override public void disableIR() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override @@ -126,6 +98,8 @@ public void disableDepth() { public void enableColor() { grabber.setImageWidth(width()); grabber.setImageHeight(height()); + kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; + grabber.setVideoFormat(kinectVideoFormat); } @Override @@ -135,7 +109,11 @@ public void disableColor() { @Override public void grabIR() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + try { + IRCamera.updateCurrentImage(grabber.grabIR()); + } catch (FrameGrabber.Exception ex) { + Logger.getLogger(CameraOpenKinect.class.getName()).log(Level.SEVERE, null, ex); + } } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java index 5a19e399..c08ca4c0 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.procam.camera; +import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.OpenKinect2FrameGrabber; /** @@ -31,41 +32,37 @@ public class CameraOpenKinect2 extends CameraRGBIRDepth { protected CameraOpenKinect2(int cameraNo) { this.systemNumber = cameraNo; - - depthCamera = new SubDepthCamera(this); - depthCamera.setPixelFormat(PixelFormat.FLOAT_DEPTH_KINECT2); - depthCamera.type = SubCamera.Type.DEPTH; - depthCamera.setSize(512, 424); - - colorCamera = new SubCamera(this); - colorCamera.setPixelFormat(PixelFormat.ARGB); - colorCamera.type = SubCamera.Type.COLOR; - colorCamera.setSize(1920, 1080); - - IRCamera = new SubCamera(this); - IRCamera.setPixelFormat(PixelFormat.GRAY_32); - IRCamera.type = SubCamera.Type.IR; - IRCamera.setSize(512, 424); } @Override - public void start() { + public void internalInit() { + if (isUseDepth()) { + depthCamera.setPixelFormat(PixelFormat.FLOAT_DEPTH_KINECT2); + depthCamera.type = SubCamera.Type.DEPTH; + depthCamera.setSize(512, 424); + } + if (isUseColor()) { + colorCamera.setPixelFormat(PixelFormat.ARGB); + colorCamera.type = SubCamera.Type.COLOR; + colorCamera.setSize(1920, 1080); + } + if (isUseIR()) { + IRCamera.setPixelFormat(PixelFormat.GRAY_32); + IRCamera.type = SubCamera.Type.IR; + IRCamera.setSize(512, 424); + } grabber = new OpenKinect2FrameGrabber(this.systemNumber); + } - colorCamera.start(); - IRCamera.start(); - depthCamera.start(); - - try { - grabber.start(); - this.isConnected = true; - } catch (Exception e) { - System.err.println("Could not Kinect start frameGrabber... " + e); - System.err.println("Kinect ID " + this.systemNumber + " could not start."); - System.err.println("Check cable connection and ID."); - } + @Override + public void internalStart() throws FrameGrabber.Exception { + grabber.start(); } + /*** + * Warning BUG: cannot grab in a thread and display as PImage in another. + * @throws Exception + */ @Override protected void internalGrab() throws Exception { grabber.grab(); @@ -76,7 +73,6 @@ public void close() { setClosing(); if (grabber != null) { try { - System.out.println("Stopping OpenKinect2Grabber"); this.stopThread(); grabber.stop(); } catch (Exception e) { @@ -97,6 +93,7 @@ public void disableIR() { @Override public void enableDepth() { grabber.enableDepthStream(); + System.out.println("enable depth stream"); } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java index 08219f18..b905b12f 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.concurrent.Semaphore; import org.bytedeco.javacpp.opencv_core; +import org.bytedeco.javacv.OpenKinectFrameGrabber; import processing.core.PApplet; import processing.core.PImage; import processing.core.PMatrix3D; @@ -40,11 +41,15 @@ public abstract class CameraRGBIRDepth extends Camera { protected SubCamera IRCamera; private SubCamera actAsCamera = null; - protected boolean useIR = true; - protected boolean useDepth = true; - protected boolean useColor = true; - protected boolean actAsColorCamera = false; - protected boolean actAsIRCamera = false; + protected boolean useIR = false; + protected boolean useDepth = false; + protected boolean useColor = false; + + public CameraRGBIRDepth() { + colorCamera = new SubCamera(this); + depthCamera = new SubDepthCamera(this); + IRCamera = new SubCamera(this); + } @Override public void setParent(PApplet parent) { @@ -155,8 +160,34 @@ void grab(SubCamera camera) { } } + protected abstract void internalStart() throws Exception; + + @Override + public void start() { + try { + internalInit(); + if (isUseColor()) { + colorCamera.start(); + } + if (isUseDepth()) { + depthCamera.start(); + } + if (isUseIR()) { + IRCamera.start(); + } + internalStart(); + this.isConnected = true; + } catch (Exception e) { + System.err.println("Could not Kinect start frameGrabber... " + e); + System.err.println("Kinect ID " + this.systemNumber + " could not start."); + System.err.println("Check cable connection and ID."); + } + } + protected abstract void internalGrab() throws Exception; + protected abstract void internalInit() throws Exception; + @Override public void grab() { @@ -179,7 +210,7 @@ public void grab() { depthCamera.grab(); } - if (actAsColorCamera || actAsIRCamera) { + if (actAsCamera != null) { currentImage = actAsCamera.currentImage; } } catch (Exception e) { @@ -196,6 +227,10 @@ public void actAsIRCamera() { actAsCamera = IRCamera; } + public void actAsDepthCamera() { + actAsCamera = depthCamera; + } + // Generated delegate methods... @Override public PImage getPImage() { @@ -353,8 +388,13 @@ protected Semaphore getSheetSemaphore() { public void setThread() { if (thread == null) { thread = new CameraThread(this); - thread.setCompute(actAsCamera.trackSheets); - actAsCamera.thread = thread; + if (this.actAsCamera != null) { + thread.setCompute(actAsCamera.trackSheets); + actAsCamera.thread = thread; + } else { + thread.setCompute(trackSheets); + } + thread.start(); } else { System.err.println("Camera: Error Thread already launched"); @@ -403,6 +443,9 @@ protected void setClosing() { @Override public boolean isClosing() { + if (actAsCamera == null) { + return super.isClosing(); + } return actAsCamera.isClosing(); } @@ -436,4 +479,28 @@ public PVector getViewPoint(PVector point) { return actAsCamera.getViewPoint(point); } + public boolean isUseIR() { + return useIR; + } + + public void setUseIR(boolean useIR) { + this.useIR = useIR; + } + + public boolean isUseDepth() { + return useDepth; + } + + public void setUseDepth(boolean useDepth) { + this.useDepth = useDepth; + } + + public boolean isUseColor() { + return useColor; + } + + public void setUseColor(boolean useColor) { + this.useColor = useColor; + } + } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 716a247c..7fb3e101 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -43,22 +43,6 @@ protected CameraRealSense(int cameraNo) { } this.systemNumber = cameraNo; - grabber = new RealSenseFrameGrabber(this.systemNumber); - - depthCamera = new SubDepthCamera(this); - depthCamera.setPixelFormat(PixelFormat.REALSENSE_Z16); - depthCamera.setSize(640, 480); - depthCamera.type = SubCamera.Type.DEPTH; - - colorCamera = new SubCamera(this); - colorCamera.setPixelFormat(PixelFormat.RGB); - colorCamera.type = SubCamera.Type.COLOR; - colorCamera.setSize(960, 540); - - IRCamera = new SubCamera(this); - IRCamera.setSize(640, 480); - IRCamera.setPixelFormat(PixelFormat.GRAY); - IRCamera.type = SubCamera.Type.IR; } public RealSenseFrameGrabber getFrameGrabber() { @@ -76,28 +60,34 @@ public PMatrix3D getHardwareExtrinsics() { } @Override - public void start() { + public void internalInit() { - depthCamera.start(); - colorCamera.start(); - IRCamera.start(); - - try { - grabber.start(); - this.isConnected = true; - } catch (Exception e) { - System.err.println("Could not start RealSenseGrabber... " + e); - System.err.println("Could not camera start RealSenseGrabber... " + e); - System.err.println("Camera ID " + this.systemNumber + " could not start."); - System.err.println("Check cable connection, ID and resolution asked."); - - this.grabber = null; + if (isUseDepth()) { + depthCamera.setPixelFormat(PixelFormat.REALSENSE_Z16); + depthCamera.setSize(640, 480); + depthCamera.type = SubCamera.Type.DEPTH; + } + if (isUseColor()) { + colorCamera.setPixelFormat(PixelFormat.RGB); + colorCamera.type = SubCamera.Type.COLOR; + colorCamera.setSize(960, 540); } + if (isUseIR()) { + IRCamera.setSize(640, 480); + IRCamera.setPixelFormat(PixelFormat.GRAY); + IRCamera.type = SubCamera.Type.IR; + } + grabber = new RealSenseFrameGrabber(this.systemNumber); + + } + + @Override + public void internalStart() throws FrameGrabber.Exception { + grabber.start(); } @Override public void internalGrab() throws Exception { - System.out.println("Realsense: main grab"); grabber.grab(); } diff --git a/papart/src/fr/inria/papart/procam/camera/SubCamera.java b/papart/src/fr/inria/papart/procam/camera/SubCamera.java index c8efcbdf..66a56095 100644 --- a/papart/src/fr/inria/papart/procam/camera/SubCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/SubCamera.java @@ -49,7 +49,9 @@ public void start() { @Override public void grab() { - mainCamera.grab(this); + if (isConnected) { + mainCamera.grab(this); + } } @Override @@ -64,6 +66,7 @@ public PImage getPImage() { this.checkCamImage(); if (currentImage != null) { camImage.update(currentImage); + currentImage = null; return camImage; } // TODO: exceptions !!! From b93de89709eecc65ceb3a94d567392f25624bba0 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Sat, 12 Nov 2016 12:51:54 +0100 Subject: [PATCH 25/99] Work in progress - refactor depth camera support. --- .../calibration/CalibrationExtrinsic.java | 10 +- .../papart/calibration/CalibrationPopup.java | 5 +- .../analysis/KinectDepthAnalysis.java | 31 +++-- .../depthcam/analysis/KinectOpenCV.java | 6 +- .../depthcam/analysis/KinectProcessing.java | 14 +- .../papart/depthcam/devices/Kinect360.java | 81 ++++------- .../papart/depthcam/devices/KinectDevice.java | 96 ++++++------- .../papart/depthcam/devices/KinectOne.java | 124 +++++------------ .../papart/depthcam/devices/RealSense.java | 126 ++++-------------- .../papart/multitouch/KinectTouchInput.java | 4 +- papart/src/fr/inria/papart/procam/Papart.java | 22 +-- .../fr/inria/papart/procam/camera/Camera.java | 4 +- .../papart/procam/camera/CameraRealSense.java | 3 + 13 files changed, 187 insertions(+), 339 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index 6ca2dee2..6f6fe918 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -20,9 +20,9 @@ package fr.inria.papart.calibration; import fr.inria.papart.depthcam.devices.KinectDevice; -import fr.inria.papart.depthcam.devices.KinectDevice.Type; import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Papart; +import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.display.ProjectorDisplay; import java.util.ArrayList; import processing.core.PApplet; @@ -45,7 +45,7 @@ public class CalibrationExtrinsic { private Papart papart; // Kinect - private KinectDevice.Type kinectType; + private Camera.Type kinectType; private KinectDevice kinectDevice; public CalibrationExtrinsic(PApplet parent) { @@ -61,7 +61,7 @@ public void setDefaultKinect() { this.kinectType = papart.getKinectType(); this.kinectDevice = papart.getKinectDevice(); } - public void setKinect(KinectDevice device, Type type) { + public void setKinect(KinectDevice device, Camera.Type type) { this.kinectType = type; this.kinectDevice = device; } @@ -92,10 +92,10 @@ public void saveProCamExtrinsics(PMatrix3D extr){ } public void calibrateKinect(ArrayList snapshots) { - if (this.kinectType == Type.ONE) { + if (this.kinectType == Camera.Type.OPEN_KINECT_2) { calibrateKinectOne(snapshots); } - if (this.kinectType == Type.X360) { + if (this.kinectType == Camera.Type.OPEN_KINECT) { calibrateKinect360(snapshots); } } diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index 66cc6dc0..e2c75d2a 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -20,7 +20,6 @@ package fr.inria.papart.calibration; import fr.inria.papart.depthcam.devices.KinectDevice; -import fr.inria.papart.depthcam.devices.KinectDevice.Type; import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; @@ -93,7 +92,7 @@ public class CalibrationPopup extends PApplet { private TrackedView projectorView; // Kinect - private KinectDevice.Type kinectType; + private Camera.Type kinectType; // calibrations private ArrayList snapshots = new ArrayList(); @@ -183,7 +182,7 @@ private void initMarkerTrackingFromProjector() { } private void initKinect360(KinectDevice kinectDevice) { - cameraKinect = kinectDevice.getCameraRGB(); + cameraKinect = kinectDevice.getColorCamera(); String ARToolkitCalib = Papart.calibrationFolder + KINECT_ARTOOLKIT_NAME; Camera.convertARParams(this, cameraKinect.getCalibrationFile(), ARToolkitCalib); diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index b8e98e54..f984ab7d 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -32,6 +32,7 @@ import fr.inria.papart.depthcam.devices.RealSense; import fr.inria.papart.procam.ProjectiveDeviceP; import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraRealSense; import java.nio.ByteBuffer; import java.nio.ShortBuffer; @@ -77,24 +78,36 @@ public KinectDevice kinectDevice() { @Override public int getDepthSize() { - return kinectDevice().depthSize(); + return getDepthWidth() * getDepthHeight(); } @Override public int getDepthWidth() { - return kinectDevice().depthWidth(); + return kinectDevice().getDepthCamera().width(); } @Override public int getDepthHeight() { - return kinectDevice().depthHeight(); + return kinectDevice().getDepthCamera().height(); + } + + public int getColorWidth() { + return kinectDevice().getColorCamera().width(); + } + + public int getColorHeight() { + return kinectDevice().getColorCamera().height(); + } + + public int getColorSize() { + return getColorWidth() * getColorHeight(); } public KinectDepthAnalysis(PApplet parent, KinectDevice kinect) { kinectDevice = kinect; DepthAnalysis.papplet = parent; - calibRGB = kinect.getCameraRGB().getProjectiveDevice(); - calibIR = kinect.getCameraDepth().getProjectiveDevice(); + calibRGB = kinect.getColorCamera().getProjectiveDevice(); + calibIR = kinect.getDepthCamera().getProjectiveDevice(); initMemory(); // initThreadPool(); @@ -109,7 +122,7 @@ private void initThreadPool() { } private void initMemory() { - colorRaw = new byte[kinectDevice.colorSize() * 3]; + colorRaw = new byte[getColorSize() * 3]; depthRaw = new byte[kinectDevice.rawDepthSize()]; depthData = new KinectDepthData(this); @@ -126,7 +139,7 @@ private void initMemory() { depthComputationMethod = new RealSenseDepth(depthScale); } - PixelOffset.initStaticMode(kinectDevice.depthWidth(), kinectDevice.depthHeight()); + PixelOffset.initStaticMode(getDepthWidth(), getDepthHeight()); } public PVector findDepthAtRGB(PVector v) { @@ -140,7 +153,7 @@ public PVector findDepthAtRGB(float x, float y, float z) { kinectDevice.getStereoCalibrationInv().mult(v, v2); // v2 is now the location in KinectDepth instead of KinectRGB coordinates. - int worldToPixel = kinectDevice().getCameraDepth().getProjectiveDevice().worldToPixel(v2); + int worldToPixel = kinectDevice().getDepthCamera().getProjectiveDevice().worldToPixel(v2); return Utils.toPVector(depthData.depthPoints[worldToPixel]); } @@ -292,7 +305,7 @@ protected void doForEachValid3DPoint(int precision, DepthPointManiplation manip) // WARNING MAGIC NUMBER protected void updateRawDepth(opencv_core.IplImage depthImage) { - if (kinectDevice().type() == KinectDevice.Type.REALSENSE) { + if (kinectDevice().type() == Camera.Type.REALSENSE) { // depthRawShortBuffer = depthImage.imageData().position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); depthRawBuffer = depthImage.getByteBuffer(); depthRawShortBuffer = depthRawBuffer.asShortBuffer(); diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java index 1ceeecd0..4a87c92f 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java @@ -45,10 +45,10 @@ public KinectOpenCV(PApplet parent, KinectDevice kinect) { } private void init() { - validPointsIpl = IplImage.create(cvSize(kinectDevice().depthWidth(), - kinectDevice().depthHeight()), + validPointsIpl = IplImage.create(cvSize(getDepthWidth(), + getDepthHeight()), IPL_DEPTH_8U, 3); - validPointsRaw = new byte[kinectDevice().depthSize() * 3]; + validPointsRaw = new byte[getDepthSize()* 3]; } public IplImage update(IplImage depth, IplImage color) { diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java index e4e59684..e687d2de 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java @@ -59,8 +59,8 @@ public KinectProcessing(PApplet parent, KinectOne kinectOne) { } private void init() { - validPointsPImage = papplet.createImage(kinectDevice().depthWidth(), kinectDevice().depthHeight(), PConstants.RGB); - nativeArrayToErode = IplImage.create(kinectDevice.depthWidth(), kinectDevice.depthHeight(), IPL_DEPTH_8U, 1); + validPointsPImage = papplet.createImage(getDepthWidth(), getDepthHeight(), PConstants.RGB); + nativeArrayToErode = IplImage.create(getDepthWidth(), getDepthHeight(), IPL_DEPTH_8U, 1); erosionIndexer = (UByteIndexer) nativeArrayToErode.createIndexer(); validCopy = Arrays.copyOf(depthData.validPointsMask, depthData.validPointsMask.length); @@ -124,9 +124,9 @@ private void erodePoints2(ArrayList validList, boolean[] arrayToErode, int x = po.x; int y = po.y; - for (int j = y * kinectDevice.depthWidth() - skip; - j <= y * kinectDevice.depthWidth() + skip; - j += kinectDevice.depthWidth() * skip) { + for (int j = y * getDepthWidth() - skip; + j <= y * getDepthWidth() + skip; + j += getDepthWidth() * skip) { for (int i = x - skip; i <= x + skip; i += skip) { int currentIdx = i + j; @@ -144,11 +144,11 @@ private void erodePoints2(ArrayList validList, boolean[] arrayToErode, private void erodePoints(boolean[] arrayToErode) { - for (int i = 0; i < kinectDevice.depthWidth() * kinectDevice.depthHeight(); i++) { + for (int i = 0; i < getDepthWidth() * getDepthHeight(); i++) { erosionIndexer.put(i, arrayToErode[i] ? 1 : 0); } cvErode(nativeArrayToErode, nativeArrayToErode); - for (int i = 0; i < kinectDevice.depthWidth() * kinectDevice.depthHeight(); i++) { + for (int i = 0; i < getDepthWidth() * getDepthHeight(); i++) { arrayToErode[i] = erosionIndexer.get(i) == 1; } diff --git a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java index ebfd6cf4..2232fb18 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java +++ b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java @@ -19,13 +19,12 @@ */ package fr.inria.papart.depthcam.devices; -import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraOpenKinect; +import fr.inria.papart.procam.camera.CameraRGBIRDepth; import processing.core.PApplet; -import processing.core.PMatrix3D; /** * @@ -33,70 +32,42 @@ */ public class Kinect360 extends KinectDevice { - public static final int KINECT_MM = 1; - public static final int KINECT_10BIT = 0; - private final CameraOpenKinect camera; - - public static final int CAMERA_WIDTH = 640; - public static final int CAMERA_HEIGHT = 480; - - public Kinect360(PApplet parent) { - initSizes(parent); - camera = (CameraOpenKinect) CameraFactory.createCamera(Camera.Type.OPEN_KINECT, 0); - camera.setParent(parent); - camera.setCalibration(Papart.kinectRGBCalib); - camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); - setStereoCalibration(Papart.kinectStereoCalib); - camera.start(); - } - public Kinect360(PApplet parent, CameraOpenKinect camera) { - initSizes(parent); - this.camera = camera; -// camera = (CameraOpenKinect) CameraFactory.createCamera(Camera.Type.OPEN_KINECT, 0); +// public Kinect360(PApplet parent) { +// this.parent = parent; +// camera = (CameraOpenKinect) CameraFactory.createCamera(Camera.Type.OPEN_KINECT, "0"); // camera.setParent(parent); // camera.setCalibration(Papart.kinectRGBCalib); +// camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); +// setStereoCalibration(Papart.kinectStereoCalib); +// camera.start(); +// } + + public Kinect360(PApplet parent, CameraOpenKinect camera) { + super(parent, (CameraRGBIRDepth) camera); camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); setStereoCalibration(Papart.kinectStereoCalib); - camera.start(); - } - - private void initSizes(PApplet parent) { - this.parent = parent; - WIDTH = 640; - HEIGHT = 480; - SIZE = WIDTH * HEIGHT; - RGB_WIDTH = 640; - RGB_HEIGHT = 480; - RGB_SIZE = WIDTH * HEIGHT; - } - - @Override - public SubCamera getCameraRGB() { - return camera; - } - - @Override - public SubCamera getCameraIR() { - throw new UnsupportedOperationException("Not supported yet."); + + // -------------------------- + // TODO: find when to start() +// camera.start(); } - - @Override - public SubCamera getCameraDepth() { - return camera.getDepthCamera(); + + public Kinect360(PApplet parent, Camera anotherCamera) { + super(parent, anotherCamera); + this.anotherCamera = anotherCamera; + + initDefaultCamera(); + camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); + setStereoCalibration(Papart.kinectStereoCalib); } @Override public int rawDepthSize() { - return SIZE * 2; - } - - @Override - public void setTouch(KinectTouchInput kinectTouchInput) { - ((CameraOpenKinect) this.getCameraRGB()).setTouch(kinectTouchInput); + return getDepthCamera().width() * getDepthCamera().height() * 2; } @Override - public Type type() { - return Type.X360; + public Camera.Type type() { + return Camera.Type.OPEN_KINECT; } } diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java index 3b988d92..e09f3148 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java @@ -22,7 +22,12 @@ import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.HasExtrinsics; +import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; +import fr.inria.papart.procam.camera.CameraFactory; +import fr.inria.papart.procam.camera.CameraOpenKinect; +import fr.inria.papart.procam.camera.CameraOpenKinect2; +import fr.inria.papart.procam.camera.CameraRGBIRDepth; import fr.inria.papart.procam.camera.SubCamera; import fr.inria.papart.procam.camera.SubDepthCamera; import processing.core.PApplet; @@ -36,18 +41,6 @@ */ public abstract class KinectDevice { - public enum Type { - ONE, X360, REALSENSE, NONE - } - // IR and Depth image size - public static int WIDTH; - public static int HEIGHT; - public static int SIZE; - - // RGB image size - public static int RGB_WIDTH; - public static int RGB_HEIGHT; - public static int RGB_SIZE; private final PMatrix3D KinectRGBIRCalibration = new PMatrix3D(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, @@ -57,23 +50,54 @@ public enum Type { 0, 0, 1, 0, 0, 0, 0, 1); - protected PApplet parent; + protected final PApplet parent; + protected CameraRGBIRDepth camera; + protected Camera anotherCamera = Camera.INVALID_CAMERA; - abstract public SubCamera getCameraRGB(); + public KinectDevice(PApplet parent, Camera anotherCamera) { + this.anotherCamera = anotherCamera; + this.parent = parent; + } - abstract public SubCamera getCameraIR(); + public KinectDevice(PApplet parent, CameraRGBIRDepth mainCamera) { + this.camera = mainCamera; + this.parent = parent; + mainCamera.enableDepth(); + } - abstract public SubDepthCamera getCameraDepth(); + public SubCamera getColorCamera() { + return camera.getColorCamera(); + } + + public SubCamera getIRCamera() { + return camera.getIRCamera(); + } + + public SubDepthCamera getDepthCamera() { + return camera.getDepthCamera(); + } abstract public int rawDepthSize(); - abstract public Type type(); + abstract public Camera.Type type(); - abstract public void setTouch(KinectTouchInput kinectTouchInput); + /*** + * init a depth camera, depth only as there is another color camera. + */ + protected final void initDefaultCamera() { + String id = Papart.getPapart().cameraConfiguration.getCameraName(); + camera = (CameraOpenKinect2) CameraFactory.createCamera(type(), id); + camera.enableDepth(); + camera.setParent(parent); + } public void close() { - getCameraDepth().close(); - getCameraRGB().close(); + getDepthCamera().close(); + getColorCamera().close(); + } + + public void setTouch(KinectTouchInput kinectTouchInput) { + camera.getDepthCamera().setTouchInput(kinectTouchInput); } public void setStereoCalibration(String fileName) { @@ -103,13 +127,13 @@ public PMatrix3D getStereoCalibrationInv() { } public void setExtrinsics(PMatrix3D extr) { - getCameraRGB().setExtrinsics(extr); + getColorCamera().setExtrinsics(extr); // Get color -> Depth PMatrix3D stereo = getStereoCalibrationInv(); PMatrix3D tmp = extr.get(); tmp.apply(stereo); - getCameraDepth().setExtrinsics(tmp); + getDepthCamera().setExtrinsics(tmp); } public int findColorOffset(Vec3D v) { @@ -123,6 +147,7 @@ public int findColorOffset(PVector v) { private PVector vt = new PVector(); private PVector vt2 = new PVector(); + // TODO: this must take into account if we use another camera for tracking. /** * Warning not thread safe. * @@ -137,32 +162,7 @@ public int findColorOffset(float x, float y, float z) { // Ideally use a calibration... // kinectCalibRGB.getExtrinsics().mult(vt, vt2); getStereoCalibration().mult(vt, vt2); - return getCameraRGB().getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); - } - - // TODO: find the use of all this.. - public int colorWidth() { - return RGB_WIDTH; - } - - public int colorHeight() { - return RGB_HEIGHT; - } - - public int colorSize() { - return RGB_SIZE; - } - - public int depthWidth() { - return WIDTH; - } - - public int depthHeight() { - return HEIGHT; - } - - public int depthSize() { - return SIZE; + return getColorCamera().getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); } } diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java index cda80c11..3ca61dc0 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java @@ -23,8 +23,9 @@ import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraFactory; -import fr.inria.papart.procam.camera.CameraOpenCVDepth; -import fr.inria.papart.procam.camera.CameraOpenKinectDepth; +import fr.inria.papart.procam.camera.CameraOpenKinect2; +import fr.inria.papart.procam.camera.CameraRGBIRDepth; +import fr.inria.papart.procam.camera.CameraRealSense; import fr.inria.papart.procam.camera.SubCamera; import processing.core.PApplet; @@ -34,104 +35,53 @@ */ public final class KinectOne extends KinectDevice { - protected Camera cameraRGB, cameraIR, cameraDepth; - - public KinectOne(PApplet parent) { - - initSize(); - this.parent = parent; - initRGB(); - initIR(); - initDepth(); +// public KinectOne(PApplet parent) { +// this.parent = parent; +// +// this.parent = parent; +// camera = (CameraRGBIRDepth) CameraFactory.createCamera(Camera.Type.OPEN_KINECT_2, "0"); +// camera.setParent(parent); +// camera.setCalibration(Papart.kinectRGBCalib); +// camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); +// setStereoCalibration(Papart.kinectStereoCalib); +// camera.start(); +// +// +// setStereoCalibration(Papart.kinectStereoCalib); +// } + + public KinectOne(PApplet parent, CameraOpenKinect2 cam) { + super(parent, cam); + + + cam.setParent(parent); + cam.setCalibration(Papart.calibrationFolder + "camera-kinect2-rgb.yaml"); + getIRCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); + getDepthCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); setStereoCalibration(Papart.kinectStereoCalib); } + public KinectOne(PApplet parent, Camera incomingCamera) { + super(parent, incomingCamera); - public KinectOne(PApplet parent, Camera cameraRGB) { - initSize(); - this.parent = parent; - this.cameraRGB = cameraRGB; - initIR(); - initDepth(); - - setStereoCalibration(Papart.kinectStereoCalib); - } - - public static final int CAMERA_WIDTH = 512; - public static final int CAMERA_WIDTH_RGB = 1920; - public static final int CAMERA_HEIGHT = 424; - public static final int CAMERA_HEIGHT_RGB = 1080; - - private void initSize() { - // IR and Depth image size - WIDTH = 512; - HEIGHT = 424; - SIZE = WIDTH * HEIGHT; - - // RGB image size - RGB_WIDTH = 1920; - RGB_HEIGHT = 1080; - RGB_SIZE = RGB_WIDTH * RGB_HEIGHT; - } - - public void close() { - cameraRGB.close(); - cameraIR.close(); - cameraDepth.close(); - } - - final void initRGB() { - cameraRGB = CameraFactory.createCamera(Camera.Type.OPENCV, 0); - cameraRGB.setParent(parent); -// cameraRGB.setSize(RGB_WIDTH, RGB_HEIGHT); - cameraRGB.setCalibration(Papart.calibrationFolder + "camera-kinect2-rgb.yaml"); - cameraRGB.start(); - } - - final void initIR() { - cameraIR = CameraFactory.createCamera(Camera.Type.OPENCV, 1); - cameraIR.setParent(parent); -// cameraIR.setSize(WIDTH, HEIGHT); - cameraIR.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); - cameraIR.start(); - } - - final void initDepth() { - cameraDepth = CameraFactory.createCamera(Camera.Type.OPENCV_DEPTH, 2); - cameraDepth.setParent(parent); -// cameraDepth.setSize(WIDTH, HEIGHT); - cameraDepth.setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); - ((CameraOpenCVDepth) cameraDepth).setColorCamera(cameraRGB); + initDefaultCamera(); - cameraDepth.start(); - } - - @Override - public SubCamera getCameraRGB() { - return cameraRGB; - } + // create the camera + incomingCamera.setCalibration(Papart.calibrationFolder + "camera-kinect2-rgb.yaml"); + getIRCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); + getDepthCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); - public SubCamera getCameraIR() { - return cameraIR; - } - - public SubDepthCamera getCameraDepth() { - return cameraDepth; + setStereoCalibration(Papart.kinectStereoCalib); } @Override public int rawDepthSize() { - return SIZE * 3; - } - - @Override - public void setTouch(KinectTouchInput kinectTouchInput) { - ((CameraOpenCVDepth) cameraDepth).setTouchInput(kinectTouchInput); + return getDepthCamera().width() * getDepthCamera().height() * 2; } @Override - public Type type() { - return Type.ONE; + public Camera.Type type() { + return Camera.Type.OPEN_KINECT_2; } } diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 0c6cb1d4..a496bd72 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -20,13 +20,10 @@ */ package fr.inria.papart.depthcam.devices; -import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; -import fr.inria.papart.procam.camera.CameraFactory; +import fr.inria.papart.procam.camera.CameraRGBIRDepth; import fr.inria.papart.procam.camera.CameraRealSense; -import fr.inria.papart.procam.camera.SubCamera; -import fr.inria.papart.procam.camera.SubDepthCamera; import processing.core.PApplet; /** @@ -35,126 +32,49 @@ */ public final class RealSense extends KinectDevice { - protected CameraRealSense cameraRS; - protected SubDepthCamera cameraDepth; - protected SubCamera cameraColor; - protected SubCamera cameraIR; + CameraRealSense cameraRS; - public RealSense(PApplet parent) { - initSize(); - this.parent = parent; - initCameras(); + public RealSense(PApplet parent, Camera anotherCam) { + super(parent, anotherCam); - // Warning Start both depth & color camera for now. - cameraRS.start(); + initDefaultCamera(); - setStereoCalibration(cameraRS.getHardwareExtrinsics()); - useHardwareIntrinsics(); - } - - public RealSense(PApplet parent, CameraRealSense cameraRGB) { - initSize(); - this.parent = parent; - - cameraColor = cameraRS.getColorCamera(); - cameraDepth = cameraRS.getDepthCamera(); - cameraIR = cameraRS.getIRCamera(); - - cameraDepth.setSize(WIDTH, HEIGHT); - cameraIR.setSize(WIDTH, HEIGHT); - - // Warning Start both depth & color camera for now. - cameraRS.start(); + cameraRS.setCalibration(Papart.kinectRGBCalib); + cameraRS.getDepthCamera().setCalibration(Papart.kinectIRCalib); + setStereoCalibration(Papart.kinectStereoCalib); setStereoCalibration(cameraRS.getHardwareExtrinsics()); - useHardwareIntrinsics(); - } - - private void useHardwareIntrinsics() { - CameraRealSense.useHarwareIntrinsics(cameraColor, cameraRS.getFrameGrabber()); - CameraRealSense.useHarwareIntrinsics(cameraDepth, cameraRS.getFrameGrabber()); - CameraRealSense.useHarwareIntrinsics(cameraIR, cameraRS.getFrameGrabber()); + useHardwareIntrinsics(cameraRS); } - private void initSize() { - // IR and Depth image size - WIDTH = 640; - HEIGHT = 480; - SIZE = WIDTH * HEIGHT; - - // RGB image size - RGB_WIDTH = 960; - RGB_HEIGHT = 540; - RGB_SIZE = RGB_WIDTH * RGB_HEIGHT; - } - - public void close() { - cameraRS.close(); - cameraDepth.close(); - } - - final void initCameras() { - // Check if it is the default camera... - Papart papart = Papart.getPapart(); - if (papart.cameraConfiguration.getCameraType() == Camera.Type.REALSENSE_RGB) { - System.out.println("REALSENSE: Using configuration ID & Resolution."); - // use the ID - int id = Integer.parseInt(papart.cameraConfiguration.getCameraName()); - - cameraColor = cameraRS.getColorCamera(); - cameraColor.setCalibration(Papart.cameraCalib); - } else { - cameraRS = (CameraRealSense) CameraFactory.createCamera(Camera.Type.REALSENSE_RGB, 0); - cameraRS.setParent(parent); - - cameraColor = cameraRS.getColorCamera(); - cameraColor.setSize(RGB_WIDTH, RGB_HEIGHT); - cameraColor.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); - } + public RealSense(PApplet parent, CameraRealSense cameraRS) { + super(parent, (CameraRGBIRDepth) cameraRS); + +// cameraColor.setCalibration(Papart.cameraCalib); +// cameraColor.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); - cameraDepth = cameraRS.getDepthCamera(); - cameraDepth.setSize(WIDTH, HEIGHT); - - cameraIR = cameraRS.getIRCamera(); - cameraIR.setSize(WIDTH, HEIGHT); + setStereoCalibration(cameraRS.getHardwareExtrinsics()); + useHardwareIntrinsics(cameraRS); } - public void grab() { - cameraRS.grab(); + private void useHardwareIntrinsics(CameraRealSense cameraRS) { + CameraRealSense.useHarwareIntrinsics(cameraRS.getColorCamera(), cameraRS.getFrameGrabber()); + CameraRealSense.useHarwareIntrinsics(cameraRS.getColorCamera(), cameraRS.getFrameGrabber()); + CameraRealSense.useHarwareIntrinsics(cameraRS.getColorCamera(), cameraRS.getFrameGrabber()); } public CameraRealSense getMainCamera() { return cameraRS; } - @Override - public SubCamera getCameraRGB() { - return cameraColor; - } - - @Override - public SubCamera getCameraIR() { - return cameraIR; - } - - @Override - public SubDepthCamera getCameraDepth() { - return cameraDepth; - } - @Override public int rawDepthSize() { - return SIZE * 2; - } - - @Override - public void setTouch(KinectTouchInput kinectTouchInput) { - cameraDepth.setTouchInput(kinectTouchInput); + return getDepthCamera().width() * getDepthCamera().height() * 2; } @Override - public Type type() { - return Type.REALSENSE; + public Camera.Type type() { + return Camera.Type.REALSENSE; } } diff --git a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java index 90c34cc7..2cc85293 100755 --- a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java @@ -99,8 +99,8 @@ public void setTouchDetectionCalibration3D(PlanarTouchCalibration touchCalib) { @Override public void update() { try { - IplImage depthImage = kinectDevice.getCameraDepth().getIplImage(); - IplImage colImage = kinectDevice.getCameraRGB().getIplImage(); + IplImage depthImage = kinectDevice.getDepthCamera().getIplImage(); + IplImage colImage = kinectDevice.getColorCamera().getIplImage(); depthDataSem.acquire(); if (colImage == null || depthImage == null) { diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 12a2894e..8ff2a0c3 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -81,7 +81,7 @@ public class Papart { public static String screenConfig = calibrationFolder + "screenConfiguration.xml"; public static String cameraConfig = calibrationFolder + "cameraConfiguration.xml"; - public static String cameraKinectConfig = calibrationFolder + "cameraKinectConfiguration.xml"; + public static String depthCameraConfig = calibrationFolder + "depthCameraConfiguration.xml"; public static String tablePosition = calibrationFolder + "tablePosition.xml"; public static String planeCalib = calibrationFolder + "PlaneCalibration.xml"; @@ -120,10 +120,6 @@ public class Papart { public CameraConfiguration cameraConfiguration; public ScreenConfiguration screenConfiguration; // TODO: find what to do with these... -// private final int depthFormat = freenect.FREENECT_DEPTH_10BIT; -// private final int kinectFormat = Kinect.KINECT_10BIT; - private final int depthFormat = freenect.FREENECT_DEPTH_MM; - private final int kinectFormat = Kinect360.KINECT_MM; /** * Create the main PapARt object, look at the examples for how to use it. @@ -156,7 +152,7 @@ public static CameraConfiguration getDefaultCameraConfiguration(PApplet applet) public static CameraConfiguration getDefaultKinectConfiguration(PApplet applet) { CameraConfiguration config = new CameraConfiguration(); - config.loadFrom(applet, cameraKinectConfig); + config.loadFrom(applet, depthCameraConfig); return config; } @@ -322,11 +318,6 @@ public void forceCameraSize() { cameraTracking.height()); } - public void forceDepthCameraSize() { - forceWindowSize(kinectDevice.depthWidth(), - kinectDevice.depthHeight()); - } - public void forceWindowSize(int w, int h) { Papart papart = Papart.getPapart(); @@ -737,6 +728,8 @@ public void useKinectOne(boolean kinectOne) { */ public void loadDefaultCameraKinect() { + // Two cases, either the other camera running of the same type + CameraConfiguration kinectConfiguration = Papart.getDefaultKinectConfiguration(applet); // If the camera is not instanciated, it is not correct ! @@ -921,7 +914,7 @@ public boolean isWithoutCamera() { } public Camera getKinectCamera() { - return this.kinectDevice.getCameraRGB(); + return this.kinectDevice.getColorCamera(); } public KinectDevice getKinectDevice() { @@ -932,10 +925,9 @@ public KinectDepthAnalysis getKinectAnalysis() { return this.kinectDepthAnalysis; } - public KinectDevice.Type getKinectType() { + public Camera.Type getKinectType() { if (kinectDevice == null) { - return KinectDevice.Type.NONE; - + return Camera.Type.FAKE; } return kinectDevice.type(); } diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 59abd936..58e19a16 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -62,8 +62,8 @@ public abstract class Camera extends Node implements PConstants, HasExtrinsics { private boolean hasExtrinsics = false; public enum Type { - OPENCV, FFMPEG, PROCESSING, OPEN_KINECT, FLY_CAPTURE, - REALSENSE, OPEN_KINECT_2, FAKE + OPENCV, FFMPEG, PROCESSING, REALSENSE, OPEN_KINECT, OPEN_KINECT_2, FLY_CAPTURE, + FAKE } public enum PixelFormat { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 7fb3e101..4d3fb4dc 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -110,6 +110,9 @@ public void close() { } public static void useHarwareIntrinsics(SubCamera camera, RealSenseFrameGrabber grabber) { + if(camera == null || camera == Camera.INVALID_CAMERA){ + return; + } int camType = 0; if (camera.type == SubCamera.Type.COLOR) { camType = RealSense.color; From 49291a88e3a9cc2f4a71a0e7f567d860a6bb08e3 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Mon, 14 Nov 2016 16:17:45 +0100 Subject: [PATCH 26/99] Wip -> refactor depth camera. --- .../calibration/CalibrationExtrinsic.java | 6 +-- .../papart/calibration/CalibrationPopup.java | 4 +- .../analysis/KinectDepthAnalysis.java | 8 ++-- .../depthcam/analysis/KinectOpenCV.java | 4 +- .../depthcam/analysis/KinectProcessing.java | 4 +- ...nectDevice.java => DepthCameraDevice.java} | 21 ++------- .../papart/depthcam/devices/Kinect360.java | 29 +++++------- .../papart/depthcam/devices/KinectOne.java | 47 +++++-------------- .../papart/depthcam/devices/RealSense.java | 34 ++++++-------- .../papart/multitouch/KinectTouchInput.java | 6 +-- papart/src/fr/inria/papart/procam/Papart.java | 6 +-- .../procam/camera/CameraOpenKinect.java | 2 + .../procam/camera/CameraRGBIRDepth.java | 22 +++++---- .../inria/papart/procam/camera/SubCamera.java | 3 ++ 14 files changed, 83 insertions(+), 113 deletions(-) rename papart/src/fr/inria/papart/depthcam/devices/{KinectDevice.java => DepthCameraDevice.java} (87%) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index 6f6fe918..cee4a6fd 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -19,7 +19,7 @@ */ package fr.inria.papart.calibration; -import fr.inria.papart.depthcam.devices.KinectDevice; +import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; @@ -46,7 +46,7 @@ public class CalibrationExtrinsic { // Kinect private Camera.Type kinectType; - private KinectDevice kinectDevice; + private DepthCameraDevice kinectDevice; public CalibrationExtrinsic(PApplet parent) { this.parent = parent; @@ -61,7 +61,7 @@ public void setDefaultKinect() { this.kinectType = papart.getKinectType(); this.kinectDevice = papart.getKinectDevice(); } - public void setKinect(KinectDevice device, Camera.Type type) { + public void setKinect(DepthCameraDevice device, Camera.Type type) { this.kinectType = type; this.kinectDevice = device; } diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index e2c75d2a..fd27c6a8 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -19,7 +19,7 @@ */ package fr.inria.papart.calibration; -import fr.inria.papart.depthcam.devices.KinectDevice; +import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; @@ -181,7 +181,7 @@ private void initMarkerTrackingFromProjector() { projectorTracker = DetectedMarker.createDetector(projector.getWidth(), projector.getHeight()); } - private void initKinect360(KinectDevice kinectDevice) { + private void initKinect360(DepthCameraDevice kinectDevice) { cameraKinect = kinectDevice.getColorCamera(); String ARToolkitCalib = Papart.calibrationFolder + KINECT_ARTOOLKIT_NAME; diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index f984ab7d..f2bd661e 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -25,7 +25,7 @@ import fr.inria.papart.depthcam.TouchAttributes; import fr.inria.papart.depthcam.devices.Kinect360; import fr.inria.papart.depthcam.devices.KinectDepthData; -import fr.inria.papart.depthcam.devices.KinectDevice; +import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.depthcam.devices.KinectOne; import static fr.inria.papart.depthcam.analysis.DepthAnalysis.INVALID_POINT; import static fr.inria.papart.depthcam.analysis.DepthAnalysis.papplet; @@ -69,10 +69,10 @@ public class KinectDepthAnalysis extends DepthAnalysis { // static values protected static final float INVALID_DEPTH = -1; - protected KinectDevice kinectDevice; + protected DepthCameraDevice kinectDevice; protected DepthComputation depthComputationMethod; - public KinectDevice kinectDevice() { + public DepthCameraDevice kinectDevice() { return this.kinectDevice; } @@ -103,7 +103,7 @@ public int getColorSize() { return getColorWidth() * getColorHeight(); } - public KinectDepthAnalysis(PApplet parent, KinectDevice kinect) { + public KinectDepthAnalysis(PApplet parent, DepthCameraDevice kinect) { kinectDevice = kinect; DepthAnalysis.papplet = parent; calibRGB = kinect.getColorCamera().getProjectiveDevice(); diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java index 4a87c92f..862047a6 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java @@ -20,7 +20,7 @@ package fr.inria.papart.depthcam.analysis; import fr.inria.papart.depthcam.PixelOffset; -import fr.inria.papart.depthcam.devices.KinectDevice; +import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.procam.camera.CameraOpenKinect; import java.nio.ByteBuffer; import java.util.Arrays; @@ -39,7 +39,7 @@ public class KinectOpenCV extends KinectDepthAnalysis { public IplImage validPointsIpl; public byte[] validPointsRaw; - public KinectOpenCV(PApplet parent, KinectDevice kinect) { + public KinectOpenCV(PApplet parent, DepthCameraDevice kinect) { super(parent, kinect); init(); } diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java index e687d2de..0c2771f8 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java @@ -22,7 +22,7 @@ import fr.inria.papart.calibration.PlaneAndProjectionCalibration; import fr.inria.papart.depthcam.PixelOffset; -import fr.inria.papart.depthcam.devices.KinectDevice; +import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.depthcam.devices.KinectOne; import static fr.inria.papart.depthcam.analysis.DepthAnalysis.papplet; import java.util.ArrayList; @@ -48,7 +48,7 @@ public class KinectProcessing extends KinectDepthAnalysis { UByteIndexer erosionIndexer; boolean[] validCopy; - public KinectProcessing(PApplet parent, KinectDevice kinect) { + public KinectProcessing(PApplet parent, DepthCameraDevice kinect) { super(parent, kinect); init(); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java similarity index 87% rename from papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java rename to papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java index e09f3148..7c01364d 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java @@ -21,12 +21,9 @@ import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.multitouch.KinectTouchInput; -import fr.inria.papart.procam.HasExtrinsics; import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraFactory; -import fr.inria.papart.procam.camera.CameraOpenKinect; -import fr.inria.papart.procam.camera.CameraOpenKinect2; import fr.inria.papart.procam.camera.CameraRGBIRDepth; import fr.inria.papart.procam.camera.SubCamera; import fr.inria.papart.procam.camera.SubDepthCamera; @@ -39,7 +36,7 @@ * * @author Jérémy Laviole - jeremy.laviole@inria.fr */ -public abstract class KinectDevice { +public abstract class DepthCameraDevice { private final PMatrix3D KinectRGBIRCalibration = new PMatrix3D(1, 0, 0, 0, 0, 1, 0, 0, @@ -54,17 +51,10 @@ public abstract class KinectDevice { protected CameraRGBIRDepth camera; protected Camera anotherCamera = Camera.INVALID_CAMERA; - public KinectDevice(PApplet parent, Camera anotherCamera) { - this.anotherCamera = anotherCamera; + public DepthCameraDevice(PApplet parent) { this.parent = parent; } - public KinectDevice(PApplet parent, CameraRGBIRDepth mainCamera) { - this.camera = mainCamera; - this.parent = parent; - mainCamera.enableDepth(); - } - public SubCamera getColorCamera() { return camera.getColorCamera(); } @@ -86,14 +76,13 @@ public SubDepthCamera getDepthCamera() { */ protected final void initDefaultCamera() { String id = Papart.getPapart().cameraConfiguration.getCameraName(); - camera = (CameraOpenKinect2) CameraFactory.createCamera(type(), id); - camera.enableDepth(); + camera = (CameraRGBIRDepth) CameraFactory.createCamera(type(), id); + camera.setUseDepth(true); camera.setParent(parent); } public void close() { - getDepthCamera().close(); - getColorCamera().close(); + camera.close(); } public void setTouch(KinectTouchInput kinectTouchInput) { diff --git a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java index 2232fb18..160a1e87 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java +++ b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java @@ -30,7 +30,7 @@ * * @author Jeremy Laviole */ -public class Kinect360 extends KinectDevice { +public class Kinect360 extends DepthCameraDevice { // public Kinect360(PApplet parent) { // this.parent = parent; @@ -41,24 +41,21 @@ public class Kinect360 extends KinectDevice { // setStereoCalibration(Papart.kinectStereoCalib); // camera.start(); // } - - public Kinect360(PApplet parent, CameraOpenKinect camera) { - super(parent, (CameraRGBIRDepth) camera); - camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); - setStereoCalibration(Papart.kinectStereoCalib); - - // -------------------------- - // TODO: find when to start() -// camera.start(); - } - public Kinect360(PApplet parent, Camera anotherCamera) { - super(parent, anotherCamera); - this.anotherCamera = anotherCamera; - - initDefaultCamera(); + super(parent); + + if (anotherCamera instanceof CameraOpenKinect) { + this.camera = (CameraOpenKinect) anotherCamera; + System.out.println("Use the given Kinect camera"); + } else { + initDefaultCamera(); + System.out.println("init a default Kinect camera"); + this.anotherCamera = anotherCamera; + } + this.camera.setUseDepth(true); camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); setStereoCalibration(Papart.kinectStereoCalib); + camera.start(); } @Override diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java index 3ca61dc0..132c7938 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java @@ -33,45 +33,24 @@ * * @author Jeremy Laviole */ -public final class KinectOne extends KinectDevice { +public final class KinectOne extends DepthCameraDevice { -// public KinectOne(PApplet parent) { -// this.parent = parent; -// -// this.parent = parent; -// camera = (CameraRGBIRDepth) CameraFactory.createCamera(Camera.Type.OPEN_KINECT_2, "0"); -// camera.setParent(parent); -// camera.setCalibration(Papart.kinectRGBCalib); -// camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); -// setStereoCalibration(Papart.kinectStereoCalib); -// camera.start(); -// -// -// setStereoCalibration(Papart.kinectStereoCalib); -// } - - public KinectOne(PApplet parent, CameraOpenKinect2 cam) { - super(parent, cam); - - - cam.setParent(parent); - cam.setCalibration(Papart.calibrationFolder + "camera-kinect2-rgb.yaml"); - getIRCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); - getDepthCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); - - setStereoCalibration(Papart.kinectStereoCalib); - } public KinectOne(PApplet parent, Camera incomingCamera) { - super(parent, incomingCamera); - - initDefaultCamera(); + super(parent); + if (incomingCamera instanceof CameraOpenKinect2) { + this.camera = (CameraOpenKinect2) incomingCamera; + } else { + initDefaultCamera(); + this.anotherCamera = incomingCamera; + } + this.camera.setUseDepth(true); - // create the camera - incomingCamera.setCalibration(Papart.calibrationFolder + "camera-kinect2-rgb.yaml"); - getIRCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); +// getColorCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-RGB.yaml"); +// getIRCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); getDepthCamera().setCalibration(Papart.calibrationFolder + "camera-kinect2-IR.yaml"); - setStereoCalibration(Papart.kinectStereoCalib); + + camera.start(); } @Override diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index a496bd72..da7527f4 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -30,29 +30,25 @@ * * @author Jeremy Laviole */ -public final class RealSense extends KinectDevice { +public final class RealSense extends DepthCameraDevice { - CameraRealSense cameraRS; + private final CameraRealSense cameraRS; public RealSense(PApplet parent, Camera anotherCam) { - super(parent, anotherCam); - - initDefaultCamera(); - - cameraRS.setCalibration(Papart.kinectRGBCalib); - cameraRS.getDepthCamera().setCalibration(Papart.kinectIRCalib); - setStereoCalibration(Papart.kinectStereoCalib); - - setStereoCalibration(cameraRS.getHardwareExtrinsics()); - useHardwareIntrinsics(cameraRS); - } - - public RealSense(PApplet parent, CameraRealSense cameraRS) { - super(parent, (CameraRGBIRDepth) cameraRS); - -// cameraColor.setCalibration(Papart.cameraCalib); -// cameraColor.setCalibration(Papart.calibrationFolder + "saved/camera-SR300.yaml"); + super(parent); + if (anotherCam instanceof CameraRealSense) { + this.camera = (CameraRealSense) anotherCam; + } else { + initDefaultCamera(); + this.anotherCamera = anotherCam; + } + this.camera.setUseDepth(true); + cameraRS = (CameraRealSense) camera; +// cameraRS.setCalibration(Papart.kinectRGBCalib); +// cameraRS.getDepthCamera().setCalibration(Papart.kinectIRCalib); +// setStereoCalibration(Papart.kinectStereoCalib); + camera.start(); setStereoCalibration(cameraRS.getHardwareExtrinsics()); useHardwareIntrinsics(cameraRS); } diff --git a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java index 2cc85293..20691999 100755 --- a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java @@ -30,7 +30,7 @@ import fr.inria.papart.depthcam.analysis.DepthAnalysis; import fr.inria.papart.calibration.PlaneAndProjectionCalibration; import fr.inria.papart.depthcam.analysis.KinectDepthAnalysis; -import fr.inria.papart.depthcam.devices.KinectDevice; +import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.procam.display.BaseDisplay; import fr.inria.papart.procam.ProjectiveDeviceP; import fr.inria.papart.procam.camera.CameraOpenKinect; @@ -62,7 +62,7 @@ public class KinectTouchInput extends TouchInput { private final Semaphore depthDataSem = new Semaphore(1); // List of TouchPoints, given to the user - private final KinectDevice kinectDevice; + private final DepthCameraDevice kinectDevice; private PlaneAndProjectionCalibration planeAndProjCalibration; @@ -73,7 +73,7 @@ public class KinectTouchInput extends TouchInput { private final TouchDetectionSimple3D touchDetection3D; public KinectTouchInput(PApplet applet, - KinectDevice kinectDevice, + DepthCameraDevice kinectDevice, KinectDepthAnalysis depthAnalysis, PlaneAndProjectionCalibration calibration) { this.parent = applet; diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 8ff2a0c3..3425a555 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -34,7 +34,7 @@ import fr.inria.papart.calibration.ScreenConfiguration; import fr.inria.papart.depthcam.devices.Kinect360; import fr.inria.papart.depthcam.analysis.KinectDepthAnalysis; -import fr.inria.papart.depthcam.devices.KinectDevice; +import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.depthcam.devices.KinectOne; import fr.inria.papart.depthcam.devices.RealSense; import fr.inria.papart.multitouch.TouchInput; @@ -115,7 +115,7 @@ public class Papart { private PVector frameSize = new PVector(); private boolean isWithoutCamera = false; - public KinectDevice kinectDevice; + public DepthCameraDevice kinectDevice; public CameraConfiguration cameraConfiguration; public ScreenConfiguration screenConfiguration; @@ -917,7 +917,7 @@ public Camera getKinectCamera() { return this.kinectDevice.getColorCamera(); } - public KinectDevice getKinectDevice() { + public DepthCameraDevice getKinectDevice() { return kinectDevice; } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java index f7b67002..dcf9bd8c 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java @@ -40,10 +40,12 @@ protected CameraOpenKinect(int cameraNo) { @Override public void internalInit() { + System.out.println("setting all pix format"); if (isUseDepth()) { depthCamera.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); depthCamera.type = SubCamera.Type.DEPTH; depthCamera.setSize(640, 480); + System.out.println("setting depth pixel format"); } if (isUseColor()) { colorCamera.setPixelFormat(PixelFormat.BGR); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java index b905b12f..96d7d516 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -106,23 +106,23 @@ public PImage getIRImage() { return null; } - public abstract void enableIR(); + protected abstract void enableIR(); - public abstract void disableIR(); + protected abstract void disableIR(); - public abstract void enableDepth(); + protected abstract void enableDepth(); - public abstract void disableDepth(); + protected abstract void disableDepth(); - public abstract void enableColor(); + protected abstract void enableColor(); - public abstract void disableColor(); + protected abstract void disableColor(); - public abstract void grabIR(); + protected abstract void grabIR(); - public abstract void grabDepth(); + protected abstract void grabDepth(); - public abstract void grabColor(); + protected abstract void grabColor(); public void disable(SubCamera camera) { if (camera.type == SubCamera.Type.DEPTH) { @@ -162,8 +162,11 @@ void grab(SubCamera camera) { protected abstract void internalStart() throws Exception; + protected boolean isStarting = false; + @Override public void start() { + isStarting = true; try { internalInit(); if (isUseColor()) { @@ -182,6 +185,7 @@ public void start() { System.err.println("Kinect ID " + this.systemNumber + " could not start."); System.err.println("Check cable connection and ID."); } + isStarting = false; } protected abstract void internalGrab() throws Exception; diff --git a/papart/src/fr/inria/papart/procam/camera/SubCamera.java b/papart/src/fr/inria/papart/procam/camera/SubCamera.java index 66a56095..dcffdade 100644 --- a/papart/src/fr/inria/papart/procam/camera/SubCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/SubCamera.java @@ -43,6 +43,9 @@ public Camera getMainCamera() { @Override public void start() { + if(!mainCamera.isStarting){ + throw new RuntimeException("Cannot start a subCamera: start the main camera instead."); + } mainCamera.start(this); isConnected = true; } From 45f7c62fef97100c3a309e67d7d404b5d8e8da19 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Mon, 14 Nov 2016 16:17:59 +0100 Subject: [PATCH 27/99] wip depthCamera --- ...ation.xml => depthCameraConfiguration.xml} | 2 +- .../calibration/saved/camera-SR300-960.yaml | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) rename papart/data/calibration/{cameraKinectConfiguration.xml => depthCameraConfiguration.xml} (50%) create mode 100644 papart/data/calibration/saved/camera-SR300-960.yaml diff --git a/papart/data/calibration/cameraKinectConfiguration.xml b/papart/data/calibration/depthCameraConfiguration.xml similarity index 50% rename from papart/data/calibration/cameraKinectConfiguration.xml rename to papart/data/calibration/depthCameraConfiguration.xml index 40c79d32..3d75175a 100644 --- a/papart/data/calibration/cameraKinectConfiguration.xml +++ b/papart/data/calibration/depthCameraConfiguration.xml @@ -1,4 +1,4 @@ - + diff --git a/papart/data/calibration/saved/camera-SR300-960.yaml b/papart/data/calibration/saved/camera-SR300-960.yaml new file mode 100644 index 00000000..d526bf2a --- /dev/null +++ b/papart/data/calibration/saved/camera-SR300-960.yaml @@ -0,0 +1,71 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + [] +Camera 0: + imageWidth: 960 + imageHeight: 540 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 6.9476211e+02, 0., 4.662133e+02, 0., + 6.9476211e+02, 2.81446e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 1.2177352964304565e-01, -2.6007913105329256e-01, + -5.9578551006836851e-03, -1.4334539897586079e-03 ] + extrParams: !!opencv-matrix + rows: 10 + cols: 6 + dt: d + data: [ -1.7607844755616370e-01, -1.2820713376722212e-01, + 1.5460774537187465e+00, 3.9691618786981451e+01, + -2.0418669774626716e+02, 6.4351403964187080e+02, + -1.7811130302287448e-01, -1.4706364694033458e-01, + 1.5843252636738345e+00, 4.5596623077623697e+01, + -2.2165788108081981e+02, 6.3827216502127044e+02, + 2.4781484476754240e-01, -6.7208474024433540e-01, + 3.0240918432584216e+00, 3.0597905812808028e+02, + 8.7979651732451387e+01, 6.0729733866327001e+02, + -1.2602515731264630e-02, 1.0104651192342044e-01, + -1.7992790663995890e+00, -1.1842522426386454e+02, + 3.2234544947681246e+02, 7.6469853273604872e+02, + 5.1147621677178085e-03, 1.7371891574406548e-01, + -1.8097693911394694e+00, -8.9179918593347736e+01, + 2.6838940269947079e+02, 7.7410825633252318e+02, + -1.1794349372064081e-01, 1.9322399324060713e-01, + -3.0305507980128330e+00, 2.1837440238945572e+02, + 3.0684021053236972e+02, 7.1485559885164059e+02, + -1.3753434037022760e-01, 1.8470375069357825e-01, + -3.1243272857107169e+00, 2.5517623452792574e+02, + 3.2064272373774821e+02, 7.0213260954811710e+02, + 1.0433239555743316e-01, -2.8159889631200224e-01, + 3.1030888317227983e+00, 2.3864305820545394e+02, + 4.8062175037148895e+00, 5.9512481887669003e+02, + 1.1115187521034058e-01, -1.7039573484898449e-01, + 3.1095106342789514e+00, 2.4488515071801882e+02, + 6.2753077906758733e+01, 5.9891939499910268e+02, + -1.1577350344439789e-01, 7.9903129906887749e-02, + -3.1169111581000437e+00, 2.4176659799043321e+02, + 1.1668424414898595e+02, 5.9571494908538386e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 10 + dt: d + data: [ 4.1340083848000114e-01, 3.9111806492508300e-01, + 9.7959596925818160e-01, 5.7347563761640497e-01, + 5.0807880449963017e-01, 7.0972237707286367e-01, + 8.7904455182929297e-01, 6.3547446324029178e-01, + 5.8412414368759535e-01, 5.0332289266443064e-01 ] + avgReprojErr: 6.3779671784126868e-01 + maxReprojErr: 2.4731437660509830e+00 + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. From cc3576557fb96b79bb6f0d38cab17adc4dc3ab7f Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 16 Nov 2016 17:26:30 +0100 Subject: [PATCH 28/99] =?UTF-8?q?Refactor=20in=20progress,=20Kinect1=20&?= =?UTF-8?q?=20Realsense=20working=20well.=20K2=C2=A0support=20skipped=20fo?= =?UTF-8?q?r=20this=20version.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depthcam/analysis/DepthAnalysis.java | 8 -- .../analysis/KinectDepthAnalysis.java | 57 +++++------ .../depthcam/analysis/KinectOpenCV.java | 2 +- .../depthcam/analysis/KinectProcessing.java | 2 +- .../depthcam/devices/DepthCameraDevice.java | 7 +- .../papart/depthcam/devices/Kinect360.java | 1 + .../papart/depthcam/devices/KinectOne.java | 5 - .../papart/depthcam/devices/RealSense.java | 6 +- papart/src/fr/inria/papart/procam/Papart.java | 95 ++++++++++--------- .../papart/procam/camera/CameraFactory.java | 13 +-- .../procam/camera/CameraOpenKinect.java | 17 ++-- .../procam/camera/CameraOpenKinect2.java | 31 +++++- .../procam/camera/CameraRGBIRDepth.java | 11 ++- .../papart/procam/camera/CameraRealSense.java | 13 ++- .../papart/procam/camera/CameraThread.java | 5 +- .../inria/papart/procam/camera/SubCamera.java | 2 +- .../papart/procam/display/ARDisplay.java | 7 +- 17 files changed, 153 insertions(+), 129 deletions(-) diff --git a/papart/src/fr/inria/papart/depthcam/analysis/DepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/DepthAnalysis.java index 37b5fef5..d932f707 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/DepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/DepthAnalysis.java @@ -20,16 +20,10 @@ package fr.inria.papart.depthcam.analysis; import fr.inria.papart.depthcam.devices.KinectDepthData; -import fr.inria.papart.calibration.HomographyCalibration; -import fr.inria.papart.calibration.PlaneAndProjectionCalibration; import fr.inria.papart.depthcam.PixelOffset; import org.bytedeco.javacpp.opencv_core.IplImage; -import fr.inria.papart.procam.ProjectiveDeviceP; -import java.nio.ByteBuffer; import processing.core.PApplet; -import processing.core.PMatrix3D; import processing.core.PVector; -import toxi.geom.Plane; import toxi.geom.Vec3D; /** @@ -38,8 +32,6 @@ * * @author jeremy */ -// TODO: -// use the Hardware calibration. public abstract class DepthAnalysis { protected int[] connexity; // TODO: check for Byte instead of int diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index f2bd661e..08c27a55 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -69,11 +69,11 @@ public class KinectDepthAnalysis extends DepthAnalysis { // static values protected static final float INVALID_DEPTH = -1; - protected DepthCameraDevice kinectDevice; + protected DepthCameraDevice depthCameraDevice; protected DepthComputation depthComputationMethod; public DepthCameraDevice kinectDevice() { - return this.kinectDevice; + return this.depthCameraDevice; } @Override @@ -103,11 +103,11 @@ public int getColorSize() { return getColorWidth() * getColorHeight(); } - public KinectDepthAnalysis(PApplet parent, DepthCameraDevice kinect) { - kinectDevice = kinect; + public KinectDepthAnalysis(PApplet parent, DepthCameraDevice depthCamera) { + depthCameraDevice = depthCamera; DepthAnalysis.papplet = parent; - calibRGB = kinect.getColorCamera().getProjectiveDevice(); - calibIR = kinect.getDepthCamera().getProjectiveDevice(); + calibRGB = depthCamera.getColorCamera().getProjectiveDevice(); + calibIR = depthCamera.getDepthCamera().getProjectiveDevice(); initMemory(); // initThreadPool(); @@ -123,40 +123,26 @@ private void initThreadPool() { private void initMemory() { colorRaw = new byte[getColorSize() * 3]; - depthRaw = new byte[kinectDevice.rawDepthSize()]; + depthRaw = new byte[depthCameraDevice.rawDepthSize()]; depthData = new KinectDepthData(this); depthData.projectiveDevice = this.calibIR; - if (kinectDevice instanceof Kinect360) { + if (depthCameraDevice instanceof Kinect360) { depthComputationMethod = new Kinect360Depth(); } - if (kinectDevice instanceof KinectOne) { + if (depthCameraDevice instanceof KinectOne) { depthComputationMethod = new KinectOneDepth(); } - if (kinectDevice instanceof RealSense) { - float depthScale = ((CameraRealSense) ((RealSense) kinectDevice).getMainCamera()).getDepthScale(); + if (depthCameraDevice instanceof RealSense) { + float depthScale = ((CameraRealSense) ((RealSense) depthCameraDevice).getMainCamera()).getDepthScale(); depthComputationMethod = new RealSenseDepth(depthScale); } PixelOffset.initStaticMode(getDepthWidth(), getDepthHeight()); } - public PVector findDepthAtRGB(PVector v) { - return findDepthAtRGB(v.x, v.y, v.z); - } - - public PVector findDepthAtRGB(float x, float y, float z) { - PVector v = new PVector(x, y, z); - PVector v2 = new PVector(); - - kinectDevice.getStereoCalibrationInv().mult(v, v2); - // v2 is now the location in KinectDepth instead of KinectRGB coordinates. - - int worldToPixel = kinectDevice().getDepthCamera().getProjectiveDevice().worldToPixel(v2); - - return Utils.toPVector(depthData.depthPoints[worldToPixel]); - } + public void update(IplImage depth) { update(depth, 1); @@ -302,11 +288,26 @@ protected void doForEachValid3DPoint(int precision, DepthPointManiplation manip) } } } + + public PVector findDepthAtRGB(PVector v) { + return findDepthAtRGB(v.x, v.y, v.z); + } + + public PVector findDepthAtRGB(float x, float y, float z) { + PVector v = new PVector(x, y, z); + PVector v2 = new PVector(); + + depthCameraDevice.getStereoCalibrationInv().mult(v, v2); + // v2 is now the location in KinectDepth instead of KinectRGB coordinates. + + int worldToPixel = kinectDevice().getDepthCamera().getProjectiveDevice().worldToPixel(v2); + + return Utils.toPVector(depthData.depthPoints[worldToPixel]); + } // WARNING MAGIC NUMBER protected void updateRawDepth(opencv_core.IplImage depthImage) { if (kinectDevice().type() == Camera.Type.REALSENSE) { -// depthRawShortBuffer = depthImage.imageData().position(0).limit(640 * 480 * 2).asByteBuffer().asShortBuffer(); depthRawBuffer = depthImage.getByteBuffer(); depthRawShortBuffer = depthRawBuffer.asShortBuffer(); } else { @@ -487,7 +488,7 @@ public void execute(Vec3D p, PixelOffset px) { } protected int getPixelColor(int offset) { - int colorOffset = kinectDevice.findColorOffset(depthData.depthPoints[offset]) * 3; + int colorOffset = depthCameraDevice.findColorOffset(depthData.depthPoints[offset]) * 3; int c = (colorRaw[colorOffset + 2] & 0xFF) << 16 | (colorRaw[colorOffset + 1] & 0xFF) << 8 | (colorRaw[colorOffset + 0] & 0xFF); diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java index 862047a6..ab2e357d 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectOpenCV.java @@ -83,7 +83,7 @@ class setImageData implements DepthPointManiplation { public void execute(Vec3D p, PixelOffset px) { depthData.validPointsMask[px.offset] = true; int outputOffset = px.offset * 3; - int colorOffset = kinectDevice.findColorOffset(p) * 3; + int colorOffset = depthCameraDevice.findColorOffset(p) * 3; validPointsRaw[outputOffset + 2] = colorRaw[colorOffset + 2]; validPointsRaw[outputOffset + 1] = colorRaw[colorOffset + 1]; validPointsRaw[outputOffset + 0] = colorRaw[colorOffset + 0]; diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java index 0c2771f8..d25769b6 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java @@ -262,7 +262,7 @@ private void setFakeColor(int offset, int r, int g, int b) { } private void setPixelColor(int offset) { - int colorOffset = kinectDevice.findColorOffset(depthData.depthPoints[offset]) * 3; + int colorOffset = depthCameraDevice.findColorOffset(depthData.depthPoints[offset]) * 3; int c = (colorRaw[colorOffset + 2] & 0xFF) << 16 | (colorRaw[colorOffset + 1] & 0xFF) << 8 | (colorRaw[colorOffset + 0] & 0xFF); diff --git a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java index 7c01364d..945a70ae 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java @@ -55,6 +55,10 @@ public DepthCameraDevice(PApplet parent) { this.parent = parent; } + public CameraRGBIRDepth getMainCamera() { + return camera; + } + public SubCamera getColorCamera() { return camera.getColorCamera(); } @@ -75,9 +79,10 @@ public SubDepthCamera getDepthCamera() { * init a depth camera, depth only as there is another color camera. */ protected final void initDefaultCamera() { - String id = Papart.getPapart().cameraConfiguration.getCameraName(); + String id = Papart.getDefaultCameraConfiguration(parent).getCameraName(); camera = (CameraRGBIRDepth) CameraFactory.createCamera(type(), id); camera.setUseDepth(true); + camera.setUseColor(true); camera.setParent(parent); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java index 160a1e87..0d4e1bc9 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java +++ b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java @@ -54,6 +54,7 @@ public Kinect360(PApplet parent, Camera anotherCamera) { } this.camera.setUseDepth(true); camera.getDepthCamera().setCalibration(Papart.kinectIRCalib); + camera.getColorCamera().setCalibration(Papart.kinectRGBCalib); setStereoCalibration(Papart.kinectStereoCalib); camera.start(); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java index 132c7938..ce2b4e48 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java @@ -19,14 +19,9 @@ */ package fr.inria.papart.depthcam.devices; -import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; -import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraOpenKinect2; -import fr.inria.papart.procam.camera.CameraRGBIRDepth; -import fr.inria.papart.procam.camera.CameraRealSense; -import fr.inria.papart.procam.camera.SubCamera; import processing.core.PApplet; /** diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index da7527f4..e7e566de 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -55,14 +55,14 @@ public RealSense(PApplet parent, Camera anotherCam) { private void useHardwareIntrinsics(CameraRealSense cameraRS) { CameraRealSense.useHarwareIntrinsics(cameraRS.getColorCamera(), cameraRS.getFrameGrabber()); - CameraRealSense.useHarwareIntrinsics(cameraRS.getColorCamera(), cameraRS.getFrameGrabber()); - CameraRealSense.useHarwareIntrinsics(cameraRS.getColorCamera(), cameraRS.getFrameGrabber()); + CameraRealSense.useHarwareIntrinsics(cameraRS.getDepthCamera(), cameraRS.getFrameGrabber()); + CameraRealSense.useHarwareIntrinsics(cameraRS.getIRCamera(), cameraRS.getFrameGrabber()); } public CameraRealSense getMainCamera() { return cameraRS; } - + @Override public int rawDepthSize() { return getDepthCamera().width() * getDepthCamera().height() * 2; diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 3425a555..ef4ab8db 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -42,6 +42,7 @@ import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraOpenKinect; +import fr.inria.papart.procam.camera.CameraRGBIRDepth; import fr.inria.papart.procam.camera.CameraRealSense; import java.io.File; import java.lang.reflect.Constructor; @@ -115,12 +116,9 @@ public class Papart { private PVector frameSize = new PVector(); private boolean isWithoutCamera = false; - public DepthCameraDevice kinectDevice; + public DepthCameraDevice depthCameraDevice; - public CameraConfiguration cameraConfiguration; - public ScreenConfiguration screenConfiguration; // TODO: find what to do with these... - /** * Create the main PapARt object, look at the examples for how to use it. * @@ -132,9 +130,6 @@ public Papart(Object applet) { this.touchInitialized = false; this.applet = (PApplet) applet; - cameraConfiguration = getDefaultCameraConfiguration(this.applet); - screenConfiguration = getDefaultScreenConfiguration(this.applet); - this.appletClass = applet.getClass(); PFont font = this.applet.loadFont(defaultFont); // TODO: singleton -> Better implementation. @@ -150,7 +145,7 @@ public static CameraConfiguration getDefaultCameraConfiguration(PApplet applet) return config; } - public static CameraConfiguration getDefaultKinectConfiguration(PApplet applet) { + public static CameraConfiguration getDefaultDepthCameraConfiguration(PApplet applet) { CameraConfiguration config = new CameraConfiguration(); config.loadFrom(applet, depthCameraConfig); return config; @@ -393,6 +388,7 @@ public void post() { */ public void defaultFrameLocation() { System.out.println("Setting the frame location..."); + ScreenConfiguration screenConfiguration = getDefaultScreenConfiguration(this.applet); this.applet.frame.setLocation(screenConfiguration.getProjectionScreenOffsetX(), screenConfiguration.getProjectionScreenOffsetY()); @@ -533,13 +529,17 @@ public void initDebug() { } public void initProjectorCamera() { - initProjectorCamera(cameraConfiguration.getCameraName(), - cameraConfiguration.getCameraType(), - cameraConfiguration.getCameraFormat(), + CameraConfiguration cameraConfiguration = getDefaultCameraConfiguration(this.applet); + initProjectorCamera(cameraConfiguration, 1); } public void initProjectorCamera(float quality) { + CameraConfiguration cameraConfiguration = getDefaultCameraConfiguration(this.applet); + initProjectorCamera(cameraConfiguration, quality); + } + + public void initProjectorCamera(CameraConfiguration cameraConfiguration, float quality) { initProjectorCamera(cameraConfiguration.getCameraName(), cameraConfiguration.getCameraType(), cameraConfiguration.getCameraFormat(), @@ -595,6 +595,11 @@ public void initCamera() { * quality go higher like 2. */ public void initCamera(float quality) { + CameraConfiguration cameraConfiguration = getDefaultCameraConfiguration(applet); + initCamera(cameraConfiguration, quality); + } + + public void initCamera(CameraConfiguration cameraConfiguration, float quality) { initCamera(cameraConfiguration.getCameraName(), cameraConfiguration.getCameraType(), cameraConfiguration.getCameraFormat(), @@ -617,7 +622,7 @@ public void initCamera(String cameraNo, Camera.Type cameraType, String cameraFor cameraTracking.setCalibration(cameraCalib); cameraTracking.start(); loadTracking(cameraCalib); - cameraTracking.setThread(); +// cameraTracking.setThread(); initARDisplay(quality); checkInitialization(); @@ -682,7 +687,7 @@ private void loadTracking(String calibrationPath) { */ public void loadTouchInputKinectOnly() { - loadDefaultCameraKinect(); + loadDefaultDepthCamera(); // cameraTracking = kinectDevice.getCameraRGB(); // kinectDevice.getCameraRGB().setThread(); @@ -691,8 +696,8 @@ public void loadTouchInputKinectOnly() { loadDefaultTouchKinect(); // Specific ? - PMatrix3D extr = kinectDevice.getStereoCalibration(); - kinectDevice.setExtrinsics(extr); + PMatrix3D extr = depthCameraDevice.getStereoCalibration(); + depthCameraDevice.setExtrinsics(extr); // Specific ((KinectTouchInput) this.touchInput).useRawDepth(); @@ -704,7 +709,7 @@ public void loadTouchInputKinectOnly() { * */ public void loadTouchInput() { - loadDefaultCameraKinect(); + loadDefaultDepthCamera(); // kinectDevice.getCameraRGB().setThread(); // kinectDevice.getCameraDepth().setThread(); @@ -712,7 +717,7 @@ public void loadTouchInput() { // setExtrinsics must after the kinect stereo calibration is loaded PMatrix3D extr = (Papart.getPapart()).loadCalibration(Papart.kinectTrackingCalib); - kinectDevice.setExtrinsics(extr); + depthCameraDevice.setExtrinsics(extr); } private boolean useKinectOne = true; @@ -726,47 +731,46 @@ public void useKinectOne(boolean kinectOne) { * * @return */ - public void loadDefaultCameraKinect() { + public DepthCameraDevice loadDefaultDepthCamera() { // Two cases, either the other camera running of the same type - - CameraConfiguration kinectConfiguration = Papart.getDefaultKinectConfiguration(applet); - - // If the camera is not instanciated, it is not correct ! - if (cameraTracking == null) { - System.err.println("You must choose a camera to create a DepthCamera."); - } + CameraConfiguration kinectConfiguration = Papart.getDefaultDepthCameraConfiguration(applet); + // If the camera is not instanciated, we use depth + color from the camera. +// if (cameraTracking == null) { +// System.err.println("You must choose a camera to create a DepthCamera."); +// } if (kinectConfiguration.getCameraType() == Camera.Type.REALSENSE) { - kinectDevice = new RealSense(applet, (CameraRealSense) cameraTracking); - return; + depthCameraDevice = new RealSense(applet, (CameraRealSense) cameraTracking); } if (kinectConfiguration.getCameraType() == Camera.Type.OPEN_KINECT) { - kinectDevice = new Kinect360(applet, (CameraOpenKinect) cameraTracking); - return; + depthCameraDevice = new Kinect360(applet, (CameraOpenKinect) cameraTracking); } if (kinectConfiguration.getCameraType() == Camera.Type.OPEN_KINECT_2) { - kinectDevice = new KinectOne(applet, cameraTracking); - return; + depthCameraDevice = new KinectOne(applet, cameraTracking); + } + + if (depthCameraDevice == null) { + System.err.println("Could not load the depth camera !" + "Camera Type " + kinectConfiguration.getCameraType()); } - System.err.println("Could not load the Kinect !" + "Camera Type " + kinectConfiguration.getCameraType()); - kinectDevice = null; + + return depthCameraDevice; } private void loadDefaultTouchKinect() { - kinectDepthAnalysis = new KinectDepthAnalysis(this.applet, kinectDevice); + kinectDepthAnalysis = new KinectDepthAnalysis(this.applet, depthCameraDevice); PlaneAndProjectionCalibration calibration = new PlaneAndProjectionCalibration(); calibration.loadFrom(this.applet, planeAndProjectionCalib); KinectTouchInput kinectTouchInput = new KinectTouchInput(this.applet, - kinectDevice, + depthCameraDevice, kinectDepthAnalysis, calibration); - kinectDevice.setTouch(kinectTouchInput); + depthCameraDevice.setTouch(kinectTouchInput); kinectTouchInput.setTouchDetectionCalibration(getDefaultTouchCalibration()); kinectTouchInput.setTouchDetectionCalibration3D(getDefaultTouchCalibration3D()); @@ -842,8 +846,8 @@ public void stop() { } public void dispose() { - if (touchInitialized && kinectDevice != null) { - kinectDevice.close(); + if (touchInitialized && depthCameraDevice != null) { + depthCameraDevice.close(); } if (cameraInitialized && cameraTracking != null) { try { @@ -893,8 +897,11 @@ public Camera getCameraTracking() { } public Camera getPublicCameraTracking() { - if (cameraTracking instanceof CameraRealSense) { - return ((CameraRealSense) cameraTracking).getActingCamera(); + if (cameraTracking instanceof CameraRGBIRDepth) { + if (((CameraRGBIRDepth) cameraTracking).getActingCamera() == null) { + throw new RuntimeException("Papart: Impossible to use the mainCamera, use a subCamera or set the ActAsX methods."); + } + return ((CameraRGBIRDepth) cameraTracking).getActingCamera(); } return this.cameraTracking; } @@ -914,11 +921,11 @@ public boolean isWithoutCamera() { } public Camera getKinectCamera() { - return this.kinectDevice.getColorCamera(); + return this.depthCameraDevice.getColorCamera(); } public DepthCameraDevice getKinectDevice() { - return kinectDevice; + return depthCameraDevice; } public KinectDepthAnalysis getKinectAnalysis() { @@ -926,10 +933,10 @@ public KinectDepthAnalysis getKinectAnalysis() { } public Camera.Type getKinectType() { - if (kinectDevice == null) { + if (depthCameraDevice == null) { return Camera.Type.FAKE; } - return kinectDevice.type(); + return depthCameraDevice.type(); } public PApplet getApplet() { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index 11de9395..3190d6c9 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -19,8 +19,6 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.camera.Camera.Type; - /** * * @author Jeremy Laviole @@ -90,7 +88,7 @@ public static Camera createCamera(Camera.Type type, String description, String f } if (cameraMulti != null) { - if (isRGB) { + if (isRGB) { cameraMulti.setUseColor(true); cameraMulti.actAsColorCamera(); } @@ -110,13 +108,4 @@ public static Camera createCamera(Camera.Type type, String description, String f throw new RuntimeException("ProCam, Camera: Unspported camera Type"); } - private static boolean checkInt(String str) { - try { - Integer.parseInt(str); - return true; - } catch (NumberFormatException e) { - return false; - } - } - } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java index dcf9bd8c..46b761c9 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java @@ -40,24 +40,31 @@ protected CameraOpenKinect(int cameraNo) { @Override public void internalInit() { - System.out.println("setting all pix format"); + + grabber = new OpenKinectFrameGrabber(this.systemNumber); + if (isUseDepth()) { depthCamera.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); depthCamera.type = SubCamera.Type.DEPTH; depthCamera.setSize(640, 480); - System.out.println("setting depth pixel format"); + + grabber.setDepthFormat(freenect.FREENECT_DEPTH_MM); } if (isUseColor()) { colorCamera.setPixelFormat(PixelFormat.BGR); colorCamera.type = SubCamera.Type.COLOR; colorCamera.setSize(640, 480); + + grabber.setImageWidth(colorCamera.width()); + grabber.setImageHeight(colorCamera.height()); + kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; + grabber.setVideoFormat(kinectVideoFormat); } if (isUseIR()) { IRCamera.setPixelFormat(PixelFormat.GRAY); IRCamera.type = SubCamera.Type.IR; IRCamera.setSize(640, 480); } - grabber = new OpenKinectFrameGrabber(this.systemNumber); } @Override @@ -98,10 +105,6 @@ public void disableDepth() { @Override public void enableColor() { - grabber.setImageWidth(width()); - grabber.setImageHeight(height()); - kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; - grabber.setVideoFormat(kinectVideoFormat); } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java index c08ca4c0..4f36f5ff 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java @@ -19,8 +19,10 @@ */ package fr.inria.papart.procam.camera; +import org.bytedeco.javacpp.opencv_core; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.OpenKinect2FrameGrabber; +import processing.core.PImage; /** * @@ -30,8 +32,23 @@ public class CameraOpenKinect2 extends CameraRGBIRDepth { protected OpenKinect2FrameGrabber grabber; + class Kinect2SubCamera extends SubCamera { + + public Kinect2SubCamera(CameraRGBIRDepth mainCamera) { + super(mainCamera); + } + + @Override + public PImage getPImage() { + System.out.println("Kinect2: Get PImage"); + mainCamera.grab(); + return super.getPImage(); + } + } + protected CameraOpenKinect2(int cameraNo) { this.systemNumber = cameraNo; + colorCamera = new Kinect2SubCamera(this); } @Override @@ -56,15 +73,19 @@ public void internalInit() { @Override public void internalStart() throws FrameGrabber.Exception { + System.out.println("K2: Starting..." + Thread.currentThread()); grabber.start(); } - /*** + /** + * * * Warning BUG: cannot grab in a thread and display as PImage in another. - * @throws Exception + * + * @throws Exception */ @Override protected void internalGrab() throws Exception { + System.out.println("Grab called." + Thread.currentThread()); grabber.grab(); } @@ -93,7 +114,6 @@ public void disableIR() { @Override public void enableDepth() { grabber.enableDepthStream(); - System.out.println("enable depth stream"); } @Override @@ -123,7 +143,10 @@ public void grabDepth() { @Override public void grabColor() { - colorCamera.updateCurrentImage(grabber.getVideoImage()); + opencv_core.IplImage videoImage = grabber.getVideoImage(); + if (videoImage != null) { + colorCamera.updateCurrentImage(videoImage); + } } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java index 96d7d516..1be77740 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -163,7 +163,7 @@ void grab(SubCamera camera) { protected abstract void internalStart() throws Exception; protected boolean isStarting = false; - + @Override public void start() { isStarting = true; @@ -181,11 +181,12 @@ public void start() { internalStart(); this.isConnected = true; } catch (Exception e) { - System.err.println("Could not Kinect start frameGrabber... " + e); - System.err.println("Kinect ID " + this.systemNumber + " could not start."); + System.err.println("Could not start frameGrabber... " + e); + System.err.println("Depth camera ID " + this.systemNumber + " could not start."); System.err.println("Check cable connection and ID."); + e.printStackTrace(); } - isStarting = false; + isStarting = false; } protected abstract void internalGrab() throws Exception; @@ -358,7 +359,7 @@ public String getCalibrationARToolkit() { @Override public void trackMarkerBoard(MarkerBoard sheet) { - System.out.println("In trackMarkerboard in CameaRealSense BAAAADD"); + System.out.println("In trackMarkerboard in CameaRGBIRDepth BAAAADD"); actAsCamera.trackMarkerBoard(sheet); } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 4d3fb4dc..f74bd5c4 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -23,6 +23,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.bytedeco.javacpp.RealSense; +import org.bytedeco.javacpp.opencv_core; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.RealSenseFrameGrabber; import processing.core.PMatrix3D; @@ -70,7 +71,9 @@ public void internalInit() { if (isUseColor()) { colorCamera.setPixelFormat(PixelFormat.RGB); colorCamera.type = SubCamera.Type.COLOR; - colorCamera.setSize(960, 540); + if (colorCamera.width == 0 || colorCamera.height == 0) { + colorCamera.setSize(960, 540); + } } if (isUseIR()) { IRCamera.setSize(640, 480); @@ -110,7 +113,7 @@ public void close() { } public static void useHarwareIntrinsics(SubCamera camera, RealSenseFrameGrabber grabber) { - if(camera == null || camera == Camera.INVALID_CAMERA){ + if (camera == null || camera == Camera.INVALID_CAMERA) { return; } int camType = 0; @@ -134,8 +137,10 @@ public static void useHarwareIntrinsics(SubCamera camera, RealSenseFrameGrabber @Override public void grabColor() { - System.out.println("Realsense: Grab Color"); - colorCamera.updateCurrentImage(grabber.grabVideo()); + opencv_core.IplImage video = grabber.grabVideo(); + if (video != null) { + colorCamera.updateCurrentImage(video); + } } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index 1adb0cd5..ba77d6ce 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -74,8 +74,8 @@ private void initThreadPool() { public void run() { cameraForMarkerboard = camera; - if (camera instanceof CameraRealSense) { - cameraForMarkerboard = ((CameraRealSense) camera).getActingCamera(); + if (camera instanceof CameraRGBIRDepth) { + cameraForMarkerboard = ((CameraRGBIRDepth) camera).getActingCamera(); } while (!stop) { @@ -86,7 +86,6 @@ public void run() { if (image != null && compute && !camera.getTrackedSheets().isEmpty()) { this.compute(); } - } } diff --git a/papart/src/fr/inria/papart/procam/camera/SubCamera.java b/papart/src/fr/inria/papart/procam/camera/SubCamera.java index dcffdade..62cc6479 100644 --- a/papart/src/fr/inria/papart/procam/camera/SubCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/SubCamera.java @@ -72,7 +72,7 @@ public PImage getPImage() { currentImage = null; return camImage; } + return camImage; // TODO: exceptions !!! - return null; } } diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index b98cfafa..f4ef7433 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -165,8 +165,11 @@ public void draw() { drawScreensOver(); parent.noStroke(); - if (camera != null && camera.getPImage() != null) { - parent.image(camera.getPImage(), 0, 0, parent.width, parent.height); + System.out.println("ARDisplay: GetPImage() "); + PImage img = camera.getPImage(); + + if (camera != null && img != null) { + parent.image(img, 0, 0, parent.width, parent.height); // ((PGraphicsOpenGL) (parent.g)).image(camera.getPImage(), 0, 0, frameWidth, frameHeight); } From 9bb7ff509b90c051e64951b10bdb017c872498d9 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 16 Nov 2016 18:32:47 +0100 Subject: [PATCH 29/99] =?UTF-8?q?Work=20in=20progress,=20depth=20Calibrati?= =?UTF-8?q?on=C2=A0is=20OK.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/inria/papart/depthcam/PointCloud.java | 1 - .../depthcam/devices/KinectPointCloud.java | 40 +++++++++++++------ papart/src/fr/inria/papart/procam/Papart.java | 7 +++- .../papart/procam/camera/CameraThread.java | 1 + .../inria/papart/procam/camera/SubCamera.java | 10 ++--- .../papart/procam/display/ARDisplay.java | 1 - 6 files changed, 39 insertions(+), 21 deletions(-) diff --git a/papart/src/fr/inria/papart/depthcam/PointCloud.java b/papart/src/fr/inria/papart/depthcam/PointCloud.java index b9cf3f0b..bc6fa070 100755 --- a/papart/src/fr/inria/papart/depthcam/PointCloud.java +++ b/papart/src/fr/inria/papart/depthcam/PointCloud.java @@ -67,7 +67,6 @@ public class PointCloud { protected static final int SIZEOF_FLOAT = Float.SIZE / 8; protected static final int SIZEOF_BYTE = Byte.SIZE / 8; protected boolean usePoints; - private int skip = 1; public PointCloud(PApplet parent, int size) { this.parentApplet = parent; diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectPointCloud.java b/papart/src/fr/inria/papart/depthcam/devices/KinectPointCloud.java index e03337ec..3275c29c 100755 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectPointCloud.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectPointCloud.java @@ -36,12 +36,18 @@ */ public class KinectPointCloud extends PointCloud implements PConstants { + private KinectDepthAnalysis depthAnalysis; + private int precision = 1; + public KinectPointCloud(PApplet parent, KinectDepthAnalysis depthAnalysis, int skip) { super(parent, depthAnalysis.getDepthSize() / (skip * skip)); + this.depthAnalysis = depthAnalysis; + precision = skip; } public KinectPointCloud(PApplet parent, KinectDepthAnalysis depthAnalysis) { this(parent, depthAnalysis, 1); + this.depthAnalysis = depthAnalysis; } public void updateWith(KinectProcessing kinect) { @@ -52,26 +58,34 @@ public void updateWith(KinectProcessing kinect) { nbVertices = 0; nbColors = 0; - int k = 0; - for (int i = 0; i < kinect.getDepthSize(); i++) { +// for (int i = 0; i < kinect.getDepthSize(); i++) { + + int k = 0; // k is the 3D point cloud memory. + for (int y = 0; y < depthAnalysis.getDepthHeight(); y += precision) { + for (int x = 0; x < depthAnalysis.getDepthWidth(); x += precision) { - if (valid[i]) { - Vec3D p = points[i]; - int c = colorsImg.pixels[i]; + int i = x + y * depthAnalysis.getDepthWidth(); + + if (valid[i]) { + Vec3D p = points[i]; + int c = colorsImg.pixels[i]; - verticesJava[k++] = p.x; - verticesJava[k++] = p.y; - verticesJava[k++] = -p.z; - verticesJava[k++] = 1; + verticesJava[k++] = p.x; + verticesJava[k++] = p.y; + verticesJava[k++] = -p.z; + verticesJava[k++] = 1; - int c2 = javaToNativeARGB(c); + int c2 = javaToNativeARGB(c); - nbVertices++; + nbVertices++; + + colorsJava[nbColors++] = c2; + // Think about dividing the color intensity by 255 in the shader... + } - colorsJava[nbColors++] = c2; - // Think about dividing the color intensity by 255 in the shader... } } + verticesNative.rewind(); verticesNative.put(verticesJava, 0, nbVertices * 4); diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index ef4ab8db..222e5f43 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -313,6 +313,11 @@ public void forceCameraSize() { cameraTracking.height()); } + public void forceDepthCameraSize() { + forceWindowSize(depthCameraDevice.getDepthCamera().width(), + depthCameraDevice.getDepthCamera().height()); + } + public void forceWindowSize(int w, int h) { Papart papart = Papart.getPapart(); @@ -622,7 +627,7 @@ public void initCamera(String cameraNo, Camera.Type cameraType, String cameraFor cameraTracking.setCalibration(cameraCalib); cameraTracking.start(); loadTracking(cameraCalib); -// cameraTracking.setThread(); + cameraTracking.setThread(); initARDisplay(quality); checkInitialization(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index ba77d6ce..1a621a82 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -100,6 +100,7 @@ public void compute() { updateParallel(); camera.getSheetSemaphore().release(); + System.out.println("detectedMarkers: " + this.detectedMarkers.length); } catch (InterruptedException ex) { Logger.getLogger(CameraThread.class.getName()).log(Level.SEVERE, null, ex); } diff --git a/papart/src/fr/inria/papart/procam/camera/SubCamera.java b/papart/src/fr/inria/papart/procam/camera/SubCamera.java index 62cc6479..0913d2cf 100644 --- a/papart/src/fr/inria/papart/procam/camera/SubCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/SubCamera.java @@ -66,13 +66,13 @@ public void close() { @Override public PImage getPImage() { + // TODO: time management to avoid to send multiple times the same + // frame to the graphics card. this.checkCamImage(); - if (currentImage != null) { +// if (currentImage != null) { camImage.update(currentImage); - currentImage = null; - return camImage; - } +// return camImage; +// } return camImage; - // TODO: exceptions !!! } } diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index f4ef7433..620e1e34 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -165,7 +165,6 @@ public void draw() { drawScreensOver(); parent.noStroke(); - System.out.println("ARDisplay: GetPImage() "); PImage img = camera.getPImage(); if (camera != null && img != null) { From 25c0de530ebca9f5d83957b06ac66a6fd493a50f Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 18 Nov 2016 21:15:30 +0100 Subject: [PATCH 30/99] Work in progress, more elements working. Calibrations in progress. --- .../calibration/CalibrationExtrinsic.java | 36 +++--- .../papart/calibration/CalibrationPopup.java | 104 ++++++++++------ .../calibration/CalibrationSnapshot.java | 4 +- .../analysis/KinectDepthAnalysis.java | 82 +++++++----- .../depthcam/analysis/KinectProcessing.java | 6 +- .../depthcam/devices/DepthCameraDevice.java | 10 +- .../papart/depthcam/devices/Kinect360.java | 2 +- .../papart/depthcam/devices/KinectOne.java | 1 + .../papart/depthcam/devices/RealSense.java | 20 ++- .../papart/multitouch/KinectTouchInput.java | 81 ++++++++---- .../papart/multitouch/TouchDetection.java | 1 + papart/src/fr/inria/papart/procam/Papart.java | 117 ++++++------------ papart/src/fr/inria/papart/procam/Utils.java | 22 +++- .../fr/inria/papart/procam/camera/Camera.java | 4 + .../procam/camera/CameraOpenKinect.java | 4 +- .../procam/camera/CameraOpenKinect2.java | 1 + .../procam/camera/CameraRGBIRDepth.java | 31 ++++- .../papart/procam/camera/CameraRealSense.java | 39 +++++- .../papart/procam/camera/CameraThread.java | 1 - .../inria/papart/procam/camera/SubCamera.java | 24 +++- .../papart/procam/camera/TrackedView.java | 11 +- .../papart/procam/display/ARDisplay.java | 4 + 22 files changed, 382 insertions(+), 223 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index cee4a6fd..08d39d2e 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -45,8 +45,8 @@ public class CalibrationExtrinsic { private Papart papart; // Kinect - private Camera.Type kinectType; - private DepthCameraDevice kinectDevice; + private Camera.Type depthCameraType; + private DepthCameraDevice depthCameraDevice; public CalibrationExtrinsic(PApplet parent) { this.parent = parent; @@ -57,13 +57,13 @@ void setProjector(ProjectorDisplay projector) { this.projector = projector; } - public void setDefaultKinect() { - this.kinectType = papart.getKinectType(); - this.kinectDevice = papart.getKinectDevice(); + public void setDefaultDepthCamera() { + this.depthCameraType = papart.getDepthCameraType(); + this.depthCameraDevice = papart.getDepthCameraDevice(); } - public void setKinect(DepthCameraDevice device, Camera.Type type) { - this.kinectType = type; - this.kinectDevice = device; + public void setDepthCamera(DepthCameraDevice device, Camera.Type type) { + this.depthCameraType = type; + this.depthCameraDevice = device; } public PMatrix3D getKinectCamExtrinsics() { @@ -77,7 +77,7 @@ public void computeProjectorCameraExtrinsics(ArrayList snap 0, 0, 0, 0); for (CalibrationSnapshot snapshot : snapshots) { - PMatrix3D extr = computeExtrinsics(snapshot.cameraPaper, + PMatrix3D extr = computeExtrinsics(snapshot.mainCameraPaper, snapshot.projectorPaper); Utils.addMatrices(sum, extr); } @@ -92,16 +92,16 @@ public void saveProCamExtrinsics(PMatrix3D extr){ } public void calibrateKinect(ArrayList snapshots) { - if (this.kinectType == Camera.Type.OPEN_KINECT_2) { + if (this.depthCameraType == Camera.Type.OPEN_KINECT_2) { calibrateKinectOne(snapshots); } - if (this.kinectType == Camera.Type.OPEN_KINECT) { + if (this.depthCameraType == Camera.Type.OPEN_KINECT) { calibrateKinect360(snapshots); } } protected void calibrateKinectOne(ArrayList snapshots) { - PMatrix3D kinectExtr = kinectDevice.getStereoCalibration().get(); + PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); kinectExtr.invert(); PlaneCalibration planeCalibCam = computeAveragePlaneCam(snapshots); @@ -133,7 +133,7 @@ protected void calibrateKinect360(ArrayList snapshots) { protected void calibrateKinect360Extr(ArrayList snapshots) { // Depth -> color extrinsics - PMatrix3D kinectExtr = kinectDevice.getStereoCalibration().get(); + PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); // color -> depth extrinsics kinectExtr.invert(); @@ -150,7 +150,7 @@ protected void calibrateKinect360Extr(ArrayList snapshots) public boolean calibrateKinect360Plane(ArrayList snapshots) { // Depth -> color extrinsics - PMatrix3D kinectExtr = kinectDevice.getStereoCalibration().get(); + PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); // color -> depth extrinsics kinectExtr.invert(); @@ -181,7 +181,7 @@ public boolean calibrateKinect360Plane(ArrayList snapshots) public boolean calibrateKinect360PlaneOnly(ArrayList snapshots) { // Depth -> color extrinsics - PMatrix3D kinectExtr = kinectDevice.getStereoCalibration().get(); + PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); // color -> depth extrinsics kinectExtr.invert(); @@ -227,7 +227,7 @@ private PMatrix3D computeKinectCamExtrinsics(ArrayList snap /// depth -> color -> color -> Paper boardFromDepth.preApply(stereoExtr); - PMatrix3D extr = computeExtrinsics(boardFromDepth, snapshot.cameraPaper); + PMatrix3D extr = computeExtrinsics(boardFromDepth, snapshot.mainCameraPaper); Utils.addMatrices(sum, extr); nbCalib++; @@ -281,12 +281,12 @@ private PlaneCalibration computeAveragePlaneCam(ArrayList s int nbPlanes = 0; for (CalibrationSnapshot snapshot : snapshots) { - if (snapshot.cameraPaper == null) { + if (snapshot.mainCameraPaper == null) { continue; } PlaneCalibration cam = PlaneCalibration.CreatePlaneCalibrationFrom( - snapshot.cameraPaper.get(), paperSize); + snapshot.mainCameraPaper.get(), paperSize); Utils.sumPlane(sumCam, cam.getPlane()); nbPlanes++; diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index fd27c6a8..80992262 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 Jérémy Laviole * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -24,6 +25,7 @@ import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.ProjectorAsCamera; +import fr.inria.papart.procam.camera.SubCamera; import fr.inria.papart.procam.camera.TrackedView; import fr.inria.papart.procam.display.ProjectorDisplay; import fr.inria.papart.tracking.DetectedMarker; @@ -34,9 +36,6 @@ import fr.inria.skatolo.gui.group.Textarea; import java.util.ArrayList; import org.bytedeco.javacpp.ARToolKitPlus; -import static org.bytedeco.javacpp.ARToolKitPlus.MARKER_ID_BCH; -import static org.bytedeco.javacpp.ARToolKitPlus.PIXEL_FORMAT_LUM; -import static org.bytedeco.javacpp.ARToolKitPlus.UNDIST_NONE; import org.bytedeco.javacpp.opencv_core; import static org.bytedeco.javacpp.opencv_core.IPL_DEPTH_8U; import static org.bytedeco.javacpp.opencv_imgproc.CV_BGR2GRAY; @@ -88,12 +87,13 @@ public class CalibrationPopup extends PApplet { // Cameras private Camera cameraTracking; - private Camera cameraKinect; + private Camera cameraFromDepthCam; // can be the same as cameraTracking. private TrackedView projectorView; // Kinect - private Camera.Type kinectType; - + private Camera.Type depthCameraType; + private boolean useExternalColorCamera = false; + // calibrations private ArrayList snapshots = new ArrayList(); private String isProCamCalibrated = NOTHING; @@ -106,7 +106,6 @@ public class CalibrationPopup extends PApplet { private CalibrationExtrinsic calibrationExtrinsic; private PImage backgroundImg; - public CalibrationPopup() { super(); PApplet.runSketch(new String[]{this.getClass().getName()}, this); @@ -120,6 +119,7 @@ public void settings() { @Override public void setup() { + // Papart was created before, already with a camera, projector and Dcam. papart = Papart.getPapart(); cornersFileName = Papart.calibrationFolder + CORNERS_NAME; calibrationApp = new CalibrationApp(); @@ -134,12 +134,32 @@ public void setup() { initProjectorAsCamera(); calibrationExtrinsic.setProjector(projector); - kinectType = papart.getKinectType(); - if (kinectType != Type.NONE) { - if (kinectType == Type.X360) { - initKinect360(papart.getKinectDevice()); + depthCameraType = papart.getDepthCameraType(); + DepthCameraDevice depthCameraDevice = papart.getDepthCameraDevice(); + + // There is a depth camera, and it is started. + if (depthCameraType != Camera.Type.FAKE && depthCameraDevice != null) { + + // There is a depth camera: + // - either the tracking is with the depth camera + // - or it is another camera + // 1. tracking camera is part of a depth camera + if (cameraTracking instanceof SubCamera + && cameraTracking == depthCameraDevice.getMainCamera().getActingCamera()) { + // tracking should be loaded already ! + System.out.println("Calibration with a Depth and color camera in the same device."); + cameraFromDepthCam = cameraTracking; + useExternalColorCamera = false; } - calibrationExtrinsic.setKinect(papart.getKinectDevice(), kinectType); + + // 2. Tracking camera is another camera. + if (!(cameraTracking instanceof SubCamera)) { + // the depth camera + initTrackingOn(papart.getDepthCameraDevice()); + System.out.println("Calibration with a Depth and color camera in DIFFERENT devices."); + useExternalColorCamera = true; + } + calibrationExtrinsic.setDepthCamera(depthCameraDevice, depthCameraType); } initCorners(); @@ -161,7 +181,12 @@ private void initProjectorAsCamera() { projectorView = new TrackedView(); projectorView.setImageWidthPx(projector.getWidth()); projectorView.setImageHeightPx(projector.getHeight()); - projectorView.init(); + + if (cameraTracking.getPixelFormat() == Camera.PixelFormat.GRAY) { + projectorView.init(PApplet.ALPHA); + } else { + projectorView.init(PApplet.GRAY); + } projectorAsCamera = new ProjectorAsCamera(); projectorAsCamera.setCalibration(Papart.projectorCalib); @@ -174,29 +199,29 @@ private void initProjectorAsCamera() { projectorAsCamera.trackMarkerBoard(board); initMarkerTrackingFromProjector(); } - - private ARToolKitPlus.MultiTracker projectorTracker = null; - + + private ARToolKitPlus.MultiTracker projectorTracker = null; + private void initMarkerTrackingFromProjector() { projectorTracker = DetectedMarker.createDetector(projector.getWidth(), projector.getHeight()); } - private void initKinect360(DepthCameraDevice kinectDevice) { - cameraKinect = kinectDevice.getColorCamera(); + private void initTrackingOn(DepthCameraDevice kinectDevice) { + cameraFromDepthCam = kinectDevice.getColorCamera(); String ARToolkitCalib = Papart.calibrationFolder + KINECT_ARTOOLKIT_NAME; - Camera.convertARParams(this, cameraKinect.getCalibrationFile(), ARToolkitCalib); - cameraKinect.initMarkerDetection(ARToolkitCalib); + Camera.convertARParams(this, cameraFromDepthCam.getCalibrationFile(), ARToolkitCalib); + cameraFromDepthCam.initMarkerDetection(ARToolkitCalib); // No display for now... // arDisplayKinect = new ARDisplay(this, cameraKinect); // arDisplayKinect.init(); // arDisplayKinect.manualMode(); // app.addDisplay(arDisplayKinect); - cameraKinect.trackSheets(true); + cameraFromDepthCam.trackSheets(true); // as it does not comes with the display: - cameraKinect.trackMarkerBoard(board); + cameraFromDepthCam.trackMarkerBoard(board); } void reset() { @@ -229,7 +254,7 @@ void initMainGui() { // .setCaptionLabel("Calibration ProCam") .plugTo(this, "calibrateProCam"); - if (kinectType != Type.NONE) { + if (depthCameraType != Camera.Type.FAKE) { skatolo.addBang("calibrateKinect") .setPosition(720, DO_CALIBRATION_HEIGHT) .setCaptionLabel("Plane Calibration"); @@ -242,7 +267,7 @@ public void addCalibration() { new CalibrationSnapshot( currentCamBoard(), currentProjBoard(), - (kinectType == Type.X360) ? currentKinect360Board() : null)); + currentDepthCameraBoard())); } public void clearCalibrations() { @@ -265,8 +290,10 @@ public void calibrateKinect() { } } - private PMatrix3D currentKinect360Board() { - return board.getTransfoMat(cameraKinect).get(); + private PMatrix3D currentDepthCameraBoard() { + if(cameraFromDepthCam == null || cameraFromDepthCam == cameraTracking) + return null; + return board.getTransfoMat(cameraFromDepthCam).get(); } private PMatrix3D currentCamBoard() { @@ -280,7 +307,7 @@ private PMatrix3D currentProjBoard() { } // Detection from Projector's view... DetectedMarker[] markers = DetectedMarker.detect(this.projectorTracker, projImage); - + board.updateLocation(projectorAsCamera, projImage, markers); return board.getTransfoMat(projectorAsCamera); } @@ -290,9 +317,10 @@ private PMatrix3D currentProjBoard() { private opencv_core.IplImage projectorImage() { projectorView.setCorners(corners); opencv_core.IplImage projImage = projectorView.getIplViewOf(cameraTracking); - if(projImage == null) + if (projImage == null) { return null; - + } + if (board.useGrayscaleImages()) { projImage = greyProjectorImage(projImage); } @@ -300,13 +328,19 @@ private opencv_core.IplImage projectorImage() { } private opencv_core.IplImage greyProjectorImage(opencv_core.IplImage projImage) { + + if(projImage.nChannels() == 1){ + grayImage = projImage; + return grayImage; + } + if (grayImage == null) { grayImage = opencv_core.IplImage.create(projector.getWidth(), projector.getHeight(), IPL_DEPTH_8U, 1); } - - System.out.println(projImage + " " + grayImage); + + System.out.println(projImage + " " + grayImage); cvCvtColor(projImage, grayImage, CV_BGR2GRAY); // if(test){ @@ -332,7 +366,7 @@ void initMatrixGui() { .setFont(arial) .setLineHeight(14); - if (this.kinectType == Type.X360) { + if (useExternalColorCamera) { System.out.println("Kinect 360 OK..."); kinectMatrixText = skatolo.addTextarea("Kinect") .setPosition(600, MATRICES_HEIGHT) @@ -341,7 +375,7 @@ void initMatrixGui() { .setLineHeight(14) //.setColor(color(128)) ; } else { - System.out.println("Kinect 360 NOT Activated !"); + System.out.println("External camera not activated !"); } } @@ -504,12 +538,12 @@ public void draw() { projectorMatrixText.setText(Utils.matToString(currentProjBoard())); } - if (this.kinectType == Type.X360) { + if (useExternalColorCamera) { if (this.isKinectCalibrated == OK) { cameraMatrixText.setColor(color(0, 255, 0)); cameraMatrixText.setText(Utils.matToString(calibrationExtrinsic.getKinectCamExtrinsics())); } else { - kinectMatrixText.setText(Utils.matToString(currentKinect360Board())); + kinectMatrixText.setText(Utils.matToString(currentDepthCameraBoard())); } } diff --git a/papart/src/fr/inria/papart/calibration/CalibrationSnapshot.java b/papart/src/fr/inria/papart/calibration/CalibrationSnapshot.java index a8a33376..7f0d0318 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationSnapshot.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationSnapshot.java @@ -27,7 +27,7 @@ */ public class CalibrationSnapshot { - PMatrix3D cameraPaper = null; + PMatrix3D mainCameraPaper = null; PMatrix3D projectorPaper = null; PMatrix3D kinectPaper = null; @@ -36,7 +36,7 @@ public CalibrationSnapshot(PMatrix3D cameraPaperCalibration, PMatrix3D kinectPaperCalibration) { if (cameraPaperCalibration != null) { - cameraPaper = cameraPaperCalibration.get(); + mainCameraPaper = cameraPaperCalibration.get(); } if (projectorPaperCalibration != null) { projectorPaper = projectorPaperCalibration.get(); diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index 08c27a55..16110408 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -57,7 +57,7 @@ public class KinectDepthAnalysis extends DepthAnalysis { // Configuration private float closeThreshold = 300f, farThreshold = 12000f; - protected ProjectiveDeviceP calibIR, calibRGB; + protected ProjectiveDeviceP calibDepth, calibRGB; // private variables // Raw data from the Kinect Sensor @@ -72,7 +72,9 @@ public class KinectDepthAnalysis extends DepthAnalysis { protected DepthCameraDevice depthCameraDevice; protected DepthComputation depthComputationMethod; - public DepthCameraDevice kinectDevice() { + private Camera colorCamera; + + public DepthCameraDevice getDepthCameraDevice() { return this.depthCameraDevice; } @@ -83,36 +85,60 @@ public int getDepthSize() { @Override public int getDepthWidth() { - return kinectDevice().getDepthCamera().width(); + return getDepthCameraDevice().getDepthCamera().width(); } @Override public int getDepthHeight() { - return kinectDevice().getDepthCamera().height(); + return getDepthCameraDevice().getDepthCamera().height(); } public int getColorWidth() { - return kinectDevice().getColorCamera().width(); + return colorCamera.width(); } public int getColorHeight() { - return kinectDevice().getColorCamera().height(); + return colorCamera.height(); } public int getColorSize() { return getColorWidth() * getColorHeight(); } + private boolean memoryInitialized = false; + public KinectDepthAnalysis(PApplet parent, DepthCameraDevice depthCamera) { - depthCameraDevice = depthCamera; DepthAnalysis.papplet = parent; - calibRGB = depthCamera.getColorCamera().getProjectiveDevice(); - calibIR = depthCamera.getDepthCamera().getProjectiveDevice(); - initMemory(); - + this.depthCameraDevice = depthCamera; + + // DepthCamera sizes should be good here... (says TouchVisu) + // why not ? (calib?) + //----- + +// initMemory(); + updateCalibrations(depthCamera); // initThreadPool(); } + public void updateCalibrations(DepthCameraDevice depthCamera) { + depthCameraDevice = depthCamera; + + if (depthCamera.getMainCamera().isUseIR()) { + colorCamera = depthCamera.getIRCamera(); + } + if (depthCamera.getMainCamera().isUseColor()) { + colorCamera = depthCamera.getColorCamera(); + } + + calibRGB = colorCamera.getProjectiveDevice(); + calibDepth = depthCamera.getDepthCamera().getProjectiveDevice(); + + if (!memoryInitialized) { + initMemory(); + memoryInitialized = true; + } + } + // Thread version... No bonus whatsoever for now. private int nbThreads = 16; private ExecutorService threadPool; @@ -122,12 +148,13 @@ private void initThreadPool() { } private void initMemory() { + System.out.println("Allocations: " + getColorSize() + " " + depthCameraDevice.rawDepthSize()); + colorRaw = new byte[getColorSize() * 3]; depthRaw = new byte[depthCameraDevice.rawDepthSize()]; depthData = new KinectDepthData(this); - depthData.projectiveDevice = this.calibIR; - + depthData.projectiveDevice = this.calibDepth; if (depthCameraDevice instanceof Kinect360) { depthComputationMethod = new Kinect360Depth(); } @@ -142,8 +169,6 @@ private void initMemory() { PixelOffset.initStaticMode(getDepthWidth(), getDepthHeight()); } - - public void update(IplImage depth) { update(depth, 1); } @@ -217,7 +242,7 @@ public void computeDepthAndDo(int precision, DepthPointManiplation manip) { // Vec3D pKinect = calibIR.pixelToWorld(px.x, px.y, d); // depthData.depthPoints[px.offset] = pKinect; - calibIR.pixelToWorld(px.x, px.y, d, depthData.depthPoints[px.offset]); + calibDepth.pixelToWorld(px.x, px.y, d, depthData.depthPoints[px.offset]); // System.out.println("Depth " + depthData.depthPoints[px.offset]); manip.execute(depthData.depthPoints[px.offset], px); } @@ -236,7 +261,7 @@ protected void computeDepthAndDo(int precision, DepthPointManiplation manip, Inv // depthData.depthPoints[px.offset] = pKinect; // manip.execute(pKinect, px); - calibIR.pixelToWorld(px.x, px.y, d, depthData.depthPoints[px.offset]); + calibDepth.pixelToWorld(px.x, px.y, d, depthData.depthPoints[px.offset]); manip.execute(depthData.depthPoints[px.offset], px); } else { @@ -288,8 +313,8 @@ protected void doForEachValid3DPoint(int precision, DepthPointManiplation manip) } } } - - public PVector findDepthAtRGB(PVector v) { + + public PVector findDepthAtRGB(PVector v) { return findDepthAtRGB(v.x, v.y, v.z); } @@ -300,14 +325,13 @@ public PVector findDepthAtRGB(float x, float y, float z) { depthCameraDevice.getStereoCalibrationInv().mult(v, v2); // v2 is now the location in KinectDepth instead of KinectRGB coordinates. - int worldToPixel = kinectDevice().getDepthCamera().getProjectiveDevice().worldToPixel(v2); + int worldToPixel = getDepthCameraDevice().getDepthCamera().getProjectiveDevice().worldToPixel(v2); return Utils.toPVector(depthData.depthPoints[worldToPixel]); } - // WARNING MAGIC NUMBER protected void updateRawDepth(opencv_core.IplImage depthImage) { - if (kinectDevice().type() == Camera.Type.REALSENSE) { + if (getDepthCameraDevice().type() == Camera.Type.REALSENSE) { depthRawBuffer = depthImage.getByteBuffer(); depthRawShortBuffer = depthRawBuffer.asShortBuffer(); } else { @@ -505,7 +529,7 @@ public class PixelList implements Iterable { public PixelList(int precision) { this.precision = precision; this.begin = 0; - this.end = calibIR.getHeight(); + this.end = calibDepth.getHeight(); } /** @@ -528,7 +552,7 @@ public Iterator iterator() { private int x = 0; private int y = begin; private int offset = 0; - private final int width = calibIR.getWidth(); + private final int width = calibDepth.getWidth(); @Override public boolean hasNext() { @@ -603,12 +627,12 @@ public DepthPixelTask(int part, int nbThreads, int precision, DepthPointManiplat public Object call() { int nbParts = nbThreads; - int partSize = nbParts / calibIR.getHeight(); + int partSize = nbParts / calibDepth.getHeight(); int begin = partSize * part; int end; if (part == nbThreads - 1) { - end = calibIR.getHeight(); + end = calibDepth.getHeight(); } else { end = partSize * (part + 1); } @@ -621,7 +645,7 @@ public Object call() { // Vec3D pKinect = calibIR.pixelToWorld(px.x, px.y, d); // depthData.depthPoints[px.offset] = pKinect; - calibIR.pixelToWorld(px.x, px.y, d, depthData.depthPoints[px.offset]); + calibDepth.pixelToWorld(px.x, px.y, d, depthData.depthPoints[px.offset]); manip.execute(depthData.depthPoints[px.offset], px); } } @@ -642,7 +666,7 @@ public void undistortRGB(opencv_core.IplImage rgb, opencv_core.IplImage out) { * @param out */ public void undistortIR(opencv_core.IplImage ir, opencv_core.IplImage out) { - calibIR.getDevice().undistort(ir, out); + calibDepth.getDevice().undistort(ir, out); } public ProjectiveDeviceP getColorProjectiveDevice() { @@ -650,7 +674,7 @@ public ProjectiveDeviceP getColorProjectiveDevice() { } public ProjectiveDeviceP getDepthProjectiveDevice() { - return calibIR; + return calibDepth; } public byte[] getColorBuffer() { diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java index d25769b6..22ab0dfe 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java @@ -246,7 +246,9 @@ public void execute(Vec3D p, PixelOffset px) { } class SetImageData implements DepthPointManiplation { - + public SetImageData(){ + super(); + } @Override public void execute(Vec3D p, PixelOffset px) { depthData.validPointsMask[px.offset] = true; @@ -262,6 +264,8 @@ private void setFakeColor(int offset, int r, int g, int b) { } private void setPixelColor(int offset) { + + // TODO: Get a cleaner way go obtain the color... int colorOffset = depthCameraDevice.findColorOffset(depthData.depthPoints[offset]) * 3; int c = (colorRaw[colorOffset + 2] & 0xFF) << 16 | (colorRaw[colorOffset + 1] & 0xFF) << 8 diff --git a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java index 945a70ae..fb4ac1f5 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java @@ -27,6 +27,7 @@ import fr.inria.papart.procam.camera.CameraRGBIRDepth; import fr.inria.papart.procam.camera.SubCamera; import fr.inria.papart.procam.camera.SubDepthCamera; +import org.bytedeco.javacpp.opencv_core.IplImage; import processing.core.PApplet; import processing.core.PMatrix3D; import processing.core.PVector; @@ -59,6 +60,10 @@ public CameraRGBIRDepth getMainCamera() { return camera; } + public Camera getOtherCamera() { + return anotherCamera; + } + public SubCamera getColorCamera() { return camera.getColorCamera(); } @@ -156,7 +161,10 @@ public int findColorOffset(float x, float y, float z) { // Ideally use a calibration... // kinectCalibRGB.getExtrinsics().mult(vt, vt2); getStereoCalibration().mult(vt, vt2); - return getColorCamera().getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); + + // TODO: find a solution for this... + return anotherCamera.getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); +// return getColorCamera.getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); } } diff --git a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java index 0d4e1bc9..8fa56781 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java +++ b/papart/src/fr/inria/papart/depthcam/devices/Kinect360.java @@ -46,7 +46,7 @@ public Kinect360(PApplet parent, Camera anotherCamera) { if (anotherCamera instanceof CameraOpenKinect) { this.camera = (CameraOpenKinect) anotherCamera; - System.out.println("Use the given Kinect camera"); + this.anotherCamera = camera.getActingCamera(); } else { initDefaultCamera(); System.out.println("init a default Kinect camera"); diff --git a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java index ce2b4e48..941ca3cd 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java +++ b/papart/src/fr/inria/papart/depthcam/devices/KinectOne.java @@ -34,6 +34,7 @@ public KinectOne(PApplet parent, Camera incomingCamera) { super(parent); if (incomingCamera instanceof CameraOpenKinect2) { this.camera = (CameraOpenKinect2) incomingCamera; + this.anotherCamera = camera.getActingCamera(); } else { initDefaultCamera(); this.anotherCamera = incomingCamera; diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index e7e566de..f37226d8 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -36,33 +36,29 @@ public final class RealSense extends DepthCameraDevice { public RealSense(PApplet parent, Camera anotherCam) { super(parent); + if (anotherCam instanceof CameraRealSense) { this.camera = (CameraRealSense) anotherCam; + this.camera.setUseDepth(true); } else { initDefaultCamera(); this.anotherCamera = anotherCam; } - this.camera.setUseDepth(true); + + if (this.anotherCamera == null) { + this.anotherCamera = getColorCamera(); + } + cameraRS = (CameraRealSense) camera; -// cameraRS.setCalibration(Papart.kinectRGBCalib); -// cameraRS.getDepthCamera().setCalibration(Papart.kinectIRCalib); // setStereoCalibration(Papart.kinectStereoCalib); - camera.start(); setStereoCalibration(cameraRS.getHardwareExtrinsics()); - useHardwareIntrinsics(cameraRS); - } - - private void useHardwareIntrinsics(CameraRealSense cameraRS) { - CameraRealSense.useHarwareIntrinsics(cameraRS.getColorCamera(), cameraRS.getFrameGrabber()); - CameraRealSense.useHarwareIntrinsics(cameraRS.getDepthCamera(), cameraRS.getFrameGrabber()); - CameraRealSense.useHarwareIntrinsics(cameraRS.getIRCamera(), cameraRS.getFrameGrabber()); } public CameraRealSense getMainCamera() { return cameraRS; } - + @Override public int rawDepthSize() { return getDepthCamera().width() * getDepthCamera().height() * 2; diff --git a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java index 20691999..301a08ff 100755 --- a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java @@ -69,8 +69,11 @@ public class KinectTouchInput extends TouchInput { // List of TouchPoints, given to the user private final ArrayList touchPoints2D = new ArrayList<>(); private final ArrayList touchPoints3D = new ArrayList<>(); - private final TouchDetectionSimple2D touchDetection2D; - private final TouchDetectionSimple3D touchDetection3D; + private TouchDetectionSimple2D touchDetection2D; + private TouchDetectionSimple3D touchDetection3D; + + private PlanarTouchCalibration touchCalib2D; + private PlanarTouchCalibration touchCalib3D; public KinectTouchInput(PApplet applet, DepthCameraDevice kinectDevice, @@ -80,38 +83,59 @@ public KinectTouchInput(PApplet applet, this.depthAnalysis = depthAnalysis; this.kinectDevice = kinectDevice; this.planeAndProjCalibration = calibration; - this.touchDetection2D = new TouchDetectionSimple2D(depthAnalysis.getDepthSize()); - this.touchDetection3D = new TouchDetectionSimple3D(depthAnalysis.getDepthSize()); } - - public void setPlaneAndProjCalibration(PlaneAndProjectionCalibration papc){ + + public void setPlaneAndProjCalibration(PlaneAndProjectionCalibration papc) { this.planeAndProjCalibration = papc; } public void setTouchDetectionCalibration(PlanarTouchCalibration touchCalib) { - this.touchDetection2D.setCalibration(touchCalib); + touchCalib2D = touchCalib; } public void setTouchDetectionCalibration3D(PlanarTouchCalibration touchCalib) { - this.touchDetection3D.setCalibration(touchCalib); +// this.touchDetection3D.setCalibration(touchCalib); + touchCalib3D = touchCalib; } @Override public void update() { try { - IplImage depthImage = kinectDevice.getDepthCamera().getIplImage(); - IplImage colImage = kinectDevice.getColorCamera().getIplImage(); + IplImage depthImage; + IplImage colImage = null; - depthDataSem.acquire(); - if (colImage == null || depthImage == null) { - System.out.println("No Image."); + // TODO: to only once ? + if (kinectDevice.getMainCamera().isUseColor()) { + colImage = kinectDevice.getColorCamera().getIplImage(); + } + if (kinectDevice.getMainCamera().isUseIR()) { + colImage = kinectDevice.getIRCamera().getIplImage(); + } + + depthImage = kinectDevice.getDepthCamera().getIplImage(); + + if (depthImage == null) { +// System.out.println("No Image. " + colImage + " " + depthImage); return; } + depthDataSem.acquire(); + + // Allocate the data when everything else is ready. + // TODO: all the time ?... + if (touchDetection2D == null) { + int depthSize = kinectDevice.getDepthCamera().width() * kinectDevice.getDepthCamera().height(); + touchDetection2D = new TouchDetectionSimple2D(depthSize); + touchDetection3D = new TouchDetectionSimple3D(depthSize); + + touchDetection2D.setCalibration(touchCalib2D); + touchDetection3D.setCalibration(touchCalib3D); + depthAnalysis.updateCalibrations(kinectDevice); + } + touch2DPrecision = touchDetection2D.getPrecision(); touch3DPrecision = touchDetection3D.getPrecision(); if (touch2DPrecision > 0 && touch3DPrecision > 0) { - depthAnalysis.updateMT(depthImage, colImage, planeAndProjCalibration, touch2DPrecision, touch3DPrecision); findAndTrack2D(); findAndTrack3D(); @@ -249,9 +273,8 @@ public ArrayList getDepthData() { return null; } } - + // TODO: Do the same without the Display, use the extrinsics instead!  - // TODO: Do the same with DepthDataElement instead of DepthPoint ? public ArrayList projectDepthData(ARDisplay display, Screen screen) { ArrayList list = projectDepthData2D(display, screen); @@ -382,13 +405,25 @@ public void getTouchColors(IplImage colorImage, } ByteBuffer cBuff = colorImage.getByteBuffer(); - for (TouchPoint tp : touchPointList) { - int offset = 3 * depthAnalysis.kinectDevice().findColorOffset(tp.getPositionKinect()); - - tp.setColor((255 & 0xFF) << 24 - | (cBuff.get(offset + 2) & 0xFF) << 16 - | (cBuff.get(offset + 1) & 0xFF) << 8 - | (cBuff.get(offset) & 0xFF)); + if (colorImage.nChannels() == 1) { + for (TouchPoint tp : touchPointList) { + int offset = depthAnalysis.getDepthCameraDevice().findColorOffset(tp.getPositionKinect()); + int c = cBuff.get(offset); + tp.setColor((255 & 0xFF) << 24 + | (c & 0xFF) << 16 + | (c & 0xFF) << 8 + | (c & 0xFF)); + } + } + if (colorImage.nChannels() == 3) { + for (TouchPoint tp : touchPointList) { + int offset = 3 * depthAnalysis.getDepthCameraDevice().findColorOffset(tp.getPositionKinect()); + + tp.setColor((255 & 0xFF) << 24 + | (cBuff.get(offset + 2) & 0xFF) << 16 + | (cBuff.get(offset + 1) & 0xFF) << 8 + | (cBuff.get(offset) & 0xFF)); + } } } diff --git a/papart/src/fr/inria/papart/multitouch/TouchDetection.java b/papart/src/fr/inria/papart/multitouch/TouchDetection.java index 2113fd77..d1d884e6 100755 --- a/papart/src/fr/inria/papart/multitouch/TouchDetection.java +++ b/papart/src/fr/inria/papart/multitouch/TouchDetection.java @@ -67,6 +67,7 @@ public TouchDetection(int size) { public abstract ArrayList compute(KinectDepthData dData); protected void allocateMemory(int size) { + System.out.println("Allocating touch memory: " + size); assignedPoints = new boolean[size]; connectedComponentImage = new byte[size]; this.calib = new PlanarTouchCalibration(); diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 222e5f43..a34feb21 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -44,6 +44,7 @@ import fr.inria.papart.procam.camera.CameraOpenKinect; import fr.inria.papart.procam.camera.CameraRGBIRDepth; import fr.inria.papart.procam.camera.CameraRealSense; +import fr.inria.papart.procam.camera.SubCamera; import java.io.File; import java.lang.reflect.Constructor; import java.util.Set; @@ -198,7 +199,15 @@ public static Papart projection(PApplet applet, float quality) { papart.shouldSetWindowLocation = true; papart.shouldSetWindowSize = true; papart.registerPost(); - papart.initProjectorCamera(quality); + + papart.initProjectorDisplay(quality); + papart.initCamera(); + + papart.tryLoadExtrinsics(); + papart.projector.setCamera(papart.getPublicCameraTracking()); + + papart.checkInitialization(); + papart.registerKey(); return papart; @@ -261,7 +270,9 @@ public static Papart seeThrough(PApplet applet, float quality) { papart.shouldSetWindowSize = true; papart.registerPost(); - papart.initCamera(quality); + papart.initCamera(); + papart.initARDisplay(quality); + papart.checkInitialization(); return papart; } @@ -286,7 +297,6 @@ public static Papart projection2D(PApplet applet) { papart.shouldSetWindowSize = true; papart.registerPost(); -// Panel panel = new Panel(applet); return papart; } @@ -533,49 +543,6 @@ public void initDebug() { initDebugDisplay(); } - public void initProjectorCamera() { - CameraConfiguration cameraConfiguration = getDefaultCameraConfiguration(this.applet); - initProjectorCamera(cameraConfiguration, - 1); - } - - public void initProjectorCamera(float quality) { - CameraConfiguration cameraConfiguration = getDefaultCameraConfiguration(this.applet); - initProjectorCamera(cameraConfiguration, quality); - } - - public void initProjectorCamera(CameraConfiguration cameraConfiguration, float quality) { - initProjectorCamera(cameraConfiguration.getCameraName(), - cameraConfiguration.getCameraType(), - cameraConfiguration.getCameraFormat(), - quality); - } - - public void initProjectorCamera(String cameraNo, Camera.Type cameraType, String cameraFormat) { - initProjectorCamera(cameraNo, cameraType, cameraFormat, 1); - } - - /** - * Load a projector - camera couple. Default configuration files are used. - * - * @param quality - * @param cameraNo - * @param cameraType - */ - public void initProjectorCamera(String cameraNo, Camera.Type cameraType, String cameraFormat, float quality) { - assert (!cameraInitialized); - initProjectorDisplay(quality); - tryLoadExtrinsics(); - cameraTracking = CameraFactory.createCamera(cameraType, cameraNo, cameraFormat); - cameraTracking.setParent(applet); - cameraTracking.setCalibration(cameraCalib); - cameraTracking.start(); - loadTracking(cameraCalib); - cameraTracking.setThread(); - projector.setCamera(getPublicCameraTracking()); - checkInitialization(); - } - private void tryLoadExtrinsics() { PMatrix3D extrinsics = loadCalibration(cameraProjExtrinsics); if (extrinsics == null) { @@ -590,25 +557,14 @@ private void tryLoadExtrinsics() { * */ public void initCamera() { - initCamera(1); - } - - /** - * Initialize the default camera for object tracking. - * - * @param quality default is 1, to downscale go below 1, try 0.8, for better - * quality go higher like 2. - */ - public void initCamera(float quality) { CameraConfiguration cameraConfiguration = getDefaultCameraConfiguration(applet); - initCamera(cameraConfiguration, quality); + initCamera(cameraConfiguration); } - public void initCamera(CameraConfiguration cameraConfiguration, float quality) { + public void initCamera(CameraConfiguration cameraConfiguration) { initCamera(cameraConfiguration.getCameraName(), cameraConfiguration.getCameraType(), - cameraConfiguration.getCameraFormat(), - quality); + cameraConfiguration.getCameraFormat()); } /** @@ -616,21 +572,15 @@ public void initCamera(CameraConfiguration cameraConfiguration, float quality) { * */ public void initCamera(String cameraNo, Camera.Type cameraType, String cameraFormat) { - initCamera(cameraNo, cameraType, cameraFormat, 1); - } - - public void initCamera(String cameraNo, Camera.Type cameraType, String cameraFormat, float quality) { assert (!cameraInitialized); cameraTracking = CameraFactory.createCamera(cameraType, cameraNo, cameraFormat); cameraTracking.setParent(applet); cameraTracking.setCalibration(cameraCalib); - cameraTracking.start(); - loadTracking(cameraCalib); - cameraTracking.setThread(); - - initARDisplay(quality); - checkInitialization(); + // TEST: no more start here... +// cameraTracking.start(); +// loadTracking(cameraCalib); +// cameraTracking.setThread(); } private void initProjectorDisplay(float quality) { @@ -682,8 +632,9 @@ private void loadTracking(String calibrationPath) { Camera.convertARParams(this.applet, calibrationPath, camCalibARtoolkit); getPublicCameraTracking().initMarkerDetection(camCalibARtoolkit); + // CODE to delete ? // The camera view is handled in another thread; - cameraInitialized = true; +// cameraInitialized = true; } /** @@ -693,11 +644,6 @@ private void loadTracking(String calibrationPath) { public void loadTouchInputKinectOnly() { loadDefaultDepthCamera(); - -// cameraTracking = kinectDevice.getCameraRGB(); -// kinectDevice.getCameraRGB().setThread(); -// kinectDevice.getCameraDepth().setThread(); -// cameraInitialized = true; loadDefaultTouchKinect(); // Specific ? @@ -715,9 +661,6 @@ public void loadTouchInputKinectOnly() { */ public void loadTouchInput() { loadDefaultDepthCamera(); - -// kinectDevice.getCameraRGB().setThread(); -// kinectDevice.getCameraDepth().setThread(); loadDefaultTouchKinect(); // setExtrinsics must after the kinect stereo calibration is loaded @@ -761,6 +704,7 @@ public DepthCameraDevice loadDefaultDepthCamera() { System.err.println("Could not load the depth camera !" + "Camera Type " + kinectConfiguration.getCameraType()); } + // At this point, cameraTracking & depth Camera are ready. return depthCameraDevice; } @@ -838,12 +782,23 @@ public void loadSketches() { } + /** + * Start the camera thread, and the tracking. it calls automaticall + * startCameraThread(). + */ public void startTracking() { if (this.cameraTracking == null) { System.err.println("Start Tracking requires a Camera..."); return; } + loadTracking(cameraCalib); this.getPublicCameraTracking().trackSheets(true); + startCameraThread(); + } + + public void startCameraThread() { + cameraTracking.start(); + cameraTracking.setThread(); } public void stop() { @@ -929,7 +884,7 @@ public Camera getKinectCamera() { return this.depthCameraDevice.getColorCamera(); } - public DepthCameraDevice getKinectDevice() { + public DepthCameraDevice getDepthCameraDevice() { return depthCameraDevice; } @@ -937,7 +892,7 @@ public KinectDepthAnalysis getKinectAnalysis() { return this.kinectDepthAnalysis; } - public Camera.Type getKinectType() { + public Camera.Type getDepthCameraType() { if (depthCameraDevice == null) { return Camera.Type.FAKE; } diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index 09e5ec6d..f555e983 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -40,6 +40,7 @@ import toxi.geom.Vec3D; import java.io.*; import java.nio.FloatBuffer; +import static processing.core.PConstants.ALPHA; import static processing.core.PConstants.HSB; /** @@ -341,6 +342,12 @@ static public IplImage createImageFrom(PImage in) { 3); } + if (in.format == ALPHA) { + imgOut = cvCreateImage(outSize, // size + IPL_DEPTH_8U, // depth + 1); + } + if (in.format == ARGB) { imgOut = cvCreateImage(outSize, // size IPL_DEPTH_8U, // depth @@ -579,8 +586,14 @@ static public void IplImageToPImage(IplImage img, boolean RGB, PImage ret) { buff.get(arr); for (int i = 0; i < img.width() * img.height(); i++) { - int d = (arr[i] & 0xFF); - ret.pixels[i] = d; + + byte d = arr[i]; +// int d = (arr[i] & 0xFF); + ret.pixels[i] + = (0xFF) << 24 + | (d & 0xFF) << 16 + | (d & 0xFF) << 8 + | (d & 0xFF); } } @@ -662,14 +675,15 @@ static public void byteBufferDepthK2toARGB(ByteBuffer gray, ByteBuffer argb) { } argb.rewind(); } + static public void byteBufferDepthK1MMtoARGB(ByteBuffer gray, ByteBuffer argb) { byte[] depthRaw = new byte[2]; - + for (int i = 0; i < argb.capacity(); i += 4) { gray.get(depthRaw); int d = (depthRaw[0] & 0xFF) << 8 | (depthRaw[1] & 0xFF); - + // min depth: 400 byte dValue = (byte) ((d - 300f) / 3000f * 255f); argb.put(dValue); diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 58e19a16..185d8cad 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -182,6 +182,10 @@ public PImage getPImageCopy() { */ public PImage getPImageCopy(PApplet context) { PImage out = context.createImage(this.width, this.height, RGB); + + if(currentImage.nChannels() == 1){ + + } Utils.IplImageToPImage(currentImage, this.format == PixelFormat.RGB, out); return out; } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java index 46b761c9..ecb7ec6f 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java @@ -47,7 +47,7 @@ public void internalInit() { depthCamera.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); depthCamera.type = SubCamera.Type.DEPTH; depthCamera.setSize(640, 480); - + grabber.setDepthFormat(freenect.FREENECT_DEPTH_MM); } if (isUseColor()) { @@ -125,6 +125,8 @@ public void grabIR() { public void grabDepth() { try { depthCamera.currentImage = grabber.grabDepth(); + + ((WithTouchInput) depthCamera).newTouchImageWithColor(colorCamera.currentImage); } catch (FrameGrabber.Exception ex) { Logger.getLogger(CameraOpenKinect.class.getName()).log(Level.SEVERE, null, ex); } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java index 4f36f5ff..62329440 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java @@ -139,6 +139,7 @@ public void grabIR() { @Override public void grabDepth() { depthCamera.currentImage = grabber.getDepthImage(); + ((WithTouchInput) depthCamera).newTouchImageWithColor(colorCamera.currentImage); } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java index 1be77740..fccaedc6 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -149,14 +149,14 @@ void start(SubCamera camera) { } void grab(SubCamera camera) { - if (camera.type == SubCamera.Type.DEPTH) { - grabDepth(); + if (camera.type == SubCamera.Type.COLOR) { + grabColor(); } if (camera.type == SubCamera.Type.IR) { grabIR(); } - if (camera.type == SubCamera.Type.COLOR) { - grabColor(); + if (camera.type == SubCamera.Type.DEPTH) { + grabDepth(); } } @@ -388,7 +388,28 @@ protected Semaphore getSheetSemaphore() { return actAsCamera.getSheetSemaphore(); } - // + /** + * SetThread called by a subcamera, either color or IR (not checked). + * + * @param subCam + */ + void setThread(SubCamera subCam) { + if (thread == null) { + thread = new CameraThread(this); + thread.setCompute(subCam.trackSheets); + subCam.thread = thread; + + thread.setCompute(trackSheets); + thread.start(); + } else { + System.err.println("Camera: Error Thread already launched"); + } + } + + /** + * Called from aynwhere, start the thread and use the acting camera to track + * sheets of paper. + */ @Override public void setThread() { if (thread == null) { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index f74bd5c4..04107e6d 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.procam.camera; +import fr.inria.papart.procam.ProjectiveDeviceP; import java.nio.FloatBuffer; import java.util.logging.Level; import java.util.logging.Logger; @@ -43,6 +44,7 @@ protected CameraRealSense(int cameraNo) { Logger.getLogger(CameraRealSense.class.getName()).log(Level.SEVERE, null, ex); } this.systemNumber = cameraNo; + grabber = new RealSenseFrameGrabber(this.systemNumber); } @@ -71,22 +73,44 @@ public void internalInit() { if (isUseColor()) { colorCamera.setPixelFormat(PixelFormat.RGB); colorCamera.type = SubCamera.Type.COLOR; + if (colorCamera.width == 0 || colorCamera.height == 0) { - colorCamera.setSize(960, 540); + System.out.println("Setting default realSense width and height..."); + colorCamera.setSize(1280, 720); + } + + if (colorCamera.width() == 1280) { + grabber.setFrameRate(60); + } + + if (colorCamera.width() == 1920) { + grabber.setFrameRate(30); } } if (isUseIR()) { IRCamera.setSize(640, 480); IRCamera.setPixelFormat(PixelFormat.GRAY); IRCamera.type = SubCamera.Type.IR; + grabber.setIRFrameRate(60); } - grabber = new RealSenseFrameGrabber(this.systemNumber); } @Override public void internalStart() throws FrameGrabber.Exception { grabber.start(); + + // Override the calibration... + if (useColor) { + useHarwareIntrinsics(colorCamera, grabber); + } + if (useDepth) { + useHarwareIntrinsics(depthCamera, grabber); + } + if (useIR) { + useHarwareIntrinsics(IRCamera, grabber); + } + } @Override @@ -152,7 +176,16 @@ public void grabIR() { public void grabDepth() { depthCamera.updateCurrentImage(grabber.grabDepth()); // update the touch input - ((WithTouchInput) depthCamera).newTouchImageWithColor(colorCamera.currentImage); + + if (getActingCamera() == IRCamera) { + ((WithTouchInput) depthCamera).newTouchImageWithColor(IRCamera.currentImage); + return; + } + if (getActingCamera() == colorCamera || useColor) { + ((WithTouchInput) depthCamera).newTouchImageWithColor(colorCamera.currentImage); + return; + } + ((WithTouchInput) depthCamera).newTouchImage(); } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index 1a621a82..ba77d6ce 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -100,7 +100,6 @@ public void compute() { updateParallel(); camera.getSheetSemaphore().release(); - System.out.println("detectedMarkers: " + this.detectedMarkers.length); } catch (InterruptedException ex) { Logger.getLogger(CameraThread.class.getName()).log(Level.SEVERE, null, ex); } diff --git a/papart/src/fr/inria/papart/procam/camera/SubCamera.java b/papart/src/fr/inria/papart/procam/camera/SubCamera.java index 0913d2cf..703720e6 100644 --- a/papart/src/fr/inria/papart/procam/camera/SubCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/SubCamera.java @@ -43,8 +43,8 @@ public Camera getMainCamera() { @Override public void start() { - if(!mainCamera.isStarting){ - throw new RuntimeException("Cannot start a subCamera: start the main camera instead."); + if (!mainCamera.isStarting) { + throw new RuntimeException("Cannot start a subCamera: start the main camera instead."); } mainCamera.start(this); isConnected = true; @@ -64,15 +64,31 @@ public void close() { mainCamera.disable(this); } + /** + * It makes the camera update continuously. + */ + public void setThread() { + // thread must be of the main camera... + mainCamera.setThread(this); + + if (thread == null) { + thread = new CameraThread(this); + thread.setCompute(this.trackSheets); + thread.start(); + } else { + System.err.println("Camera: Error Thread already launched"); + } + } + @Override public PImage getPImage() { // TODO: time management to avoid to send multiple times the same // frame to the graphics card. this.checkCamImage(); -// if (currentImage != null) { + if (currentImage != null) { camImage.update(currentImage); // return camImage; -// } + } return camImage; } } diff --git a/papart/src/fr/inria/papart/procam/camera/TrackedView.java b/papart/src/fr/inria/papart/procam/camera/TrackedView.java index 45df2f18..9065c362 100755 --- a/papart/src/fr/inria/papart/procam/camera/TrackedView.java +++ b/papart/src/fr/inria/papart/procam/camera/TrackedView.java @@ -101,8 +101,12 @@ public void setCorners(PVector[] corners) { } public void init() { - extractedImage = new PImage(imageWidthPx, imageHeightPx, PApplet.RGB); - + init(PApplet.RGB); + } + + public void init(int frameType) { + // TODO: Init with good color... + extractedImage = new PImage(imageWidthPx, imageHeightPx, frameType); initiateImageCoordinates(); } @@ -132,6 +136,9 @@ public PImage getViewOf(Camera camera) { this.camera = camera; CvMat homography = computeHomography(); + + // Convert to the good type... + Utils.remapImage(homography, camera.getIplImage(), extractedIplImage, extractedImage); return extractedImage; } diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index 620e1e34..dbe3674b 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -103,6 +103,10 @@ protected void loadCalibration(String calibrationYAML) { } } + public void setCalibration(Camera c){ + setCalibration(c.getProjectiveDevice()); + } + protected void setCalibration(ProjectiveDeviceP pdp) { // Load the camera parameters. // pdp = ProjectiveDeviceP.loadProjectiveDevice(calibrationYAML, 0); From 6adda67d15c1faeebee22c4612339cb738422687 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Mon, 21 Nov 2016 12:54:23 +0100 Subject: [PATCH 31/99] Work in progress, most calib seem to work. --- .../calibration/CalibrationExtrinsic.java | 43 ++++--- .../papart/calibration/CalibrationPopup.java | 19 +-- .../analysis/KinectDepthAnalysis.java | 14 ++- .../depthcam/devices/DepthCameraDevice.java | 7 +- .../papart/depthcam/devices/RealSense.java | 1 - papart/src/fr/inria/papart/procam/Papart.java | 71 ++++++++--- .../papart/procam/ProjectiveDeviceP.java | 4 +- papart/src/fr/inria/papart/procam/Utils.java | 48 +++++++- .../fr/inria/papart/procam/camera/Camera.java | 28 ++--- .../procam/camera/CameraOpenKinect.java | 85 +++++-------- .../procam/camera/CameraOpenKinect2.java | 63 ++++------ .../procam/camera/CameraRGBIRDepth.java | 41 ++----- .../papart/procam/camera/CameraRealSense.java | 116 ++++++++++-------- .../papart/procam/camera/CameraThread.java | 11 +- .../inria/papart/procam/camera/SubCamera.java | 1 - .../papart/procam/camera/TrackedView.java | 29 +++-- .../papart/procam/display/ARDisplay.java | 56 ++++++--- .../tracking/MarkerBoardARToolKitPlus.java | 7 +- .../inria/papart/tracking/MarkerBoardSvg.java | 4 - 19 files changed, 360 insertions(+), 288 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index 08d39d2e..3208fc22 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -41,8 +41,8 @@ public class CalibrationExtrinsic { // Cameras private ProjectorDisplay projector; - private PMatrix3D kinectCameraExtrinsics = new PMatrix3D(); - private Papart papart; + private final PMatrix3D kinectCameraExtrinsics = new PMatrix3D(); + private final Papart papart; // Kinect private Camera.Type depthCameraType; @@ -61,6 +61,7 @@ public void setDefaultDepthCamera() { this.depthCameraType = papart.getDepthCameraType(); this.depthCameraDevice = papart.getDepthCameraDevice(); } + public void setDepthCamera(DepthCameraDevice device, Camera.Type type) { this.depthCameraType = type; this.depthCameraDevice = device; @@ -85,22 +86,22 @@ public void computeProjectorCameraExtrinsics(ArrayList snap saveProCamExtrinsics(sum); } - - public void saveProCamExtrinsics(PMatrix3D extr){ - papart.saveCalibration(Papart.cameraProjExtrinsics, extr); - projector.setExtrinsics(extr); + + public void saveProCamExtrinsics(PMatrix3D extr) { + papart.saveCalibration(Papart.cameraProjExtrinsics, extr); + projector.setExtrinsics(extr); } public void calibrateKinect(ArrayList snapshots) { if (this.depthCameraType == Camera.Type.OPEN_KINECT_2) { - calibrateKinectOne(snapshots); + calibrateProjectorDepthCam(snapshots); } if (this.depthCameraType == Camera.Type.OPEN_KINECT) { - calibrateKinect360(snapshots); + calibrateDepthAndExternalCam(snapshots); } } - protected void calibrateKinectOne(ArrayList snapshots) { + protected void calibrateProjectorDepthCam(ArrayList snapshots) { PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); kinectExtr.invert(); @@ -120,18 +121,25 @@ protected void calibrateKinectOne(ArrayList snapshots) { } // move the plane up a little. - planeCalibCam.moveAlongNormal(-7f); + // Value for Kinect 360. + if (depthCameraDevice.type() == Camera.Type.OPEN_KINECT) { + planeCalibCam.moveAlongNormal(-7f); + } + // Value for RealSense. + if (depthCameraDevice.type() == Camera.Type.REALSENSE) { + planeCalibCam.moveAlongNormal(-22f); + } saveKinectPlaneCalibration(planeCalibCam, homography); saveKinectCameraExtrinsics(kinectCameraExtrinsics); } - protected void calibrateKinect360(ArrayList snapshots) { - calibrateKinect360Extr(snapshots); - calibrateKinect360Plane(snapshots); + protected void calibrateDepthAndExternalCam(ArrayList snapshots) { + calibrateDepthToExternalExtr(snapshots); + calibrateDepthCamPlane(snapshots); } - protected void calibrateKinect360Extr(ArrayList snapshots) { + protected void calibrateDepthToExternalExtr(ArrayList snapshots) { // Depth -> color extrinsics PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); @@ -148,7 +156,7 @@ protected void calibrateKinect360Extr(ArrayList snapshots) saveKinectCameraExtrinsics(kinectCameraExtr); } - public boolean calibrateKinect360Plane(ArrayList snapshots) { + public boolean calibrateDepthCamPlane(ArrayList snapshots) { // Depth -> color extrinsics PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); @@ -177,9 +185,8 @@ public boolean calibrateKinect360Plane(ArrayList snapshots) saveKinectPlaneCalibration(planeCalibKinect, homography); return true; } - - - public boolean calibrateKinect360PlaneOnly(ArrayList snapshots) { + + public boolean calibrateDepthCamPlaneOnly(ArrayList snapshots) { // Depth -> color extrinsics PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index 80992262..9df3e8f4 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -160,6 +160,8 @@ public void setup() { useExternalColorCamera = true; } calibrationExtrinsic.setDepthCamera(depthCameraDevice, depthCameraType); + } else { + System.out.println("Calibration with a color camera."); } initCorners(); @@ -182,11 +184,12 @@ private void initProjectorAsCamera() { projectorView.setImageWidthPx(projector.getWidth()); projectorView.setImageHeightPx(projector.getHeight()); - if (cameraTracking.getPixelFormat() == Camera.PixelFormat.GRAY) { - projectorView.init(PApplet.ALPHA); - } else { + if (cameraTracking.isPixelFormatGray()) { projectorView.init(PApplet.GRAY); } + if (cameraTracking.isPixelFormatColor()) { + projectorView.init(PApplet.RGB); + } projectorAsCamera = new ProjectorAsCamera(); projectorAsCamera.setCalibration(Papart.projectorCalib); @@ -195,7 +198,7 @@ private void initProjectorAsCamera() { String ARToolkitCalibFile = Papart.calibrationFolder + "projector.cal"; ProjectorAsCamera.convertARProjParams(this, projectorAsCamera.getCalibrationFile(), ARToolkitCalibFile); - projectorAsCamera.initMarkerDetection(ARToolkitCalibFile); + projectorAsCamera.setCalibrationARToolkit(ARToolkitCalibFile); projectorAsCamera.trackMarkerBoard(board); initMarkerTrackingFromProjector(); } @@ -211,7 +214,7 @@ private void initTrackingOn(DepthCameraDevice kinectDevice) { String ARToolkitCalib = Papart.calibrationFolder + KINECT_ARTOOLKIT_NAME; Camera.convertARParams(this, cameraFromDepthCam.getCalibrationFile(), ARToolkitCalib); - cameraFromDepthCam.initMarkerDetection(ARToolkitCalib); + cameraFromDepthCam.setCalibrationARToolkit(ARToolkitCalib); // No display for now... // arDisplayKinect = new ARDisplay(this, cameraKinect); @@ -284,7 +287,7 @@ public void calibrateProCam() { } public void calibrateKinect() { - boolean isCalibOK = calibrationExtrinsic.calibrateKinect360Plane(snapshots); + boolean isCalibOK = calibrationExtrinsic.calibrateDepthCamPlane(snapshots); if (isCalibOK) { this.isKinectCalibrated = OK; } @@ -340,9 +343,7 @@ private opencv_core.IplImage greyProjectorImage(opencv_core.IplImage projImage) IPL_DEPTH_8U, 1); } - System.out.println(projImage + " " + grayImage); cvCvtColor(projImage, grayImage, CV_BGR2GRAY); - // if(test){ // cvSaveImage( sketchPath() + "/data/projImage.jpg", grayImage); // cvSaveImage( sketchPath() + "/data/camImage.jpg", camera.getIplImage()); @@ -375,7 +376,7 @@ void initMatrixGui() { .setLineHeight(14) //.setColor(color(128)) ; } else { - System.out.println("External camera not activated !"); + System.out.println("External camera not activated."); } } diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index 16110408..b1afd76e 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -155,6 +155,7 @@ private void initMemory() { depthData = new KinectDepthData(this); depthData.projectiveDevice = this.calibDepth; + if (depthCameraDevice instanceof Kinect360) { depthComputationMethod = new Kinect360Depth(); } @@ -322,12 +323,23 @@ public PVector findDepthAtRGB(float x, float y, float z) { PVector v = new PVector(x, y, z); PVector v2 = new PVector(); + // Point is now in the Depth coordinates depthCameraDevice.getStereoCalibrationInv().mult(v, v2); + // v2 is now the location in KinectDepth instead of KinectRGB coordinates. + // Point is now in pixel coordinates int worldToPixel = getDepthCameraDevice().getDepthCamera().getProjectiveDevice().worldToPixel(v2); - return Utils.toPVector(depthData.depthPoints[worldToPixel]); + // Point viewed in the depth camera point of view. + PVector pointDepth = Utils.toPVector(depthData.depthPoints[worldToPixel]); + + return pointDepth; + // get it back in the RGB point of view. +// PVector out = new PVector(); +// depthCameraDevice.getStereoCalibration().mult(pointDepth, out); +// return out; +// return Utils.toPVector(depthData.depthPoints[worldToPixel]); } protected void updateRawDepth(opencv_core.IplImage depthImage) { diff --git a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java index fb4ac1f5..c6bdb224 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java @@ -22,6 +22,7 @@ import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Papart; +import fr.inria.papart.procam.Utils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraRGBIRDepth; @@ -106,6 +107,8 @@ public void setStereoCalibration(String fileName) { } public void setStereoCalibration(PMatrix3D matrix) { + System.out.println("DepthCameraDevice: Call to setStereoCalibration..."); + matrix.print(); KinectRGBIRCalibration.set(matrix); KinectRGBIRCalibrationInv = KinectRGBIRCalibration.get(); KinectRGBIRCalibrationInv.invert(); @@ -163,8 +166,8 @@ public int findColorOffset(float x, float y, float z) { getStereoCalibration().mult(vt, vt2); // TODO: find a solution for this... - return anotherCamera.getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); + return getColorCamera().getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); // return getColorCamera.getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); } - + } diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index f37226d8..e8320ba8 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -51,7 +51,6 @@ public RealSense(PApplet parent, Camera anotherCam) { cameraRS = (CameraRealSense) camera; // setStereoCalibration(Papart.kinectStereoCalib); - setStereoCalibration(cameraRS.getHardwareExtrinsics()); } diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index a34feb21..0cc2eba9 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -48,6 +48,8 @@ import java.io.File; import java.lang.reflect.Constructor; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; import org.reflections.Reflections; import processing.core.PApplet; import processing.core.PFont; @@ -255,20 +257,20 @@ public static Papart seeThrough(PApplet applet) { */ public static Papart seeThrough(PApplet applet, float quality) { - CameraConfiguration cameraConfiguration = getDefaultCameraConfiguration(applet); - - Camera cameraTracking = CameraFactory.createCamera( - cameraConfiguration.getCameraType(), - cameraConfiguration.getCameraName(), - cameraConfiguration.getCameraFormat()); - cameraTracking.setParent(applet); - cameraTracking.setCalibration(cameraCalib); + ProjectiveDeviceP pdp = null; + try { + pdp = ProjectiveDeviceP.loadCameraDevice(applet, cameraCalib); + } catch (Exception ex) { + Logger.getLogger(Papart.class.getName()).log(Level.SEVERE, null, ex); + } Papart papart = new Papart(applet); - papart.frameSize.set(cameraTracking.width(), cameraTracking.height()); - papart.shouldSetWindowSize = true; - papart.registerPost(); + if (pdp != null) { + papart.frameSize.set(pdp.getWidth(), pdp.getHeight()); + papart.shouldSetWindowSize = true; + papart.registerPost(); + } papart.initCamera(); papart.initARDisplay(quality); @@ -627,14 +629,19 @@ private void checkInitialization() { this.applet.registerMethod("stop", this); } - private void loadTracking(String calibrationPath) { - // TODO: check if file exists ! - Camera.convertARParams(this.applet, calibrationPath, camCalibARtoolkit); - getPublicCameraTracking().initMarkerDetection(camCalibARtoolkit); - - // CODE to delete ? - // The camera view is handled in another thread; -// cameraInitialized = true; + /** + * Only for .cfg marker tracking. + */ + private void setARToolkitCalib() { + // TODO: warning −> used only for .cfg files. + // try to get the params from the camera, instead of the files! + if (cameraTracking.isCalibrated()) { + Camera.convertARParams(this.applet, getPublicCameraTracking().getProjectiveDevice(), camCalibARtoolkit); + getPublicCameraTracking().setCalibrationARToolkit(camCalibARtoolkit); + } else { + Camera.convertARParams(this.applet, cameraCalib, camCalibARtoolkit); + getPublicCameraTracking().setCalibrationARToolkit(camCalibARtoolkit); + } } /** @@ -782,6 +789,18 @@ public void loadSketches() { } + /** + * Start the tracking without a thread. + */ + public void startTrackingWithoutThread() { + if (this.cameraTracking == null) { + System.err.println("Start Tracking requires a Camera..."); + return; + } + setARToolkitCalib(); + this.getPublicCameraTracking().trackSheets(true); + } + /** * Start the camera thread, and the tracking. it calls automaticall * startCameraThread(). @@ -791,16 +810,28 @@ public void startTracking() { System.err.println("Start Tracking requires a Camera..."); return; } - loadTracking(cameraCalib); + setARToolkitCalib(); this.getPublicCameraTracking().trackSheets(true); startCameraThread(); } public void startCameraThread() { cameraTracking.start(); + + // Calibration might be loaded from the device and require an update. + if(arDisplay != null && !(arDisplay instanceof ProjectorDisplay)){ + System.out.println("Papart: Reload calibration!"); + arDisplay.reloadCalibration(); + } + cameraTracking.setThread(); } + public void startDepthCameraThread() { + depthCameraDevice.getMainCamera().start(); + depthCameraDevice.getMainCamera().setThread(); + } + public void stop() { this.dispose(); } diff --git a/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java b/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java index 5a784e79..1b8b563c 100755 --- a/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java +++ b/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java @@ -578,6 +578,8 @@ public void updateFromIntrinsics() { public String toString() { return "intr " + intrinsics.toString() + (extrinsics != null ? " extr " + extrinsics.toString() : " ") + " " - + " width " + w + " height " + h; + + " width " + w + " height " + h + + " fx " + fx + " fy " + fy + + " cx " + cx + " cy " + cy; } } diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index f555e983..902f0b5b 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -41,6 +41,7 @@ import java.io.*; import java.nio.FloatBuffer; import static processing.core.PConstants.ALPHA; +import static processing.core.PConstants.GRAY; import static processing.core.PConstants.HSB; /** @@ -335,6 +336,7 @@ static public IplImage createImageFrom(PImage in) { outSize.width(in.width); outSize.height(in.height); + System.out.println("inputImage to create an IPL:" + in.width + " " + in.height + " " + in.format ); IplImage imgOut = null; if (in.format == RGB) { imgOut = cvCreateImage(outSize, // size @@ -342,7 +344,7 @@ static public IplImage createImageFrom(PImage in) { 3); } - if (in.format == ALPHA) { + if (in.format == ALPHA || in.format == GRAY) { imgOut = cvCreateImage(outSize, // size IPL_DEPTH_8U, // depth 1); @@ -815,7 +817,6 @@ static public void PImageToIplImage2(IplImage img, boolean RGB, PImage ret) { } static public void convertARParam2(PApplet pa, String inputYAML, String outputDAT) throws Exception { - CameraDevice cam = null; // Hack @@ -879,6 +880,49 @@ static public void convertARParam2(PApplet pa, String inputYAML, String outputDA pw.flush(); pw.close(); } + + static public void convertARParamFromDevice(PApplet pa, ProjectiveDeviceP pdp, String outputDAT) throws Exception { + + PrintWriter pw = pa.createWriter(outputDAT); + StringBuffer sb = new StringBuffer(); + + // From ARToolkitPlus... +//http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html + sb.append("ARToolKitPlus_CamCal_Rev02\n"); + sb.append(pdp.getWidth()).append(" ").append(pdp.getHeight()).append(" "); + + // cx cy fx fy + sb.append(pdp.getCx()).append(" ").append(pdp.getCy()) + .append(" ").append(pdp.getFx()). + append(" ").append(pdp.getFy()).append(" "); + + // alpha_c // skew factor  + sb.append("0 ").append(" "); + +// if(pdp.handleDistorsions()){ + // TODO: handle the distorsions... +// double[] distort = cam.distortionCoeffs.get(); +// // alpha_c ?  +//// sb.append("0 "); +// // kc(1 - x) -> 6 values +// for (int i = 0; i < distort.length; i++) { +// sb.append(distort[i]).append(" "); +// } +// for (int i = distort.length; i < 6; i++) { +// sb.append("0 "); +// } +// } else { + for (int i = 0; i < 6; i++) { + sb.append("0 "); + } +// } + // undist iterations + sb.append("10\n"); + + pw.print(sb); + pw.flush(); + pw.close(); + } static public void convertProjParam(PApplet pa, String inputYAML, String outputDAT) throws Exception { diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 185d8cad..1ee04897 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -96,7 +96,7 @@ public enum PixelFormat { // Instance variables protected PApplet parent = null; - private List sheets = null; + private final List sheets = Collections.synchronizedList(new ArrayList()); private final Semaphore sheetsSemaphore = new Semaphore(1); // ARToolkit @@ -162,6 +162,7 @@ public void setCalibration(String fileName) { } private void updateCalibration() { + System.out.println("updateCalibrationcalled:"); camIntrinsicsP3D = pdp.getIntrinsics(); this.width = pdp.getWidth(); this.height = pdp.getHeight(); @@ -255,16 +256,8 @@ public String getCalibrationFile() { return this.calibrationFile; } - /** - * Initialize the tracking with ARToolkit plus. - * - * @param calibrationARToolkit - */ - public void initMarkerDetection(String calibrationARToolkit) { - // Marker Detection and view + public void setCalibrationARToolkit(String calibrationARToolkit) { this.calibrationARToolkit = calibrationARToolkit; - this.sheets = Collections.synchronizedList(new ArrayList()); - System.out.println("Init MARKER DETECTION " + this + " " + this.sheets); } public String getCalibrationARToolkit() { @@ -305,8 +298,6 @@ public void trackSheets(boolean auto) { if (thread != null) { thread.setCompute(auto); - } else { - System.err.println("Camera: Error AutoCompute only if threaded."); } } @@ -396,7 +387,7 @@ protected void checkCamImage() { } } - protected boolean isPixelFormatGray() { + public boolean isPixelFormatGray() { PixelFormat pixelFormat = getPixelFormat(); return pixelFormat == PixelFormat.GRAY || pixelFormat == PixelFormat.GRAY_32 @@ -405,7 +396,7 @@ protected boolean isPixelFormatGray() { || pixelFormat == PixelFormat.DEPTH_KINECT_MM; } - protected boolean isPixelFormatColor() { + public boolean isPixelFormatColor() { PixelFormat pixelFormat = getPixelFormat(); return pixelFormat == PixelFormat.ARGB || pixelFormat == PixelFormat.BGR @@ -505,5 +496,14 @@ static public void convertARParams(PApplet parent, String calibrationFile, PApplet.println("Conversion error. " + e); } } + + static public void convertARParams(PApplet parent, ProjectiveDeviceP projectiveDevice, + String calibrationARtoolkit) { + try { + fr.inria.papart.procam.Utils.convertARParamFromDevice(parent, projectiveDevice, calibrationARtoolkit); + } catch (Exception e) { + PApplet.println("Conversion error. " + e); + } + } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java index ecb7ec6f..ae953f44 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java @@ -36,35 +36,8 @@ public class CameraOpenKinect extends CameraRGBIRDepth { protected CameraOpenKinect(int cameraNo) { this.systemNumber = cameraNo; - } - - @Override - public void internalInit() { - grabber = new OpenKinectFrameGrabber(this.systemNumber); - if (isUseDepth()) { - depthCamera.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); - depthCamera.type = SubCamera.Type.DEPTH; - depthCamera.setSize(640, 480); - - grabber.setDepthFormat(freenect.FREENECT_DEPTH_MM); - } - if (isUseColor()) { - colorCamera.setPixelFormat(PixelFormat.BGR); - colorCamera.type = SubCamera.Type.COLOR; - colorCamera.setSize(640, 480); - - grabber.setImageWidth(colorCamera.width()); - grabber.setImageHeight(colorCamera.height()); - kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; - grabber.setVideoFormat(kinectVideoFormat); - } - if (isUseIR()) { - IRCamera.setPixelFormat(PixelFormat.GRAY); - IRCamera.type = SubCamera.Type.IR; - IRCamera.setSize(640, 480); - } } @Override @@ -87,31 +60,6 @@ public void close() { } - @Override - public void enableIR() { - } - - @Override - public void disableIR() { - } - - @Override - public void enableDepth() { - } - - @Override - public void disableDepth() { - } - - @Override - public void enableColor() { - } - - @Override - public void disableColor() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - @Override public void grabIR() { try { @@ -141,6 +89,39 @@ public void grabColor() { } } + @Override + public void setUseDepth(boolean use) { + if (use) { + depthCamera.setPixelFormat(PixelFormat.DEPTH_KINECT_MM); + depthCamera.type = SubCamera.Type.DEPTH; + depthCamera.setSize(640, 480); + grabber.setDepthFormat(freenect.FREENECT_DEPTH_MM); + } + } + + @Override + public void setUseIR(boolean use) { + if (use) { + IRCamera.setPixelFormat(PixelFormat.GRAY); + IRCamera.type = SubCamera.Type.IR; + IRCamera.setSize(640, 480); + } + } + + @Override + public void setUseColor(boolean use) { + if (use) { + colorCamera.setPixelFormat(PixelFormat.BGR); + colorCamera.type = SubCamera.Type.COLOR; + colorCamera.setSize(640, 480); + + grabber.setImageWidth(colorCamera.width()); + grabber.setImageHeight(colorCamera.height()); + kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; + grabber.setVideoFormat(kinectVideoFormat); + } + } + @Override protected void internalGrab() throws Exception { } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java index 62329440..7092208b 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java @@ -49,31 +49,11 @@ public PImage getPImage() { protected CameraOpenKinect2(int cameraNo) { this.systemNumber = cameraNo; colorCamera = new Kinect2SubCamera(this); - } - - @Override - public void internalInit() { - if (isUseDepth()) { - depthCamera.setPixelFormat(PixelFormat.FLOAT_DEPTH_KINECT2); - depthCamera.type = SubCamera.Type.DEPTH; - depthCamera.setSize(512, 424); - } - if (isUseColor()) { - colorCamera.setPixelFormat(PixelFormat.ARGB); - colorCamera.type = SubCamera.Type.COLOR; - colorCamera.setSize(1920, 1080); - } - if (isUseIR()) { - IRCamera.setPixelFormat(PixelFormat.GRAY_32); - IRCamera.type = SubCamera.Type.IR; - IRCamera.setSize(512, 424); - } grabber = new OpenKinect2FrameGrabber(this.systemNumber); } @Override public void internalStart() throws FrameGrabber.Exception { - System.out.println("K2: Starting..." + Thread.currentThread()); grabber.start(); } @@ -102,33 +82,34 @@ public void close() { } @Override - public void enableIR() { - grabber.enableIRStream(); - } - - @Override - public void disableIR() { - // Not implemented yet. - } - - @Override - public void enableDepth() { - grabber.enableDepthStream(); - } - - @Override - public void disableDepth() { - // Not implemented yet. + public void setUseIR(boolean use) { + if (use) { + IRCamera.setPixelFormat(PixelFormat.GRAY_32); + IRCamera.type = SubCamera.Type.IR; + IRCamera.setSize(512, 424); + grabber.enableIRStream(); + } + this.useIR = use; } @Override - public void enableColor() { - grabber.enableColorStream(); + public void setUseDepth(boolean use) { + if (use) { + depthCamera.setPixelFormat(PixelFormat.FLOAT_DEPTH_KINECT2); + depthCamera.type = SubCamera.Type.DEPTH; + depthCamera.setSize(512, 424); + grabber.enableDepthStream(); + } } @Override - public void disableColor() { - // Not implemented yet. + public void setUseColor(boolean use) { + if (use) { + colorCamera.setPixelFormat(PixelFormat.ARGB); + colorCamera.type = SubCamera.Type.COLOR; + colorCamera.setSize(1920, 1080); + grabber.enableColorStream(); + } } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java index fccaedc6..b5b34745 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -106,18 +106,6 @@ public PImage getIRImage() { return null; } - protected abstract void enableIR(); - - protected abstract void disableIR(); - - protected abstract void enableDepth(); - - protected abstract void disableDepth(); - - protected abstract void enableColor(); - - protected abstract void disableColor(); - protected abstract void grabIR(); protected abstract void grabDepth(); @@ -126,25 +114,13 @@ public PImage getIRImage() { public void disable(SubCamera camera) { if (camera.type == SubCamera.Type.DEPTH) { - disableDepth(); + setUseDepth(false); } if (camera.type == SubCamera.Type.IR) { - disableIR(); + setUseIR(false); } if (camera.type == SubCamera.Type.COLOR) { - disableColor(); - } - } - - void start(SubCamera camera) { - if (camera.type == SubCamera.Type.DEPTH) { - enableDepth(); - } - if (camera.type == SubCamera.Type.IR) { - enableIR(); - } - if (camera.type == SubCamera.Type.COLOR) { - enableColor(); + setUseColor(false); } } @@ -168,7 +144,6 @@ void grab(SubCamera camera) { public void start() { isStarting = true; try { - internalInit(); if (isUseColor()) { colorCamera.start(); } @@ -191,8 +166,6 @@ public void start() { protected abstract void internalGrab() throws Exception; - protected abstract void internalInit() throws Exception; - @Override public void grab() { @@ -348,8 +321,8 @@ public String getCalibrationFile() { } @Override - public void initMarkerDetection(String calibrationARToolkit) { - actAsCamera.initMarkerDetection(calibrationARToolkit); + public void setCalibrationARToolkit(String calibrationARToolkit) { + actAsCamera.setCalibrationARToolkit(calibrationARToolkit); } @Override @@ -443,12 +416,12 @@ protected void checkCamImage() { } @Override - protected boolean isPixelFormatGray() { + public boolean isPixelFormatGray() { return actAsCamera.isPixelFormatGray(); } @Override - protected boolean isPixelFormatColor() { + public boolean isPixelFormatColor() { return actAsCamera.isPixelFormatColor(); } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 04107e6d..6155e391 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -19,7 +19,6 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.ProjectiveDeviceP; import java.nio.FloatBuffer; import java.util.logging.Level; import java.util.logging.Logger; @@ -63,41 +62,24 @@ public PMatrix3D getHardwareExtrinsics() { } @Override - public void internalInit() { + public void internalStart() throws FrameGrabber.Exception { - if (isUseDepth()) { - depthCamera.setPixelFormat(PixelFormat.REALSENSE_Z16); - depthCamera.setSize(640, 480); - depthCamera.type = SubCamera.Type.DEPTH; - } - if (isUseColor()) { - colorCamera.setPixelFormat(PixelFormat.RGB); - colorCamera.type = SubCamera.Type.COLOR; - + if (useColor) { if (colorCamera.width == 0 || colorCamera.height == 0) { - System.out.println("Setting default realSense width and height..."); + System.out.println("Setting default color for Realsense..."); + this.setSize(1280, 720); colorCamera.setSize(1280, 720); } + grabber.setImageWidth(colorCamera.width()); + grabber.setImageHeight(colorCamera.height()); + grabber.setFrameRate(30); + if (colorCamera.width() == 1280) { grabber.setFrameRate(60); } - - if (colorCamera.width() == 1920) { - grabber.setFrameRate(30); - } - } - if (isUseIR()) { - IRCamera.setSize(640, 480); - IRCamera.setPixelFormat(PixelFormat.GRAY); - IRCamera.type = SubCamera.Type.IR; - grabber.setIRFrameRate(60); + grabber.enableColorStream(); } - - } - - @Override - public void internalStart() throws FrameGrabber.Exception { grabber.start(); // Override the calibration... @@ -115,6 +97,7 @@ public void internalStart() throws FrameGrabber.Exception { @Override public void internalGrab() throws Exception { + grabber.grab(); } @@ -150,6 +133,7 @@ public static void useHarwareIntrinsics(SubCamera camera, RealSenseFrameGrabber if (camera.type == SubCamera.Type.DEPTH) { camType = RealSense.depth; } + System.out.println("Setting hardware intrinsics for: " + camera.type.name()); RealSense.intrinsics intrinsics = grabber.getRealSenseDevice().get_stream_intrinsics(camType); FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); float cx = fb.get(2); @@ -176,7 +160,7 @@ public void grabIR() { public void grabDepth() { depthCamera.updateCurrentImage(grabber.grabDepth()); // update the touch input - + if (getActingCamera() == IRCamera) { ((WithTouchInput) depthCamera).newTouchImageWithColor(IRCamera.currentImage); return; @@ -188,40 +172,64 @@ public void grabDepth() { ((WithTouchInput) depthCamera).newTouchImage(); } - @Override - public void enableIR() { - grabber.setIRImageWidth(IRCamera.width()); - grabber.setIRImageHeight(IRCamera.height()); - grabber.enableIRStream(); + public void setUseIR(boolean use) { + if (use) { + grabber.setIRImageWidth(IRCamera.width()); + grabber.setIRImageHeight(IRCamera.height()); + grabber.enableIRStream(); + } else { + grabber.disableIRStream(); + } + this.useIR = use; } - @Override - public void disableIR() { - grabber.disableIRStream(); - } + public void setUseDepth(boolean use) { + if (use) { + depthCamera.type = SubCamera.Type.DEPTH; + depthCamera.setPixelFormat(PixelFormat.REALSENSE_Z16); + depthCamera.setSize(640, 480); - @Override - public void enableDepth() { - grabber.setDepthImageWidth(depthCamera.width()); - grabber.setDepthImageHeight(depthCamera.height()); - grabber.enableDepthStream(); + grabber.setDepthImageWidth(depthCamera.width()); + grabber.setDepthImageHeight(depthCamera.height()); + grabber.enableDepthStream(); + getFrameGrabber().setPreset(5); + } else { + grabber.disableDepthStream(); + } + this.useDepth = use; } @Override - public void disableDepth() { - grabber.disableDepthStream(); - } + public void setSize(int w, int h) { + Camera act = getActingCamera(); - @Override - public void enableColor() { - grabber.setImageWidth(colorCamera.width()); - grabber.setImageHeight(colorCamera.height()); - grabber.enableColorStream(); + if (act == null) { + return; + } + act.setSize(w, h); + System.out.println("Setting custom color for Realsense: " + w + " " + h); + if (act == colorCamera) { + grabber.setImageWidth(colorCamera.width()); + grabber.setImageHeight(colorCamera.height()); + grabber.setFrameRate(30); + } } - @Override - public void disableColor() { - grabber.disableColorStream(); - } + public void setUseColor(boolean use) { + // todo: boolean or not ? + if (!use) { + grabber.disableColorStream(); + } else { + colorCamera.setPixelFormat(PixelFormat.RGB); + colorCamera.type = SubCamera.Type.COLOR; + // Default values to get Color with multi-touch depth tracking. + this.setSize(1280, 720); + colorCamera.setSize(1280, 720); + grabber.setImageWidth(colorCamera.width()); + grabber.setImageHeight(colorCamera.height()); + grabber.setFrameRate(60); + } + this.useColor = use; + } } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index ba77d6ce..09ae37f8 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -79,11 +79,15 @@ public void run() { } while (!stop) { + camera.grab(); + // If there is no camera for tracking... + if(cameraForMarkerboard == null || !compute || camera.getTrackedSheets().isEmpty()){ + continue; + } + image = camera.getIplImage(); - - // TODO: check if img can be null... - if (image != null && compute && !camera.getTrackedSheets().isEmpty()) { + if (image != null) { this.compute(); } } @@ -167,7 +171,6 @@ protected void updateSequential() { } protected void updateBoardLocation(MarkerBoard markerBoard) { - // The markerboard will know the real camera, not the top-level camera. if (markerBoard.useGrayscaleImages()) { markerBoard.updateLocation(cameraForMarkerboard, grayImage, this.detectedMarkers); diff --git a/papart/src/fr/inria/papart/procam/camera/SubCamera.java b/papart/src/fr/inria/papart/procam/camera/SubCamera.java index 703720e6..8554f58d 100644 --- a/papart/src/fr/inria/papart/procam/camera/SubCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/SubCamera.java @@ -46,7 +46,6 @@ public void start() { if (!mainCamera.isStarting) { throw new RuntimeException("Cannot start a subCamera: start the main camera instead."); } - mainCamera.start(this); isConnected = true; } diff --git a/papart/src/fr/inria/papart/procam/camera/TrackedView.java b/papart/src/fr/inria/papart/procam/camera/TrackedView.java index 9065c362..e3f3e11a 100755 --- a/papart/src/fr/inria/papart/procam/camera/TrackedView.java +++ b/papart/src/fr/inria/papart/procam/camera/TrackedView.java @@ -37,7 +37,7 @@ */ public class TrackedView { - private PImage extractedImage = null; + private PImage extractedPImage = null; private IplImage extractedIplImage = null; // private data @@ -103,10 +103,10 @@ public void setCorners(PVector[] corners) { public void init() { init(PApplet.RGB); } - + public void init(int frameType) { // TODO: Init with good color... - extractedImage = new PImage(imageWidthPx, imageHeightPx, frameType); + extractedPImage = new PImage(imageWidthPx, imageHeightPx, frameType); initiateImageCoordinates(); } @@ -124,7 +124,7 @@ private void initiateImageCoordinates() { } public PImage getViewOf(Camera camera) { - if (extractedImage == null) { + if (extractedPImage == null) { System.err.println("You should init the TrackedView before getting the view."); return null; } @@ -136,19 +136,23 @@ public PImage getViewOf(Camera camera) { this.camera = camera; CvMat homography = computeHomography(); - + // Convert to the good type... - - Utils.remapImage(homography, camera.getIplImage(), extractedIplImage, extractedImage); - return extractedImage; + Utils.remapImage(homography, camera.getIplImage(), extractedIplImage, extractedPImage); + return extractedPImage; } public IplImage getIplViewOf(Camera camera) { - if (camera.getIplImage() == null) { + if (extractedPImage == null) { + System.err.println("You should init the TrackedView before getting the view."); + return null; + } + IplImage img = camera.getIplImage(); + if (img == null) { return null; } - this.mainImage = camera.getIplImage(); + this.mainImage = img; this.camera = camera; CvMat homography = computeHomography(); Utils.remapImageIpl(homography, camera.getIplImage(), extractedIplImage); @@ -164,7 +168,10 @@ private CvMat computeHomography() { private void checkMemory() { if (extractedIplImage == null) { - extractedIplImage = Utils.createImageFrom(extractedImage); + extractedIplImage = Utils.createImageFrom(extractedPImage); + if (extractedIplImage == null) { + System.err.println("Impossible to create a View! " + this + " " + extractedPImage); + } } } diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index dbe3674b..e971e39c 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -46,7 +46,7 @@ * * @author jeremy */ -public class ARDisplay extends BaseDisplay implements HasExtrinsics{ +public class ARDisplay extends BaseDisplay implements HasExtrinsics { // public PGraphicsOpenGL graphicsUndist; private PImage mapImg; @@ -67,6 +67,12 @@ public class ARDisplay extends BaseDisplay implements HasExtrinsics{ private boolean distort = false; + /** + * Warning Not used directly. + * + * @param parent + * @param calibrationYAML + */ public ARDisplay(PApplet parent, String calibrationYAML) { super(parent); loadCalibration(calibrationYAML); @@ -103,10 +109,18 @@ protected void loadCalibration(String calibrationYAML) { } } - public void setCalibration(Camera c){ + /** + * * + * Reload the intrinsic calibration from the camera. + */ + public void reloadCalibration() { + setCalibration(camera.getProjectiveDevice()); + } + + public void setCalibration(Camera c) { setCalibration(c.getProjectiveDevice()); } - + protected void setCalibration(ProjectiveDeviceP pdp) { // Load the camera parameters. // pdp = ProjectiveDeviceP.loadProjectiveDevice(calibrationYAML, 0); @@ -121,7 +135,11 @@ protected void setCalibration(ProjectiveDeviceP pdp) { this.frameHeight = pdp.getHeight(); this.drawingSizeX = frameWidth; this.drawingSizeY = frameHeight; - + + if (this.graphics != null) { + updateIntrinsicsRendering(); + } + // TODO: no more distorsions Processing3 test // this.setDistort(pdp.handleDistorsions()); this.setDistort(false); @@ -170,7 +188,7 @@ public void draw() { parent.noStroke(); PImage img = camera.getPImage(); - + if (camera != null && img != null) { parent.image(img, 0, 0, parent.width, parent.height); // ((PGraphicsOpenGL) (parent.g)).image(camera.getPImage(), 0, 0, frameWidth, frameHeight); @@ -203,7 +221,7 @@ public void drawImage(PGraphicsOpenGL g, PImage image, @Override public void renderScreens() { this.graphics.noStroke(); - + for (Screen screen : screens) { if (!screen.isDrawing()) { continue; @@ -461,8 +479,8 @@ public PVector projectPointer(Screen screen, float px, float py) { Ray3D ray = new Ray3D(new Vec3D(originP.x, - originP.y, - originP.z), + originP.y, + originP.z), new Vec3D(viewedPtP.x, viewedPtP.y, viewedPtP.z)); @@ -481,8 +499,8 @@ public PVector projectPointer(Screen screen, float px, float py) { 1f - (res.y() / res.z()), 1); return out; } - - /** + + /** * Computes the 3D coordinates of a projected pixel in the tracking camera * coordinate system. * @@ -498,12 +516,16 @@ public PVector getProjectedPointOnPlane(PlaneCalibration planeCalibCam, float px PVector originP = new PVector(0, 0, 0); PVector viewedPtP = getProjectiveDeviceP().pixelToWorldNormalized(px, py); - // Pass it to the camera point of view (origin) - PMatrix3D proCamExtrinsics = getExtrinsicsInv(); - PVector originC = new PVector(); - PVector viewedPtC = new PVector(); - proCamExtrinsics.mult(originP, originC); - proCamExtrinsics.mult(viewedPtP, viewedPtC); + PVector originC = originP.copy(); + PVector viewedPtC = viewedPtP.copy(); + if (hasExtrinsics()) { + // Pass it to the camera point of view (origin) + PMatrix3D proCamExtrinsics = getExtrinsicsInv(); + originC = new PVector(); + viewedPtC = new PVector(); + proCamExtrinsics.mult(originP, originC); + proCamExtrinsics.mult(viewedPtP, viewedPtC); + } // Second argument is a direction viewedPtC.sub(originC); @@ -523,7 +545,7 @@ public PVector getProjectedPointOnPlane(PlaneCalibration planeCalibCam, float px } return new PVector(inter.x(), inter.y(), inter.z()); - } + } protected PMatrix3D createProjection(PVector nearFar) { diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java b/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java index 9457f4c9..55561f06 100644 --- a/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java @@ -72,6 +72,9 @@ public MarkerBoardARToolKitPlus(String fileName, float width, float height) { // @Override protected void addTrackerImpl(Camera camera) { + + System.out.println("Starting a ARToolkitPlus tracker for CFG files."); + // create a tracker that does: // - 6x6 sized marker images (required for binary markers) // - samples at a maximum of 6x6 @@ -109,8 +112,8 @@ protected void addTrackerImpl(Camera camera) { tracker.setMarkerMode(ARToolKitPlus.MARKER_ID_BCH); // TODO: find why FULL RES is not working with a FULL HD image. -// tracker.setImageProcessingMode(ARToolKitPlus.IMAGE_FULL_RES); - tracker.setImageProcessingMode(ARToolKitPlus.IMAGE_HALF_RES); + tracker.setImageProcessingMode(ARToolKitPlus.IMAGE_FULL_RES); +// tracker.setImageProcessingMode(ARToolKitPlus.IMAGE_HALF_RES); // tracker.setUseDetectLite(false); tracker.setUseDetectLite(true); diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoardSvg.java b/papart/src/fr/inria/papart/tracking/MarkerBoardSvg.java index 349c0eda..db9b511e 100644 --- a/papart/src/fr/inria/papart/tracking/MarkerBoardSvg.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoardSvg.java @@ -25,9 +25,6 @@ import static fr.inria.papart.tracking.MarkerBoard.FORCE_UPDATE; import static fr.inria.papart.tracking.MarkerBoard.NORMAL; import fr.inria.papart.procam.camera.Camera; -import fr.inria.papart.tracking.DetectedMarker; -import fr.inria.papart.tracking.MarkerList; -import fr.inria.papart.tracking.MarkerSvg; import java.util.ArrayList; import org.bytedeco.javacpp.opencv_core; import processing.core.PMatrix3D; @@ -40,7 +37,6 @@ */ public class MarkerBoardSvg extends MarkerBoard { - private final MarkerList markersFromSVG; public MarkerBoardSvg(String fileName, float width, float height) { From 3c37606e26105ea0975f12adbae0968d9dd8e7f0 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Mon, 21 Nov 2016 15:27:47 +0100 Subject: [PATCH 32/99] realsense depth+color ok. --- .../procam/camera/CameraRGBIRDepth.java | 6 +- .../papart/procam/camera/CameraRealSense.java | 153 +++++++++--------- .../inria/papart/procam/camera/SubCamera.java | 4 + .../papart/procam/camera/SubDepthCamera.java | 4 + 4 files changed, 90 insertions(+), 77 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java index b5b34745..cc0b8812 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -46,9 +46,9 @@ public abstract class CameraRGBIRDepth extends Camera { protected boolean useColor = false; public CameraRGBIRDepth() { - colorCamera = new SubCamera(this); - depthCamera = new SubDepthCamera(this); - IRCamera = new SubCamera(this); + colorCamera = new SubCamera(this, SubCamera.Type.COLOR); + depthCamera = new SubDepthCamera(this, SubCamera.Type.DEPTH); + IRCamera = new SubCamera(this, SubCamera.Type.IR); } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 6155e391..bf654811 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -51,35 +51,35 @@ public RealSenseFrameGrabber getFrameGrabber() { return this.grabber; } - public PMatrix3D getHardwareExtrinsics() { - RealSense.extrinsics extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.color, RealSense.depth); - FloatBuffer fb = extrinsics.position(0).asByteBuffer().asFloatBuffer(); - return new PMatrix3D( - fb.get(0), fb.get(3), fb.get(6), -fb.get(9) * 1000f, - fb.get(1), fb.get(4), fb.get(7), fb.get(10) * 1000f, - fb.get(2), fb.get(5), fb.get(8), fb.get(11) * 1000f, - 0, 0, 0, 1); - } - @Override public void internalStart() throws FrameGrabber.Exception { if (useColor) { - if (colorCamera.width == 0 || colorCamera.height == 0) { - System.out.println("Setting default color for Realsense..."); - this.setSize(1280, 720); - colorCamera.setSize(1280, 720); - } - + System.out.println("Init Camera RealSense: " + colorCamera.width() + " " + colorCamera.height()); grabber.setImageWidth(colorCamera.width()); grabber.setImageHeight(colorCamera.height()); - grabber.setFrameRate(30); - if (colorCamera.width() == 1280) { grabber.setFrameRate(60); + } else { + grabber.setFrameRate(30); } grabber.enableColorStream(); } + + if (useIR) { + grabber.setIRImageWidth(IRCamera.width()); + grabber.setIRImageHeight(IRCamera.height()); + grabber.setIRFrameRate(IRCamera.getFrameRate()); + grabber.enableIRStream(); + } + + if (useDepth) { + grabber.setDepthImageWidth(depthCamera.width()); + grabber.setDepthImageHeight(depthCamera.height()); + grabber.setDepthFrameRate(depthCamera.getFrameRate()); + grabber.setPreset(5); + grabber.enableDepthStream(); + } grabber.start(); // Override the calibration... @@ -92,12 +92,10 @@ public void internalStart() throws FrameGrabber.Exception { if (useIR) { useHarwareIntrinsics(IRCamera, grabber); } - } @Override public void internalGrab() throws Exception { - grabber.grab(); } @@ -119,30 +117,6 @@ public void close() { } } - public static void useHarwareIntrinsics(SubCamera camera, RealSenseFrameGrabber grabber) { - if (camera == null || camera == Camera.INVALID_CAMERA) { - return; - } - int camType = 0; - if (camera.type == SubCamera.Type.COLOR) { - camType = RealSense.color; - } - if (camera.type == SubCamera.Type.IR) { - camType = RealSense.infrared; - } - if (camera.type == SubCamera.Type.DEPTH) { - camType = RealSense.depth; - } - System.out.println("Setting hardware intrinsics for: " + camera.type.name()); - RealSense.intrinsics intrinsics = grabber.getRealSenseDevice().get_stream_intrinsics(camType); - FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); - float cx = fb.get(2); - float cy = fb.get(3); - float fx = fb.get(4); - float fy = fb.get(5); - camera.setSimpleCalibration(fx, fy, cx, cy); - } - @Override public void grabColor() { opencv_core.IplImage video = grabber.grabVideo(); @@ -172,64 +146,95 @@ public void grabDepth() { ((WithTouchInput) depthCamera).newTouchImage(); } + @Override public void setUseIR(boolean use) { if (use) { - grabber.setIRImageWidth(IRCamera.width()); - grabber.setIRImageHeight(IRCamera.height()); - grabber.enableIRStream(); + IRCamera.setSize(640, 480); + IRCamera.setPixelFormat(PixelFormat.GRAY); + IRCamera.setFrameRate(30); } else { grabber.disableIRStream(); } this.useIR = use; } + @Override public void setUseDepth(boolean use) { if (use) { - depthCamera.type = SubCamera.Type.DEPTH; depthCamera.setPixelFormat(PixelFormat.REALSENSE_Z16); depthCamera.setSize(640, 480); - - grabber.setDepthImageWidth(depthCamera.width()); - grabber.setDepthImageHeight(depthCamera.height()); - grabber.enableDepthStream(); - getFrameGrabber().setPreset(5); + depthCamera.setFrameRate(30); } else { grabber.disableDepthStream(); } this.useDepth = use; } + public void setUseColor(boolean use) { + // todo: boolean or not ? + if (!use) { + grabber.disableColorStream(); + } else { + colorCamera.setPixelFormat(PixelFormat.RGB); + + // default values +// colorCamera.setSize(1280, 720); + colorCamera.setSize(640, 480); + colorCamera.setFrameRate(30); + + // Default values to get Color with multi-touch depth tracking. +// this.setSize(1280, 720); + } + this.useColor = use; + } + @Override public void setSize(int w, int h) { Camera act = getActingCamera(); if (act == null) { + + // it is likely that the set size was for the color camera then. + if (useColor) { + colorCamera.setSize(w, h); + } return; - } - act.setSize(w, h); - System.out.println("Setting custom color for Realsense: " + w + " " + h); - if (act == colorCamera) { - grabber.setImageWidth(colorCamera.width()); - grabber.setImageHeight(colorCamera.height()); - grabber.setFrameRate(30); + } else { + act.setSize(w, h); } } - public void setUseColor(boolean use) { - // todo: boolean or not ? - if (!use) { - grabber.disableColorStream(); - } else { - colorCamera.setPixelFormat(PixelFormat.RGB); - colorCamera.type = SubCamera.Type.COLOR; + public PMatrix3D getHardwareExtrinsics() { + RealSense.extrinsics extrinsics = grabber.getRealSenseDevice().get_extrinsics(RealSense.color, RealSense.depth); + FloatBuffer fb = extrinsics.position(0).asByteBuffer().asFloatBuffer(); + return new PMatrix3D( + fb.get(0), fb.get(3), fb.get(6), -fb.get(9) * 1000f, + fb.get(1), fb.get(4), fb.get(7), fb.get(10) * 1000f, + fb.get(2), fb.get(5), fb.get(8), fb.get(11) * 1000f, + 0, 0, 0, 1); + } - // Default values to get Color with multi-touch depth tracking. - this.setSize(1280, 720); - colorCamera.setSize(1280, 720); - grabber.setImageWidth(colorCamera.width()); - grabber.setImageHeight(colorCamera.height()); - grabber.setFrameRate(60); + public static void useHarwareIntrinsics(SubCamera camera, RealSenseFrameGrabber grabber) { + if (camera == null || camera == Camera.INVALID_CAMERA) { + return; } - this.useColor = use; + int camType = 0; + if (camera.type == SubCamera.Type.COLOR) { + camType = RealSense.color; + } + if (camera.type == SubCamera.Type.IR) { + camType = RealSense.infrared; + } + if (camera.type == SubCamera.Type.DEPTH) { + camType = RealSense.depth; + } + System.out.println("Setting hardware intrinsics for: " + camera.type.name()); + RealSense.intrinsics intrinsics = grabber.getRealSenseDevice().get_stream_intrinsics(camType); + FloatBuffer fb = intrinsics.position(0).asByteBuffer().asFloatBuffer(); + float cx = fb.get(2); + float cy = fb.get(3); + float fx = fb.get(4); + float fy = fb.get(5); + camera.setSimpleCalibration(fx, fy, cx, cy); } } diff --git a/papart/src/fr/inria/papart/procam/camera/SubCamera.java b/papart/src/fr/inria/papart/procam/camera/SubCamera.java index 8554f58d..ae0320da 100644 --- a/papart/src/fr/inria/papart/procam/camera/SubCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/SubCamera.java @@ -36,6 +36,10 @@ public enum Type { public SubCamera(CameraRGBIRDepth mainCamera) { this.mainCamera = mainCamera; } + public SubCamera(CameraRGBIRDepth mainCamera, Type type) { + this.mainCamera = mainCamera; + this.type = type; + } public Camera getMainCamera() { return mainCamera; diff --git a/papart/src/fr/inria/papart/procam/camera/SubDepthCamera.java b/papart/src/fr/inria/papart/procam/camera/SubDepthCamera.java index be700171..5c3e00b7 100644 --- a/papart/src/fr/inria/papart/procam/camera/SubDepthCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/SubDepthCamera.java @@ -34,6 +34,10 @@ public SubDepthCamera(CameraRGBIRDepth mainCamera) { super(mainCamera); } + public SubDepthCamera(CameraRGBIRDepth mainCamera, Type type) { + super(mainCamera, type); + } + @Override public KinectTouchInput getTouchInput() { return touchInput; From 09ff82c3c1e38c581e18f7ea625eda3c1a81e651 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 22 Nov 2016 13:34:36 +0100 Subject: [PATCH 33/99] Work in progress, cam + depth cam + proj OK. --- .../calibration/CalibrationExtrinsic.java | 17 ++++++----- .../papart/calibration/CalibrationPopup.java | 29 ++++++++++++------- .../depthcam/devices/DepthCameraDevice.java | 2 +- .../papart/depthcam/devices/RealSense.java | 4 +++ papart/src/fr/inria/papart/procam/Papart.java | 16 ++++++++-- .../papart/procam/camera/CameraFactory.java | 1 + .../papart/procam/camera/CameraOpenCV.java | 2 +- .../procam/camera/CameraRGBIRDepth.java | 15 +++++++++- .../papart/procam/camera/CameraRealSense.java | 6 ++-- .../papart/procam/camera/CameraThread.java | 15 +++++++--- .../papart/procam/display/ARDisplay.java | 5 ---- 11 files changed, 77 insertions(+), 35 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index 3208fc22..ab16a4b8 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -92,12 +92,11 @@ public void saveProCamExtrinsics(PMatrix3D extr) { projector.setExtrinsics(extr); } - public void calibrateKinect(ArrayList snapshots) { - if (this.depthCameraType == Camera.Type.OPEN_KINECT_2) { - calibrateProjectorDepthCam(snapshots); - } - if (this.depthCameraType == Camera.Type.OPEN_KINECT) { + public void calibrateKinect(ArrayList snapshots, boolean useExternal) { + if (useExternal) { calibrateDepthAndExternalCam(snapshots); + } else { + calibrateProjectorDepthCam(snapshots); } } @@ -127,13 +126,13 @@ protected void calibrateProjectorDepthCam(ArrayList snapsho } // Value for RealSense. if (depthCameraDevice.type() == Camera.Type.REALSENSE) { - planeCalibCam.moveAlongNormal(-22f); + planeCalibCam.moveAlongNormal(-42f); } saveKinectPlaneCalibration(planeCalibCam, homography); saveKinectCameraExtrinsics(kinectCameraExtrinsics); } - + protected void calibrateDepthAndExternalCam(ArrayList snapshots) { calibrateDepthToExternalExtr(snapshots); calibrateDepthCamPlane(snapshots); @@ -181,6 +180,10 @@ public boolean calibrateDepthCamPlane(ArrayList snapshots) // move the plane up a little. planeCalibKinect.flipNormal(); planeCalibKinect.moveAlongNormal(-20f); + + if(depthCameraDevice.type() == Camera.Type.REALSENSE){ + planeCalibKinect.moveAlongNormal(-20f); + } saveKinectPlaneCalibration(planeCalibKinect, homography); return true; diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index 9df3e8f4..d2cdd789 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -93,7 +93,7 @@ public class CalibrationPopup extends PApplet { // Kinect private Camera.Type depthCameraType; private boolean useExternalColorCamera = false; - + // calibrations private ArrayList snapshots = new ArrayList(); private String isProCamCalibrated = NOTHING; @@ -210,10 +210,14 @@ private void initMarkerTrackingFromProjector() { } private void initTrackingOn(DepthCameraDevice kinectDevice) { - cameraFromDepthCam = kinectDevice.getColorCamera(); + kinectDevice.getMainCamera().actAsColorCamera(); + kinectDevice.getMainCamera().trackSheets(true); + cameraFromDepthCam = kinectDevice.getColorCamera(); String ARToolkitCalib = Papart.calibrationFolder + KINECT_ARTOOLKIT_NAME; - Camera.convertARParams(this, cameraFromDepthCam.getCalibrationFile(), ARToolkitCalib); + + // Warning, only used for .CFG markers (old). + Camera.convertARParams(this, cameraFromDepthCam.getProjectiveDevice(), ARToolkitCalib); cameraFromDepthCam.setCalibrationARToolkit(ARToolkitCalib); // No display for now... @@ -225,6 +229,8 @@ private void initTrackingOn(DepthCameraDevice kinectDevice) { // as it does not comes with the display: cameraFromDepthCam.trackMarkerBoard(board); + + System.out.println("Tracking from the depth CAmera should be OK. "); } void reset() { @@ -278,15 +284,15 @@ public void clearCalibrations() { reset(); } - public void calibrateProCam() { + public void calibrateProCam(boolean useExternal) { this.isProCamCalibrated = COMPUTING; calibrationExtrinsic.computeProjectorCameraExtrinsics(snapshots); - calibrationExtrinsic.calibrateKinect(snapshots); + calibrationExtrinsic.calibrateKinect(snapshots, useExternalColorCamera); this.isProCamCalibrated = OK; this.isKinectCalibrated = OK; } - public void calibrateKinect() { + public void calibrateKinect(boolean useExternal) { boolean isCalibOK = calibrationExtrinsic.calibrateDepthCamPlane(snapshots); if (isCalibOK) { this.isKinectCalibrated = OK; @@ -294,8 +300,9 @@ public void calibrateKinect() { } private PMatrix3D currentDepthCameraBoard() { - if(cameraFromDepthCam == null || cameraFromDepthCam == cameraTracking) + if (cameraFromDepthCam == null || cameraFromDepthCam == cameraTracking) { return null; + } return board.getTransfoMat(cameraFromDepthCam).get(); } @@ -331,12 +338,12 @@ private opencv_core.IplImage projectorImage() { } private opencv_core.IplImage greyProjectorImage(opencv_core.IplImage projImage) { - - if(projImage.nChannels() == 1){ + + if (projImage.nChannels() == 1) { grayImage = projImage; return grayImage; - } - + } + if (grayImage == null) { grayImage = opencv_core.IplImage.create(projector.getWidth(), projector.getHeight(), diff --git a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java index c6bdb224..ec4ad0a7 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java @@ -85,7 +85,7 @@ public SubDepthCamera getDepthCamera() { * init a depth camera, depth only as there is another color camera. */ protected final void initDefaultCamera() { - String id = Papart.getDefaultCameraConfiguration(parent).getCameraName(); + String id = Papart.getDefaultDepthCameraConfiguration(parent).getCameraName(); camera = (CameraRGBIRDepth) CameraFactory.createCamera(type(), id); camera.setUseDepth(true); camera.setUseColor(true); diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index e8320ba8..568d7512 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -52,6 +52,10 @@ public RealSense(PApplet parent, Camera anotherCam) { cameraRS = (CameraRealSense) camera; // setStereoCalibration(Papart.kinectStereoCalib); setStereoCalibration(cameraRS.getHardwareExtrinsics()); + + // TODO: Hacks to try to handle the SR300 distorsions +// camera.getDepthCamera().setCalibration(Papart.SR300IRCalib); +// camera.getIRCamera().setCalibration(Papart.SR300IRCalib); } public CameraRealSense getMainCamera() { diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 0cc2eba9..071d7b0b 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -50,6 +50,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import org.bytedeco.javacv.CameraDevice; import org.reflections.Reflections; import processing.core.PApplet; import processing.core.PFont; @@ -77,6 +78,7 @@ public class Papart { public static String camCalibARtoolkit = calibrationFolder + "camera-projector.cal"; public static String kinectIRCalib = calibrationFolder + "calibration-kinect-IR.yaml"; + public static String SR300IRCalib = calibrationFolder + "calibration-SR300-IR.yaml"; public static String kinectRGBCalib = calibrationFolder + "calibration-kinect-RGB.yaml"; public static String kinectStereoCalib = calibrationFolder + "calibration-kinect-Stereo.xml"; @@ -579,6 +581,8 @@ public void initCamera(String cameraNo, Camera.Type cameraType, String cameraFor cameraTracking = CameraFactory.createCamera(cameraType, cameraNo, cameraFormat); cameraTracking.setParent(applet); cameraTracking.setCalibration(cameraCalib); + + System.out.println("Starting First tracking camera: " + cameraTracking); // TEST: no more start here... // cameraTracking.start(); // loadTracking(cameraCalib); @@ -696,11 +700,11 @@ public DepthCameraDevice loadDefaultDepthCamera() { // System.err.println("You must choose a camera to create a DepthCamera."); // } if (kinectConfiguration.getCameraType() == Camera.Type.REALSENSE) { - depthCameraDevice = new RealSense(applet, (CameraRealSense) cameraTracking); + depthCameraDevice = new RealSense(applet, cameraTracking); } if (kinectConfiguration.getCameraType() == Camera.Type.OPEN_KINECT) { - depthCameraDevice = new Kinect360(applet, (CameraOpenKinect) cameraTracking); + depthCameraDevice = new Kinect360(applet, cameraTracking); } if (kinectConfiguration.getCameraType() == Camera.Type.OPEN_KINECT_2) { @@ -816,6 +820,8 @@ public void startTracking() { } public void startCameraThread() { + + System.out.println("Starting thread for camera: " + cameraTracking); cameraTracking.start(); // Calibration might be loaded from the device and require an update. @@ -825,6 +831,12 @@ public void startCameraThread() { } cameraTracking.setThread(); + + if(depthCameraDevice != null && + cameraTracking != depthCameraDevice.getMainCamera()){ + depthCameraDevice.getMainCamera().start(); + depthCameraDevice.getMainCamera().setThread(); + } } public void startDepthCameraThread() { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java index 3190d6c9..21b71327 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraFactory.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFactory.java @@ -47,6 +47,7 @@ public static Camera createCamera(Camera.Type type, String description, String f CameraRGBIRDepth cameraMulti = null; int cameraNo = 0; +// System.out.println("CameraFactory: new " + type.name() + ", " + description + " " + format); boolean isInt = false; try { cameraNo = Integer.parseInt(description); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenCV.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenCV.java index 5d9085ed..5dc37793 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenCV.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenCV.java @@ -46,7 +46,7 @@ public void start() { OpenCVFrameGrabber grabberCV = new OpenCVFrameGrabber(this.systemNumber); grabberCV.setImageWidth(width()); grabberCV.setImageHeight(height()); -// grabberCV.setFrameRate(60); + grabberCV.setFrameRate(frameRate); grabberCV.setImageMode(FrameGrabber.ImageMode.COLOR); try { diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java index cc0b8812..a551816a 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRGBIRDepth.java @@ -217,6 +217,9 @@ public PImage getPImage() { @Override public String toString() { + if (actAsCamera == null) { + return "RGBDIR camear"; + } return actAsCamera.toString(); } @@ -398,6 +401,16 @@ public void setThread() { } else { System.err.println("Camera: Error Thread already launched"); } + + if (useDepth) { + depthCamera.thread = thread; + } + if (useColor) { + colorCamera.thread = thread; + } + if (useIR) { + IRCamera.thread = thread; + } } @Override @@ -437,7 +450,7 @@ public ProjectiveDeviceP getProjectiveDevice() { @Override protected void setClosing() { - actAsCamera.setClosing(); + super.setClosing(); } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index bf654811..22b93eb9 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -63,6 +63,7 @@ public void internalStart() throws FrameGrabber.Exception { } else { grabber.setFrameRate(30); } +// grabber.setFrameRate(colorCamera.getFrameRate()); grabber.enableColorStream(); } @@ -178,9 +179,8 @@ public void setUseColor(boolean use) { colorCamera.setPixelFormat(PixelFormat.RGB); // default values -// colorCamera.setSize(1280, 720); - colorCamera.setSize(640, 480); - colorCamera.setFrameRate(30); + colorCamera.setSize(1280, 720); +// colorCamera.setFrameRate(30); // Default values to get Color with multi-touch depth tracking. // this.setSize(1280, 720); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index 09ae37f8..89e8adc5 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -72,13 +72,10 @@ private void initThreadPool() { @Override public void run() { - cameraForMarkerboard = camera; - if (camera instanceof CameraRGBIRDepth) { - cameraForMarkerboard = ((CameraRGBIRDepth) camera).getActingCamera(); - } while (!stop) { + checkSubCamera(); camera.grab(); // If there is no camera for tracking... @@ -92,6 +89,16 @@ public void run() { } } } + + private void checkSubCamera(){ + if(!(camera instanceof CameraRGBIRDepth)){ + return; + } + Camera actAsCam = ((CameraRGBIRDepth) camera).getActingCamera(); + if(actAsCam != null){ + cameraForMarkerboard = actAsCam; + } + } public void compute() { try { diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index e971e39c..530d06fd 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -24,20 +24,15 @@ import org.bytedeco.javacv.ProjectiveDevice; import fr.inria.papart.drawingapp.DrawUtils; import fr.inria.papart.multitouch.TouchInput; -import fr.inria.papart.multitouch.TouchPoint; -import fr.inria.papart.procam.HasCamera; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.HasExtrinsics; -import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.ProjectiveDeviceP; import fr.inria.papart.procam.Screen; -import java.util.ArrayList; import processing.core.PApplet; import processing.core.PImage; import processing.core.PMatrix3D; import processing.core.PVector; import processing.opengl.PShader; -import toxi.geom.Plane; import toxi.geom.Ray3D; import toxi.geom.ReadonlyVec3D; import toxi.geom.Vec3D; From e97cb3fd942f74b82e01b7984db2141bde335b3e Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 22 Nov 2016 15:56:51 +0100 Subject: [PATCH 34/99] updated to newer versions of JavaCPP. --- papart/pom.xml | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/papart/pom.xml b/papart/pom.xml index 46e9de6e..10567805 100755 --- a/papart/pom.xml +++ b/papart/pom.xml @@ -77,22 +77,22 @@ org.bytedeco.javacpp-presets ffmpeg - 2.7.1-1.0 + 3.1.2-1.2 org.bytedeco.javacpp-presets flycapture - 2.7.3.19-1.0 + 2.9.3.43-1.2 org.bytedeco.javacpp-presets libdc1394 - 2.2.3-1.0 + 2.2.4-1.2 org.bytedeco.javacpp-presets videoinput - 0.200-1.0 + 0.200-1.2 @@ -138,6 +138,20 @@ runtime + + org.bytedeco.javacpp-presets librealsense From d4e118aaf166c4d7b8dc9b1dc175fb1128c14600 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 22 Nov 2016 15:57:13 +0100 Subject: [PATCH 35/99] new example of calibrations. Some S300 are fake. --- .../calibration/calibration-SR300-IR.yaml | 57 +++++++++++++++ .../calibration/saved/camera-SR300-720p.yaml | 71 +++++++++++++++++++ .../calibration/saved/camera-SR300-IR.yaml | 57 +++++++++++++++ .../calibration/saved/camera-sr300-1080p.yaml | 71 +++++++++++++++++++ .../data/calibration/saved/projector-P3B.xml | 6 ++ 5 files changed, 262 insertions(+) create mode 100644 papart/data/calibration/calibration-SR300-IR.yaml create mode 100644 papart/data/calibration/saved/camera-SR300-720p.yaml create mode 100644 papart/data/calibration/saved/camera-SR300-IR.yaml create mode 100644 papart/data/calibration/saved/camera-sr300-1080p.yaml create mode 100644 papart/data/calibration/saved/projector-P3B.xml diff --git a/papart/data/calibration/calibration-SR300-IR.yaml b/papart/data/calibration/calibration-SR300-IR.yaml new file mode 100644 index 00000000..a95d8de1 --- /dev/null +++ b/papart/data/calibration/calibration-SR300-IR.yaml @@ -0,0 +1,57 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + [] +Camera 0: + imageWidth: 640 + imageHeight: 480 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 5.0108531316129177e+02, 0., 3.1123937785847426e+02, 0., + 5.0098158746553992e+02, 2.2758792366760716e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 1.9267176092789367e-02, 1.1415116817508220e-01, + -4.7560735699466936e-03, 7.1324162329464906e-04 ] + extrParams: !!opencv-matrix + rows: 6 + cols: 6 + dt: d + data: [ -2.7616393151085489e-01, 4.0493829044650781e-01, + -2.9972920623529213e+00, 1.8330924409745330e+02, + 8.4584482716149935e+01, 5.1673274829395302e+02, + -7.6224613024282600e-02, 1.4294486777997414e-01, + -3.0971407865344642e+00, 1.2294785388182116e+02, + 1.9530751459804006e+02, 4.7152663287301186e+02, + -4.1274348016859669e-01, 5.9670753980057251e-02, + -4.4319894409097532e-02, -2.1691112395714833e+02, + -1.0398322427487786e+02, 4.5226914043088146e+02, + -2.5896132099457447e-01, 2.2677976066895894e-02, + -1.5674292653338202e+00, -1.3191801607264307e+02, + 2.0840876104642425e+02, 4.6239150130365539e+02, + -2.7470112720277079e-02, 2.0402533655250372e-02, + -3.0876816059789696e+00, 1.3209886657743695e+02, + 2.1047029210777495e+02, 4.4397170029289146e+02, + -3.2396505058535377e-02, 5.4303790186440833e-02, + -3.1005852646843128e+00, 1.5719446710895525e+02, + 1.9918046885957739e+02, 4.4189906215675313e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 6 + dt: d + data: [ 3.5962951144938232e-01, 4.0430700385527379e-01, + 4.7774842849831095e-01, 4.9068333246640189e-01, + 3.8831823927167580e-01, 4.4406742945905525e-01 ] + avgReprojErr: 4.3133841633122860e-01 + maxReprojErr: 9.6511574460593097e-01 + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. diff --git a/papart/data/calibration/saved/camera-SR300-720p.yaml b/papart/data/calibration/saved/camera-SR300-720p.yaml new file mode 100644 index 00000000..3177fe71 --- /dev/null +++ b/papart/data/calibration/saved/camera-SR300-720p.yaml @@ -0,0 +1,71 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + [] +Camera 0: + imageWidth: 1280 + imageHeight: 720 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 6.9476211e+02, 0., 4.662133e+02, 0., + 6.9476211e+02, 2.81446e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 1.2177352964304565e-01, -2.6007913105329256e-01, + -5.9578551006836851e-03, -1.4334539897586079e-03 ] + extrParams: !!opencv-matrix + rows: 10 + cols: 6 + dt: d + data: [ -1.7607844755616370e-01, -1.2820713376722212e-01, + 1.5460774537187465e+00, 3.9691618786981451e+01, + -2.0418669774626716e+02, 6.4351403964187080e+02, + -1.7811130302287448e-01, -1.4706364694033458e-01, + 1.5843252636738345e+00, 4.5596623077623697e+01, + -2.2165788108081981e+02, 6.3827216502127044e+02, + 2.4781484476754240e-01, -6.7208474024433540e-01, + 3.0240918432584216e+00, 3.0597905812808028e+02, + 8.7979651732451387e+01, 6.0729733866327001e+02, + -1.2602515731264630e-02, 1.0104651192342044e-01, + -1.7992790663995890e+00, -1.1842522426386454e+02, + 3.2234544947681246e+02, 7.6469853273604872e+02, + 5.1147621677178085e-03, 1.7371891574406548e-01, + -1.8097693911394694e+00, -8.9179918593347736e+01, + 2.6838940269947079e+02, 7.7410825633252318e+02, + -1.1794349372064081e-01, 1.9322399324060713e-01, + -3.0305507980128330e+00, 2.1837440238945572e+02, + 3.0684021053236972e+02, 7.1485559885164059e+02, + -1.3753434037022760e-01, 1.8470375069357825e-01, + -3.1243272857107169e+00, 2.5517623452792574e+02, + 3.2064272373774821e+02, 7.0213260954811710e+02, + 1.0433239555743316e-01, -2.8159889631200224e-01, + 3.1030888317227983e+00, 2.3864305820545394e+02, + 4.8062175037148895e+00, 5.9512481887669003e+02, + 1.1115187521034058e-01, -1.7039573484898449e-01, + 3.1095106342789514e+00, 2.4488515071801882e+02, + 6.2753077906758733e+01, 5.9891939499910268e+02, + -1.1577350344439789e-01, 7.9903129906887749e-02, + -3.1169111581000437e+00, 2.4176659799043321e+02, + 1.1668424414898595e+02, 5.9571494908538386e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 10 + dt: d + data: [ 4.1340083848000114e-01, 3.9111806492508300e-01, + 9.7959596925818160e-01, 5.7347563761640497e-01, + 5.0807880449963017e-01, 7.0972237707286367e-01, + 8.7904455182929297e-01, 6.3547446324029178e-01, + 5.8412414368759535e-01, 5.0332289266443064e-01 ] + avgReprojErr: 6.3779671784126868e-01 + maxReprojErr: 2.4731437660509830e+00 + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. diff --git a/papart/data/calibration/saved/camera-SR300-IR.yaml b/papart/data/calibration/saved/camera-SR300-IR.yaml new file mode 100644 index 00000000..a95d8de1 --- /dev/null +++ b/papart/data/calibration/saved/camera-SR300-IR.yaml @@ -0,0 +1,57 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + [] +Camera 0: + imageWidth: 640 + imageHeight: 480 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 5.0108531316129177e+02, 0., 3.1123937785847426e+02, 0., + 5.0098158746553992e+02, 2.2758792366760716e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 1.9267176092789367e-02, 1.1415116817508220e-01, + -4.7560735699466936e-03, 7.1324162329464906e-04 ] + extrParams: !!opencv-matrix + rows: 6 + cols: 6 + dt: d + data: [ -2.7616393151085489e-01, 4.0493829044650781e-01, + -2.9972920623529213e+00, 1.8330924409745330e+02, + 8.4584482716149935e+01, 5.1673274829395302e+02, + -7.6224613024282600e-02, 1.4294486777997414e-01, + -3.0971407865344642e+00, 1.2294785388182116e+02, + 1.9530751459804006e+02, 4.7152663287301186e+02, + -4.1274348016859669e-01, 5.9670753980057251e-02, + -4.4319894409097532e-02, -2.1691112395714833e+02, + -1.0398322427487786e+02, 4.5226914043088146e+02, + -2.5896132099457447e-01, 2.2677976066895894e-02, + -1.5674292653338202e+00, -1.3191801607264307e+02, + 2.0840876104642425e+02, 4.6239150130365539e+02, + -2.7470112720277079e-02, 2.0402533655250372e-02, + -3.0876816059789696e+00, 1.3209886657743695e+02, + 2.1047029210777495e+02, 4.4397170029289146e+02, + -3.2396505058535377e-02, 5.4303790186440833e-02, + -3.1005852646843128e+00, 1.5719446710895525e+02, + 1.9918046885957739e+02, 4.4189906215675313e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 6 + dt: d + data: [ 3.5962951144938232e-01, 4.0430700385527379e-01, + 4.7774842849831095e-01, 4.9068333246640189e-01, + 3.8831823927167580e-01, 4.4406742945905525e-01 ] + avgReprojErr: 4.3133841633122860e-01 + maxReprojErr: 9.6511574460593097e-01 + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. diff --git a/papart/data/calibration/saved/camera-sr300-1080p.yaml b/papart/data/calibration/saved/camera-sr300-1080p.yaml new file mode 100644 index 00000000..5bf0636e --- /dev/null +++ b/papart/data/calibration/saved/camera-sr300-1080p.yaml @@ -0,0 +1,71 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + [] +Camera 0: + imageWidth: 1920 + imageHeight: 1080 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 6.9476211e+02, 0., 4.662133e+02, 0., + 6.9476211e+02, 2.81446e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 1.2177352964304565e-01, -2.6007913105329256e-01, + -5.9578551006836851e-03, -1.4334539897586079e-03 ] + extrParams: !!opencv-matrix + rows: 10 + cols: 6 + dt: d + data: [ -1.7607844755616370e-01, -1.2820713376722212e-01, + 1.5460774537187465e+00, 3.9691618786981451e+01, + -2.0418669774626716e+02, 6.4351403964187080e+02, + -1.7811130302287448e-01, -1.4706364694033458e-01, + 1.5843252636738345e+00, 4.5596623077623697e+01, + -2.2165788108081981e+02, 6.3827216502127044e+02, + 2.4781484476754240e-01, -6.7208474024433540e-01, + 3.0240918432584216e+00, 3.0597905812808028e+02, + 8.7979651732451387e+01, 6.0729733866327001e+02, + -1.2602515731264630e-02, 1.0104651192342044e-01, + -1.7992790663995890e+00, -1.1842522426386454e+02, + 3.2234544947681246e+02, 7.6469853273604872e+02, + 5.1147621677178085e-03, 1.7371891574406548e-01, + -1.8097693911394694e+00, -8.9179918593347736e+01, + 2.6838940269947079e+02, 7.7410825633252318e+02, + -1.1794349372064081e-01, 1.9322399324060713e-01, + -3.0305507980128330e+00, 2.1837440238945572e+02, + 3.0684021053236972e+02, 7.1485559885164059e+02, + -1.3753434037022760e-01, 1.8470375069357825e-01, + -3.1243272857107169e+00, 2.5517623452792574e+02, + 3.2064272373774821e+02, 7.0213260954811710e+02, + 1.0433239555743316e-01, -2.8159889631200224e-01, + 3.1030888317227983e+00, 2.3864305820545394e+02, + 4.8062175037148895e+00, 5.9512481887669003e+02, + 1.1115187521034058e-01, -1.7039573484898449e-01, + 3.1095106342789514e+00, 2.4488515071801882e+02, + 6.2753077906758733e+01, 5.9891939499910268e+02, + -1.1577350344439789e-01, 7.9903129906887749e-02, + -3.1169111581000437e+00, 2.4176659799043321e+02, + 1.1668424414898595e+02, 5.9571494908538386e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 10 + dt: d + data: [ 4.1340083848000114e-01, 3.9111806492508300e-01, + 9.7959596925818160e-01, 5.7347563761640497e-01, + 5.0807880449963017e-01, 7.0972237707286367e-01, + 8.7904455182929297e-01, 6.3547446324029178e-01, + 5.8412414368759535e-01, 5.0332289266443064e-01 ] + avgReprojErr: 6.3779671784126868e-01 + maxReprojErr: 2.4731437660509830e+00 + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. diff --git a/papart/data/calibration/saved/projector-P3B.xml b/papart/data/calibration/saved/projector-P3B.xml new file mode 100644 index 00000000..2a191def --- /dev/null +++ b/papart/data/calibration/saved/projector-P3B.xml @@ -0,0 +1,6 @@ + + + + + + From 283cf50476dc7f8445daae3acf4c5ec457152b25 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 22 Nov 2016 15:58:02 +0100 Subject: [PATCH 36/99] New TouchInput initialization, no TouchInputKinectOnly necessary. --- .../src/fr/inria/papart/apps/MultiTouch.java | 2 +- .../depthcam/devices/DepthCameraDevice.java | 23 ++----- .../papart/depthcam/devices/RealSense.java | 2 - .../papart/multitouch/KinectTouchInput.java | 1 + papart/src/fr/inria/papart/procam/Papart.java | 64 ++++++++++--------- 5 files changed, 41 insertions(+), 51 deletions(-) diff --git a/papart/src/fr/inria/papart/apps/MultiTouch.java b/papart/src/fr/inria/papart/apps/MultiTouch.java index dbc1ddb3..cb468c68 100644 --- a/papart/src/fr/inria/papart/apps/MultiTouch.java +++ b/papart/src/fr/inria/papart/apps/MultiTouch.java @@ -47,7 +47,7 @@ public void setup() { Papart papart = Papart.projection2D(this); // arguments are 2D and 3D precision. - papart.loadTouchInputKinectOnly(); + papart.loadTouchInput(); touchInput = (KinectTouchInput) papart.getTouchInput(); frameRate(200); } diff --git a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java index ec4ad0a7..a6af86a7 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java @@ -60,11 +60,11 @@ public DepthCameraDevice(PApplet parent) { public CameraRGBIRDepth getMainCamera() { return camera; } - + public Camera getOtherCamera() { return anotherCamera; } - + public SubCamera getColorCamera() { return camera.getColorCamera(); } @@ -81,7 +81,8 @@ public SubDepthCamera getDepthCamera() { abstract public Camera.Type type(); - /*** + /** + * * * init a depth camera, depth only as there is another color camera. */ protected final void initDefaultCamera() { @@ -107,8 +108,6 @@ public void setStereoCalibration(String fileName) { } public void setStereoCalibration(PMatrix3D matrix) { - System.out.println("DepthCameraDevice: Call to setStereoCalibration..."); - matrix.print(); KinectRGBIRCalibration.set(matrix); KinectRGBIRCalibrationInv = KinectRGBIRCalibration.get(); KinectRGBIRCalibrationInv.invert(); @@ -128,16 +127,6 @@ public PMatrix3D getStereoCalibrationInv() { return KinectRGBIRCalibrationInv; } - public void setExtrinsics(PMatrix3D extr) { - getColorCamera().setExtrinsics(extr); - - // Get color -> Depth - PMatrix3D stereo = getStereoCalibrationInv(); - PMatrix3D tmp = extr.get(); - tmp.apply(stereo); - getDepthCamera().setExtrinsics(tmp); - } - public int findColorOffset(Vec3D v) { return findColorOffset(v.x, v.y, v.z); } @@ -164,10 +153,10 @@ public int findColorOffset(float x, float y, float z) { // Ideally use a calibration... // kinectCalibRGB.getExtrinsics().mult(vt, vt2); getStereoCalibration().mult(vt, vt2); - + // TODO: find a solution for this... return getColorCamera().getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); // return getColorCamera.getProjectiveDevice().worldToPixel(vt2.x, vt2.y, vt2.z); } - + } diff --git a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java index 568d7512..935caa76 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/RealSense.java +++ b/papart/src/fr/inria/papart/depthcam/devices/RealSense.java @@ -20,9 +20,7 @@ */ package fr.inria.papart.depthcam.devices; -import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.camera.Camera; -import fr.inria.papart.procam.camera.CameraRGBIRDepth; import fr.inria.papart.procam.camera.CameraRealSense; import processing.core.PApplet; diff --git a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java index 301a08ff..02c21f0f 100755 --- a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java @@ -346,6 +346,7 @@ public PVector projectPointToScreen(Screen screen, return out; } + // PaperScreen coordinates as computed here. private PVector projectPointToScreen(Screen screen, BaseDisplay display, Vec3D pKinect, Vec3D pNorm) { diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 071d7b0b..e0d5bc68 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -581,8 +581,8 @@ public void initCamera(String cameraNo, Camera.Type cameraType, String cameraFor cameraTracking = CameraFactory.createCamera(cameraType, cameraNo, cameraFormat); cameraTracking.setParent(applet); cameraTracking.setCalibration(cameraCalib); - - System.out.println("Starting First tracking camera: " + cameraTracking); + + System.out.println("Starting First tracking camera: " + cameraTracking); // TEST: no more start here... // cameraTracking.start(); // loadTracking(cameraCalib); @@ -633,8 +633,8 @@ private void checkInitialization() { this.applet.registerMethod("stop", this); } - /** - * Only for .cfg marker tracking. + /** + * Only for .cfg marker tracking. */ private void setARToolkitCalib() { // TODO: warning −> used only for .cfg files. @@ -648,23 +648,6 @@ private void setARToolkitCalib() { } } - /** - * Touch input when the camera tracking the markers is a Kinect. - * - */ - public void loadTouchInputKinectOnly() { - - loadDefaultDepthCamera(); - loadDefaultTouchKinect(); - - // Specific ? - PMatrix3D extr = depthCameraDevice.getStereoCalibration(); - depthCameraDevice.setExtrinsics(extr); - - // Specific - ((KinectTouchInput) this.touchInput).useRawDepth(); - } - /** * * * Touch input with a Kinect calibrated with the display area. @@ -673,10 +656,29 @@ public void loadTouchInputKinectOnly() { public void loadTouchInput() { loadDefaultDepthCamera(); loadDefaultTouchKinect(); + updateDepthCameraDeviceExtrinsics(); + } + + private void updateDepthCameraDeviceExtrinsics(){ + // Check if depthCamera is the same as the camera ! + if (cameraTracking instanceof CameraRGBIRDepth + && cameraTracking == depthCameraDevice.getMainCamera()) { - // setExtrinsics must after the kinect stereo calibration is loaded - PMatrix3D extr = (Papart.getPapart()).loadCalibration(Papart.kinectTrackingCalib); - depthCameraDevice.setExtrinsics(extr); + // No extrinsic used, it is already in the camera... + depthCameraDevice.getDepthCamera().setExtrinsics(depthCameraDevice.getStereoCalibration()); + + // Specific + ((KinectTouchInput) this.touchInput).useRawDepth(); + + System.out.println("Papart: Using Touchextrinsics from the device."); + } else { + // Two different cameras + // setExtrinsics must after the kinect stereo calibration is loaded + PMatrix3D extr = (Papart.getPapart()).loadCalibration(Papart.kinectTrackingCalib); + extr.invert(); + depthCameraDevice.getDepthCamera().setExtrinsics(extr); + System.out.println("Papart: Using Touchextrinsics from the calibrated File."); + } } private boolean useKinectOne = true; @@ -820,20 +822,20 @@ public void startTracking() { } public void startCameraThread() { - + System.out.println("Starting thread for camera: " + cameraTracking); cameraTracking.start(); - + // Calibration might be loaded from the device and require an update. - if(arDisplay != null && !(arDisplay instanceof ProjectorDisplay)){ + if (arDisplay != null && !(arDisplay instanceof ProjectorDisplay)) { System.out.println("Papart: Reload calibration!"); arDisplay.reloadCalibration(); } - + cameraTracking.setThread(); - - if(depthCameraDevice != null && - cameraTracking != depthCameraDevice.getMainCamera()){ + + if (depthCameraDevice != null + && cameraTracking != depthCameraDevice.getMainCamera()) { depthCameraDevice.getMainCamera().start(); depthCameraDevice.getMainCamera().setThread(); } From 8f7d9e742daaa2ced297aa7ee6b08bb063cb7cee Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 22 Nov 2016 18:11:09 +0100 Subject: [PATCH 37/99] Calib working good again. --- .../papart/calibration/CalibrationExtrinsic.java | 5 +---- .../papart/calibration/CalibrationPopup.java | 8 +++++--- .../papart/procam/camera/ProjectorAsCamera.java | 1 + .../inria/papart/procam/camera/TrackedView.java | 5 ----- .../inria/papart/procam/display/ARDisplay.java | 2 -- .../papart/procam/display/ProjectorDisplay.java | 16 +++++++++++----- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index ab16a4b8..bcf6fcdd 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -45,7 +45,6 @@ public class CalibrationExtrinsic { private final Papart papart; // Kinect - private Camera.Type depthCameraType; private DepthCameraDevice depthCameraDevice; public CalibrationExtrinsic(PApplet parent) { @@ -58,12 +57,10 @@ void setProjector(ProjectorDisplay projector) { } public void setDefaultDepthCamera() { - this.depthCameraType = papart.getDepthCameraType(); this.depthCameraDevice = papart.getDepthCameraDevice(); } - public void setDepthCamera(DepthCameraDevice device, Camera.Type type) { - this.depthCameraType = type; + public void setDepthCamera(DepthCameraDevice device) { this.depthCameraDevice = device; } diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index d2cdd789..5d171bee 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -78,6 +78,8 @@ public class CalibrationPopup extends PApplet { static final String PROJECTOR_ARTOOLKIT_NAME = "projectorCalibration.cal"; static final String KINECT_ARTOOLKIT_NAME = "kinectCalibration.cal"; + private ARToolKitPlus.MultiTracker projectorTracker = null; + // calibration App / board private CalibrationApp calibrationApp; private MarkerBoard board; @@ -159,7 +161,7 @@ public void setup() { System.out.println("Calibration with a Depth and color camera in DIFFERENT devices."); useExternalColorCamera = true; } - calibrationExtrinsic.setDepthCamera(depthCameraDevice, depthCameraType); + calibrationExtrinsic.setDepthCamera(depthCameraDevice); } else { System.out.println("Calibration with a color camera."); } @@ -195,16 +197,16 @@ private void initProjectorAsCamera() { projectorAsCamera.setCalibration(Papart.projectorCalib); projectorAsCamera.setParent(this); + // This is used only for tracking with .cfg markers String ARToolkitCalibFile = Papart.calibrationFolder + "projector.cal"; ProjectorAsCamera.convertARProjParams(this, projectorAsCamera.getCalibrationFile(), ARToolkitCalibFile); projectorAsCamera.setCalibrationARToolkit(ARToolkitCalibFile); + projectorAsCamera.trackMarkerBoard(board); initMarkerTrackingFromProjector(); } - private ARToolKitPlus.MultiTracker projectorTracker = null; - private void initMarkerTrackingFromProjector() { projectorTracker = DetectedMarker.createDetector(projector.getWidth(), projector.getHeight()); } diff --git a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java index abe617ee..fc454db1 100644 --- a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java @@ -37,6 +37,7 @@ public void setImage(IplImage image) { this.currentImage = image; } + @Override public void setCalibration(String fileName) { try { this.calibrationFile = fileName; diff --git a/papart/src/fr/inria/papart/procam/camera/TrackedView.java b/papart/src/fr/inria/papart/procam/camera/TrackedView.java index e3f3e11a..dd514109 100755 --- a/papart/src/fr/inria/papart/procam/camera/TrackedView.java +++ b/papart/src/fr/inria/papart/procam/camera/TrackedView.java @@ -87,17 +87,12 @@ public TrackedView() { allocateMemory(); } - /** - * - * @param corners - */ public void setCorners(PVector[] corners) { if (corners.length == 4) { for (int i = 0; i < 4; i++) { screenPixelCoordinates[i] = corners[i]; } } - } public void init() { diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index 530d06fd..197c42ee 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -410,9 +410,7 @@ public void loadModelView() { // Setting the projector negative because ARToolkit provides neg Z values this.graphics.scale(1, 1, -1); - // TODO: check ! this.graphics.scale(1f / quality); - } public void endDraw() { diff --git a/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java b/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java index b6a31e3f..fcaf5665 100755 --- a/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java @@ -269,26 +269,32 @@ void projectCornersImage() { g.ellipseMode(PApplet.CENTER); g.noStroke(); - // corner 4 + // corner 4 Yellow 0, 0 g.fill(255, 255, 50); g.translate(0, 0); drawEllipses(g); - // corner 3 + // corner 3 green x, 0 g.translate(g.width, 0); g.fill(50, 255, 50); drawEllipses(g); - // Corner 2 + // Corner 2 Red x,y g.fill(255, 50, 55); g.translate(0, g.height); drawEllipses(g); - // Corner 1 - g.fill(255); + // Corner 1 White 0,y + g.fill(255); g.translate(-g.width, 0); drawEllipses(g); + + // In TrackedView + // 0 is -> 0, h (white) + // 1 is -> w, h (Red) + // 2 is -> w, 0 (Green) + // 3 is -> 0, 0 (Yellow) } void drawEllipses(PGraphicsOpenGL g) { From 7167e39ecbb023ab79590cd538ce0bf4ff6c77b4 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 22 Nov 2016 18:33:08 +0100 Subject: [PATCH 38/99] added P3D custom calibrations. --- .../saved/projector-p3B-Facing.yaml | 260 ++++++++++++++++++ .../saved/projector-p3B-default.yaml | 260 ++++++++++++++++++ 2 files changed, 520 insertions(+) create mode 100644 papart/data/calibration/saved/projector-p3B-Facing.yaml create mode 100644 papart/data/calibration/saved/projector-p3B-default.yaml diff --git a/papart/data/calibration/saved/projector-p3B-Facing.yaml b/papart/data/calibration/saved/projector-p3B-Facing.yaml new file mode 100644 index 00000000..0c149425 --- /dev/null +++ b/papart/data/calibration/saved/projector-p3B-Facing.yaml @@ -0,0 +1,260 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + - Projector 0 +Camera 0: + imageWidth: 640 + imageHeight: 480 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 5.4330694194797138e+02, 0., 3.2813246387174814e+02, 0., + 5.4391399823499341e+02, 2.2636239019263962e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ -1.0915791546794845e-01, 1.5165369264909634e-01, + 1.0733567701286893e-03, 6.4020869566235419e-04 ] + extrParams: !!opencv-matrix + rows: 20 + cols: 6 + dt: d + data: [ -8.0036463591021054e-02, -5.1752398217073781e-01, + 2.9768503337419818e+00, 3.7832286694793271e+02, + 2.2026516329066774e+02, 8.4450789500099654e+02, + -8.9218514079821370e-02, -5.5382935622292240e-01, + 2.9891463354234942e+00, 3.0416302139962892e+02, + 1.0318862964340526e+02, 7.9776161594924565e+02, + 3.7900967244023026e-01, 2.5055166025157832e-01, + -1.5842792758839130e+00, -3.5435094234466175e+02, + 3.1639535217814080e+02, 8.4008597006090065e+02, + 3.6674461337280007e-01, -5.8683935324790548e-02, + -1.2613060896947650e-01, -2.7047065457899384e+02, + -1.5146552368170833e+02, 6.5126102800520198e+02, + 3.4174885293696600e-01, -2.6444271258025720e-01, + 1.6776171376626183e+00, 3.1092825576036705e+02, + -1.5180948040185285e+02, 6.4792324403413454e+02, + 4.0217885661629404e-01, -6.3173599767317887e-02, + -1.1855994553107792e-01, -2.6528290949597169e+02, + -1.6433175030942974e+02, 6.4579213325101989e+02, + 3.7729500397104448e-01, 2.5411839785800644e-01, + -1.5920999419516968e+00, -9.1685413438351574e+01, + 2.2014421305541984e+02, 8.2397961797907317e+02, + 1.8543654196331094e-01, 4.7172455712937283e-01, + -2.9477266488815732e+00, 6.0483407120981120e+01, + 2.2036019264521576e+02, 8.1012569537519346e+02, + 3.9872116159787435e-01, -2.2595918644259921e-01, + 1.5821452242004439e+00, 2.1942353356866812e+02, + -1.5294269447300303e+02, 6.2143273701106045e+02, + 2.1762656492494975e-01, -1.7791004328661417e-01, + 3.0308592261175693e-01, -2.4388389104303178e+02, + -1.3297246896568512e+02, 6.5280185021944601e+02, + -5.8293633204356592e-02, -5.9098581210046991e-02, + -8.9530762460421812e-02, -3.2321798044797049e+02, + -1.9618498443549377e+01, 6.8277496563927434e+02, + 3.5479985545926344e-02, -3.5611413591438046e-02, + -1.3232314047767793e-01, -1.2625821191982124e+02, + -2.5618913672336170e+01, 7.0385601784256005e+02, + 3.9211464190881729e-01, 2.1549658730119634e-01, + -1.4130773420718574e+00, -8.5523550079182243e+01, + 2.2984725360266845e+02, 8.2839582713436994e+02, + -2.1486395613228168e-01, -3.7473924531076987e-02, + -1.2192808652877701e-01, -2.5656431082473205e+02, + -3.8123930453167198e+01, 6.7578066921389507e+02, + -7.6289590058333828e-02, 2.9437340489530678e-01, + -7.8882840818867728e-01, -1.8217958163924104e+02, + 1.1097414929505841e+02, 7.4697035931731625e+02, + 8.7261956598297750e-03, -2.5237562752235082e-01, + 4.0351738841864915e-01, -2.3003814892692472e+02, + -1.4085825565455085e+02, 6.4516413702574084e+02, + -1.0555940811495185e-01, -4.6016602388014177e-01, + 3.0413421435923813e+00, 1.7441295323315637e+02, + 1.8734846533607646e+02, 7.9752317516395408e+02, + -9.1039990089083159e-02, -4.7519483656498479e-01, + 3.0032666117681273e+00, 3.2194871941055681e+02, + 1.5780707108135309e+02, 8.0321966331036128e+02, + -9.9552946449581819e-02, 1.0618837568091075e-01, + 3.0712556287925636e+00, 2.6929107633919546e+02, + 1.6439659778260724e+02, 6.6777875570616368e+02, + 1.5338089670609836e-01, 2.7372008867012287e-01, + -3.0935183198006868e+00, 1.7108269571471331e+02, + 2.0605011286974738e+02, 7.6112262118424530e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 20 + dt: d + data: [ 3.5773324527368561e-01, 4.4413915970770379e-01, + 4.5170444688059863e-01, 3.8137608802180739e-01, + 4.8504427729700922e-01, 4.0836310886972477e-01, + 5.3689523918086579e-01, 4.2198860090040929e-01, + 4.0169225895790017e-01, 3.7113508446024807e-01, + 3.6899942828720822e-01, 4.6215828398327491e-01, + 5.8726361927033932e-01, 3.2707933630218655e-01, + 2.3008301964905439e-01, 3.9189981831041298e-01, + 4.9289776074319019e-01, 4.5883509180190452e-01, + 3.2354694741349549e-01, 4.6654356860922008e-01 ] + avgReprojErr: 4.2450029623819413e-01 + maxReprojErr: 1.0800357572306361e+00 + R: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + T: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ 0., 0., 0. ] + E: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + F: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. +Projector 0: + imageWidth: 1280 + imageHeight: 800 + responseGamma: 2.2000000000000002e+00 + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1.01525e+03, 0., 6.336e+02, 0., + 1.01525e+03, 3.6e+1, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ -3.9725914252164513e-02, 1.5719194938912929e-02, + 1.2401622635113425e-03, -1.6059312696931278e-03 ] + extrParams: !!opencv-matrix + rows: 20 + cols: 6 + dt: d + data: [ -1.6565501174976432e-01, 7.6844179042392380e-03, + -9.9088261519558376e-03, -3.6368977632228655e+02, + -4.8275957463821578e+02, 7.3008924531529851e+02, + -1.8988262046868867e-01, 9.6925486362167794e-03, + 9.6038258946726483e-03, -3.0176761764663132e+02, + -3.5138605896557544e+02, 7.0773201856215189e+02, + -1.4939186918764780e-01, 1.8644971347895634e-01, + 1.6372090749144861e+00, 3.7703726325803393e+02, + -4.9800619130231672e+02, 7.4541489911049553e+02, + 1.6143781336867585e-02, 2.9449535152621459e-01, + 3.1123367778616138e+00, 2.4339756937867477e+02, + -1.3063683809320253e+01, 6.3668744375635754e+02, + -6.0893308205941091e-02, -2.3284096812199140e-01, + -1.3365799371822504e+00, -3.3476586958192604e+02, + -7.6178033792564250e+01, 6.0799900862161849e+02, + 1.4005735885903960e-02, 3.5105039187963927e-01, + 3.1125022782761307e+00, 2.3693036304879922e+02, + -2.8568142368075439e-01, 6.3394886470640097e+02, + -1.5741993921112510e-01, 1.8478387897529949e-01, + 1.6305932554102116e+00, 1.0406075200986754e+02, + -4.2788257675892862e+02, 7.3209268211894357e+02, + -1.4866186062953998e-01, 5.0660440509027509e-02, + 2.6724071345270300e-01, -4.6583844679371246e+01, + -4.4200775191882667e+02, 7.1114047883908177e+02, + -2.2237444218611055e-02, -2.9190586569261168e-01, + -1.4315121305171044e+00, -2.4288601022040885e+02, + -6.0107906630516347e+01, 5.8587667480462164e+02, + -1.3383891526480721e-01, -7.3567680347234238e-02, + -2.7119893022687500e+00, 2.1893984049240541e+02, + -3.4745132969778446e+01, 6.3460903638692776e+02, + -4.8360883487703767e-02, 3.7555613593326970e-01, + -3.0885382600450790e+00, 3.1021668918418771e+02, + -1.4279947203664204e+02, 6.4817735443900926e+02, + 1.4513043987067846e-02, -2.2256963064512844e-01, + 3.1170802497860288e+00, 1.1309297113627383e+02, + -1.6178733846103702e+02, 6.5795222209566839e+02, + -1.4380881311468280e-01, 2.0862689738926013e-01, + 1.8111838979482744e+00, 9.8806599586769153e+01, + -4.3844118798338627e+02, 7.3383986725458055e+02, + 3.0112585551035010e-02, -6.0810321767227582e-01, + 3.0803437007890562e+00, 2.4203276452222789e+02, + -1.3041657973644365e+02, 6.4059315652748614e+02, + -3.2377127658349375e-01, -3.5699426326638739e-01, + 2.3978157304076744e+00, 1.8322530323931167e+02, + -2.9698646099132424e+02, 6.8043893394560678e+02, + -2.3099316037654685e-01, 1.9230664157044738e-01, + -2.5882825467021715e+00, 2.0475842471165492e+02, + -2.7455780575134913e+01, 6.2761279522019368e+02, + -1.2263756600610767e-01, 2.1292870578208025e-02, + 4.9730197474780739e-02, -1.6313097669984086e+02, + -4.2060277859646811e+02, 7.0054840801594992e+02, + -1.3400047086022487e-01, 9.4333004637413027e-03, + 1.0288980150924642e-02, -3.1394483299575592e+02, + -4.0800556941075212e+02, 7.0208214890871852e+02, + 2.4372974097728858e-01, 3.5302527318755175e-02, + 5.3809308751254725e-02, -2.5636153627376171e+02, + -3.8427551842628026e+02, 5.7115961427673369e+02, + 3.7494708186333641e-04, 4.5800720493244511e-02, + 1.5073060962530443e-01, -1.5671032165501393e+02, + -4.3134746108165967e+02, 6.5951979239585671e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 20 + dt: d + data: [ 4.4838025484459199e-01, 4.4929580640908989e-01, + 3.9203208369363124e-01, 3.4321653025028909e-01, + 4.5930572096873618e-01, 3.7065470302226500e-01, + 4.9213644418001867e-01, 3.6477042080264094e-01, + 7.4682573138073460e-01, 4.4965469127582031e-01, + 4.5630602413518806e-01, 3.7624618412907479e-01, + 6.7498543538669153e-01, 3.7476903570750086e-01, + 3.9868166654567755e-01, 1.9790820877638307e-01, + 4.5666275430331965e-01, 4.3541246901932890e-01, + 2.5419988314055963e-01, 3.2595677631185493e-01 ] + avgReprojErr: 4.3942414533823654e-01 + maxReprojErr: 1.3265849486322991e+00 + R: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ -9.9286711543274231e-01, 1.1570567121908509e-01, + -2.8759150543898930e-02, -1.0848472041738899e-01, + -9.7679914542462176e-01, -1.8464694672181747e-01, + -4.9456612583421052e-02, -1.8020995295895770e-01, + 9.8238404726782047e-01 ] + T: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ 1.1067357202823974e+01, -7.0390837297746913e+01, + -4.3855958230614874e+01 ] + E: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ -1.2764089976276507e+00, -3.0153333043273900e+01, + -7.7248704417973855e+01, 4.4090492740471824e+01, + -3.0799351631285639e+00, -9.6111350564676830e+00, + -7.1089386732617200e+01, -2.6659659806182727e+00, + -4.0679344025381603e+00 ] + F: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ -1.9732341756556793e-08, -4.6562802802395681e-07, + -5.3694600107161258e-04, 6.8150829629382099e-07, + -4.7553532828009189e-08, -2.9357415552722262e-04, + -1.8547824812829414e-03, 3.0152613717838799e-04, + 9.9999999999999989e-01 ] + avgEpipolarErr: 4.5130478957733655e-01 + maxEpipolarErr: 1.6255448850683165e+00 + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. diff --git a/papart/data/calibration/saved/projector-p3B-default.yaml b/papart/data/calibration/saved/projector-p3B-default.yaml new file mode 100644 index 00000000..636f87a2 --- /dev/null +++ b/papart/data/calibration/saved/projector-p3B-default.yaml @@ -0,0 +1,260 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + - Projector 0 +Camera 0: + imageWidth: 640 + imageHeight: 480 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 5.4330694194797138e+02, 0., 3.2813246387174814e+02, 0., + 5.4391399823499341e+02, 2.2636239019263962e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ -1.0915791546794845e-01, 1.5165369264909634e-01, + 1.0733567701286893e-03, 6.4020869566235419e-04 ] + extrParams: !!opencv-matrix + rows: 20 + cols: 6 + dt: d + data: [ -8.0036463591021054e-02, -5.1752398217073781e-01, + 2.9768503337419818e+00, 3.7832286694793271e+02, + 2.2026516329066774e+02, 8.4450789500099654e+02, + -8.9218514079821370e-02, -5.5382935622292240e-01, + 2.9891463354234942e+00, 3.0416302139962892e+02, + 1.0318862964340526e+02, 7.9776161594924565e+02, + 3.7900967244023026e-01, 2.5055166025157832e-01, + -1.5842792758839130e+00, -3.5435094234466175e+02, + 3.1639535217814080e+02, 8.4008597006090065e+02, + 3.6674461337280007e-01, -5.8683935324790548e-02, + -1.2613060896947650e-01, -2.7047065457899384e+02, + -1.5146552368170833e+02, 6.5126102800520198e+02, + 3.4174885293696600e-01, -2.6444271258025720e-01, + 1.6776171376626183e+00, 3.1092825576036705e+02, + -1.5180948040185285e+02, 6.4792324403413454e+02, + 4.0217885661629404e-01, -6.3173599767317887e-02, + -1.1855994553107792e-01, -2.6528290949597169e+02, + -1.6433175030942974e+02, 6.4579213325101989e+02, + 3.7729500397104448e-01, 2.5411839785800644e-01, + -1.5920999419516968e+00, -9.1685413438351574e+01, + 2.2014421305541984e+02, 8.2397961797907317e+02, + 1.8543654196331094e-01, 4.7172455712937283e-01, + -2.9477266488815732e+00, 6.0483407120981120e+01, + 2.2036019264521576e+02, 8.1012569537519346e+02, + 3.9872116159787435e-01, -2.2595918644259921e-01, + 1.5821452242004439e+00, 2.1942353356866812e+02, + -1.5294269447300303e+02, 6.2143273701106045e+02, + 2.1762656492494975e-01, -1.7791004328661417e-01, + 3.0308592261175693e-01, -2.4388389104303178e+02, + -1.3297246896568512e+02, 6.5280185021944601e+02, + -5.8293633204356592e-02, -5.9098581210046991e-02, + -8.9530762460421812e-02, -3.2321798044797049e+02, + -1.9618498443549377e+01, 6.8277496563927434e+02, + 3.5479985545926344e-02, -3.5611413591438046e-02, + -1.3232314047767793e-01, -1.2625821191982124e+02, + -2.5618913672336170e+01, 7.0385601784256005e+02, + 3.9211464190881729e-01, 2.1549658730119634e-01, + -1.4130773420718574e+00, -8.5523550079182243e+01, + 2.2984725360266845e+02, 8.2839582713436994e+02, + -2.1486395613228168e-01, -3.7473924531076987e-02, + -1.2192808652877701e-01, -2.5656431082473205e+02, + -3.8123930453167198e+01, 6.7578066921389507e+02, + -7.6289590058333828e-02, 2.9437340489530678e-01, + -7.8882840818867728e-01, -1.8217958163924104e+02, + 1.1097414929505841e+02, 7.4697035931731625e+02, + 8.7261956598297750e-03, -2.5237562752235082e-01, + 4.0351738841864915e-01, -2.3003814892692472e+02, + -1.4085825565455085e+02, 6.4516413702574084e+02, + -1.0555940811495185e-01, -4.6016602388014177e-01, + 3.0413421435923813e+00, 1.7441295323315637e+02, + 1.8734846533607646e+02, 7.9752317516395408e+02, + -9.1039990089083159e-02, -4.7519483656498479e-01, + 3.0032666117681273e+00, 3.2194871941055681e+02, + 1.5780707108135309e+02, 8.0321966331036128e+02, + -9.9552946449581819e-02, 1.0618837568091075e-01, + 3.0712556287925636e+00, 2.6929107633919546e+02, + 1.6439659778260724e+02, 6.6777875570616368e+02, + 1.5338089670609836e-01, 2.7372008867012287e-01, + -3.0935183198006868e+00, 1.7108269571471331e+02, + 2.0605011286974738e+02, 7.6112262118424530e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 20 + dt: d + data: [ 3.5773324527368561e-01, 4.4413915970770379e-01, + 4.5170444688059863e-01, 3.8137608802180739e-01, + 4.8504427729700922e-01, 4.0836310886972477e-01, + 5.3689523918086579e-01, 4.2198860090040929e-01, + 4.0169225895790017e-01, 3.7113508446024807e-01, + 3.6899942828720822e-01, 4.6215828398327491e-01, + 5.8726361927033932e-01, 3.2707933630218655e-01, + 2.3008301964905439e-01, 3.9189981831041298e-01, + 4.9289776074319019e-01, 4.5883509180190452e-01, + 3.2354694741349549e-01, 4.6654356860922008e-01 ] + avgReprojErr: 4.2450029623819413e-01 + maxReprojErr: 1.0800357572306361e+00 + R: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + T: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ 0., 0., 0. ] + E: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + F: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. +Projector 0: + imageWidth: 1280 + imageHeight: 800 + responseGamma: 2.2000000000000002e+00 + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1.01525e+03, 0., 6.336e+02, 0., + 1.01525e+03, 7.6e+2, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ -3.9725914252164513e-02, 1.5719194938912929e-02, + 1.2401622635113425e-03, -1.6059312696931278e-03 ] + extrParams: !!opencv-matrix + rows: 20 + cols: 6 + dt: d + data: [ -1.6565501174976432e-01, 7.6844179042392380e-03, + -9.9088261519558376e-03, -3.6368977632228655e+02, + -4.8275957463821578e+02, 7.3008924531529851e+02, + -1.8988262046868867e-01, 9.6925486362167794e-03, + 9.6038258946726483e-03, -3.0176761764663132e+02, + -3.5138605896557544e+02, 7.0773201856215189e+02, + -1.4939186918764780e-01, 1.8644971347895634e-01, + 1.6372090749144861e+00, 3.7703726325803393e+02, + -4.9800619130231672e+02, 7.4541489911049553e+02, + 1.6143781336867585e-02, 2.9449535152621459e-01, + 3.1123367778616138e+00, 2.4339756937867477e+02, + -1.3063683809320253e+01, 6.3668744375635754e+02, + -6.0893308205941091e-02, -2.3284096812199140e-01, + -1.3365799371822504e+00, -3.3476586958192604e+02, + -7.6178033792564250e+01, 6.0799900862161849e+02, + 1.4005735885903960e-02, 3.5105039187963927e-01, + 3.1125022782761307e+00, 2.3693036304879922e+02, + -2.8568142368075439e-01, 6.3394886470640097e+02, + -1.5741993921112510e-01, 1.8478387897529949e-01, + 1.6305932554102116e+00, 1.0406075200986754e+02, + -4.2788257675892862e+02, 7.3209268211894357e+02, + -1.4866186062953998e-01, 5.0660440509027509e-02, + 2.6724071345270300e-01, -4.6583844679371246e+01, + -4.4200775191882667e+02, 7.1114047883908177e+02, + -2.2237444218611055e-02, -2.9190586569261168e-01, + -1.4315121305171044e+00, -2.4288601022040885e+02, + -6.0107906630516347e+01, 5.8587667480462164e+02, + -1.3383891526480721e-01, -7.3567680347234238e-02, + -2.7119893022687500e+00, 2.1893984049240541e+02, + -3.4745132969778446e+01, 6.3460903638692776e+02, + -4.8360883487703767e-02, 3.7555613593326970e-01, + -3.0885382600450790e+00, 3.1021668918418771e+02, + -1.4279947203664204e+02, 6.4817735443900926e+02, + 1.4513043987067846e-02, -2.2256963064512844e-01, + 3.1170802497860288e+00, 1.1309297113627383e+02, + -1.6178733846103702e+02, 6.5795222209566839e+02, + -1.4380881311468280e-01, 2.0862689738926013e-01, + 1.8111838979482744e+00, 9.8806599586769153e+01, + -4.3844118798338627e+02, 7.3383986725458055e+02, + 3.0112585551035010e-02, -6.0810321767227582e-01, + 3.0803437007890562e+00, 2.4203276452222789e+02, + -1.3041657973644365e+02, 6.4059315652748614e+02, + -3.2377127658349375e-01, -3.5699426326638739e-01, + 2.3978157304076744e+00, 1.8322530323931167e+02, + -2.9698646099132424e+02, 6.8043893394560678e+02, + -2.3099316037654685e-01, 1.9230664157044738e-01, + -2.5882825467021715e+00, 2.0475842471165492e+02, + -2.7455780575134913e+01, 6.2761279522019368e+02, + -1.2263756600610767e-01, 2.1292870578208025e-02, + 4.9730197474780739e-02, -1.6313097669984086e+02, + -4.2060277859646811e+02, 7.0054840801594992e+02, + -1.3400047086022487e-01, 9.4333004637413027e-03, + 1.0288980150924642e-02, -3.1394483299575592e+02, + -4.0800556941075212e+02, 7.0208214890871852e+02, + 2.4372974097728858e-01, 3.5302527318755175e-02, + 5.3809308751254725e-02, -2.5636153627376171e+02, + -3.8427551842628026e+02, 5.7115961427673369e+02, + 3.7494708186333641e-04, 4.5800720493244511e-02, + 1.5073060962530443e-01, -1.5671032165501393e+02, + -4.3134746108165967e+02, 6.5951979239585671e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 20 + dt: d + data: [ 4.4838025484459199e-01, 4.4929580640908989e-01, + 3.9203208369363124e-01, 3.4321653025028909e-01, + 4.5930572096873618e-01, 3.7065470302226500e-01, + 4.9213644418001867e-01, 3.6477042080264094e-01, + 7.4682573138073460e-01, 4.4965469127582031e-01, + 4.5630602413518806e-01, 3.7624618412907479e-01, + 6.7498543538669153e-01, 3.7476903570750086e-01, + 3.9868166654567755e-01, 1.9790820877638307e-01, + 4.5666275430331965e-01, 4.3541246901932890e-01, + 2.5419988314055963e-01, 3.2595677631185493e-01 ] + avgReprojErr: 4.3942414533823654e-01 + maxReprojErr: 1.3265849486322991e+00 + R: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ -9.9286711543274231e-01, 1.1570567121908509e-01, + -2.8759150543898930e-02, -1.0848472041738899e-01, + -9.7679914542462176e-01, -1.8464694672181747e-01, + -4.9456612583421052e-02, -1.8020995295895770e-01, + 9.8238404726782047e-01 ] + T: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ 1.1067357202823974e+01, -7.0390837297746913e+01, + -4.3855958230614874e+01 ] + E: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ -1.2764089976276507e+00, -3.0153333043273900e+01, + -7.7248704417973855e+01, 4.4090492740471824e+01, + -3.0799351631285639e+00, -9.6111350564676830e+00, + -7.1089386732617200e+01, -2.6659659806182727e+00, + -4.0679344025381603e+00 ] + F: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ -1.9732341756556793e-08, -4.6562802802395681e-07, + -5.3694600107161258e-04, 6.8150829629382099e-07, + -4.7553532828009189e-08, -2.9357415552722262e-04, + -1.8547824812829414e-03, 3.0152613717838799e-04, + 9.9999999999999989e-01 ] + avgEpipolarErr: 4.5130478957733655e-01 + maxEpipolarErr: 1.6255448850683165e+00 + colorOrder: BGR + avgColorErr: 0. + colorR2: 1. From 53249c4882fc7a879adc7e582463d210b6af6574 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 23 Nov 2016 16:29:31 +0100 Subject: [PATCH 39/99] shaders updated to Processing 3 --- .../fr/inria/papart/procam/display/distortFrag.glsl | 4 ++-- .../fr/inria/papart/procam/display/distortVert.glsl | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/display/distortFrag.glsl b/papart/src/fr/inria/papart/procam/display/distortFrag.glsl index 0ee4bf1e..1927e3e2 100755 --- a/papart/src/fr/inria/papart/procam/display/distortFrag.glsl +++ b/papart/src/fr/inria/papart/procam/display/distortFrag.glsl @@ -3,7 +3,7 @@ precision mediump float; precision mediump int; #endif -uniform sampler2D texture; +uniform sampler2D textureGraphics; uniform sampler2D mapTex; uniform int resX, resY; @@ -29,7 +29,7 @@ void main() { vec2 coord2 = vec2( (mapCoord.x - 0.5) * mag / float(resX), (mapCoord.y - 0.5) * mag / float(resY)); - gl_FragColor = vec4(texture2D(texture, coord2 + vertTexCoord.st ).rgba); + gl_FragColor = vec4(texture2D(textureGraphics, coord2 + vertTexCoord.st ).rgba); // gl_FragColor = vec4(mapCoord.rgb , 1); // gl_FragColor = vec4(coord2.rg, 1 , 1); diff --git a/papart/src/fr/inria/papart/procam/display/distortVert.glsl b/papart/src/fr/inria/papart/procam/display/distortVert.glsl index ca26bfb2..2ca3c2a5 100755 --- a/papart/src/fr/inria/papart/procam/display/distortVert.glsl +++ b/papart/src/fr/inria/papart/procam/display/distortVert.glsl @@ -6,7 +6,7 @@ uniform mat4 transform; uniform mat4 texMatrix; -attribute vec4 vertex; +attribute vec4 position; attribute vec4 color; attribute vec2 texCoord; @@ -15,13 +15,14 @@ varying vec4 vertTexCoord; void main() { - - // vertColor = color; + // Useless... ? + vertColor = color; vertTexCoord = texMatrix * vec4(texCoord, 1.0, 1.0); - gl_TexCoord[0] = gl_MultiTexCoord0; + // Deprecated + // gl_TexCoord[0] = gl_MultiTexCoord0; - gl_Position = transform * vertex; + gl_Position = transform * position; // gl_Position = ftransform(); } From 85a1c2f42d5f75c911c3e823e0759d5e9746ffd1 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 23 Nov 2016 16:48:40 +0100 Subject: [PATCH 40/99] update shader. --- papart/src/fr/inria/papart/procam/display/ARDisplay.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index 197c42ee..9bbe9f63 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -135,8 +135,8 @@ protected void setCalibration(ProjectiveDeviceP pdp) { updateIntrinsicsRendering(); } - // TODO: no more distorsions Processing3 test - // this.setDistort(pdp.handleDistorsions()); + // TODO: To set back when the distorsions are properly computed +// this.setDistort(pdp.handleDistorsions()); this.setDistort(false); } @@ -341,7 +341,8 @@ private void initDistortMap() { parent.colorMode(PApplet.RGB, 255); lensFilter.set("mapTex", mapImg); - lensFilter.set("texture", this.graphics); + // name must not be texture ? + lensFilter.set("textureGraphics", this.graphics); lensFilter.set("resX", (int) (frameWidth * quality)); lensFilter.set("resY", (int) (frameHeight * quality)); lensFilter.set("mag", mag); From 942a171ecb7cfcfb2bb400be5b045e7d3cedc80a Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 23 Nov 2016 16:49:01 +0100 Subject: [PATCH 41/99] Get the Frame for debug purposes (ProCamCalib) --- .../papart/procam/camera/CameraRealSense.java | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 22b93eb9..c915b6ca 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -24,6 +24,7 @@ import java.util.logging.Logger; import org.bytedeco.javacpp.RealSense; import org.bytedeco.javacpp.opencv_core; +import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.RealSenseFrameGrabber; import processing.core.PMatrix3D; @@ -35,6 +36,7 @@ public class CameraRealSense extends CameraRGBIRDepth { protected RealSenseFrameGrabber grabber; + private boolean useHardwareIntrinsics = true; protected CameraRealSense(int cameraNo) { try { @@ -51,6 +53,10 @@ public RealSenseFrameGrabber getFrameGrabber() { return this.grabber; } + public void useHardwareIntrinsics(boolean use) { + this.useHardwareIntrinsics = use; + } + @Override public void internalStart() throws FrameGrabber.Exception { @@ -84,15 +90,18 @@ public void internalStart() throws FrameGrabber.Exception { grabber.start(); // Override the calibration... - if (useColor) { - useHarwareIntrinsics(colorCamera, grabber); - } - if (useDepth) { - useHarwareIntrinsics(depthCamera, grabber); - } - if (useIR) { - useHarwareIntrinsics(IRCamera, grabber); + if (useHardwareIntrinsics) { + if (useColor) { + useHarwareIntrinsics(colorCamera, grabber); + } + if (useIR) { + useHarwareIntrinsics(IRCamera, grabber); + } + if (useDepth) { + useHarwareIntrinsics(depthCamera, grabber); + } } + } @Override @@ -100,6 +109,15 @@ public void internalGrab() throws Exception { grabber.grab(); } + public Frame grabFrame() { + try { + return grabber.grab(); + } catch (FrameGrabber.Exception ex) { + Logger.getLogger(CameraRealSense.class.getName()).log(Level.SEVERE, null, ex); + } + return null; + } + public float getDepthScale() { return grabber.getDepthScale(); } From d10d839c2e60d7667fd5b0fb0df92273a92d079b Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 24 Nov 2016 17:35:55 +0100 Subject: [PATCH 42/99] Work in progress, improvement on natural feature tracking. --- .../papart/calibration/CalibrationApp.java | 2 +- .../calibration/CalibrationExtrinsic.java | 9 +- .../papart/calibration/CalibrationPopup.java | 107 +++----- papart/src/fr/inria/papart/procam/Papart.java | 4 +- .../fr/inria/papart/procam/PaperScreen.java | 1 + .../papart/procam/ProjectiveDeviceP.java | 3 +- .../papart/procam/camera/CameraThread.java | 16 +- .../procam/camera/ProjectorAsCamera.java | 44 +++ .../papart/procam/camera/TrackedView.java | 27 +- .../fr/inria/papart/tracking/MarkerBoard.java | 35 ++- .../papart/tracking/MarkerBoardFactory.java | 40 ++- .../papart/tracking/MarkerBoardJavaCV.java | 28 +- .../inria/papart/tracking/ObjectFinder.java | 256 +++++++++++------- 13 files changed, 344 insertions(+), 228 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationApp.java b/papart/src/fr/inria/papart/calibration/CalibrationApp.java index f015655f..86d9209e 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationApp.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationApp.java @@ -28,7 +28,7 @@ public class CalibrationApp extends PaperScreen { @Override public void settings() { setDrawingSize(297, 210); - loadMarkerBoard(Papart.markerFolder + Papart.calibrationFileName, 297, 210); + loadMarkerBoard(Papart.markerFolder + Papart.calibrationFileName, 162, 104);// 297, 210); setDrawAroundPaper(); } diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index bcf6fcdd..b724e6b2 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -90,6 +90,9 @@ public void saveProCamExtrinsics(PMatrix3D extr) { } public void calibrateKinect(ArrayList snapshots, boolean useExternal) { + if (depthCameraDevice == null) { + return; + } if (useExternal) { calibrateDepthAndExternalCam(snapshots); } else { @@ -129,7 +132,7 @@ protected void calibrateProjectorDepthCam(ArrayList snapsho saveKinectPlaneCalibration(planeCalibCam, homography); saveKinectCameraExtrinsics(kinectCameraExtrinsics); } - + protected void calibrateDepthAndExternalCam(ArrayList snapshots) { calibrateDepthToExternalExtr(snapshots); calibrateDepthCamPlane(snapshots); @@ -177,8 +180,8 @@ public boolean calibrateDepthCamPlane(ArrayList snapshots) // move the plane up a little. planeCalibKinect.flipNormal(); planeCalibKinect.moveAlongNormal(-20f); - - if(depthCameraDevice.type() == Camera.Type.REALSENSE){ + + if (depthCameraDevice.type() == Camera.Type.REALSENSE) { planeCalibKinect.moveAlongNormal(-20f); } diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index 5d171bee..0c0ad567 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -23,12 +23,14 @@ import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.Papart; +import fr.inria.papart.procam.PaperScreen; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.ProjectorAsCamera; import fr.inria.papart.procam.camera.SubCamera; import fr.inria.papart.procam.camera.TrackedView; import fr.inria.papart.procam.display.ProjectorDisplay; import fr.inria.papart.tracking.DetectedMarker; +import fr.inria.papart.tracking.MarkerBoardARToolKitPlus; import fr.inria.skatolo.Skatolo; import fr.inria.skatolo.gui.controllers.Toggle; import fr.inria.skatolo.gui.group.Group; @@ -81,7 +83,7 @@ public class CalibrationPopup extends PApplet { private ARToolKitPlus.MultiTracker projectorTracker = null; // calibration App / board - private CalibrationApp calibrationApp; + private PaperScreen calibrationApp; private MarkerBoard board; // Matrices @@ -108,8 +110,9 @@ public class CalibrationPopup extends PApplet { private CalibrationExtrinsic calibrationExtrinsic; private PImage backgroundImg; - public CalibrationPopup() { + public CalibrationPopup(PaperScreen screen) { super(); + this.calibrationApp = screen; PApplet.runSketch(new String[]{this.getClass().getName()}, this); } @@ -124,8 +127,12 @@ public void setup() { // Papart was created before, already with a camera, projector and Dcam. papart = Papart.getPapart(); cornersFileName = Papart.calibrationFolder + CORNERS_NAME; - calibrationApp = new CalibrationApp(); - calibrationApp.pre(); + + if (calibrationApp == null) { + calibrationApp = new CalibrationApp(); + calibrationApp.pre(); + } + board = calibrationApp.getBoard(); cameraTracking = Papart.getPapart().getPublicCameraTracking(); @@ -193,22 +200,31 @@ private void initProjectorAsCamera() { projectorView.init(PApplet.RGB); } - projectorAsCamera = new ProjectorAsCamera(); + projectorAsCamera = new ProjectorAsCamera(projector, cameraTracking, projectorView); projectorAsCamera.setCalibration(Papart.projectorCalib); projectorAsCamera.setParent(this); - // This is used only for tracking with .cfg markers - String ARToolkitCalibFile = Papart.calibrationFolder + "projector.cal"; - ProjectorAsCamera.convertARProjParams(this, projectorAsCamera.getCalibrationFile(), - ARToolkitCalibFile); - projectorAsCamera.setCalibrationARToolkit(ARToolkitCalibFile); + // if it uses gray images. + // All of this needs to be more explicit. + if (board.useGrayImages()) { + projectorAsCamera.setPixelFormat(Camera.PixelFormat.GRAY); + } + if (board.getMarkerType() == MarkerBoard.MarkerType.ARTOOLKITPLUS) { + String ARToolkitCalibFile = Papart.calibrationFolder + "projector.cal"; + ProjectorAsCamera.convertARProjParams(this, projectorAsCamera.getCalibrationFile(), + ARToolkitCalibFile); + projectorAsCamera.setCalibrationARToolkit(ARToolkitCalibFile); + } + if (board.getMarkerType() == MarkerBoard.MarkerType.SVG) { + projectorTracker = DetectedMarker.createDetector(projector.getWidth(), projector.getHeight()); + } + + projectorAsCamera.trackSheets(true); projectorAsCamera.trackMarkerBoard(board); - initMarkerTrackingFromProjector(); - } - private void initMarkerTrackingFromProjector() { - projectorTracker = DetectedMarker.createDetector(projector.getWidth(), projector.getHeight()); + // warrning experimental + projectorAsCamera.setThread(); } private void initTrackingOn(DepthCameraDevice kinectDevice) { @@ -216,23 +232,18 @@ private void initTrackingOn(DepthCameraDevice kinectDevice) { kinectDevice.getMainCamera().trackSheets(true); cameraFromDepthCam = kinectDevice.getColorCamera(); - String ARToolkitCalib = Papart.calibrationFolder + KINECT_ARTOOLKIT_NAME; - // Warning, only used for .CFG markers (old). - Camera.convertARParams(this, cameraFromDepthCam.getProjectiveDevice(), ARToolkitCalib); - cameraFromDepthCam.setCalibrationARToolkit(ARToolkitCalib); + if (board.getMarkerType() == MarkerBoard.MarkerType.ARTOOLKITPLUS) { + String ARToolkitCalib = Papart.calibrationFolder + KINECT_ARTOOLKIT_NAME; + Camera.convertARParams(this, cameraFromDepthCam.getProjectiveDevice(), ARToolkitCalib); + cameraFromDepthCam.setCalibrationARToolkit(ARToolkitCalib); + } // No display for now... -// arDisplayKinect = new ARDisplay(this, cameraKinect); -// arDisplayKinect.init(); -// arDisplayKinect.manualMode(); -// app.addDisplay(arDisplayKinect); cameraFromDepthCam.trackSheets(true); // as it does not comes with the display: cameraFromDepthCam.trackMarkerBoard(board); - - System.out.println("Tracking from the depth CAmera should be OK. "); } void reset() { @@ -313,54 +324,10 @@ private PMatrix3D currentCamBoard() { } private PMatrix3D currentProjBoard() { - opencv_core.IplImage projImage = projectorImage(); - if (projImage == null) { - return new PMatrix3D(); - } - // Detection from Projector's view... - DetectedMarker[] markers = DetectedMarker.detect(this.projectorTracker, projImage); - - board.updateLocation(projectorAsCamera, projImage, markers); return board.getTransfoMat(projectorAsCamera); } - private opencv_core.IplImage grayImage = null; - - private opencv_core.IplImage projectorImage() { - projectorView.setCorners(corners); - opencv_core.IplImage projImage = projectorView.getIplViewOf(cameraTracking); - if (projImage == null) { - return null; - } - - if (board.useGrayscaleImages()) { - projImage = greyProjectorImage(projImage); - } - return projImage; - } - - private opencv_core.IplImage greyProjectorImage(opencv_core.IplImage projImage) { - - if (projImage.nChannels() == 1) { - grayImage = projImage; - return grayImage; - } - - if (grayImage == null) { - grayImage = opencv_core.IplImage.create(projector.getWidth(), - projector.getHeight(), - IPL_DEPTH_8U, 1); - } - - cvCvtColor(projImage, grayImage, CV_BGR2GRAY); - // if(test){ - // cvSaveImage( sketchPath() + "/data/projImage.jpg", grayImage); - // cvSaveImage( sketchPath() + "/data/camImage.jpg", camera.getIplImage()); - // } - return grayImage; - } //// Calibrations - void initMatrixGui() { PFont arial = createFont("arial", 12); @@ -534,6 +501,10 @@ public void draw() { } popMatrix(); + // Update the corners. + // TODO: move this when the corners are actally moved. + projectorView.setCorners(corners); + text(this.isProCamCalibrated, 100, DO_CALIBRATION_HEIGHT + 15); text(this.isKinectCalibrated, 300, DO_CALIBRATION_HEIGHT + 15); diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index e0d5bc68..e9bb9c2e 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -164,9 +164,9 @@ public static ScreenConfiguration getDefaultScreenConfiguration(PApplet applet) private CalibrationPopup calibrationPopup = null; - public void calibration() { + public void calibration(PaperScreen screen) { if (calibrationPopup == null) { - calibrationPopup = new CalibrationPopup(); + calibrationPopup = new CalibrationPopup(screen); } else if (calibrationPopup.isHidden()) { calibrationPopup.show(); } else { diff --git a/papart/src/fr/inria/papart/procam/PaperScreen.java b/papart/src/fr/inria/papart/procam/PaperScreen.java index bf093224..6bb6e340 100755 --- a/papart/src/fr/inria/papart/procam/PaperScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperScreen.java @@ -268,6 +268,7 @@ private void trackCurrentMarkerBoard() { } if (!cameraTracking.tracks(markerBoard)) { + System.out.println("Camera. " + cameraTracking + " now tracks " + markerBoard); cameraTracking.trackMarkerBoard(markerBoard); } } diff --git a/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java b/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java index 1b8b563c..18590810 100755 --- a/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java +++ b/papart/src/fr/inria/papart/procam/ProjectiveDeviceP.java @@ -433,7 +433,8 @@ public void saveProjectorTo(PApplet applet, String filename) { public static ProjectiveDeviceP createSimpleDevice(float fx, float fy, float cx, float cy, int w, int h) { ProjectiveDeviceP p = new ProjectiveDeviceP(); - p.handleDistorsion = false; + // Do not update the handle distorsions ? +// p.handleDistorsion = false; p.w = w; p.h = h; p.intrinsics = new PMatrix3D(fx, 0, cx, 0, diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index 89e8adc5..187f13aa 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -76,26 +76,24 @@ public void run() { while (!stop) { checkSubCamera(); - camera.grab(); // If there is no camera for tracking... - if(cameraForMarkerboard == null || !compute || camera.getTrackedSheets().isEmpty()){ + if (cameraForMarkerboard == null || !compute || camera.getTrackedSheets().isEmpty()) { continue; } - image = camera.getIplImage(); if (image != null) { this.compute(); } } } - - private void checkSubCamera(){ - if(!(camera instanceof CameraRGBIRDepth)){ + + private void checkSubCamera() { + if (!(camera instanceof CameraRGBIRDepth)) { return; } Camera actAsCam = ((CameraRGBIRDepth) camera).getActingCamera(); - if(actAsCam != null){ + if (actAsCam != null) { cameraForMarkerboard = actAsCam; } } @@ -125,7 +123,7 @@ private void tryComputeGrayScale() { } for (MarkerBoard sheet : camera.getTrackedSheets()) { - if (sheet.useGrayscaleImages()) { + if (sheet.useMarkers()) { if (grayImage == null) { initGrayScale(); } @@ -179,7 +177,7 @@ protected void updateSequential() { protected void updateBoardLocation(MarkerBoard markerBoard) { // The markerboard will know the real camera, not the top-level camera. - if (markerBoard.useGrayscaleImages()) { + if (markerBoard.useMarkers()) { markerBoard.updateLocation(cameraForMarkerboard, grayImage, this.detectedMarkers); } else { markerBoard.updateLocation(cameraForMarkerboard, image, null); diff --git a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java index fc454db1..56925d37 100644 --- a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java @@ -21,9 +21,14 @@ import fr.inria.papart.procam.ProjectiveDeviceP; import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.display.ProjectorDisplay; import java.util.logging.Level; import java.util.logging.Logger; +import org.bytedeco.javacpp.opencv_core; +import static org.bytedeco.javacpp.opencv_core.IPL_DEPTH_8U; import org.bytedeco.javacpp.opencv_core.IplImage; +import static org.bytedeco.javacpp.opencv_imgproc.CV_BGR2GRAY; +import static org.bytedeco.javacpp.opencv_imgproc.cvCvtColor; import processing.core.PApplet; import processing.core.PImage; @@ -33,6 +38,17 @@ */ public class ProjectorAsCamera extends Camera { + private final TrackedView projectorView; + private final Camera cameraTracking; + private IplImage grayImage; + private final ProjectorDisplay projector; + + public ProjectorAsCamera(ProjectorDisplay projector, Camera cameraTracking, TrackedView view){ + this.projectorView = view; + this.cameraTracking = cameraTracking; + this.projector = projector; + } + public void setImage(IplImage image) { this.currentImage = image; } @@ -88,8 +104,36 @@ public PImage getPImage() { */ @Override public void grab() { + IplImage img = projectorView.getIplViewOf(cameraTracking); + if(img != null){ + currentImage = img; + } + + if(this.format == PixelFormat.GRAY){ + currentImage = greyProjectorImage(img); + } } + + private opencv_core.IplImage greyProjectorImage(opencv_core.IplImage projImage) { + if (projImage.nChannels() == 1) { + grayImage = projImage; + return grayImage; + } + + if (grayImage == null) { + grayImage = opencv_core.IplImage.create(projector.getWidth(), + projector.getHeight(), + IPL_DEPTH_8U, 1); + } + + cvCvtColor(projImage, grayImage, CV_BGR2GRAY); + // if(test){ + // cvSaveImage( sketchPath() + "/data/projImage.jpg", grayImage); + // cvSaveImage( sketchPath() + "/data/camImage.jpg", camera.getIplImage()); + // } + return grayImage; + } /** * Not used. */ diff --git a/papart/src/fr/inria/papart/procam/camera/TrackedView.java b/papart/src/fr/inria/papart/procam/camera/TrackedView.java index dd514109..df6c8391 100755 --- a/papart/src/fr/inria/papart/procam/camera/TrackedView.java +++ b/papart/src/fr/inria/papart/procam/camera/TrackedView.java @@ -87,11 +87,14 @@ public TrackedView() { allocateMemory(); } + private boolean cornersSet = false; + public void setCorners(PVector[] corners) { if (corners.length == 4) { for (int i = 0; i < 4; i++) { screenPixelCoordinates[i] = corners[i]; } + cornersSet = true; } } @@ -119,15 +122,13 @@ private void initiateImageCoordinates() { } public PImage getViewOf(Camera camera) { - if (extractedPImage == null) { - System.err.println("You should init the TrackedView before getting the view."); - return null; - } - if (camera.getIplImage() == null) { + + IplImage img = camera.getIplImage(); + if (!isExtractionReady(img)) { return null; } - this.mainImage = camera.getIplImage(); + this.mainImage = img; this.camera = camera; CvMat homography = computeHomography(); @@ -138,12 +139,8 @@ public PImage getViewOf(Camera camera) { } public IplImage getIplViewOf(Camera camera) { - if (extractedPImage == null) { - System.err.println("You should init the TrackedView before getting the view."); - return null; - } IplImage img = camera.getIplImage(); - if (img == null) { + if (!isExtractionReady(img)) { return null; } @@ -154,6 +151,14 @@ public IplImage getIplViewOf(Camera camera) { return extractedIplImage; } + private boolean isExtractionReady(IplImage img) { + if (extractedPImage == null) { + System.err.println("You should init the TrackedView before getting the view."); + return false; + } + return img != null && cornersSet; + } + private CvMat computeHomography() { checkMemory(); computeCorners(); diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoard.java b/papart/src/fr/inria/papart/tracking/MarkerBoard.java index dd92cb3c..9f714d68 100755 --- a/papart/src/fr/inria/papart/tracking/MarkerBoard.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoard.java @@ -64,16 +64,19 @@ public abstract class MarkerBoard { static public final int FORCE_UPDATE = 3; static public final PMatrix3D INVALID_LOCATION = new PMatrix3D(); - public enum MarkerType { ARTOOLKITPLUS, JAVACV_FINDER, SVG, INVALID } - - protected MarkerBoard(){ + + public MarkerType getMarkerType() { + return type; + } + + protected MarkerBoard() { this.fileName = "Invalid MarkerBoard"; } - + public MarkerBoard(String fileName, float width, float height) { this.fileName = fileName; this.width = width; @@ -89,13 +92,11 @@ public MarkerBoard(String fileName, float width, float height) { } protected abstract void addTrackerImpl(Camera camera); - + public void addTracker(PApplet applet, Camera camera) { // public void addTracker(PApplet applet, Camera camera, ARToolKitPlus.TrackerMultiMarker tracker, float[] transfo) { this.applet = applet; - addTrackerImpl(camera); - this.cameras.add(camera); this.drawingMode.add(false); this.lastPos.add(new PVector()); @@ -103,12 +104,12 @@ public void addTracker(PApplet applet, Camera camera) { this.minDistanceDrawingMode.add(2f); this.nextTimeEvent.add(0); this.updateStatus.add(NORMAL); - OneEuroFilter[] filter = null; this.filters.add(filter); + + addTrackerImpl(camera); } - private int getId(Camera camera) { return cameras.indexOf(camera); } @@ -121,7 +122,7 @@ public void setFiltering(Camera camera, double freq, double minCutOff) { public void removeFiltering(Camera camera) { int id = cameras.indexOf(camera); - filters.remove(id); + filters.set(id, null); } public void setDrawingMode(Camera camera, boolean dm) { @@ -240,12 +241,12 @@ public synchronized void updateLocation(Camera camera, IplImage img, Object glob if (mode == BLOCK_UPDATE && currentTime < endTime) { return; } - + updatePositionImpl(id, currentTime, endTime, mode, camera, img, globalTracking); } + protected abstract void updatePositionImpl(int id, int currentTime, int endTime, int mode, Camera camera, IplImage img, Object globalTracking); - public PMatrix3D getTransfoMat(Camera camera) { return transfos.get(cameras.indexOf(camera)); @@ -266,7 +267,7 @@ public ObjectFinder getObjectTracking(Camera camera) { } public ARToolKitPlus.TrackerMultiMarker getARToolkitTracking(Camera camera) { - assert (this.useGrayscaleImages()); + assert (this.useMarkers()); return (ARToolKitPlus.TrackerMultiMarker) getTracking(camera); } @@ -278,10 +279,14 @@ public boolean useJavaCVFinder() { return this.type == MarkerType.JAVACV_FINDER; } - public boolean useGrayscaleImages() { + public boolean useMarkers() { return this.type == MarkerType.ARTOOLKITPLUS || this.type == MarkerType.SVG; } - + + public boolean useGrayImages() { + return this.type == MarkerType.ARTOOLKITPLUS || this.type == MarkerType.SVG; + } + public boolean useCustomARToolkitBoard() { return this.type == MarkerType.SVG; } diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoardFactory.java b/papart/src/fr/inria/papart/tracking/MarkerBoardFactory.java index bce43668..5868decc 100644 --- a/papart/src/fr/inria/papart/tracking/MarkerBoardFactory.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoardFactory.java @@ -20,33 +20,48 @@ package fr.inria.papart.tracking; import fr.inria.papart.tracking.MarkerBoard.MarkerType; +import java.util.ArrayList; +import java.util.HashMap; /** * * @author Jérémy Laviole - jeremy.laviole@inria.fr */ public class MarkerBoardFactory { - + private static final HashMap allBoards = new HashMap<>(); + // Todo: error Handling... - public static MarkerBoard create(String fileName, float width, float height){ + public static MarkerBoard create(String fileName, float width, float height) { - MarkerType type = getType(fileName); - if (type == MarkerType.ARTOOLKITPLUS) { - return new MarkerBoardARToolKitPlus(fileName, width, height); - } - if (type == MarkerType.JAVACV_FINDER) { - return new MarkerBoardJavaCV(fileName, width, height); + if(allBoards.containsKey(fileName)){ + return allBoards.get(fileName); } - if (type == MarkerType.SVG) { - return new MarkerBoardSvg(fileName, width, height); + MarkerBoard output = MarkerBoardInvalid.board; + + MarkerType type = getType(fileName); + try { + if (type == MarkerType.ARTOOLKITPLUS) { + output = new MarkerBoardARToolKitPlus(fileName, width, height); + } + if (type == MarkerType.JAVACV_FINDER) { + output = new MarkerBoardJavaCV(fileName, width, height); + } + + if (type == MarkerType.SVG) { + output = new MarkerBoardSvg(fileName, width, height); + } + + allBoards.put(fileName, output); + } catch (Exception e) { + System.err.println("Error loading the markerboard: " + e); } - return MarkerBoardInvalid.board; + return output; } - + private static MarkerType getType(String name) { if (name.endsWith("cfg")) { return MarkerType.ARTOOLKITPLUS; @@ -60,5 +75,4 @@ private static MarkerType getType(String name) { return MarkerType.INVALID; } - } diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoardJavaCV.java b/papart/src/fr/inria/papart/tracking/MarkerBoardJavaCV.java index e9095ac1..64bca749 100644 --- a/papart/src/fr/inria/papart/tracking/MarkerBoardJavaCV.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoardJavaCV.java @@ -43,7 +43,9 @@ public class MarkerBoardJavaCV extends MarkerBoard { private final PVector botLeft = new PVector(); private final PVector botRight = new PVector(); - public MarkerBoardJavaCV(String fileName, float width, float height) { + private opencv_core.IplImage imgToFind; + + public MarkerBoardJavaCV(String fileName, float width, float height) throws Exception { super(fileName, width, height); trackers = new ArrayList(); imagePoints = new PVector[4]; @@ -57,16 +59,21 @@ public MarkerBoardJavaCV(String fileName, float width, float height) { Logger logger = Logger.getLogger(ObjectFinder.class.getName()); logger.setLevel(Level.OFF); this.type = MarkerType.JAVACV_FINDER; + imgToFind = cvLoadImage(this.fileName); + + // TODO: something less violent than a runtime exception... + if (imgToFind == null) { + throw new Exception("MarkerBoardJavaCV: Impossible to load the image: " + this.fileName); + } + } @Override protected void addTrackerImpl(Camera camera) { - opencv_core.IplImage imgToFind = cvLoadImage(this.fileName); ObjectFinder finder = new ObjectFinder(imgToFind); // finder.getSettings().setUseFLANN(true); // finder.getSettings().setMatchesMin(6); - this.trackers.add(finder); this.transfos.add(new PMatrix3D()); } @@ -91,7 +98,6 @@ private PMatrix3D compute3DPos(double[] corners, Camera camera) { // imagePoints[1] = botRight; // imagePoints[2] = topRight; // imagePoints[3] = topLeft; - imagePoints[0] = topLeft; imagePoints[1] = topRight; imagePoints[2] = botRight; @@ -110,16 +116,19 @@ private PMatrix3D compute3DPos(double[] corners, Camera camera) { protected void updatePositionImpl(int id, int currentTime, int endTime, int mode, Camera camera, opencv_core.IplImage img, Object globalTracking) { + try{ ObjectFinder finder = (ObjectFinder) trackers.get(id); // Find the markers double[] corners = finder.find(img); - // one use... HACK - finder = new ObjectFinder(finder.getSettings()); - trackers.set(id, finder); + // one use... HACK -- Why + // why so evil ? +// finder = new ObjectFinder(finder.getSettings()); +// trackers.set(id, finder); if (corners == null) { + System.out.println("corners null, no update"); return; } @@ -141,7 +150,6 @@ protected void updatePositionImpl(int id, int currentTime, int endTime, int mode // { // return; // } - lastDistance.set(id, distance); // if the update is forced if (mode == FORCE_UPDATE && currentTime < endTime) { @@ -169,6 +177,10 @@ protected void updatePositionImpl(int id, int currentTime, int endTime, int mode } else { update(newPos, id); } + + } catch(Exception e ){ + e.printStackTrace(); + } } private void update(PMatrix3D newPos, int id) { diff --git a/papart/src/fr/inria/papart/tracking/ObjectFinder.java b/papart/src/fr/inria/papart/tracking/ObjectFinder.java index 69b17016..7cb0e3a7 100644 --- a/papart/src/fr/inria/papart/tracking/ObjectFinder.java +++ b/papart/src/fr/inria/papart/tracking/ObjectFinder.java @@ -39,13 +39,14 @@ * * @author Samuel Audet * - * ObjectFinder does not work out-of-the-box under Android, because it lacks the standard - * java.beans.beancontext package. We can work around it by doing the following *BEFORE* - * following the instructions in the README.md file: + * ObjectFinder does not work out-of-the-box under Android, because it lacks the + * standard java.beans.beancontext package. We can work around it by doing the + * following *BEFORE* following the instructions in the README.md file: * - * 1. Remove BaseChildSettings.class and BaseSettings.class from javacv.jar - * 2. Follow the instructions in the README.md file - * 3. In your project, define empty classes BaseChildSettings and BaseSettings under the org.bytedeco.javacv package name + * 1. Remove BaseChildSettings.class and BaseSettings.class from javacv.jar 2. + * Follow the instructions in the README.md file 3. In your project, define + * empty classes BaseChildSettings and BaseSettings under the + * org.bytedeco.javacv package name */ public class ObjectFinder { @@ -58,18 +59,18 @@ public ObjectFinder(IplImage objectImage) { settings.objectImage = objectImage; setSettings(settings); } + public ObjectFinder(Settings settings) { setSettings(settings); } public static class Settings extends BaseChildSettings { + IplImage objectImage = null; // ORB detector = ORB.create(); // ORB detector = ORB.create(500/*=500*/, 1.6f /*=1.2f*/, 6 /*=8*/, 31/*=31*/, // 0/*=0*/, 2/*=2*/, ORB.HARRIS_SCORE/*=cv::ORB::HARRIS_SCORE*/, 31 /*=31*/, 20/*=20*/); - - // AKAZE detector = AKAZE.create(); // -> CRAZY memory leaks ?! // AKAZE detector = AKAZE.create(AKAZE.DESCRIPTOR_KAZE, // 0, 3, 0.001f, @@ -79,73 +80,33 @@ public static class Settings extends BaseChildSettings { // int descriptor_size/*=0*/, int descriptor_channels/*=3*/, // float threshold/*=0.001f*/, int nOctaves/*=4*/, // int nOctaveLayers/*=4*/, int diffusivity/*=cv::KAZE::DIFF_PM_G2*/); - // default -// BRISK detector = BRISK.create(30, 3, 1); - BRISK detector = BRISK.create(briskParam1, briskParam2, briskParam3); + BRISK detector = BRISK.create(50, 2, 1); +// BRISK detector = BRISK.create(briskParam1, briskParam2, briskParam3); // MSER detector = MSER.create(); // -> Not implemented. // FastFeatureDetector detector = FastFeatureDetector.create(); // -> Not implemented. // AgastFeatureDetector detector = AgastFeatureDetector.create(); // -> not implemented - double distanceThreshold = 0.75; - int matchesMin = 4; + int matchesMin = 8; double ransacReprojThreshold = 2.0; + +// Flann causes a native crash // boolean useFLANN = true; boolean useFLANN = false; public IplImage getObjectImage() { return objectImage; } + public void setObjectImage(IplImage objectImage) { this.objectImage = objectImage; } -// public int getDescriptorType() { -// return detector.getDescriptorType(); -// } -// public void setDescriptorType(int dtype) { -// detector.setDescriptorType(dtype); -// } -// -// public int getDescriptorSize() { -// return detector.getDescriptorSize(); -// } -// public void setDescriptorSize(int dsize) { -// detector.setDescriptorSize(dsize); -// } -// -// public int getDescriptorChannels() { -// return detector.getDescriptorChannels(); -// } -// public void setDescriptorChannels(int dch) { -// detector.setDescriptorChannels(dch); -// } -// -// public double getThreshold() { -// return detector.getThreshold(); -// } -// public void setThreshold(double threshold) { -// detector.setThreshold(threshold); -// } -// -// public int getNOctaves() { -// return detector.getNOctaves(); -// } -// public void setNOctaves(int nOctaves) { -// detector.setNOctaves(nOctaves); -// } -// -// public int getNOctaveLayers() { -// return detector.getNOctaveLayers(); -// } -// public void setNOctaveLayers(int nOctaveLayers) { -// detector.setNOctaveLayers(nOctaveLayers); -// } - public double getDistanceThreshold() { return distanceThreshold; } + public void setDistanceThreshold(double distanceThreshold) { this.distanceThreshold = distanceThreshold; } @@ -153,6 +114,7 @@ public void setDistanceThreshold(double distanceThreshold) { public int getMatchesMin() { return matchesMin; } + public void setMatchesMin(int matchesMin) { this.matchesMin = matchesMin; } @@ -160,6 +122,7 @@ public void setMatchesMin(int matchesMin) { public double getRansacReprojThreshold() { return ransacReprojThreshold; } + public void setRansacReprojThreshold(double ransacReprojThreshold) { this.ransacReprojThreshold = ransacReprojThreshold; } @@ -167,15 +130,18 @@ public void setRansacReprojThreshold(double ransacReprojThreshold) { public boolean isUseFLANN() { return useFLANN; } + public void setUseFLANN(boolean useFLANN) { this.useFLANN = useFLANN; } } Settings settings; + public Settings getSettings() { return settings; } + public void setSettings(Settings settings) { this.settings = settings; @@ -184,19 +150,19 @@ public void setSettings(Settings settings) { settings.detector.detectAndCompute(cvarrToMat(settings.objectImage), new Mat(), objectKeypoints, objectDescriptors, false); - int total = (int)objectKeypoints.size(); + int total = (int) objectKeypoints.size(); if (settings.useFLANN) { indicesMat = new Mat(total, 2, CV_32SC1); - distsMat = new Mat(total, 2, CV_32FC1); + distsMat = new Mat(total, 2, CV_32FC1); flannIndex = new Index(); indexParams = new LshIndexParams(12, 20, 2); // using LSH Hamming distance searchParams = new SearchParams(64, 0, true); // maximum number of leafs checked } - pt1 = new Mat(total, 1, CV_32FC2); - pt2 = new Mat(total, 1, CV_32FC2); + pt1 = new Mat(total, 1, CV_32FC2); + pt2 = new Mat(total, 1, CV_32FC2); mask = new Mat(total, 1, CV_8UC1); - H = new Mat(3, 3, CV_64FC1); - ptpairs = new ArrayList(2*objectDescriptors.rows()); + H = new Mat(3, 3, CV_64FC1); + ptpairs = new ArrayList(2 * objectDescriptors.rows()); logger.info(total + " object descriptors"); } @@ -211,30 +177,110 @@ public void setSettings(Settings settings) { Mat pt1 = null, pt2 = null, mask = null, H = null; ArrayList ptpairs = null; + CvRect roi = null; + CvRect defaultRoi = null; + public double[] find(IplImage image) { if (objectDescriptors.rows() < settings.getMatchesMin()) { return null; } imageKeypoints = new KeyPointVector(); imageDescriptors = new Mat(); + + // mask is a single channel image. + if (roi == null) { + roi = cvRect(0, 0, image.width(), image.height()); + defaultRoi = cvRect(0, 0, image.width(), image.height()); + } + + cvSetImageROI(image, roi); + +// System.out.println("retreived roi: " + roi.x() + " " + roi.y() + " " + roi.width() + " " + roi.height()); + long startTime = System.currentTimeMillis(); settings.detector.detectAndCompute(cvarrToMat(image), new Mat(), imageKeypoints, imageDescriptors, false); + // cvarrToMat(maskImg), imageKeypoints, imageDescriptors, false); + if (imageDescriptors.rows() < settings.getMatchesMin()) { + // Reset the mask, nothing found. + roi.x(0); + roi.y(0); + roi.width(image.width()); + roi.height(image.height()); return null; } - int total = (int)imageKeypoints.size(); + long endTime = System.currentTimeMillis(); + long totalTime = endTime - startTime; +// System.out.println("Detection time: " + totalTime + " ms."); + int total = (int) imageKeypoints.size(); logger.info(total + " image descriptors"); int w = settings.objectImage.width(); int h = settings.objectImage.height(); - double[] srcCorners = {0, 0, w, 0, w, h, 0, h}; + double[] srcCorners = {0, 0, w, 0, w, h, 0, h}; double[] dstCorners = locatePlanarObject(objectKeypoints, objectDescriptors, - imageKeypoints, imageDescriptors, srcCorners); + imageKeypoints, imageDescriptors, srcCorners, image.roi()); + + if (dstCorners == null) { + roi.x(0); + roi.y(0); + roi.width(image.width()); + roi.height(image.height()); + return null; + } + + adjustROI(image, dstCorners); + // update mask from dstCorners... + +// cvSetImageROI(image, defaultRoi); +// System.out.println("Updated roi: " + roi.x() + " " + roi.y()); return dstCorners; } + private void adjustROI(IplImage image, double[] dstCorners) { + int minX = image.width(), minY = image.height(), maxX = 0, maxY = 0; + for (int i = 0; i < 4; i++) { + int x = (int) dstCorners[i * 2]; + int y = (int) dstCorners[i * 2 + 1]; + if (x < minX) { + minX = x; + } + if (x > maxX) { + maxX = x; + } + if (y < minY) { + minY = y; + } + if (y > maxY) { + maxY = y; + } + } + int larger = 100; + minX -= larger; + maxX += larger; + minY -= larger; + maxY += larger; + if (minX < 0) { + minX = 0; + } + if (maxX >= image.width()) { + maxX = image.width() - 1; + } + if (minY < 0) { + minY = 0; + } + if (maxY >= image.height()) { + maxY = image.height() - 1; + } + roi.x(minX); + roi.y(minY); + roi.width(maxX - minX); + roi.height(maxY - minY); + } + static final int[] bits = new int[256]; + static { for (int i = 0; i < bits.length; i++) { for (int j = i; j != 0; j >>= 1) { @@ -248,8 +294,9 @@ int compareDescriptors(ByteBuffer d1, ByteBuffer d2, int best) { assert d1.limit() - d1.position() == d2.limit() - d2.position(); while (d1.position() < d1.limit()) { totalCost += bits[(d1.get() ^ d2.get()) & 0xFF]; - if (totalCost > best) + if (totalCost > best) { break; + } } return totalCost; } @@ -260,8 +307,8 @@ int naiveNearestNeighbor(ByteBuffer vec, ByteBuffer modelDescriptors) { int size = vec.limit() - vec.position(); for (int i = 0; i * size < modelDescriptors.capacity(); i++) { - ByteBuffer mvec = (ByteBuffer)modelDescriptors.position(i * size).limit((i + 1) * size); - d = compareDescriptors((ByteBuffer)vec.reset(), mvec, dist2); + ByteBuffer mvec = (ByteBuffer) modelDescriptors.position(i * size).limit((i + 1) * size); + d = compareDescriptors((ByteBuffer) vec.reset(), mvec, dist2); if (d < dist1) { dist2 = dist1; dist1 = d; @@ -270,8 +317,9 @@ int naiveNearestNeighbor(ByteBuffer vec, ByteBuffer modelDescriptors) { dist2 = d; } } - if (dist1 < settings.distanceThreshold*dist2) + if (dist1 < settings.distanceThreshold * dist2) { return neighbor; + } return -1; } @@ -281,7 +329,7 @@ void findPairs(Mat objectDescriptors, Mat imageDescriptors) { ByteBuffer imageBuf = imageDescriptors.createBuffer(); for (int i = 0; i * size < objectBuf.capacity(); i++) { - ByteBuffer descriptor = (ByteBuffer)objectBuf.position(i * size).limit((i + 1) * size).mark(); + ByteBuffer descriptor = (ByteBuffer) objectBuf.position(i * size).limit((i + 1) * size).mark(); int nearestNeighbor = naiveNearestNeighbor(descriptor, imageBuf); if (nearestNeighbor >= 0) { ptpairs.add(i); @@ -300,38 +348,52 @@ void flannFindPairs(Mat objectDescriptors, Mat imageDescriptors) { IntBuffer indicesBuf = indicesMat.createBuffer(); IntBuffer distsBuf = distsMat.createBuffer(); for (int i = 0; i < length; i++) { - if (distsBuf.get(2*i) < settings.distanceThreshold*distsBuf.get(2*i+1)) { + if (distsBuf.get(2 * i) < settings.distanceThreshold * distsBuf.get(2 * i + 1)) { ptpairs.add(i); - ptpairs.add(indicesBuf.get(2*i)); + ptpairs.add(indicesBuf.get(2 * i)); } } } - /** a rough implementation for object location */ + /** + * a rough implementation for object location + */ double[] locatePlanarObject(KeyPointVector objectKeypoints, Mat objectDescriptors, - KeyPointVector imageKeypoints, Mat imageDescriptors, double[] srcCorners) { + KeyPointVector imageKeypoints, Mat imageDescriptors, double[] srcCorners, IplROI roi) { ptpairs.clear(); if (settings.useFLANN) { flannFindPairs(objectDescriptors, imageDescriptors); } else { findPairs(objectDescriptors, imageDescriptors); } - int n = ptpairs.size()/2; + int n = ptpairs.size() / 2; logger.info(n + " matching pairs found"); if (n < settings.matchesMin) { return null; } - pt1 .resize(n); - pt2 .resize(n); + int xShift = 0; + int yShift = 0; + if (roi != null) { + xShift = roi.xOffset(); + yShift = roi.yOffset(); + } + + pt1.resize(n); + pt2.resize(n); mask.resize(n); FloatBuffer pt1Idx = pt1.createBuffer(); FloatBuffer pt2Idx = pt2.createBuffer(); for (int i = 0; i < n; i++) { - Point2f p1 = objectKeypoints.get(ptpairs.get(2*i)).pt(); - pt1Idx.put(2*i, p1.x()); pt1Idx.put(2*i+1, p1.y()); - Point2f p2 = imageKeypoints.get(ptpairs.get(2*i+1)).pt(); - pt2Idx.put(2*i, p2.x()); pt2Idx.put(2*i+1, p2.y()); + Point2f p1 = objectKeypoints.get(ptpairs.get(2 * i)).pt(); + pt1Idx.put(2 * i, p1.x()); + pt1Idx.put(2 * i + 1, p1.y()); + Point2f p2 = imageKeypoints.get(ptpairs.get(2 * i + 1)).pt(); + pt2Idx.put(2 * i, p2.x() + xShift); + pt2Idx.put(2 * i + 1, p2.y() + yShift); + +// System.out.println("KeyPoints found object: " + p1.x() + " " + p1.y()); +// System.out.println("KeyPoints found image: " + p2.x() + " " + p2.y()); } H = findHomography(pt1, pt2, CV_RANSAC, settings.ransacReprojThreshold, mask, 2000, 0.995); @@ -339,15 +401,15 @@ void flannFindPairs(Mat objectDescriptors, Mat imageDescriptors) { return null; } - double[] h = (double[])H.createIndexer(false).array(); + double[] h = (double[]) H.createIndexer(false).array(); double[] dstCorners = new double[srcCorners.length]; - for(int i = 0; i < srcCorners.length/2; i++) { - double x = srcCorners[2*i], y = srcCorners[2*i + 1]; - double Z = 1/(h[6]*x + h[7]*y + h[8]); - double X = (h[0]*x + h[1]*y + h[2])*Z; - double Y = (h[3]*x + h[4]*y + h[5])*Z; - dstCorners[2*i ] = X; - dstCorners[2*i + 1] = Y; + for (int i = 0; i < srcCorners.length / 2; i++) { + double x = srcCorners[2 * i], y = srcCorners[2 * i + 1]; + double Z = 1 / (h[6] * x + h[7] * y + h[8]); + double X = (h[0] * x + h[1] * y + h[2]) * Z; + double Y = (h[3] * x + h[4] * y + h[5]) * Z; + dstCorners[2 * i] = X; + dstCorners[2 * i + 1] = Y; } return dstCorners; } @@ -357,10 +419,10 @@ public static void main(String[] args) throws Exception { // String objectFilename = args.length == 2 ? args[0] : "/home/jiii/sketchbook/libraries/PapARt/data/markers/dlink.png"; String objectFilename = args.length == 2 ? args[0] : "/home/jiii/repos/Papart-github/papart-examples/Camera/ExtractPlanarObjectForTracking/ExtractedView.bmp"; - String sceneFilename = args.length == 2 ? args[1] : "/home/jiii/my_photo-7.jpg"; + String sceneFilename = args.length == 2 ? args[1] : "/home/jiii/my_photo-7.jpg"; IplImage object = cvLoadImage(objectFilename, CV_LOAD_IMAGE_GRAYSCALE); - IplImage image = cvLoadImage(sceneFilename, CV_LOAD_IMAGE_GRAYSCALE); + IplImage image = cvLoadImage(sceneFilename, CV_LOAD_IMAGE_GRAYSCALE); if (object == null || image == null) { System.err.println("Can not load " + objectFilename + " and/or " + sceneFilename); System.exit(-1); @@ -369,7 +431,7 @@ public static void main(String[] args) throws Exception { IplImage objectColor = IplImage.create(object.width(), object.height(), 8, 3); cvCvtColor(object, objectColor, CV_GRAY2BGR); - IplImage correspond = IplImage.create(image.width(), object.height()+ image.height(), 8, 1); + IplImage correspond = IplImage.create(image.width(), object.height() + image.height(), 8, 1); cvSetImageROI(correspond, cvRect(0, 0, object.width(), object.height())); cvCopy(object, correspond); cvSetImageROI(correspond, cvRect(0, object.height(), correspond.width(), correspond.height())); @@ -386,13 +448,13 @@ public static void main(String[] args) throws Exception { double[] dst_corners = finder.find(image); System.out.println("Finding time = " + (System.currentTimeMillis() - start) + " ms"); - if (dst_corners != null) { + if (dst_corners != null) { for (int i = 0; i < 4; i++) { - int j = (i+1)%4; - int x1 = (int)Math.round(dst_corners[2*i ]); - int y1 = (int)Math.round(dst_corners[2*i + 1]); - int x2 = (int)Math.round(dst_corners[2*j ]); - int y2 = (int)Math.round(dst_corners[2*j + 1]); + int j = (i + 1) % 4; + int x1 = (int) Math.round(dst_corners[2 * i]); + int y1 = (int) Math.round(dst_corners[2 * i + 1]); + int x2 = (int) Math.round(dst_corners[2 * j]); + int y2 = (int) Math.round(dst_corners[2 * j + 1]); line(cvarrToMat(correspond), new Point(x1, y1 + object.height()), new Point(x2, y2 + object.height()), Scalar.WHITE, 1, 8, 0); From 20267645538391eb78b26b887ddf6615f12dceae Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 24 Nov 2016 17:36:11 +0100 Subject: [PATCH 43/99] new calibration boards. --- papart/data/markers/A4-calib.svg | 583 ++++++++++++++++++++++++++ papart/data/markers/A4-default-15.svg | 190 +++++++++ papart/data/markers/A4-default.svg | 130 ++++++ papart/data/markers/ExtractedView.bmp | Bin 0 -> 614454 bytes 4 files changed, 903 insertions(+) create mode 100644 papart/data/markers/A4-calib.svg create mode 100644 papart/data/markers/A4-default-15.svg create mode 100644 papart/data/markers/A4-default.svg create mode 100644 papart/data/markers/ExtractedView.bmp diff --git a/papart/data/markers/A4-calib.svg b/papart/data/markers/A4-calib.svg new file mode 100644 index 00000000..59b461b0 --- /dev/null +++ b/papart/data/markers/A4-calib.svg @@ -0,0 +1,583 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reality Over Technology + + + + + + + + + + + + + + + + + + + + + + + + + + + + PapARt Calibration board + + + + + diff --git a/papart/data/markers/A4-default-15.svg b/papart/data/markers/A4-default-15.svg new file mode 100644 index 00000000..70ac8300 --- /dev/null +++ b/papart/data/markers/A4-default-15.svg @@ -0,0 +1,190 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/papart/data/markers/A4-default.svg b/papart/data/markers/A4-default.svg new file mode 100644 index 00000000..d62fb8cc --- /dev/null +++ b/papart/data/markers/A4-default.svg @@ -0,0 +1,130 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/papart/data/markers/ExtractedView.bmp b/papart/data/markers/ExtractedView.bmp new file mode 100644 index 0000000000000000000000000000000000000000..264ae961f71086f678796f83120a287d741f3fef GIT binary patch literal 614454 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

`&VbBarQG0 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

6Wtecbn;}H^!RGg}fvKRaXc11faq^sC!hkYEx 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

@}oZc$5PF34cj@pItqno5(S{%;o84@=fY2 z!Ely@*X|4kLaAh`#0Xxju83T=g4M*5Cm5jn;t6mkdCfC5oYVAri|+rJ#Y!VGrua%Z?3OD(&*d{=(|++P0bm4T?2g zrlpAdSKzN4%#}`6XezvAx+3E<#2_bZ2F1KB(Jj?@#$TG&g&o}R;itjfH((2R+S=33 zt*E9Jwm!`(CK(dCvNyAKfQ%FM{x+76r=DYdKy3_)Fa&8WLDfKc3j+$`_)O@LOpbUk zQO{PO(C@O9i%_!8^c>YOR-XsUij#efjmkSLF1UcYl_!FED3WLg_CV0=g4ma$#bf>w zQc3;!^*_8}fF&%{1Z%R$iMYyqw~g!#y;gk?h~)GZ-^r=<_|(GILT~X}oFN%@rDMeD z!+|*&VwFo(6PbDf79!h#i;!v)Vw$r&z}+7!dBSEQIHeuR~ zlGfsk*gOfgPiSj#w?;w16h%l>nJkhw1L8T7(l@fU%iFIHkH1}CeQh=_LxG&;#5z5> z{&8Y$a&l`9_F!?JNvzXzDn_zS&F@Yvh?rhEoZHkeTzKo)dTb0JFiY2N+SiN){}r}5 zQ@fEyl`%Tu5~~M{%GralVW5g#s1JGA@4w==_L*e7DdDdubG!trjf}tPTpNjwT5BiF zmXMnv_5O^*6@&3hWg3(M33)+gl?H!Dc~co06B&HD2QAs@+|Xcx@Rfj9WU;-w{h4F6 z()W7fK3_5sFLm0t=wSJ-2n4Yr3x1BlCGD=C`=akv&}*QujK9(<#3dHUEANCMn(A%l zlin7~Z5ABOsd?|<6bL@i7(wAPosB+Ei`nIL_GwH{B_tFL3p~l zvc0spajG@4IyGwjivc2Dz!$QV-~Z}WT=%*tc&}UV?e$@<&_ZfxcSM|hW_ zo4^UJPeyA9j|lQ9dTF__VYHACP#{Z`+HomJ&?32dBu~(%MyA#wJEKE^OwG$ZW)8r$ zDmIRR%iW!`eXMnMPhoczn}-`~dmF2}9M_k2*5E&kxL%|FeNI4OE-TN<`bLQ53u$zH5DujcdZ%g!{5_|ba&~I9Sp%U!n$(ydes#$w`IY1A z%vU~VKlZ{u{{erYqa{+B&;PN{@>m<@;3uQSScH8@DW0q(cuvzb1kWTX5QeZ){sa^d z!-LYUNFIwH=;H=|*Z zxu=aDxG})JnL3LLcOZj4x1d~*e3Pl%} zZ;@_LB!cmiHyaF={X!DZ2U41IS`1A4Cx%0f>CEV| zxN~QSYSIhHJ*JswY$PmA2AXZJ?tWM*5KCO`OMM| zn-jJu%ndv_v*U`)U}7k4T3SGD`Y1^!sqdh#Kos%E+)ei7yO$HU%d5}VS1eFpDgu~N zTU+XB`1x@G!BfnvnPL(ReySTEXSe58!Fs)l>1+nS-kETOih*=9UAw9ezYZS%y?6hQ z*7Yyc6e_fD48K5el)Dd^+GRA`^hFCqBH!RyxcmGY8-6zbB)_aeNR&}h;r1X5ACNTn z9$VdeM#nmwvEvhHRTH9Cat*s3p3U#`rZbtQ=-H$jl(Hbj!TJRW?NWWC*veHN zZVyMD1RclWhwjX`g)*&RNJxL7QgVNoi#+XyOZJ>)0`y<;EM z^ydB!b5`vBa{NkJStdML3#wx?@z? zkXxhv+B-I|d4?;%7cpP%mq{&ArU^~LWuYM|U%7feTkq!@2(AYC=CIhNWGU34m<`qt zkoTE|%G}R>BvRmcUtZdt`UIXXe)_mPJ+(4BEn;Osq1@Ql9O`U(SHK<)JEK8o)C&P? za2ro;I<4hgZI*%)t4?b(=$sZ4!&yR3dzf(8f>ttXGxNbC(MY~nXp2H{ZNR!G2Y(m% z%c3M#ex;2T;46{{jx1=S;LB#~0wp%a4tAS=e@_dOu&q31nIb{p=W~hq;ehWALRREt zm%lU5ukm-Z=@KX00D$lC5rjhi-N&yIT>-+dQoB@aRmz=eRji-lcR&~>mI$$3r&Je* zps)vOva#2=hJAM2M1=A3LioYxGD2P|!UVc#z?be|x*#}`3xmSNTqTptN5jd0Kj!nrc*^_%>OSd6EEi7} zndXqh>oQ-@;d@!>l(}|n;UG^2xBbie!PUd?>R|vtU)*((Q6W*Lj$dd6Ls^~C!{ob# z)QUxw9uOL`rW?tiOqd9CeMAYj8IoLLL`LAINSl;QW z$yCT^4Mx|o+DP3>p*mKmPLz9^-6Q?6)_QItO$$Si!k22#ZM!P<+Um~C^y=9A*|GO? z#JvTaIv^Gd8EV!3Ju7NNK=Levc!Mk+$GKEl%q{gB~2Itwx@b$uvxU zIIr*@mD;xu;B55^$i{%t;k~4`McyOumnnM(TFd&*iSmF{!x>GL$xj6~;m6LKCB}fG zh_+z5T3tbQ$ss=KSAhE;QCLohSe)hHOQ}l8nD4GHlwmh@q(M<^;Iq~09qek{frKZR zaQdPyZkuo_k*(yb9dvGWMzqj1#s_l!#4q2YNmKH5Z(T5S`yo@lu(%Uo?#J1UvB{O0 zrES%b!C(!-Z-?2Lr`VHY{MEy+0M8;G7V%g~EK?r^k*r;O_NBk;NEsXt&Tw##qIEcY zDwPL%gLiHHXyW6>$B!GI0OC&@?=e^TxHi4Cx31Ei=zSJ%idoXwdN5S0fj!0bPogha z3V< zGOK+uQ4aW1BwvYmxz)HvA1gvmfkhUKQtO^p&~6{2Lg7`|8IbDAw8nGJD_>}typr`5 zP*`l$*gta-jb=CaJHNO&zo=MRQLb<9?e1w#&&>4o1pbK<9y;z+03 zJ_dZXYGXK1Yf~tb6HdEM9^c_6JhX=|-~` zl_`5XN` zaT^6+LTkw6Mul|vIl7gKh-$UV?xj}i!^uMk@JV_-QDAp{ZFgZ_v9i2Fwr)0g={ZGZ zegE*=L;f^)`E$<JilR96MTQmYLM#daiG zFqwV3`)A9ms<{Ql{NmQi+V0-Lxyjs_2Ga(Eb9Ya>x~5uK+9Ec#4t5XEppvl>FxdhQ52R?yA7Kz%!eH?L z(7b1SV*cIRnRjo1;CW`KO<`TQv^Tf3H@mvOvZYZQyn#e5p6@Wr3@D_d6Ox(6VOC>6 z1cfsLzX(YID|)HglmahlN_}7)3HdLDa*iw-H0{EBlMlj*QzaMDrr~`<*ok}wySoe% z5eP2(YSP2<1%JXGbGw-NMNckjE`H|KBkfxKyRVmzKVLqgi2KZs^+&SmbK9osWMk*( zNNaL>V-zfCaG;j~-D8(>Av;5f+~cDoL*Wza@vZ(XTODq&9@t7%7phE)5Tys8%Y(Cg<7%RMIJzX zmJfmY1;{&!9&!Te4gj$bQ+>&ldbl@ls?H|o$$xjL|Kf@qW)x$#g?N=x1sOL=KOS4r zzlnK*(DdS^AQ-1UY^s#s0WRD&a&&t)Fe-QVzuesZ8c$RyCZgw`p5L08S5D03vk~Ej`!umdA;e9 zkyk#-neV8r02UhjP3EdLXAtrk{GFZOn4RBTSlrs&JUBW$x0pT1HPfjwYdHB7Ph}!r z;6kV zI=Ib&0v4@Hkl9t}(?DLThXnXbgQ29c#0XA`_OL>5E=~kAOCf(LL@70HX-S^PMX@-- zjNOFhf=r&C++3X7-dNe+Rcf_|Cd--2Wex?m6- zb*S1)(JB<0L{Y*)fSBZhi&dqeFO)t$(l0M5Cq68E`na^RynS@2COXX^9Q z-+|!Un{QA(e*$747*G~3UVgc{`g(oy4aqkNGNpE|Q7D+oq$|Zjqg-kc;79=|skAHg zZoLi5bb}^`rdO;5v(;WSTMwnG;dG5-AX)LoiUhb!GhK$hIg$B_K%Xg^(`j6y5Zn`P zgs@dz9?T0W9YPZY2udXn`hA3pCJQ@BcTvj0^VxbjRY}Ac4_zPyX0$r_uf-HJ=zUr( zGqX$^I3vxgrlz+(ecJf+aeZcb3tyd$%@aiR)G3^=hbWxf*MB-dW4hV zIFSg&2u?uZOcE$hhJsEvujWWc+J}vV!=pC%Cs1_EsX680NPA*S;TAG|* zomlTnqtyo+NwGDSuCPqW=wq__5004aen9dI_%19dmsWQ85){_yoo;Uw zcAb-sI2b5ACcZ7tRANYQJ?%mkz*oS$3 zt8JA=XK)F1N+99osflGHNm`;S@eGsuk`Sj0tJ`ls%#DdH@#6b;3)8dPs~cDim=rtu z)h#B=oFARJ@qY+2%Ld5}mO%`=CqJUQUm6S2zx&p|2Y&^c$Z2VZnm9ly!7fEfX+Y!y z1yeo&`J|47hE1SDJ2U?xU#cq&CzFHd~q(o&(usIn8ECInj2N~P5lC9Rm zlr%?)q1vt1DN#{>Wb{L~Snf#rv@0MO{Dr0LT|)nUxxD?k*1DpqYjH-=v>$2hhZ-v< zsCi?VYMP>dv5~E|Nk(eG`o(>hJ;TdiA%9S#BcI-YF(UWBw1%Il>mkaL{JQtH4|F(~ zp&7_RJLlW^LMsnZR_mi&m7Eh0^opQa65531j?D%|2XTA65GFi3S2thoFnYcImdm%y z)&Ry$D~hAlt>aat8d_sdV>37+p>z#%U|NakutUsz@$f6o80@LU^}VK5UmmwD43y+x z469I;um{8Vr7dzXR38sdzw&5P;zxDR#DEvtA343~^t@n0PWNS}b4O-+sR|a1Y`E~Lu<1eqU!h^iA2-=S_3s;Q3k5Ha+UcEZ# zb>MiV`tS1*Mq0%0_$wyHN{t3DN03+4e5D}&9rg5agCXJY_z`5<);IU(=M^(EYaDs} zAw>}g*=;!PWu?WuRju^s-_fW|tIJ9P{B_v^xm2aYCtU8fs{KJ*0CB&4(Px|8=r?Lz zqK?@*CL2q_T+YF*hgNI5w>6~>D+RB+QP_!`;*UBYR-}yrT=u4za_m# zyp8X2X;_CzaGahPOV;G4RU`pR3p?AJ>XSXg`H4+{ufZpW+vxRK0v@x^f;y1G52iwm z!JvKFgLx~rOWA6MO{PEYcZGb;AkBV+2mCd=4LU1fw|Yku^ay`Z&k|7UpfJzoC?n?1 z%wVU(&tzMktLF+0R{MHmz$Tgf3>36hV_I6=di&I(X&w_Ggjy-u`rZ_cLE|^RPqndSWhTn8sC*mpqO-W(6Fn zwySkW*Fmdy)xEeK-aKAEGK_$pmpi&1DE-h|3J@cEfRQHr@iHk%o_!HpK`BJpMT%Dt zECwU;;q!FJ_&X4-wE}-(jd)Zc+l6|k+$k1X*-Q=pPw+SB&wAZSC}^}{Mx!4eFlc9t z-0_l~npV*2^5m501m)-4lc)cz>J%Tt@YSrc)<;mKLYH4A6epWF%y*>>|`)T#l z$CZhR<%y5WpC(tQW;f@SwwE^!Hh0u?+@Q=smP6hL^gxYzeF>w{bI8oQ-P7&u6NTbv zbK`Jxg93-<;6SfEv+>aJhnFfeG7Q*zaE(|Uaw^S-o* zquuhvhxzy8vw-i0;_%$ymRc+;`11h1GX5eAV_{)quhrX@)^~m!n|?b!`+j0!{L>QF zvim2FQ+@F0)V;1c+uYObYOHkkyIJUpT^##KesLNU?m7&`xcj+(_Y?RlL+~^H-Uv4p z8Gk9XQPYR zvbEB=S~SH>4JOv*_)MtP5{Yz0UKv;`U?gbsOl6S+^k|Oe)+N7V2g|;3aQ%%;gw8UD zH>G>Fb99~apT?Q1(s^#IhWC@$W;Ph0t^5)F=_sMF;1Dhzf4g}24G2c3I={NNxW146 zN^5X=d`YOh0=;AO2p5`U1f=k!?bIpQp%I*n_G#=W*tv0(ZyO8^hV1{DlhwIRXB!S@ zM04(7(jvx*M`!j^v)>WOL@B0&+B}kC=-4mA`=9Bv6RqwN5z%4iOjaw+^#FFI5HsK; zNi$u6g2m-{b^G<{%iq~=^AVxhV3DVa#8#YOC&T6ktb{10Idq>nxwDFi@x_VpCD#At z#U0eG;BU1u7~!wXKaVnBz9jjT@t4I@F8=Z*&`jn_&KnIEVC{fl8GnJ}TBXD{JR`qp8f$M%Keae+n$~Qf3X8yot)ZQUOC!36p}nfHRa1a{v#>57SnhESz-jle2YC8 zJ2CdmJfzfo8D>FW0EMA+rUA`DGB`V@n3+{9E~z#)kvE+2BBc;nGFPrLgsuY%4Jy@} zpc0HORr^;ETy0lKH%iTHrWB2&0zUczA_0Hc&qM~o8=@~b;*Z7xu~9^P5hCmj%MtQ~ zf}W5#dP9D9z-{-~%nq}`V$xfX`-k|q;iTUaK0mc76-SG6iiO#&`5A>2TXQp8v(t(x zB&MHMKTNEA__#VTwGPn--M2w5tmbF<{HXoY!ZEHF+=nUV1e?wTJW#qSV&asTBW z@O}E3^~W1Z?4Ri7mX$M$ipkkEh=}RA_0_e#qeG+7;KehCHJ|p12v$Y0LX!Fjloym~ zzD{++7fd3NqDo7xmMaX16Hy9z0H{>Al2;72>r6kyx<|M`NOrYS-glG3%_&iK`7`L2 zne%u~i;yi4jn@a1uqqmDv=+AC&0?YmsQgHtPdCxh9qGx-Rc zJ4W@EEj@DOE*5k5--eGr%a>2k5mK}%;!6z1^F~OTb(itg|p^d}jIeE$6PAE;cA ze~|40zC5-(usp5Yy$!UK5>|pKD1WA>RzHj{yni!0F}Aokr^NjLg?6KMiDxhHIs#vr zf0pxKnS2IwWfTU2c^iwB;GEHf$4iMAyKWJ{aUza-vODPAqBKTt%n8w#$Y;Snci^!_ zh}1($a%KCP*J-b8VgvHBK?Qs>g+?k@iziDSUxMxN`r7`?~bSM+@#^Rwg_{(iw zD+~S^|Gq4K3(-s@5D$7Hath3mbT}GJvJg=YruT{jGah5)I$Pfk5G?c0JW$jq<&c4x zN0LaTXkdATzm(z19ht4-gpXoleecbWPNp|NP5|D|4q#)s0s zWz%&ze7d45d`JV@BcqcU-I&j|Qi&=XGrEm@o}|kW^?Ot7*@}3QATyxiEGw@%Bn1!! zH{Hwo9{79nd5Dhlx@vUckJrP5xaWNf$;CD4+irU6i+?0|oq* z!53s4;V%MR@SW~9Hbr!}2wf=KBxEqfRw~8sSqKI)0qn#vrgNf#4(km*ibvZ!r?Yd2 zCpWMfo1@WkOM9$w*j-cGNZ?KTEc!Iey?D9VnobwB?XM=u}X%m2$6->6;rYeL3 z4CP~J=XDy~)(({0S`?D>sj*@J&4m)Qz;kDfyu5(Fa+95$1(O0-svQc!a0t~(E1$2> z+wb#+0AIq37bW!>w-l~Gz!d;t1<1OCey88(@OkZCj^adg4f}j9Kks+Dd`5%iRI58V z)}Ec}oixtHve|Sg8qT2l+uk~!pQUcHwKTuIvZz{J+Fx1PUtZi>T*NGKXL4%u)6^z5 zH8jgJCuQeQuhF}#?r1nsq8*qL9%3!lC4iL_jDjy%0QW*(58y_rN}#ffc#YJdCCdb@#U)V$%_kzr~nnpE6f$UBM2_Z#{kls z4FLFibN7w>7yP9&7kUBJD|{M)7LI6X*f~J-v5M|&pGeDt*xwdgDv-9kFA<00uPit2%7a zk^@Xs`^`#EiY~BQE4D{b&NYgeS}utZZo=aTdtC8kyvp$3Zudd9FUCfaL|F8YA{2j_ zTp({>o6r8q+y)}p1;IkdA?uCV8X+6t6(}9*U#k7{y(1%ojJYd}I%qwc{>%yZM*Qha zqEgAX%ehuQRZB#2sc1gWhB;ra0l}0?^Yucel1&y;v1}ro26JP}IBnRh-WcdYuYb3nvHf8)JE#+1R&6Qh+Z{JM5 ze<$)^3c>8(CO#}KF7S+>XiiK1<`TZMX$GJ2h|5r#-|TfJoUz&Qk6wTt;b9_HxWE~>q2 zVH7;PYe+u)ps>u~iIYAm=(`pVj+9V_N79I<&2rk0qv;+)gt&iIkirfx~@OI6gQs=#5@Hu~CdE&HgcBV;}t^p%_JG^s61AS1GoL z3`br;bs)*|r39aKUT6i`CBD8trMt99KZ3YVXqJx^NT2=Qgw^aj)j)yfk^Bbr%H+PQCj1J_utSVB$w-iekhZ1;l~zAjX@rtloz=N>q+Qxn zZS8B0bvCm*PXE5a8D&l`CpZs#@X3#raF@mS1syV49h3<$%pfcf`3$v^#7O>fbQCrb zjB{cRcnN3e903WB0FotwH32oz>*ZbEyuIGP$@eXL(cU%x*TdE0PuEY_9zF!)xxM4_ zH{;X)^#6SKzy0t3@?ZYz5C8h#$NuGC-xHjC|NSIf#QORno;+%;h4MF@Rz@4XEKz?r z4dEP!W;o%O@kg?#(U30Vu0OxLy?dae0Ur zx69PzGFnzFUQGrcJXY?k_(bV6H!srUqg6gsm>-#|16UfYli! zERF!#C?u6?TT9M9`C)lsTEX^vd0~fGTi)B+I9jK0wy-@rwTW%=cYpc#!(Tpre7CSX zt32E}H!>g49u30A_!7}Tiiic%WS7ZEjsV~?;8d!T<@b*l)3E~IiUd;R_2puhUS`G< zkV#>t3FT`LQ0L&991DLF>SE4BI1REwVT{_5r%9VOUi(!YGH5f)Ea$DA9y z+H>cT+H$UQ1^sCZ9-DQ9CD){rHRcB9k+wFg(yospH7(3!>tw-I3Oc1`rPv_&5?&fP z86P!y0q@CYsSD%-{v=s23m3FAd%|QNZPvF$65URnps`oRUv3-nUzxAq zhtQ!+=KKEL44b#9NlKr~AI26wO{~mJts&lCq!z!tL+3J?(Vj}XzkAA2wXLSdd22(x z#>%{~OOPe8O0TaTZEe!~tUErmXin@}jf2!ut+8v*oU}%oU12wK1X87Bp^;(Wc(sf3 z1L`%vm$goYU>Rip(<5(?-@_5^PSAH$cAooiMPKSDz+XA!S}+PmPOZp8ZhNroleSh=*LZCgHD}i@Us_TqgOQ-(6oi;QEg6 zcV-^^-I|=)URgicKe8GuVLCUl5>2C@;SQ|!WEEB_Ul)-hYM?Nab4awShtEwv%Hcw;4?M`l@PeWgAVxmf`^ZnP#HBJ(}WA z_YY1n3ecNe9(W--vvO4e!Bry1Hcv#VSjkrE}1MyXCR_6Sd|Bw1FhlAjGi&= zjnHgcB_deVGGUNu3sR&?-7IS$8*HHSm0vygryL_hmLXVVQg}g2J}T6IA)ny^ge(UV zTe?-`4Vy@;q>v$4-oJ6{KHt4GR^NY>!51KoWy^zK7IH7C3=ftQu zIA7U5(K5`Sf)e?cyPyAEB)?KwT;`lfhyN7v>oNt+k(8MtY^{H!@@?C?U_uQz?{g13DJ!{5PmO6iRAL7B-|DH9HLn6Wf>FZ%Rpi2bRL&Gkx0}U zbyyTEDV~I0nqE}7kBL?Sx~pWB9D3FT5a04*jVGJu3a;ebf563@*LD)Pja)7^t7ziam8Ttqr4{F;xMCPP3&mqstmOPeU@b?N~{N?o* z)P^Wh4Hh>VMN9xJj*uBEay(AWK8#TCz^ql!NZf+IpfH!9Tx18;;ZhQ?3ScXQd9x~_ zMIEHxLqbLsyW1LG^lz?2Yt^kRPW~dC%^KBnMYfCke~VIveZ`&3QLlVXa5r!f5BxKS27eT zl~mQiU$d3LMhW=mD9smAMP9lh-6r6R2B6-PPii$1fo7#5z?Ue{$eYfS{D#AE;xz<& zn8qMdU@x#M2jyMB*JiSVxn`roWUw3cHvPHfRAV6PI6gW%IX*u-HPLhA^@L;54B$(P zL73JaorC&xzUXvYZgkm`l#=;iw`I$|lHl7?a4Ft;?8q(EU z3}m5*v(AEc0JF!MhEVX7Tu)~=m|Rx7pMMyR;t5~Q@-y=^kct#InXjgV8Fnp&F$s-X zwMM?y%$6IzXwu~Hs&$q#v(x4Yhe#_5REMt!%r45!>tf@oAPsv$??>H`!4q{>fYCPZ zxk@Y7YM(RWXZ(e|VO!W|uFXZ3-34kWy8O_U3Gb=r9!#mD_8EU!^GEqFiV;aJ$S}Ak zQsB$`ZwQ`YhYWV_+=}v_{`rUh>%V>XU;pLJ-@cz@Ue$L$P7{Cqe)7Nnb>h1prr*As zf6sdOVF^2t2?TP}>oW_Awao+70TxDP+A2j-Y!p*G4v!5Rn}^fWYae;8Czd8ZuC6Zc zskYD5C)QJ~lh9}#g!a^_Idh(zG0@X-bZRG5N2aZP-Nx?Ono7H}tzO)sH^Pys;4k~_ z?$`f!`1Et{;VaRXV(>)%`x1|E(eToUvPL2B7vN?D5=k`pt2{nGx1)Y7iMFF^pKU7o zXHb|EXcPHMd|jjppxF9Kk{dCDk^p=u_vEmpP1cwZ2L8HT@pP)*X`>%tB+wK7jiOaw zVvhmPi&02p>EzX*FSVkRUyFuWj^ad!5Jmy-J;Gn~&(C5o-b{5B!&tQL(Hu5Vr&==> z3Ir%@HsNyb_xqED0zD?z%vG=B5kaxI)P0@gLOV-A=P#Zcblb_`+as+8(^(Bzs8K%C z^GlMLj296fg1PAb@pz=!79T}FJ!mN!kp|%J?KRy2cO+=wFM6j+8KG$z#|#YaYz{1F zTmbIzsp&wiM@s;yA_XTp#FGTxHH30ogUcdIIygHyu>yZC%Rc~OfPhy3W$;({M2)X7 zNt|W>!~3OoKhE(b3&q}!PJim8zzQ7=%`1a%$QzIN;cwINU?v_&N4$x!HvtMmK~oDx z#ZA2%AEyrEc-nUaozx>?&vSc=c!MNXFMRM>E>K3#L$y;PSDe!YgvjW-5ie=*H#B z63`~l&hjpf{Togut1H_d#%Yb5fqX_kFgLRS@~$lIY^)-oKP2rXI8kgIkOc$8WW=-6 zYdpxz-+a%G=-uL*@nw46KTK_oK~PN6V!tsywfSLMK}<|<5g%}*nc5nkR1hC$lv4{k zvrBucTPK(WMKe`0i-({7{pu07bGj86SPw@e2~=1BUz`DCe*hVFLEaJgzQ$k9N0=*} z0MH@^*N?;NM_ePYk7&YTVJu8Jl}#)KuR_c1ifPmqWV)*>yIWf)x^oJpsT9MqOBfC# zt`p*RmQ9ZG%E?hqemMffye=%QB-^pkjUj)@5&Wejf#`@7n8E}Z3SH-RCswX0G7iXa zE)b*yLUExIrva^m3KSNuRW8FhKZ7sHuZ+J5nvWz1mh)ekh~|hEnpd!sUYJv1tGh72 z$D};K7h7G$wvK6}E?*{@Z86n_)DLoiC6NNCOhJP|04`cA@<9R!=3D~h-|-j3r1A@T z;tz?j0LE*2y$i6=o?1`T=EDQS9&X`E4ecAdDlO|iH#tHY`VMcDx+*13#D0>=urM{^oPgz^VmO-p#5s1# zqCP08q(+4EpHA2@g1^)_$kC+Ph<%WPbMTiJxoH7kZbkZfxNV3(;_q{ngtzf#ZfV9p zWy;N6!936YpZ^8$eGBHk9b0@m#x(FbG4A|_>Ay1W?Je^S7vGI9NwM(m!{YmirSVV8 zle6n{OUmW7-PQGdB!6o(k*)910yZ;COWpFs#3FSiq`4%{sB`D%c9xeJeR#CKe!RJ< zQ7X^2Rp-jx^DPl)iruqK)#>_f7MyC1mjB^?MP$JK`(&OSG>(yTY0EJf z@E7ETe2#=Nb}Li-^hXD0XIgX67cXS1B3VPk2!V#R0@8~@Gs)bdaN6q^X14S>>Wt2F zgX4_ueojm-!~jN{-|7luBI@?10ujbTRB_AHYMsl=dsCAepC(pkrxd6zW#Q$_hU65&nvkD?E`H#VhAH(9RUQ z**GDGL-rqz<)R6}iOEe6D9v~etPe`gMy>wb})O z<<=yuMXpf;cCOh4vH3v`3KzG$w6&!;q-PVoG49p~=g6rAcY!0E6!<0)7#Pw(%91X% z0!g_x-G9XvZV!O(#`-ScOVE5YKetKS7dQ*xk_R2^opG(z$408a9FGt6yu$0st>g98 z-MKj>L(|^9UuLTK*rZ}+@nC-ScxL5jYKgJtds7ShQww`j^CBkac0bPSOiU>mgvvxV z=AXX(u=-|fWny}BMRDv3WLWyZUrbg71k*?;$s~Zbm-R}NapjOj{&Vc9%Hy?Yu=_)R1$OX(c(GwsIIfALwB%y~qOPc$cr#)MH}f*V5;iolX}DFHCj zi?kPcA(o6Vgbr8K>r25x3;a!%kf5+Z0(phuvvjezUbt|O_Erdn7fJjx5S+^~j-dbw z!$QlD8i^!`cs$LEyaEand^eTM!dDlI__Wl-4=M9QnoM3O7PvQ1!m~r;>CS_^p&-6? zaTpcyPz=!2$EJh5bI2%)3!7`lYb!^1+GDFbGqW>2x3jvTK0L8AjTCYor#Qrl&;o2x z$VX)SeSu(_8l>qA(Aolm0mnM*bPfud{W(JJq6lykmo3D)!ARO0NVpLTd80N4>)^?c zY62@=jYX|71IlOTSc14MR?^-$f-WdZstG_a`Ys{y!h>20ke8n?RGmfah)dxF#)c_h zn7-hIFD#sjX*OhJX9Hyp12veXE{$B2@mGdmYW?iDnf}8LoD1C>KG5&U{))yEVG41> zEQ#Mo%)H#9;IGhGk*vug0Xg}Vp%%7N+O3IyCBL7e{6l1}hC3FD6+Nen;B<2Bs|_Eg zSHJsV^7|jAgjLtX%J_$sx9=8yd^5+m)gRu7foSi?mUs~_5rSIq$4Tts*Csx#j881l z>HO~f{Eu&De)w_vhc{%(bMMC%cu};EeOjBGSR-d4c_D>inI(CF;@Dh2Q7W`M49wj* zMIyMht=ZhsZtb0IAL^;qE-S&`gT<{w<%uDZhYS1y|9tWEim@ z#qvv&tSoh=-bWiIL?!7Ga-B-K%M_kLA8%ygl>zG~iKf6`4`<2hEXUxg!OrU9}mn;56^2>vRG+379LrzbZjKd#I8 z%fRJ{F>WEicY~N1Tc7@;=!L?;j4U3DM+?ZL^;#Qxt(}d- z(nO8H)j28FPW%=Mdogg1@3AjolIW%dVcy zIVgZR)CT)R=~wX4I9h(V_|ApZq_ z+i(!r<*=I6Y zB)s%4U5f`qenxmq2wstyC7z?<<^3owu6V3OfV@|?pKtHK-rVv2&p3ya%Ux7|hX*?B zCJ5vQDCM{@ip4H+3)%1)6CR|G)Puxa62>e_bHSwYkeK?!iICYy^E#0MyvARuS_Bng z6i2KNcqY(uWH4bT6+r3_DNSCSOqKy(5nu{CB`E|17wX_|rBtt0uzhQasI}^K99K|b z)j(B*Sk!`3sT`yFS*h)b&w^Jz}LZ+TcGsg=R4;w{^5)&CH5|f!jvVb52vWSSKSr9lc5u8Ml`Jiya z&M;!p?u?lE(9B-F$wOG|0d_KZ1pM@r)%x^+NTg*8X9)?=8ys_`W}4MIT?)m}0LNXv zh}$3aljg^>sa&IkP_uhaUpB+sY0$>7v@Lu}s;<@ zbVPSp6N|}Kq_k32EBtjOz$FEyQps2iGT&$BnKwwcF?aHFynaQ-UykIz2%ho$ft*LN zEIdP2b|zxSiJH9 zYwPjF_w>Jv&Aoj;`}W<8aQ%9Rv}2Yd-kVU+0)i(uB$IjN(&FC6#)(pSO6Dt)-<@;C z>g1c4J$+uGFk=Yc_VYtJ`w^d$_Wr-q9LExoYd?>H6z$m!E%@LH0j_FR#4D-|p>G z4>)`L`R?1l(J~A>yS}Gh+dWZf47NZ#Ooal)HU3DYHjbSU62@FThDc8el-RjSFIRb1 zWz)VyV-X^;Sf&=u)Iy0OleWm?=wc?}rBHiAKLsUGT)c*KF#R5Exkn4a>k|or<+q79 zJg*Wrq`h){zLr*uyT_l9w$dT1#@TyU!`jG_Nb&;mLP7Hc@hI^?wPN3Rg|-#_3l4Ozf0VvN`LOCtbj7i&I>#JQQ( z4`Vaq@2A%mlt(+Krc>tTM0meoHIZjGSaUj3_kq}*vRS1r!;Y7`i+hZnp5*Q>(i!eL z?mbN1Mcn+T!81y}WX|%3G05lj5ARpU-Y$>553=$Zw3WfP)VL(djZ40igB`-}L0@W(1ZRZ5&o%-g|IJjP)PP_<1kqI?*$V*8 zQrvaWQMa%0B2GrjZhOpO2|2BiAhVmo#X_=H&9$4wZVMnT_gdv{9fH5qYSHc0x&VTq zpf4%4vwq?~1HJFTKEgvsFe@h;Cw5Rc2DATxf}l}F1gh|AlSRALqF?)x(f~ases9EV zaA;5Tdpjop?)vHuN3Q9fN)4KGU!7vKE-?2wbZ1tAbQ|O~8$Awth#4I8kDw`{sJ(q) zSX@6`-cqZy4g-!Bk&+8JVzkT&VGHI>-t?I{e5i3NRK~?s_0%jJrfPa_Z+78;;}kPW z7Pgi9dS-AZa}D}uS;}Z5x_Cw9zUfo?>-(TN8-amc2eZbo8o)3!D@9fkJlK_pds}d8Y7+8!! zWwFpDpOsM+cm-IcDg#}0!U7u1eH|nG9SP%kGaEC&m%}^77H~0lrA% z;Ae!O0%b)$TN&Xm5KN+4F4mFZ)vE1Aowp?#Q|MC=_W(aRmB>e^i7)cCzxYghA$#%&6OMImUCr-92V@Z($3@b#bL~tzrzuG zNt(#eh(aPU2pf_?`kd*<#0VW1I9zBdbT+Z=r?-^)m&N9Hy2HLek}R7)ty;UJFZ=4| z=iB>V*;&b3EHN(zmg8lNCYZ~&?jC-=HHAhz8PD13*f>(Pb`DK;~xNJ>cV(jlk?7xjm^J* zKL-lGc{Ba)?d*pSi<46uGjrSX?3ve&6w0%`ebeEw^^iWSW6SQ5nVK)Ldu-l4<|sl% zoS3$;fYz8!OiU!JHrdTS{X~pF_B8}^E{FVGl3y8rFJN)O-;4WTs;Jo4E-Lnb;1i<* z2=*sSz;29*Hn|2TH~?UU7onk>QA)XHqR=AZxkebN2DW&SJi!S?eCFCmrQp(#$%4PP z_us%!kaV;N2*Uv>#5!$xWBjU{)URnJ(p_rdjZLA&ct90P+;lANu zPtWn>2;$VNIkub}T96#9uN*ARQQJ~7)DK@H8cfP{x_VK;J&7W()O;kPEvnZ)1nF@7 zQs_)*I+Hy4%avh;HZE!2eG`8P$-@U<3pOqIL)skye=x~XAfqs!18v%})D4O_7Rp<6 z-kpsT)u#GLrPFI1E^{#CP9#J5e5_nfR*6!wQcRYMNZqovR=Lx`F{9dTRoeApo!+*5 z8Y>cfQG{Kv+)pIIF8#KIfL%FAn(%Dub{Rr3DCVnxukO^mzkRZ`w!68CqHhnXf@`+Bt{=uOlz_3Lc&Hq*FC z)vi+2OD07}=*~;j9lrdTF|@O9W-j*fx_V7U4Si1X0!+Wj;I}0e9;4^iDR0 zuyah=27<5ee}Y?ElKrt2vPEe<_g(l}E&|ssJClW~>H&LSpf^+F|AyX~pYNb&~ ziLjgtmrIR$4IrkM0U+i9zwGs{24uDTjXfMrFp_0hLp_~lQgAB5yfE&KRFUcfqe+DS zC%Pc8DS_lW<@ZMMTeRDJUJr$1ioe-7OjoifBOTOUvxM!EfI!{q?(i9^j8#rnQQqOX~*5ye;{cKC5yW!`uTO$;?_PYtYd@2ch#V%>O;!BZ(uQ+PgObA&%7&smLEH&sI+v^u5?B1~lKuHB z2nKw+eSitu_M5@*_Tu91@)D1i=eW2e?PYT=gD(`>!-W)_Nav52x1UJ_ZXSO=*E<)N zx0jc<8D^(Zn{iOYXb6f`JU&r~)*K5m7|IGv2M|IXR%WB#0ZTkHwX(dpwWrcpOdcw^ zv<}_gFjbJba?Ccm0fl)#S+j({c)VjUOXiznq8~?o2n{meFWN{taH;xX&LDPEKTN&- zae8rHd9bTvx@$PhaKKKVj%g+oOO4W0)|zCySaVC!Vf#&10^d$y?vgqhj^82>pJ{O76qu<>Qr=la&?q^0FM9pRBEE zHa9feTlh^`)NJSW4g0&gJ=Hlw00~a^cFwmI8YVTbEgvq;@6Jtc!>Sp~;Y7M!Y20*% z2wA_j22V_tLiz~ua(o>EizV=dzbe1rFBhE!na7q5^Cgx?g9ofC0ADHsEa{t@dq+n) zBLsy5xl0V>ayv=GDIA1OPi#9Inz>IKi&I-`^Si1I&7tD-M0u{+(Vg!b&1#F|+~qU- zBd$m~2rAQ%1)Gev{hgz=MFpW)!yD~j53|X`GZ}V4UQR|aLS9G@@?VnyXQTrzdnBc$L;+u*S9=Vn86AS^DF#i zgDN;82qHq9uwSKuBX*Ve&tDMz{^ekBMGTn>eR+F#_w@Aijo?daqZW(%@Zb!}oy_;> z&>(?tEEp=J(yd|$?y$9hI3P#C6!m@X)N2`gMr^Om{I3iA0%;jQsWXNdpY8g{|Y}muRTBX_9(Wq3~ z!$ZUAse_TA^q0A@JM*T!-n7q0m7JYM0|Sa?2RG3Nk@*S_Nl6DwZEgVmV!-wFmYGNG zyG*i9w+=0k2*UBQqob2K>0Esoe@Fg2lHlr@d6r=Jcl_nc5d?#|GXBcBu#CSf?*KIE zKMFBKs+-E=<&|9mw-&&6b?s5KNVO_YUX$vG;n`vh4bH?{ADb7-&^jD=gOi%sKDC%$c@V>U@`^ws%=( zUXi8vZb~6W&{M0E)U<*}o=;5D3ol7t+3>X%U%y+P#9DA=SA_;)&%A%^&{_O8PZB9s z91&K&4JSNz*(>4B!6uG;9|CCFLo(pX?P0EVl`c0~bEUYwbcbz76w;7c+U<%B?=u$5 zPh=GCGs2R*FL=DU|Hh#jJ{$O}HJ+_(XcXI865+Ow%~~ANNKW^s?Eb{5H-b1Ue_nL9Qqg!y)YXlN^!Msy#l%Sa@-99Zo)MK$>6qlZ6{Y922i( zp6MdPB}Pn0ftWQVVj!kS=_*Uy6^joG~ggR)`rT z(vh%l3DfyEks3h}!G#6}?99~a>z6YxUrbT2ew$fa-8G!h>E-hICa^2tA$cOIJ8X7g z6hH;!3BG*rB+QKvs9n}gTwmTZykEtFljj&So{{4zKBZf$M`1|}=u z?fF^ocYAsHU}M9mJ@Ob$A*(fJGKY<(AkR(apve?482q|p_p#PtG6*9GQYQ{I7GReg z3S_EV8=^MXnYbRQX~C8c`8SnnJ;y&^fY_t!b{}c>?^icp;9zj!$@u%sgp{8!i>CR- zDVk5N7(Vm)mAWB5jKiBxd|Gk%#Npp;axrZ{h>fC$)U!2(umIiPGal|+q$7cOZ^yK$ zJXXx_&b(cleXCr2zrHrNtD4_c&2CfMOB&sl-gUG3>%{$I|m(CZ92IiKfQjIO)_KgPJsoCgcy=y|vWPB>K$qBoF^PA1;VaEY~fR#F@2xf5@YSGGp zEKGhpfeXFa0|XN$P-u|J`Oo2}fA$~$-o5=Mf<^Gim6FJMIFt15Go?0s3zskM@WfpH zq|-}6TojotH)pdgc&Kx1p>)_dA|735a);x^a<#{6%OsF?gOe?F!$k`t5#c%hgdE#M z^ZV(~{`W`xr9BiKBKopFA(#{~z;`qvo~c9V50huj9`srr;A=8?y>2`+3)o`h3*D#T z1}&a6;gqKwz$+hf8GQM{D4qkyd{gfGq(P_{HOu(Rt0coN$on09f!z|j33$Ie%9YJl z*~W^+J&roX7W{S~Sb%S~f-xG3bqM^CK$0*lKGA$UIc9S(jzu#pZP`8X?#Lue&JwZ? zf?w)zpH+g5_mnLRZ=77LVEFh`@@bF*VJJ-6Ajg2qNI3^vd zwzLX_mg_=ezP)9DF9c6a=+M`XQBNSNSzX4tdIuRJUo!9FhG4UXT+W2gcj5DczxbZ9 zxXA_s*?6MF8^jyOypHLdSPwmU=Z?q{>b6D=a;Ot!8;Le5tt84=!;z00OCWf``^&pe zzz0KP*v=GBWC(tqJU{opf9-++UjSEbidnsZ!VIoqWit&>ZtgEGZ=vdi+_=273qN^z zS+lsr%4Q33-<$V}x07oVEQRMcXP34YR(BT_dps_z>|h5vJ+HqO|DGf-Ho%TLbJA^+uTKXVm~->SzJ+!*0YzrTIa5fsonVN4JTgG?H~R& zy#IJ{#f1< z&N%$ZQ&+@{t`jGJcO;rDVt_;I2MI))j0x}+5X=-BnkCbr&Y(pW58f2y0&p51jE4ZL zSV;X@KjJUwd_BCq9ZjuO+7;}aLmjK zcZftRM-!x2*_obHP*W(*-mScQvq;v`nIn?RwYUZG>r40xNn4yZMD?hVT);7wK8^Nu zv%@S}_yF^L1_Fa2p>>~$abz}&dm)(-Z`f=6JO{&Sc6w`WdIxUR%+%KG{ElkFpgZw- z{JCg?R-zM6HKNH{EQO1BEs?0uw)nhw=7jC1crkg84{bE&cvs3CPL<*iUkJ4l@I6w2 zeTpL_6{~AUTf0`1H5|Wawpa;0{9|zUH^QgT9nkrLxsY<7iIK1(tMtY7A^6MMR~}2! z`@qcMlX!E(uka1d8?gwGc^2l?csXKcLEb1{QZm~g2i?Va(atX~?yk)3E>CYSOl-`( zQ_sCsFHUYQyc-#H% zVAMyHB*GT2Ni^sT*Z|5xQRp|6%ze#f3U~!OY%ZhDbhLlGuGm_dR;zIc*~ejnL~Ib{l$}Tq04WGb$9j<;z|fA7EUgh0{*I z(&#f>CG-RmEcQ5}U6KmTKKRSUAR{k-pRuhBzVci&E!m*}aPY6b7x-Jj282m3%Ss3m zxMJe}gW*q&Y#Qui^hgAr&x zubL;dWMKo#cRobhn>yGIyr&{U+7*FSg?%fq%fyTcMu-J;m|<)#DsjN*AYw`JUhs~9 z!p}e~eOZPyh1>(rF(5cw=>$_nt=YMp)r91-J!WgCtIlS1hQ6>6D5_qr0s2%>z!(=2ly7N zt#BfHY_zRyXy%sHi(I;EJBy0#MdVSddn@3G@(|)KSiHHeWA`NEFW}1)UWBa;-GRo! zY21Dq^0<Lr&+m5(v4fKdsKkQEHO~P13h6Xr$6^qTjDyaTW1L+na~eoPS=?PA7FEcNG zo`+;LJGBY;Qj2qYYW2yn&g=GO;;DMJ*ehHPvc)UbQmJe+m8sLSVBr!7WS$ajEawKe zxEc!sXOI_mJ;h0K6(^syL&e(hisE>2`EX(7U`2Vny-%7K$GW@G?&Qoz9z_U_M8W}iW&9lsx&MEG5W>w3&&JuAHIZfT1|v|s;@954 z!%k{NDxPq3fkn19^=@tQ&FbXqmC2W)rhZ$VezB;Y-9FhiN1cc-*Y0qyErp)Y(x2SWIx6UG%(ifxN&j`~iYL4 z1Bj9O-?A^5vDkxzbbDc?R@Whd)apqw|0VM_@JYI0vvEIS8kdXHof5rTn zJd(0{Ui8tKB1mx&fk$&KrmpJme;JMCc@PsI$vbJwJWM7 zWre`sC`%rstoXs-OuT@M-EH$5I4x`+Z7PKy6nRyP03Tz<_sdw8;TkFzsngIDNlsi- z9B2=$Rx=~$h~Jwy_kli1h;yM(CW7mDG>fMq&9m_{%#B z_zDQ_j`H=ME11&gZHp?+`vvvu>D6~MTyvoC=9>C&@4#X?4WK2AC29E^nLLJ9SH;S; zU`;fJ?2Ba^ZJ8}Bft27Z;R+7g);oQ<v&of+k(a(&??3v7=BnSX`^h-KkmPEf5N=OwX*% z&0&MTv$BY-oL0Slvbkg4)!6or&yGzVn>)q;))h!%C}(j5$b#HGFhSXZH9fPao|s;F zKer3om)*+oDXMdW*=;=a;Xy}OhUF||CQrd0G}rf&5?U~=FxtvNXZe=*(KKC<%2cW8&P z-a4`Qb!Ly&;DiLo5QeD11;y^FdY^R$)IJ>h??3%nNip_6=upu$fM&65UBfe5ws{MsodQuP^p$cM+Lr&e;HAiAu1~`41U+%H+ zy}y&qKw(iVzM)v7zJX;8_{#X(8SrJNJM3QFz*Yr(QG&qDhO~@G{O6x0fBk6=hO>|t zO{nK)w%1mVv|5+bl}aQV`4XxJ2+1Qp*Xdk?J2MoxXdM5vJe~=DPr{3I!XC1iXn{}Z zf0e8Iie;u!7zkh^K%S{)c~!f#dbF^72>Et;VP{2kY;igzUUi&P^!i->Vkhs}?7eJFAD5!?Tz>c@fCvBgG0w8+^K$5c=aGXCO%I zpdWYFbUvPKuu{EZfPyILuFr~7K(N?&!h_{9E0rpR0{B}N?n&huf)tC%zO|09mpsHh z&6ZYwXfo+-W`hIdMFua?o5i#l@MQ#TG@LQj1bo?LL-6BJ5e`9)E%F}0J7qD7F+~Qe z*hCp0Okj?Y} zukwx~9K`-dXchFokbVUO^O`Vx=Cd{!-;N*d8JG1&njtIX< zBw9=)MgL10xP-r5npqit<@q!C3)6-pgskh7waHu((&0h)Kg*pjYhQ)~l+0555qx>h z&i5h<&8dbBBYam_z9lJ{QG_$ra6%In9CF$(Txd4J1)Q3q`LHi;;ij~yU1b9`2Q@-T zam!N~M8M9Vl|cEp-aQ)}o%?>W*!|3Jcgy03wRNx{Y>23?>qM&WX4lSW0dg_BA#(Yi3Kx=8T`YnCGY1eo6%3VlYv_&GpO|HJ*Cej5C~HQSHsIY)&sI z7gsja>l&Tz)aeX{qglcCOXIiCa)F&fHHm>O>|#hw>B~Su%ymPoIS`@azekSD?MFVs z;4d}2|3nz#&BGU>LhnBQP7%yBLg#x&{NmkZtB2bdH>5!PBAm)40SlOWtZCp#AiToz z@s{>kSh92W=Cfa}cR5p?Itha~)tT%#f}Yr1l-}k#K6Qb@S_}B=0DozLHxDhUJ>%+@ z4(qM8os%aIuJyzDwY}-(?a9T>cXJ&76mO7k>VE5))CL zE7j0$+=Rqo^^9~>w%y=g;Gg1OAPI#6)>$rlpgr#y7H5>RQ>*Ne@jhb4#YM=F$71&4 zZOGj9X2@3VQBYrq;gfdCJktALQQuX@%mIEZNMG=-i8~=r785FBg<0j$F#hsCQ$PRr z+>4(VU%ps|+dMnFyRivTDiVs7bETe;JV@DdywThx5P$hXXw@%p`TYJOX5^k8aALgnq3f64h`1XQ(0ACQWR zfJ><`XyS?z!g)ld$nXhxrG}7#a7X$5?*4D=e}N|~tf!|@>Mcr|_vN>^LQN>%;85{; z<<%=uJfYsbQB1v4!U0n(YSu9n!ZVpt92{;N&BspvSvcZJCe9f+=kxJG4x)=U;gd5HN2(*Vh%fb?6*^9?shR$bT!F%=Qiy9Y|BhtTRuvJ1|`%-`ga(u=+lz6oPz zO?CA4z2fIzXMg^6hBRJov%4Cr!Q^*))5#Qb^)B`@J%-Xx5wVZs8z#??uLSr?HD<)b z%R+I`9gptsZXX%ZLsD{{`Sx~?7Z=ogG}KDgF;3Wn=l+XmtQ=2Nk|_d|nXbeB?a|Lt z68>ISVe+@2F>q^@Nv%((2u=?4KD5SIFCx96WtJ!NGVO}t^IyRC65nIoj}fRo<8QIj zlB!uEVd1h_DmRKnGBRpHiv$ac?Qo`=PnO86)T2I_R{;v}9*HTz5nZ{quUgw*Q)re~ z_U7j|r>0eJCXj+E5v}M>TrO`S6vf)25Q^o45e)frA=JL~xy-a_tLb*7ne)Fv@Q+71lRQ$wdOEbitizgvtx&OoBKU@4W%DH8 zgCH#hYSX7YLltOC(eTQhFFW7M1}0j_j>?dt4|L|)CDja_@9G8_zN*cGt-X_-ed8WJ zFk1Wmfo*T!swLUP7V?MkfpGCWR6x<-_NA}_CJ@JL^6~z1#DaIhj+onv_Q1w0nga>G z-_b}u6u4lp1FN4^i@ZYzf0-HLZ$RfFhd!uCL0#FW)>rpc3fwp~iq%~lrH*tq%oB-A zgD41t8gP*sdCm_{M~HueT^WD*CQk^zmcf@_{Gw3737@s^yXmDDZ>9-cn3!2nZyX(J zZ5(Uuj;PnqoSd8*yh^U1NTqU3a5HuRAE_Kl7G?Z3oO-}t{e^i;PW zejhPg9wS)3E!Dg6Y{?yro6o#Dv*X0-vN{9sI;14ZDk}zzs-)%kpo-&Mt6!{j5O+Jg zA%oSSHCT-{m&M_=IK4z;80~H#SSQ!1=lIlnZ1wEw?Hust)-;^)rk8i7mIUU$omIb@ zTKnz&>WlX)zfLUw{C4rD*YhvmFYg@-8@-3G|DeVn3Hc?=;;ua)wSgEET82)o-liI; z_S#o1lzG?v-e5Qw$q-ByIj0U$*WDhxfKb6|tRLYag+A9rR)(1{~DL-+&p#+qgZ;n;g*xdMM#1at4&+BkyO z0XrHt*A2wf?`kG!)o7XkU*HvxrDO=^iHyJ4+seh4*O*8TKjO;8NnmqR4|x6h>+FC1 z*W^$CGyU6di|?n_*Hn7ezUQGloe`Zc5+U%H$4sHciJfQy>X+#0@PV1x;Jt%X-($D<^$CBUQ5YbW zpA$gV6K6RQmN$S-K$kcELc0ew=>GAK2e5nm6>bvqOvdsrf1COB*QtpK#q8YX((>Ni zJkICq?@~RUSbzg>JV&s7{A--nC#KF_aF668dBF?)Kq{ z&H^!j(;9+P9yw)&@ILZHxNKY~HF$IeX$R!tGx&=wA+k{1w9psB8IY$XoY}BVX4wsa zhnF2Y4m7QR4g>k&NLXP=M8u~j@ay0PP(QMl(Vfu|bJvm=VcfegC>Y&;gCxm2yLV`t zncw^sZN-Z@8e#kgAOI{Yj@Gx#TKrW`gAjXowXv8RJ>o>3FKrsTFyl$eUajs}(v+ZoIjr8@BaqD;5 z75Iy%C_XBL7|Po{eqf59T<+*){AI6QD0c*BSfsBC+7-<&d)^=MSE42{L3R?JLc07rkVj!u=)`#}Y~|@nsaNx>Sir zP*?_H9-pVs;4kxM=;#?tb)>>{mP(h9YSzN(@_9V(M4ao1*t}7jCu(O^5xjt>nklxE z*?I`JYVgA2Pf~8wE6jLNnw%&6NIs(%WaPzCIK>sHXaZhG4#$jOH0>j=))O*XT^QA} z`Bkj%k#n?jaI$}F!7HB7I=#ttV)9~Ee57}ptO187$>BUgjzE%WSS^vRv6Bjfb1qN9 zZVT}iqlSQ>#e$ee-O-siarv+?O0pTZo%&5iQbKHUNgmV|nitGnAg_|Eeu+a0#WKuT_!e&;Zx-D; z;7g)(xhuw`WNi(+kOd3j@DQO)vw zN|54&LD_q$*sM*wV`fE?<_0I{txf&D#)Pm}kMV+#e+mWY2`hsG^Wm<3cS8&KuFP*t zzgwP}T*Vn!wWfj4d$?}~FZiDl89)j!K}d4j3kr|uaU@N#JWLaME@RY z-_LBnoLKwi&C=T$HPUj}LqIL2YWSr6wVq-=P@B;$Uv!Ans z#emmzV&_hKYIdDjJPwP;1~W=`dZJ}lYtX}d-_=ug!&y9(>@<3hw;u(*j32<7exG^% zXgt0fji}q

60Ax?((t->+s*M}iD*F(##1Vf)_@Mx#unXox~YDaFOKSvrRC+<%Ti zVggMiULrV(5b9lTTuTJe5pNcr$>1+}(9tMk|1=4tBq@VC^uIT_XFybz45{QN5+m_X z#jgA%T`*^C8GmI6re(gv0_*V)(nt@rc1AsnQeVAV#`$L!4*VjdtRsc$1oPp&1N)KQ zL$D*eX;#uiOEl}(Btwmck9Xsb4|ks)?>|32e3I+ahi`o6sskM{tvxVIyXGJ-8 zPxwB4k7JhmUlzWUG(468!B^91jf)pp$^9cI;X@OLQhB!75uTX08FY^c^nh>k!!Z46q zZZMIjVi%Xb@P&c7=%INF!&35IiC^5*viaKBI@&^TtvNZ+nvZp-I$Rxewqw0bcVgF{ zoRMmzJ+|^k`&wZXj~?gPU^kw+K@;4Y?d}ki=~G0$PC=zMVa4W(dIFhn;xd-5B`$D* zhRxM0*9RAc77&K!7dtPA*#{c)hWdyG7C{7_09fQ%ExwZzAz9i#FljW1l}y|K33ssB zymmVjvXBRfG=9-Iew+nu7LP#(Ti$>`V~-wu?}Sc#d+!82vNxFGd;*v35`)!0`{SvnZ9~+RJ)_2#P~z z-XPwSu0Yh`598-zw2Kim;CmK8Cs)i=+o^KhpUCO#0maVA+j;e?nKkOooa*hYTuh#o zFD4W}ySI}nTz$#ubAe#WuB}*xp**-d4~L96PM;T&g&@8r_cJurYu|Q4X(fe1HE)fx`X%kl{0) z43S9EVs>n-bJjWle~HyVr_9npcKk+sif0I3(6SX0K1ftJf=5$^WhI+RISY&}KN<~S z2r$A+91o%-Y$A+3Be?)SKm3hMwbdC9Ziwsp3JOa=jBZFU66G2SYT{>U_$&t0B)_l) zW`rx572FH_efZnx_AAayB-BH4fNeNW3Z7ECwaeYusnz+8^nRV;TyH$bG{9;LI~m>h zQ=9>ieZgeF`-=k}*B;m5?dXxt_YP6;@E-3?#B>;sC|9x-+dK0IY=cIf6SkOU52z2Pl!e1 zFvgHPmlK8?6umHWX{Oo2p+X{?F^PqB!vULdD@9L1|4VQ!;OjmoCg9xW^vPv+1)Sb6 zlogK`w_0Y@kRDJ3PX_$hLoELqM(CJO+i249)@sUOPNznL6R-87BhC!=!(;0X6uv_<{WwgECbeB!_+UpYK7Fo|a>oW5ehVif$PB=8lF1x)TjiOe~6+|iUjn)F3*_K4U# z=LVb8aOSpn@D|Nswr6}cYNRI-_)-m4Gx&fN!4pyUC9Oh$`A|+Q|*5L35Cbw z{_S1=7DoD*gGwZsbDcBN2_$os?(n1C5!&3=0l`Y;p+d30vb-b6%o?-F;KCaLt-%Rb zh1RmSZ`|6|uWujoDxsBIRcV%$dx96Yv_3fp1g}m^D-eRodTp+GJ``N`)6)u=>T`2S zv@=jUm^05$Ddr|urBckjU!8rw3J|MSG}=82nz(>3olaD$Rpu%N>^^idY_| z;?|a)X!TGi2XU+3BB$n|(z?r3uDy}M@u^R-cf7KFxTQ0no=3}9H#cAYKK%3t5G>D} zWfXqK-)oRp(vm|Fgx|{|m=<_^_YE#I*h(j&Q0^hno|}i^WQNbvXpQ(&07U{Lc^Hd> z1lA4Er*Gha=L*$WJS&g=8S?^vOnp&tuC8oNPp-U&*ZOAu&8yj0zfH@<^Y?ET<|dby zX4h0Jn|qrFPMbH2HCyAFX+QIafpD1^-AJ7;!{=i0G9FKPJm*J{pEvdts~aliHo-6&$;P0xioh6HB-h?WrKmA6QwNN}7;U5IXu&W`tv zGY|O76Cj2WG{5q2^qJy``1Sen?y2Ot0Y?{BW)!RY=;bit^DUA~MzRQ3nU-ar8jn%kfAo@af5j6aYeMF>J~f|M?r`T{w*B0mTf9xn@W z9=M3818i3J{?760!usNjV*1_E>tAMG{xtpe#r!i7F(R7um4rf9rPmr>Z z4-4A76h9~NW=XmvT#0)lQ$g;Hq6Nl)!WX7N2+|;&c|%gC5O(;YZdwe^Y*1dYbGM!2 z2tny}PVLbta~16|_)UP zqiIoezTfc|6z2X31as$P77a}Er}#5Jr6)Y~zu#xk7sW;j@RdrSGvPI~!)3A++O%(_ z%2g^|wc5_t*N>)1G!ve~N*>>1P)wT7>jkM6U%$br82lBhG3Iih^9*^@tJ`!C-1+%s zxzaeF(^RsxL~>WGbu;BgssPk-sHj38k_{Qa-)IU6Ge-p|ZC5p1)~_J1j>u}~0>&DM zgQDXs#LkZK9SI|1hM?YGUE5tz?C`&Xt;EiBMY+9qXtdaUbdJ14@DYkU($uuZGatU79?W0L9;2li10*$Lh&U4 zU1{_%V9}k}<`z{`bBZO!mPTu$^QCj|-wL1Phu{BoL%{t#gB5=WIZe z{#3&|L`J-}-Q(G4UE z%=kAC%^L^iE$!*P!F6H}p8D|UNEpt-8iRXn*EqYjKZAq)Ca!+wb9Ns6o9^vHcLZsc zRPj-JFly6=NY(21L0cJopC3VF8H?$KK>+$+srh9uUptRp@WNW01Q!%hW^pxwt?G5{ z+S)!rrOQjm5E%5E%|MY#c1CZqF>P zPcNvaXw&A`>5JzeR4;8UF5xS+xwI%1_o#Vj_Ns+x<^1Ftusbuc!tj||oK~ZT(`=sT zwRXET5IWCf2(%>wrQ9XK2fIt0Dzj+$V+B8V3A5XzXPb#)(Pgt>ZV*kx3bb9kz6>y% zEu8%ZI_`+EZNguuqKm85-eO~+ie<1koOONR^vmk6Gq%dv}WPJPkRqv6ky8QzS zmNlYfTi7}}cCbmr6zl%+8+H4D;XfWtA4Uv{??3W*bIY9eq1Ejd%Jm4IMS+;x6G9Y& zt`lDF+$`Q57^lzt_G0qaU*7-n(>v{;QHEgf7j7*hXhgESEP|*u{J@s{8F}R= z;O{f|KI5-UB6ibJ}fhKr13kjBB)2)4+RjnuJG2yfI_-EU7W`= zG&ug~g*VKdD$7C*!h_%{GxI;ca5-ZZiy!bk(2Du<-l1uI=Xhyt7dfOSl!7Q#ZeHiB zZO{t*g`}D)R7iDC=E_o)64@dyV{Gw2 z-k6eLkb%Q>oxgn9Ar$-6=HK5pZfs})U!_X3vbMXly1lTxIk${9mc9A<#_ka@H$4zfK)1I7)998DzM>Ztzc#MF*c#P;uOqhdV+ar$8^f!t!okMHcf0iv#`E zu3?K0)V@iJpQ0-S14kUvzK=m<6qfM!k_kChR}s!~f1+?clFm_F;lacO5G;4Wps+ti zFl>q2(j~g@R*xs?%f@*sZx6(cu7J@Mw0L9Qcs`bI`qN## z8TuC1;HCBz2#&>LTT(?`jqW-(H=W^-Y7YmkLBH9*hOtD;BC02v;^$tNC$&yTT5#7{ z(|Cf+79teC#r5rHnsb`0b?_H6G|A(IjRv{lUQdEQ0-f!WML901Sfs*;(^*_cCWp@K zRT!Kin6UGYS;#2`8x$cPOl<~C-}3EL>%Ce;D<4*NSN#|IWn zKd|l(1=0*H88t(0p;2NYM*|fiy+R6*GFUvv1}6@6M+TQh4-4IGJcF$XKHLpI{9PgFGV9o%(!6GzREp&**y*h15r{1=?dbHbLh%YW&ilu&)cBsT74+cugYo^%-Q(!~!}tMn#ZOoL zQMuX-M@dNzm@Q77&Wab}>I!*JB-$@cyj_q|OGJVR4(bz_n9Zs%TiDtJc}=)^!%~K~ z32Gx<3`a7_B$@KXXdFUR*vg^e(8#oTd1(W)?zgWO-oBnkr2-1`FX)c#$Sy8R-A)UR z+=#R+oCk{Ru&7dtX)^`#(l`LM^4M8SU!~$pzAxdg@NtrzC4gY?B@oG^b2UtZWqA%L z1KR!-fB7cJD;IwU*cEy%+&c#!yH^j{T$5~is1B@moyZacS*SITYSK9-v?R<9seENn zs16I&LB4XGMF~}6?AbyiL&sNQ>rrm`~wYCw^N7Je`fI+kI&R= zhqIIFS1;z@zCstj0zfDgdu;cZ?qV~7k)xDgB63OCl88o_94p|sL);HoDT;PXUIa5j z=eLl%cv+!VZ{IM|ftJQ;S+NE)d56aXk{!-Mkb=_C$ccFFl7A-@pfEi+Z$B5e!RGZC zi-SU=o2fL}g2i%|p>!#fE`}N9U6h&bvXDja?)Rs8l{lsB?wKgn#?g{ucV=d>l^GyFIA=NvBJi33yMQk!3|R;*Iex;-pqMbjMB?m>9tYAF z7KPC?^UoS_TC(W4gtC$jv_pn0_SAjsT+j_MP-U9RGFlLp)Ec_Eh1E?c)-Z=R_KtKG zI~`d#nFW6-xJK*&IjE3h=su6yT<0vKkBxQ+PFQm792kyHoDOdsn-L1FI`*pb%iByB zdDLjFSVOQNONgnynEXR{!_JH4I~&z-80|p#039nUzx4yy)STQteEYx0Z~q7W4#dov z+mwXAPbt{E(F=wW$@5C^sTV-S|t zjbFdo!NH7W=%2-l+31aUVL8=Mys#8fK`F=c6W4Gkn$r>nO$yN0Pdr|B$JyEy@k#Dz8hEh> z5XxsVl|~T(NVnhU4LgIeq*msd8FwWVZVv`@!8}Tc3@+bvhc}(Uuyx(9w77xP@E7E0 z$~(o|#9rIxW=WldZ9aJTo&JJ_$Oh4?Dx4UP4#ZBAgIY0P;BF~0&KLj^@W%!LOE*yX z#Ol$RT~Om72^eiYo@-Bp`Kn}ojs+|BDYiqMO#=f#Yh|fH5q`>M1da!_y`fXC?9Gxd z2}$YI!n;?C^E2yf%NimKxP5J^1q8Ew#&3$q7_-rXB{kMhgu^1M+)yEl*u(KsPLgF~ zWzah@r$T|q56SJC9*19t1_A1_o5hwVa^?yPdpbLuiU8gwMti_{o-DG?yZ2#?3>f)(K_H{zNuWq>mr)zx#3iOe6efNw6#b7=SMud7jG+9sctUS9E9B zh&mgNI!-CryptDs_wa?nL6ixPAYcqeoxx3SbPEsppv?X~-@z$})|loO9V=E6++#sulq}r#fd+2B^n*Y!2>T!L_uu+o#?HvN z7*=2RKUAuHd{j`5P)JC4Thm#h)vxkpvSs@v@-LcLbB{5n{az!yY74b%NTJ+mVTU3U zfCiH-HzTneuM8WRqeJpIOi&6PG@*fuSSTCtCUsiJ%F-S-<8NLq;)_DGGzVHdqd1vh z(#Ra1EeXQ`34gB}@M=VMv#2UJ^JWh=3q(+uDnKx_ZTZ*a_u{t(dWa5(lYek*rLmft zRZh;VP0y)TlzaGU9&&23p`wa$T)9AQS!q@3S73S@BUbpRPZkGw4c#{fb+ z(QGZbvM{9yFsk=*g;pS#fz$_)4_?#emTnnQ>3~EM7F};q5r+0?GoTCS6xP7 z8Hj=4WWG#csP-rL%4_0_q9ALrtz%N1q5lPdKs3?$J|i#q%X7XXcUngWy;wvb9KuIwq*#~O{*=}aV()pD6^ zL5BY~;4kMKih(Tv+Q6}gSV?>#?mn@pZ1*29(PH+6G4(n3f#f9>O;urGWeRQL5wWT( zp;af2jRh#zbN8l9z+b8152aubF>2mBGHZ0!1O4gVv3W;p*w@d7~aYd3>MQV)Q9(_?l4_#C(4Z^p;3)1pjH|n3yTaPy^#j6@?%qMLTPw^EP=mr z{fNTMpLuzC2kB}Bh>!=ZcZxE&@xI{BOr2Qi@BBuaA183DD~JY)h8HrPObmGD0DK4E zrxsW+5V)d9napznggGECKTd;OmW5iY1oAez1-3Ak^^40!`m%W;&Yz8Vp+==?3fLy# zgT%Uu@TvQ6y@%g>`25^|ZVc}W?dwFjhLjfWR4qgYbn|u&>-5>+7gCOb)n{=@F%o}m~@k@!ZNRrFxi&746 zkRm4i8`#**c-+H&7I=HAY$l|1TbKiyX$7OsyE;g?KUk;GG z-DNT(@JPoz?eUx32tNsdnSe<>FF%7^;4gOoF=)LJ5uzCW=nNk2B&%!tbS3P6QH=5J-!6NP?vLgjOazOPou?_^UrX-&K289Zh+9<5WTV!c|fs?9--YE7b~c2 zTDbO6IjQ{-9hqbu%us?mFz*iU(U15GLQx=;T+jWl_&e~W1z+n6Udlw7aDt+(S53$?gl|0Ivj~)AbqO;WvIelJAq+Z~Ap_{r zVUJ*rB;hY}hSixVHEc$>&>RutG4frA@4O*F>^oQgs?N<#s%pJkt&8UnB4tGqj4UpI zYq1%5WD(3uK_EEWA4b6wGpp}s6;pG{>3Lz&xUjmlqSB~0wXkPVkMb#SBd?BJB#AAn zFgENp5r?va8{Ok61c9@|hJvoAKgRC9ay6_ndWAM{J*F5kFz{#Dv<-;}M)BqmbJU3$ z#aq-G`^GdZAPh5U!*LJ5u(#UERh!vLBU`D9q8GlbU6iFpxX5kr@(27CJ7UI$a#>|=3m}%$0vO^26Jv}yhT%P1bwpE9M-n|FD>#b2u=!N^Dm^ldi9f7|% zA~KE!Ou5py*8yan^AwtKNFcHVDW0yUb1lR>5TOgz>q7mySidec`!I*4*Kou!h6%mR zD^`0Z?tTvVKVF^1VX(Qau5%bc3`Ob7z+Xm@KyWGt5B9?83u7E%wnP0DC3Aq!JT%HR zG45{OKsmEJBHO#h`K4{r0Ks2undy%C*)ZP3XVo9dIJ{V4he$Mbd84E<5ygT6baV4~ zZeip2#1ZD&>%#x}cKhjH_uu{(Iph#GIVN(CU%GdnTI0tC2eZ)w;M=|b)VcfA96iEX zDYQ7GU02~#5pV;OnbZCao>cU+bhTqj_NU@e0%dXiNPzp)`AW}43oIA^E#rlHcf{KY zf>_T;M>?mBR{sf%aS3@1%vTvMo${iI$tn;WN}{a?Jz1c1X@Ti~pPOHva5;(53Y!io zWfD4Z4xM|g&C3hogg+9u zXuiW_QiLnikEn?UL6-o?h?i<%5Aeg3yH|~N91D_DgnwW8c*CS!U z(HcD9h{fYG_&z<6A($a5!;r>}FO(%m4+mq&Fiua5nyh1H~RNDlJ^% zg^T+^CWP4JJnHfQvH>?H8wA6h<8l+U+I=o>B*4KE_C8Z(8rwtxB4{Xv-YSjQ*#Yu; zBa|S=Vv7|@gSo;~K~iz@z8A=Ez3e8Emw5hQ$486D8%NQW{Mv2J4^EM~%D&VU#}#E7#GLZpBaaEKW@wj>00(2unG#7fd^a`NYTqYnanDK0#| zLkrBw1hkcr_dkL!e~Q`{%gWowzxM_oFKc}SBfbC!l4LA-N&h0W-d(P3PFyrQA6nOs zRI~T+rztmLw5xk=S!;5m1T_!u*cEw&Qr zOFoZe3LsDwTnqKV!pb%ji`m7Exg|6RTMH02*7g;gOE-0!+xne7qvpT@b?5lRNh;r| zE5y~#O)OccaoYiKVY)JmY!VBLFtdNhmt2RO9=T$<$6|F0ry7P5S~k{3T=ojp0i;Uq z`K*&bB91QH7HYlGWk-y%bM;oX*348Ja$QvF5M5H`YO+*G7R6rpI|Pe+g>=K@o(UH7 zeZg>s+e{ZJA8f?pwE?2_U_0|i^5Bs-{dxFI|I2s^(@yN*&iyH!&c3F?Ykij+*WroH z;$*HB_k>yeW&E+MH*(>?)E8K zvO=X{bm9!`i8>G+pI>nIh$e*u82n9Uo0xRLh0awNX7+MSNE!m9xS8`x*88{RcAq0R z#8!CJ4nNA}5Z*QjQMvtkL-9Z?6-i}T{+4T~!)WuNrk6tTj6a<81Q0kU&Le5&lT0bG zQsI{cd~>Ca-4SLG0sRu0C+`Is6Xakl)MzWf-*BSDosGzBBdrI)h~%qSe0Z8!0yEmBOC$F||TZ0ds(PyfA`x)Hn-hJ-eegt{jw;w^?tA{VNemtpO-k7Wl5^4ND=-Ga6_GYmicF?jr2@9t~+=3{gCNY6_Kaf`e6 zEk#ER9CKI|6t!~un)8+X|H@sqIH&PjW5+Rg_&9w0#AE-CPtg5k>x#__8Yt9H7N^hb z@S4teJh!>SPL!CT46sWPyyyjgiQBmQ%FOl|e+4Nw5n8L@uz2yPtID#N0p@ zcc289j1DC0fY!BWZ5ZiX)_eJ4leU`mvD{UWG0i*#{Dq=V&cf@L^DlmxmWvkn*I#CT z{(0`juM6bxvbdR;SR<2H%#r3c=9hO?l?Sj@wYoE0Mo%3{Ne4n!c+xhqrczDlaKq|sIKI3fPkce_pf+53) zT`rbK+yVFtPG5w=JjVskJeXqW5rm?HsS%N~1#}1EddQX9!C;opI4mO?J=qWQo#e_T ze5KY7G#ZOu?>e;wSOj1KO!i!vL}PMYnI976%=O4=hj#y?N@ppJT zXnZcnx6RRd)Qh-NcgDRTgtsUB<%wK!=PQ3-UJdgGL5)M)E$&hHh{lRs1NkyD-dl2+ z0bc;O!)kc=iAPZQ8Hi;#{_&B&+3aD~E%28Mp0h-)H7L`v;jM}or_e0pj{$Q#NiL^< zbNzVY?J~>X*=aR|iW8lSonxbhkH_cH=nLGr7DnI9Q88-*g{6WAE++F*;n5)z7??b; zQsg|0AY~g{%k3j{2db^3^Zk$2Ni*F^xYw5ydj-`H2p1UYv*B zVOJ;_NMUwWFX7ZG4Qj|MZw*DYg^f1mJj~NDUVAKGcC6e0*%@hVoILmTEt9h<+OGMP z9h^6k*+#81uJssViz>Atw6tXKm4WzA2&M%V!$28@1^!Yp1T#Mbf4Py;*Hj4gX0UKI zLjS^ZxoCD|2{6ldy3yyN1<02>IF-5GaW*Dc6Ca(}!AfSuIG2~3!*Xj_lDf7`wUa2+ zBiTxnu&2sZtu<b=Eb)hh;WIxK<8gS-r_O+C7dSrw4YJGiVo*gmitPS0)3 zyQBcVG?5S-cdu_-bbR#wa95-Pd|98#Bj{+M%IuEc2eBp$~lOId!i^VtP9)zaj zuf^@LMW@Mb4sF!+ZMoU!O7Mm+93=k|RpyCVondt4CXNtHo~=Fx(ctf)!A{Wy!&8DM z3pw1}W^*CH$>lRU3qrbl71*FDCVvd4k2^2giK~nux=O(@XSr zk16HnKC(no)gJ!V9e-)!QagBH_RjAv6+kRz0^}hws23`&A+xdp_e?a%?m!aHnK)Tv zg(_S`Zs~RANS%HeYw?RBx~+qg)7>M}zRs#O+I9GT+XEPDyUtVIP}U#GQ|{n}D~!4k zgQzdTNN(@ItVYwid9wQB2{SQ))51Vj{|EfekN% zm(w$G0wiOaDIC@THhTcmdlK!N?K^J!d~D&ehLc60BoNObC8M_z5eg%JlW-NS%H|Sr!p?~QO9)(rDXjcVcm4T{U(EsS>C_ax6 z5_p4nn=VRF=*6G_6y}oV`&^9@WdHTtNH;C6WUknuIG%m0bZ+^@t*)@-K9tYHAI7v0 zp$aF@0clD%e1usiok!RKCH&zOhiZ&~Pn*@J(B9k|Gl%JeO z(!lO>VK{?6g@%Gx4C@1Kn{*}I7~vxUi^+7A^$i+KgdR9r0K1%>C@i@a7PfK57RgZR zV`N`D*s!o)wg90Gr-+=<2t99iY95b86uezG)DYdGUh%W>MwHUY~5 zHx(k)lrqE3aEHWqTtVZRUys|K7~**iHU^6$w|iF?^_D=F{o1N=D5i^}=8= zBfdHr0)$JaidD8|2?4=O$*N#(Oh`B@9ORJsa3OIku3brJ4xsnOq%bg*;#AD{>32Y9 ztarIu_^5K;qw+A~a*bd($7d7u--+4HoE8Qb+xd?0as9w5hZd%KJ>tj9qGqK7DueR9 zOCgSCOUvH2Ckp&+TwOMqPl_otpII)#O5@raNNnxu1S40a-P<*toZw><4FuRj5wuiK zW}4|7QMR27E~(}2#U)HO(FN!0*R;T5qzMzLcT?#O3Uyj|I(@+ff&#=&Tr9^6l}!FJ zTc{QuX4;p*{qL=F+b z_kTg*|3Cbd`(^H9+^MK5L3DXw+(GZd{e+$ZNMaIu=3_$3O+MxdBpBB?{4u%=2KXnZ z9`Kh7o-g?$==buyD1_Mylrz!QN<==9Wr^Wu2mU=r5h%uThB=xvRv`W*j#p7ZHrhykw;u> z_TbV)<2jE%c82R9$8UI0XCd9OgA4oRtA+pi@Ap5GM)ceKZ!Z^kl=1hcpJrdYTzWgH znqS)6*fASzVYIWULMKz{!3j?mTd`a%#-|uD2#Z2Ko3(B%Rf1}TKeN2SWTz?m1t~TZ z{EfznSQd1y?z{a*7=WC6=^O!W3>ss6;@KT%lPiO}%!Ne493g&LY`w2eH6vjLf( z-BU|UVjsDycLWWa+q(q568>_z4j+FXe*A-B(M7rA31v>*Q9Jp)p>z;8KS@N1=ecBi z&Yi7{IgBs^#0DW%glH;+9+@&n#7s$SM&v3~JB2DzN?wO5A`y^RmTK~dc>)m3o`NHs z%^k3V#k9bZN`=o0&5M`{GReHe*sw!OYdIy+U>*E@`3lho>JLFZeLtz3B@%HFpEM0t z_6qeO)(t!RW;Rx4TYyD8yiHaZ-uV;;r31M!9&c6jDYFj$Dt z&jP-~+usM{ue7>9ZhPgmFBCASW{%E$;ETR)Lfx7A>&q0)Wo5bAu1mb3}lihfJox&Vq(t? zQ0hmx%$^o`?LO3zF=Ub+JlIOx;|`LdXt&`57PX%GnQxN}`*vz=eb;boBGf+Y3a2A^ zygP?Asm45(={KW4357A|ug9^_kMI;^R=r!f zKwj{dq6>Z+N3-~o97r-Ecmf;Gmb}X6Q;CVO!;JwzczcT9Sn z+kP7MdeZ@nos-pM7Tex-D&I~QI%y6A#C83Eza=tp$hGMXF558oT4=s_WCdA=G)sTf zAV))Zaf7@~FjwN;G4zmC@IAp=|A2d&d{;q4i3Crw(b#=EvGDrsJT36siA8q(EaI`} zg22Pr*&7lN#tngEIS_0<_3MocOzgWTmG({Wiph=Q^t-)h+}bm3YRud4V2{Y)Lk2=H zAAZO_z1?qghCH!s4CnAVciK)o-#Eutz_ts6J~nLbut^xk_CAPK^d00{5B_nz<|9Ifmz zZDuCof35rNDv8o`&)kTNiV|CWL=shdWv*Pg5;l*3+2f< z))mbsD_s=VHg}YSYWqOVo(s%AATiA1!7k8w;o%2@0bjTp9#n`CSvM#Zcft?+pQAej zg&Rov8+~R;0--dkOSMGrIIK(R>mJhir}z_>1^NtFy|Zku1|hyv^a( z8-A1>HmIINQ(N@@#Be3`FWv1YQk}*kRTa8fMopQrgg>YMOQsF}@@>oeDWdUGUs_i; zWEK_Nl+26dfsuc`ek+H2%5XAf-&DLubisz|;FCEFdm#{h&Yg`2?Q{+Et0 z4=u|sQA!{Q$T#|dWSOItbCsQ0yd8RL;L=998sk`IL?VtkaDo0vL(Hn9?xQo3tDwCv zV1>khUWZ|U0hKt%4r&Z)a7Y`H0XR1%L8yhHR=9$~zDSyhdme9#8A*U?kkvNG^@0B-~%B#BNZMrUHFP; zYhQ!}!kqAFh60;JDMA^yKZRW_It_H541IvSsNE2pbJM^1Htj3(&oUhIQ9^VCqa}+Y zs=07#FWhEZgkv+qa;y4HwRPXP!sAae1k3-^_xQ^_5d1y zo2j~7QLWa-1Ru_;uh~e2{`vXRjbFz1uw+-8P0olP50g?8hh%@U=m@9q!(fb&D#qvzaW&E6 zr|lR>SQ#*6#=#q*gz+&HkUina9_&~Wo0$(~p$l4uXFLsN=8SBt6mvh*d zJFprJE@Wo>TnxUkF6!m$mF0Epi3~?73lsEe+$3l#ml}oUHSP_xK2bYdQT??=^~Y0( zSQNr1$$)Ty5Jn2pV~L36DoM3f>y{xuc`y2+4UM9KsIiC;mqLhW34*~&UXVP+X10+` ziv^B=FWn!iauPqQEr@ObhL#fv3J4VtQ!vGbXi2B4^+XwUYdMlDMsg+EcKqz6#sExz z>N0=D-+n{vH6Y&`GqH&93@->$N(h|gWi0VewzioLxYX)gMoY-frl$}>M6y;KLRzVk z0AINUEc4IQzm@iNjb)v}ADH(V4q2RsY$Rt*ImnCub~0ToAjxg9R(srTlXr=}0}#w% z!XN;w2!CWu4}&;l8>eT6rInpG6ALWf#mR~Vf;;;fk%sw&HVhRLQ%GhfMvJ&)1PKI7 z=VmvUOnbsPv2;FOByct+Ph%M_300UAfPc5x2&O9bK#C>x zDua_feOriXjv0*#pjkz&dh`BI*(QkVKL!0V8E56|KmD)#5vl6v@ptf->IwV}#Pc$- z##Np}2Ye9>&|~F_RNfbbc>}!SHs-UOm}$6>k)P=;_;C@EF_-Y>Lf(d@jQ5K}2wpmI z-Gyy+{eYE=Q}Y{aZenQKh#VzW%vE|dUNJCN3h-BiK;EZ#_dWP>k1`FV1YO|n&3kMI z*o0!X2N%~4e|RLT^WBR@P%CcpYT^&^3@hA0`KT;Weatz(U}_NKT89bhi7ha_vc^ce)wVf`ST@t zWe+#M{<`q&+0yj%?)v80vD#|1hW#=8lZFrixKdF5^BX{@nQwIE)S4FxpHe4M>y1Oy{T$zTh5@~)PQblH@Y z0OXC!?}hxDh@KsX=U4pA73wxeKsq15-`Qu+=YB>|_v;+%yb;ThM5(lnbED5>qwkz> zdQ%)4l%n2{P;-g#YH1rRSAQhy4kYcKsKMf8-ze@kB!OguTYDN@LkXKJMjQ9z@BjDl zl&VqFjAs)*cA;-l)vQDpr<9CR$A(ReG4#L8N zqYI|b4%i-f!4``I)-I`9huIJWt=>f5j**TpdcjTsXlJB8p0FAF#9)H2I~g;?1C5pe zTN{{PhV4h{z>k2^K=6TL9JoQM+#7PG?8VTVs8yTcV8VRq(3}~VaaMCC9O;;@h1PiX ze12+vcX9n>c~i9nvAKVCq_bWil8)?L&TOorYtl>;}GDK}v)?T#i1Sa<$uYAyg>hG4F|hC+G8y$VqbnJ6S#MsH?_^*{B??mShD9I)vV(*`v`R zgwyaX;btj|&1mj3d*VVN=7|coY7s0NVBJ87X%w)SVh4)`Ob<-f0LDQHNRK?JavL32 z1}48k;@!zqx>W8kimpgb&rf|}gEoP4&eVD^>O3&izZ^1ZgPUS``{;agU#%qH3i2@y z08m0!t^&CK1hW4G!7>o@MSz?Ci|n!s`2hIBGeaiB+0xbG3cW^9`Ev3+1;Xa9`T+sQ zo^X=705RLS84n68$a|ur!Fs8^v@+X;?uB7$ByB0-K$1lQG`F}tzp}r&eZorLGlR?O zLm=6$^-#c~wh|C5>(IUyzXF1pLi!RTkXN*WYyH~_M>oef(<|c-6i}o+tDDMSU(Wyh zeD;@@bKvhUujYS!y~NI)*Hc@Qb9=MPN9$~eKD8QbQBQ;-h&&DOy3N!^iSl){*a;U} zp?ounimy3t+L5IrGMa02a_95T&?!muQ9xqNWgTbY^XwFm8t($KE8g&er1)9JQ_td=0_ zNLb1ljg$%)=Qi-gm7>ldCjv;=NDb1e=$gpb#bv;NYz_hBy}` zuscpw5Ea*3H;8r7RAau;LXj)suaKuood{$S*{dG-`$P><0$))4dJ};JMJ{91{2uWIGCDVWBU~W5lt6(bL;HnjBam`^)XIw+U-YKjfb`{ z(}sB_Wbl>omq8EyNI47&TU}w)bbt;c$*UOtFYnWNTwFc6w1)EK>$`XVxPSi-RA+q& zd_i7Xy>jqg(7tDJBr9^T34-WG9ZH$N=D2)mSZ}>+bl)|4(EEaI{vLKg-v1WV!lO^H zB}5l?8vKQtib;9FB3ohW$LFNQ1vrdx5QS; z?G24eWiy#W9&aX|te|b?xf0HY=+N3X;u(|3XFMF_aV@UsAz^Z;#c1RmLKq$!IQ=M6 zz~4}&n!^;DDfL<}lCOK>1&cqScLvYx0S?kjEm1r9frkvtGdPXawvwJR5x6gXn>oU}vXd)W+M=lF$T{zl_VUG?w(2p3JN07=e& zivM6LQwMybaV$ykInOd&1M5Oy#-1xSs4=17$ResO5=&}QT2v)p0)8)U^@UBC@Qb~g zQ4&a+&agKCF-<7i$|Su-YH+kVwQeSNe zWMNl>ll;N)<*~-5HF`Oz@YZ1v7)q^0GeTrjyw^B{h?L+24QWey>kdUf#*TIQtb6*1l!>^L(v%XYs15FjDuTN1h(ndvhjc>5-?i;y zz?XQ&xd$~QV*S-5J(?}z?cCnXvT|+rT&Z;$9C3ewp@4p_c~@+sYJ12vZ_@Q)vexHX zq&NETCpIHaUxEUJpc3(kZJs!*;E*OfXTHZ@Kt#r0Fs1#~xu^~Q!vH%Pe#uFXYp;Jh z9Akv|uGJYa8?H4t&~4I1npxOmK>n9!V*4A4o!76ijKd&qYjIhzccj;|y(@(0XOm71 zDJ6qB(v-wK2*MB+3_$DVk%25RInK~f_pVgCW^&5yV!ciT%*EVB4lJ4(jlsW*1!3Gr z!o_^CD~1kg1Ij3_jL$QK!i*KWyh#h0=w!fIw3(PRMA2I2p=B`*8ys%CojZmdeBQ*V z%7~*hh44yFEc1$tDsq{sO+Va-O8Tl)wUfC1toE5NQ9k`MNEzqnRu&=?P?kU9`u@pCl8% zZyRs`-zWS9g5`jDMtE>(3Y@Ae+dJw77A!J-wyM0i^d~Y+=0`@f-5>rK-Tf|$tZv`^ z2^>@WQcj|gc6yV{65`r-!ttp0U@sX>)~S4(T}tB*aLClNPx$-aVD|}ysjNpdAihHI z;Dh{ee1YJv_zMaHzAzQIL4v2yFDQ1v+#mk^?N5K1eD=%y&p*!o`~&#AJU6|+v#C2h zv0do>R%nli(lR|18DksLbzQ;kV+W;{GID%j)0 z9K9n1utu1JMrzv`5!uFdvf8E)4ra>!6m(W8K&FJifU2_!>>`VT_uv5_eSN6+?+bW3 z<*IJh^Ra@Ejzf+FyCTVf>Q{|!pLDu;olTdl2)B-P2Rq8W?PH8?R`L3nTBrUMt)iDp zzrJ31_Gb0j#M(2KrB1CsXLsA|HVa1%s)8-C$-xO#ZC-kvCa=llp2Qn{h*1) zl>mt48@@NYJIZTvY4fYjt%oZ8vDS1Z`4G~g1&F~lYGELlS{1=z`Dy^{GIiBt@L3F# z-f;fFWWpc%6M2Kfzopc?UEFv*zrN1a750JBl$Y?AhJ|3KeHo)QqSCo`jxMMo0W!qN zSVqv189)A&S4r;Fe0isCKBFk6sD#l)+Vqs{aYF^cbS>NqsTZ6x-|E((dSzR&qtGzZ zK^2^26Eu5~(5qv}#_uXB%u#`0YF;o`l)wy+fWp+aMP|&IH*eC2jN~f>W*Qu8RbeSJ z%+%VfD$UktE>~#y@(uG$GA5u2LHeaSF61_c*OGzRo}h1-=J{{p^`H42&jUFG_g z;DHp6>p)CE@I3Pft?!&bKL7k;_Sx&jSCi|nr$FA#H`Ch$`1@vN=k477?8@=#j&ASN zqIbl-@md0Jz1DrT|FP14U+g{RJ9mI@b@0CT?r*q@2iUlZ)0*UajCO?`1gTszhg#zc z`HU(?kk5cGbdCJ5$+m$~5A@~d1FfrVTc(o<8=(SV?9)Xh?8DSe)bZrlg>~iA!vz*cX09~UDPJ6-UIf_ z`Ftmls09Ogr#*J5_i0qtqx}o!QrB0NxHQXlOg!7w+K>iZz9e85F;6nv;AbS@XOfv( zG*Mzyiky=t-)Q!FdG=j&8E->vI_#%|^!btN`^oV&#o_=rAgvb{N28F?28GMB{rbt7OXTCw5E937! zfiL(A5X)E$5K|!Ms{BoAWO9{ej;TzH;G#LJ-G8Xiuv2CV9m34o;>tcl%9z%2F5wB_ z3yDMy!82S6SB6BMD&OzH7e9H%ika}`icfktT4uGPTI1N-IbU8oTUk3h)45rLUaSt= z*YAPg+lRm2VdnGUZ};#2%3@!tQD|p6CTHh%1;gNHW>^%Xg~=&gv)GBou|swIURFEP z;T43l#5w;f1jB3#a{DU;(~(EjiFM+{dW|^Uj`2O^R zI@W8_d^uiOUf2N0Jt)FqMqw6}!C2 zx7iNqr0k*jo4+bn#UL%4j?)Ep$LFyavbcgwT&fK=6<*5c<^z#>>@35-{} zF)|H=^T`aagGfs0$Yk?4rI+dR#^Tv%G#!bgh-f$!WGaD~dP{%>g<4FXR91v}c5Bq_ zN_xHNKp^k;=Uncj!`#^fUo?9TY(3m@y(NH-7c8R$R-Bm_8lsCjy#J$r|9ki5 z6Vt>1uFU0fb9Mbt>oFcKk|<6s`RwAJN{YT10z7Kots~9bh0V9~n^Q|W3u}k`H*KC6 zy{#vED0Ens@jH^u)-fXH%* zeRO6xW~GJ6WAVgj+rbFI8o>os`1YU*zx8~-FwcN8K?%%N;4gL%I3nUyK&P82>6`a3 zGn8p$Yv3=O^Uo6b{Bm;T_4FF?b_SccT`Bh7&af|ge{%j{YDuxauU8rT*fs#c<=*@1 z@KbI4Te<(CI{etY{jLAuABilZZH$8Agerp&_Y^{u0&l>2df8kjm1=}SMTb3h zp>-YZUu>)%FD)F*O>fT#H;)~bsZkVXvrQR)bHy&;OJ+!QkE&LHLaY>y7I@wCMmH@3 zNFE3u3v1tj;8-!0tgwrghtiHj&=F#}ZKr+1Ho-n#_rNYLvIOQi(h3{4*mMZiU*eT2 z4`fMKR@*dSo{@UCM_qhS(IJdK;0i^X&*6-+$%TI!NeS;7R2vJJWWyzNdW`l2!RY? zBDPEdsW8kk!iwwolZ?4f*QftUP|)AuFF@QG;Pxp=t4|h{o7=!^$U^qI+~!vg#GR4Mh`^N5XPM zn)QQjqH;tf&hdV%wH~TXr+Np)ubaJ5lnG1%GJV{CkdFwif3peJV-a{ESB)}&hVPKhe0gp$8Ibf+!`&y5mmBYG|uPSPHu z335KfibjU+AyV*8$9TtykdoH0$*Iv@9w{|jd&i3#dy@;R&nFjtcs&RH{@aV`=QFD- z`zo!~XZFUNcz=b{T$!`5xTD%j_a0JwMAS+>0(d;JVUv2dzj5sFbdmoP+|>Jz97jBC zB^K4SA>2g3b%;iP|1K}JeZk*drEY3@_x0Sy^Qo0*Zc~+hH5>^-WE%0 zbE~^3ufX3|Q>(A0*IvzRh?w4bHM#R<8st5gm_M3aP)sc#CI<2ym~}pN$r} zdFEk9pX%e!t-Ig*@BTjg_#d2m;^>on-sFL!r?DfZLTHf?RkS^l{u$d|`OxUVzJ8&g zztq3qs^A_APw6P#Utiy5ax4pTZEPN~#D~@AKrr?i^n9V6C#SYBNS~hB!K`(D`H=m* z%j?H*9jbFD15;>yp+SV=mj}S?n6*35Pvlw?r@X{(!U>$F(rOS*AM2L9+vFi#mJt?67&ainLKK@A;m9-8-@A+E(n38tg++@ z_)`Cd5a)!mCU=zQDnOBrn1_?<8ed-mPVWZa%d6fPLp<46Q1&Up_!PhWptLO=N(bb9 z3dWJ7SxB60#Rd~ZDPqe>n=+iQu(pFQiXA#Mw(5Kx*;uj8VqaDXZ~(gKJnGE*2dbr& zU1EDr*aCnZe!-I**!#4x>3<6UZj$#>(P$(Cd0kmE&f7TZ+vDhe; zhrogPXO}MKTKI0EEeC(UYXQr(@b}m6(D_RvSm@HF0Bxn6hH@25-3|T@*^yCbv2y+8 z^97o}P|&!_VE#Nkxv{oZE52vZ*I-v5?LukVSAK(J)hjGC;0wXU z@6G8;8kpBJIF*R`Ek3J18N#g*$B)(sY~`Q;g2CAubO!^K--55)Q5si8^MbLU`$~sH z1G}M|bcCL7?47W)Or zlyW4N2p(wD(=6b32nq|;8MQFPyA%xYRyZD|6~<5EH2#kGVvX_YcBRt6y|aY{5W}{# zYvGVxVK(PFJQ&6JjaJ-)Eef@MM{%~gqgYtq=Y%BY*Y>zy-Buzh06N(z37CFyTXo|I z7pJ-eXTe;OVKx$CI7UOC8?M|F>^cMrnMPz30#7`kmLG@uRJQ2B3XjZ$4Jl`8lS*x5 z>_vBOG3f2=F5%S(2IACp%uB;RM8x8I(!}a6GQ?$GlD9S=mJKhX<^d>rhh6sRKP#0Fd#a2;;o@K^Q#CT z=E1oOj-BCX&4umg_#8_jrpQ@`G&QsG`tAJl*Qj=9pK&v}_JUzGyWj?2Ye}e0beTL0?1XTa2U}0 zkTv0a!=jZ|#U(WvUa`xAWrMdNk?PHzt+@dpkOpY+V z97410i#u62CS+R0IP?N;Ep*ti4MZF@ya#hj6c>oz+XMLu{)RGTzGp_@6}Zq`*bQu{ zU`=)f=Qn2M*!Ls|XJD6mIhZ-Zf|=l_sCMu8{*kq_d6l3=jv%ej9AS5aCLi4(zH0Q` z$>`q9uKn_Qo)Q@ReL1!IVrq?eIkf@)zMa{hnujJjo?SVeTRoj!Ihk8InO{BKIM6F~ zE|WXuPhO>IhBAXQ`ZRd|_nS}u1uIBx!U>s`Yu?&7+YRbpoB#?>V{?U?$>Q4FKH3zUxs+=gim9nB@R#~`YKoom zyYSCbGdmL$?=xHUh~ah^sA2UR7*wneSo?$$fN~G~W$*+XJ>YX9x)_4%3oy=|S%5@rT7pKVbH^I%JIj#4;Qz**7b zjkA3G68BN9^;BxjXf+l+Lymf<0f%ta<+0+N)en4yD!ADg4F``m^mZwDzk=`gH{UW4 ziH8S^p#r$lA4iaOk96?n17?G~^;Fqt8rgt}tnpBJerXBeFx7YC%IdE2KF)mY@ZMI&KW*ZpV|!<9=k0Z3FY&-W}Pj-=n5zXJ0gAk z(zamUnZakV;-SxA8bm$T1Wa^lFFoQ6afCedCaOIde8FECg2CC^e-DAYbZzMN%I8V@ z7Nslx3_7EG_ei(O^R|9~kCx`#>hs6bnQ9p$luD~uYUBW4JPr6jtsd*8%Yk$$kj$p5 z_==QKX=dtRP%y-16SlV$JWMarrnE=##!;#)v_!Y}b;#Wnr)I^8dH=|;v#;CQIV14H zRG#33<43nl8H=q1rrgZ;buaQ3wJIF~{B6_+ ztWl@?e4~*}CSA&A%3M>)f{eoPcp*-S4UrxyxLg?^cwym) zHXJCtx_Y|1cTUrp5|~tnd_XL8lhmOc!enJR$+Z|zV}Q%%k12JgV;y5SRuI8p^|2uj zePb+5ABQI&a<3dq7Tvy>_QJZgqnw>zpO{)^j_K8#xficyUc8=p@pf)vc6D}ndw%0+ za%KP7^x6-v7k+xXG_!tms5P5$DvoCS$pQiQ>yD(s+!KwJ?h;k7Qf-Bo&XjxC_kVV7 zerpUqR66(7F3Fz2U#bT1w@Bk&YM-ICW8{s`l}P5$F`jPdVKxd@dhOKpmsJ}fl+9*i_C zHk!XoQSr^6=&c(^XU7*7?&EA;W845Q{hN<~uU!0oxq`fs$QdV@7Fk5+j_xP(>GH;_ z5JoYS3XvqW z=X_;T!~No#YH3rwx_f@0vTH7bHeWWFWGsEu8MBf3zr4W|{RKWUPD@NGDncPFUJ5>U z34g^s>+HXbsx?>wK5Vr{ZSYr$?<>J>ci8KWh;C=t2Yq^@e4%DGySBEEc6Ls-Y2t5! zznipxUtwBEl{zU{Xs(mfTWcGqXIhrdmM{s#CxIi8{yv7K>0&pSs5%2#lRc(01WweB z{Uc~e-O8$JX;Ha2cZAAidSZ9-&F;kO9j7=c_Cs?WPKyc&-_hEDNNy;7kUUc^a8z;~_z2fb)jnE{aTw z(VP{Y9#9rS$&9K>1UgUDo+2>KV7!R0@E5*Co!!|z$@NamDuTRNA+fZM1$G!(%0S#g z(2h73A9dP``D!qbp!+6D54+!N!fDoWdUCP1cgl*T6I6!ID9bxyVp)u+ZNc1hfsV%i z5MlzFz`2nqwQ)Qylv!vlqJ*Oq&tY{?DD|VUn#-LwTn02+=kbY!BMZJxgyIry33 zbqqS8(L!rY4kMZLHd8qoD1GvoO8o}@xziV&TtPld+Geg#@G9T@>sOxs!qfi+b$YM= z2zx9O$ds|y{YS(A{p-hcstO#uVG`lziOILCYb(lQ1&m@6?3whBPn6piZsF zTXPM3OZY34dy;qnEN-;NylA8-9HfkDa`>>T>&)o7bTRhJ9_$hIER`>u7y$%Brcvkq z_Yi-9#9l}``|r?EM3NP1qJ6~$)#&n?SPG9Vq2Azx!2r>kjXs-*D|kF+D}#7-es{)NVD#SG7St-(u=k)W1mC0~z6@?T%X=Sm+0!JK&jVI>3C&ZYO*Z=A1q$ zQ}cvIYeiPU&=BZWyCQoZ6LmHq)G2KHMUsk&2(0!h@XU2F9E~7NELjlBG_fk{ij$|- zgL>loVY@VI9NDxxJ-zng#mvi>v(H{4gPH!}*~DLdef#gfy#32BZ-00;`O}N(UtZ2W zf4%T_Vs&Z?blbwYPOGzHr{njfLag)(XA`j^Y<50dN8phYT@O&W&iGFr(JA0tY!^$N za-~}=w)kr_p~B%DdxZkQ41r)0i+CUy{uzHfn0aaci;HnQ_-Bw8b|{yv77JJG&gLeQ zE~i=7n<^z!C3b5PG-uPAoRuqU8;5fXn=|tp z^Gn+zR(2NF_f~ck8waOsQd&LK%xx(rSNA7Y_SRV8fhH=F38hL(aV+3xg} zFB%B?NESI?F&fYn-r%U|=u1N1VVXzcD%pc%oB^ydqgc6a9jIschNo7Zzg+}>zaa0M zczL?y6%TnDH<=VD(Pr(vEr`7-$5xp>lR65U|!nCn>zPznj-PLWP?{6uL@g{~P-ocf z4!%UE-@gWkhxuH^YH{yuEB5zJcX!b9A5BefNJdFZLIV8;3G^B)^wRQ??i|;x8Zy_x z`1j#0O4q-#umcFLcOEPC+k6>2!FC{AwK>xl`oQtAZEw%8wW(c4qO)|eIIoGZ26IQl2k;k1R6@pId8s;AL@e^JqRlUa zB&2uKAKZ^`-oJbQ$KCy>R(tIBL=FzrEDHbm=jp#dS7O2`Nx@NoD^)h9ClgK8GbMJJ zbs6wy%%5Npd^pL-{}sUv_D4t%(_j{dLrtVcuoJ@1w$?4-BE=Rt&=!eQ2`zV>sYY(t zE5!eVu|GEz(MtHjX4G3ly7|%&*@&qzcyc<|y}{k}h$i)8kL|Jiv5#8p9$P|M30Jia zOqvI4Xp6^T^VtyvnOp|FP0Ok^rS@2<(J&?Ih*LZp)}^m1iv2H`euYwdf;XT;ClA++a5QTbBm$|2cqe5rr`r?U5ZAr=rU zDCjg za}9a(w-7^TC|)pfL|6P+YK+pwHd|{=*3j{ZnV~Rz_|b_ej}45;Bjay22Dm@~ZDsWT zxhpW2y~dXYhszO)hI2W#2^TxqcGcL=Sm+{gM4e0h$oehTSb#g1mLP_rKrIkVu%H&+ z1G$}SwavW>YX zwLdoiv<$&4T?#Xp8P0{E0s=W87%rM$h13NWN2t8~u~=-9+mJ9|VF3Q}yUnmf59i@@ zCC#jjgum%*t%SA{XTNO2XbB!Fjm){@SF?X`!7&K3M`HylacNuP5dN8!XHfL0!I2On zRdNTD=$z4PpI^G1zBt_+*aOsn!@JLTG|3CaPdoM>^Ai*0iTK?x+mJ$)yt)7o>Xlr3gV(hN&O1DT7Vuknk=~g1n1F%WMlV z(H~7+vA$D!%Opcr;pxg2brJZb3&Nb{J_`J1KaE{OD2W99h<`<)**VgJWvkoA^XrF` z2<%t)=9zKE)%?_`&{|b`C-_U~OkS#BxM=7gAef4S;uQ03=s`$AxM*45g|eDqsK)hu zrqs5%z=Xv2-I8uUVXlvvc>Z!nC%dTij4BZJey{B4)GrA_c_cHvFSJQL*J5#_6ih zfDEcm+;}(xS;B&}FG0UAQ{#EyD-^$7kXQ0=;YNy4x6K!cLATR?ia~!21cSdetLI?< zauEi;dpUQvAm!Fd^c8AyIX4I z;e|$J(Vsh@nh`S-+{hvClH=VJ>k;?W6ud{fnv;VI?TPtP=W<|!X^%yN8GM22wN9@y z8nZGF4KvtEOBWUzsFjho#ew!EKw+R6n)>$U!-w~O{q*tg9JXZLBq1Ep|L_0v9H9I z+7@BnRe?yoLn6I@KCG@2=Ur!wMcc_?Ws%aSzDK zG2o{giRc5w>^S;$@-21qb9Dqo{sZ}a*Razict z6@MXBUHgk{@1Y8X2|QI*ZWkdjKkrw zT5V?y*5;;aXIHzAd_`eYX@uYkW1?iXU93_<@+t|~rROWr&giCqUE#SQWY7Ow{0juj ziY!qDi<0>R#jlLN-$O9?`}pw3{q5&=a|FDuuI#f4d3EJLadduZ^j;c0tfA4dsO!{( ziv_(5wt&$z2k*dNSv)U*Sk_aRgeH3z%{-Hk^x{M zo34PrHVdDrKO9U`6;?`sZ@*R>5ExA|D2M$NJ{X`dg)n0>98dtU-5Fyc7lGiGyepb0 zGf;pGx%zr&5V3 z|9ZLDu2p*VT95SLs@fIco2~?W@neNV)@m}`Ij%|Cnr}Yrq*6fu5cboN8;+6 z>9vX3jp>DLhR5kaZ)~eJw^eH!#|(&({6nptD9+E0^*Vs~f=VA0j)SKRI8fmtwgiHo z@E7ofewTwUW;0i@XptrY5sehtsli}lD3}ihazrEy!(7hi8s&1g$~Ro?0>Q;X9b$pv zHZ(O8EokiAya8arAqz9sZ#Ok1?uWFWWf%%b0cCJjQ8 zmJPi#UohonyOS@5O=YRlX_3y6%dxQqD^4~I!97wVAbes|WUhu{jdr;eZI#uF8t203 z(1_aEdTw%_TU?LlUZ-i4Y!4LdGTo@2@?>U3%B4vBBEdVSSG z_9HZ(h(B?jhnmxyBL~M;80mSG5^D;SPM7uwJywS&>SWV;D9y%mU>9cq8Gorn;AE01 za?~RESRz@5sHtCpus7FT3c%Z*-2X+1B;zkz=DSjK2G^az@OnJxjSy90Crfd3g1T67 z&RejudN9AZv%Ip;@^_47P#qXA{cP#IYK(91|9to1AE;Z0q8TUVJ9z4z><$<|X?5S% zTMyOx9VaaWV(_k6Y*v=TzA?t=UV^ao^f^QWO`y}c4~)(hO5iUt&P*Y9re+{ z`RTDib7msw_R`)p;Wu*WL2aeeSWb`i^m&0`s@)5X&1&!gyAfX|87XGtl>(Vbq28`v zUw6iUuN>enCGdZP;4gWIU<1Hk6lmb@-R&o8jbI>22J-gJ;*USP`Q=B3LlZ_eg(uYEtXn7ic^zL6aj&&xI-jbrY3EzSyRX z$UdDLY$$LEgLi5SIIlQP@y|!Ek|k?JF&oL^YeNQJDmD3HmG}Ls*Jxa~NEoE_0Br5| z@A~M~2lsrpB8CqX_yk{}k5A2udjOum#r#zwo_8@mY4a0Q5K{P|E2*2%oEQz5)q8z` zq>R5jODU37$i0GKnB}&bENg+{qpT1oRfX2xm!O0su4<5t-$I-}ts88DZpXh9-S%T7 zTtyeXv7z4F*6kkXkB%*xa}P!z(9R4fNm6GfhG3gH0T|;Yg%h0flf3zVyLn=p<(sF! z#vl7bwgRD=dr!9){u%t0A(*RF|NeH5`&ReXeCgTRR4y&<@PsqqNovQVg=~N)jX%=J zprgT)28a~#ijvAY%1;DES0G@e&FD%BZ}U`{8568Xz+XyW0l~uFIfgreKT$vdA_S#k zRgjoR19=&B%v42S=O{e!}Lxh^zbK7zwPi_YO1%q}Kat_Kz#})Tf8%+LKG;x!q>=d0o)}lcAw3 z5KJLl$TegLmht!LndFA{eUipXv>1<-lbBzz+mwiv<81ecl~c*8TtOF@dS>b>cf~u1 zSR$DyBpA4k=VNi!p^D%>&W6DZt1z2l;bvpVYhrgsG&&}Z4LTA7M}+@isn~)4$AaLx zdoM!bUO1mw&yk_CgSatOX8w?Jn@31!azy6~O%BZD@Tm}x`U}l0{rwc5S0NJ52XRFU zG5#EL`lFsu(i2I#q;N-4%!a!e{E=pVXm=9K8e`zVzycmYRA+p|DJEsYMVCE#p>>{~ zTA)@=RaP|H$#k;>TT;hNOf(lDub8JRlv`=$3UTT8L@y*I81e%k7!e?b$-69RqL0r~ zS|%5CHm%ubaD+`PMe@XKWP{!qYldWZXa{eBE5irHITi*T2kVuP3WXV?$1(!rSi(<1>?a^e( zu;nUT^tux!qgSV~LtC-L4Fgzg|5vaBVt#gU7kU5N+0FTt!}Xmr33)v>PlCc6t_i^s zoo-y1xyt|1)oVslDW3Sn^ox$V;EMqRp2kH8Per08hfT+CGw=k zH}egD+3u0KA|*(~N%lmR$W5i(A#+9m{FKA@I)aG>hG_ftdqV=)9ri}!{*8>kUQbx3 zy*$@hSOKg$HJ~xZ%R(#)H+rC?*pk3O%^=NS^#0-9pZAY{-rTV%1}7-i#R^j?W_Aea zp6L(DVM-hH8&Y&0+Urrh+lzC%>nn<_^^;xJ2XCJp z?5dCUHN^4JxxiUa_}s47+0Hdqo!X*Pn?+V^3HV*{SRj{!tLp|RTVfURgu^V7@dofw85iE#X8`ysVSz6tU|X)<9aX4^Ah zx|ruG=6gVJG+gw!ps_b^;*9{=QW&rj2B*$-fJ~_oD446!+va{e2I7{lS7}(D2+3Gw6C6@-B_I8 zT3oHrP`!qtk8fGkMKVAO$5tB4C@`P`1M-NsdbUopz$V$!N>)}t4ovD<4t5!SG97# z)4c7q@A}>Qe(wPYhLdmBhrA;+!bCbPY0`Lvq>qx%rAyRn-Nuy&-gK^vl~p8(9bP3w z9<3d1DS1&lJNv{OM1uw8SX;#MbbE`4jjf&tzd-yw=r8M;-*F2mwU6GnKOGFD8KH7n z!xw7%;f{u3Pd-x;sxuYD7pZ;&o`hV2Gz``hUv$WJ7Qu&kq+LLO`S3`yv2(n=ui8D- z>?tmARXtLflo|+Um(J{GF(R5$q=xixWzriCoHCp%9$D-_zqEz%JV6GA6PLvq^)q>$ zCc}r;gFPD{(T77=T|N@K$ltExLeHT3*1nE;8GpQ3Y>ay3$#-l!V)yZTEV=NLWM+io zm-3j7Kc8kIS_=6xZhORd?$V&@R4^c>+hqaD<}r4BOw}#2LuyU2wt2G4K3t8B#sL!< zsa&hVVZ}7!7)QR(PaE9iZEp7;{(SuO_s7rwc>MhL-uPp_I`ldA}>g9H$(r#8e zM61?qU-i1p0m;VTI|%-gdq}X${rADI1!}sOuNn2$_0`>1FJ|AonxC3jAvc(x-kqJ? zdHrVV`D-9}^UV~PtC(3lo?bYbnn%ID4+PIHiLs8Q_0yHj)0Hi*Co7xBJO&FZ2PY>+ z3K=-D=GFDEd&9Fegp_CvyY+s%)@xRK#SG&lxd=8mv3w4tYpDtNHUQ{mpW0joU%ovu zgb|b4-;h^8@OXH4GrA{6gWDQAo8kqJD-7(?95gbVfX3@8NMg zdVhQKNwWR?z1|oHg4yE}qf)ZkVC2}v_+l2}&w+u-hZ zas3)YmMDD!a2*dnjIicF z0__Z+o$A#p15!PM-bwun1k3n~wc5?$u>ZiXovWN?KcO(` z&{KfR(*Jr-i?)TMCO^@)7^5!hqECY>VA8ohipGj&v;SBD#iSK96n&O6*X2dfb{Tb9 z5*`~zdfZ`-*i9juF<=9K%>kc19QMW&p>#H0sOB4Gx?rJ<=G3^nxU;gfyR&n8dUh#P z$M{ZQ5`}M-g-x%bABx+pR)j-@!J*OPY;RPY=(Q@7@!Vm<9LD5#TY_G;dz<}sY$Ww= zhsp1CM8a&SkC%$nzcT(7+mP^r28V=c!g@Ut{M2AyAt%aPerY+na+xde7h@21MOn>0 z!Xdl@f@G)Us~&d*;tRBeVGzIJWGTVSLXZ1;uzvzi`!-ftiXo&L^kreS^aRZ6LcLk5Z(^V?K-ixS|8h~%L+~l4k z2p%$@t>(Fr#?5F&Ast}~o5NEc2dgv(JXZ|c0>12+o@b(P{a|0I!%*7d3|So^qrroo z0X-q|hSjBm`I#+Xj`li!3yMR7%@PR*DfVmFgfd)7uzxlJm7Od`m}~RK^jNzqbh454 z#@6wUa5WcBo*DyE=a6W+(O5^njT93N61o&BFIF+$e#Gq%mY8Z6-j7zSN@HU~-?;&U zyD*mWccaAO?P%^c&X`p9V+xJU1i8xsvL{CLc864 z7_$-J<6nW=J9Iu$+<$nw`4i-Q|HprP`13zO;nBmNwe~H#S*Z0BI^7oz*eXF~z%2`b zV!uI7iy1hJS}=lO^gGw!%mji-4?tn5$5Ch7IQcV=6KP&HU9Qp3!k4>qb9;Sv*T2Ia z^pRPc;o}f1Hj?vL*6)qD9Dc5ma0)4Y0pB$q9)Y}gWXYH-7JthD)IQyRed8a&CWOdh5;9 z=EThQ24rT*@KMn?8c6IZ5t2IyQOUnt9&zhydA&e`o9H#jkp~?-bqof zb|`)UUy%1gM+4mo3X@Iof%-hm)FdTi0la;JKrmPg+*3nIjCYHfP0n+qK6Dt11wqPj zSi$do?e6s(R|E2SFt>yEbqBzG7-DTVe1ALsAeUfIS0ES~|J~ys-QGPU7={Tt9LbF0 z9mJ~~pADqWkk3zAWx*Sdgqan~3bD-MI>fRYbqWiD@7Ue^Ek-w=NdE?-58uZV+x$d0 zQ_X?4*VjnjMO;&l@Gf`n0p9_Bl31aJ(vSnN@eVtSKf-of5W%yBz1!G3NMZw@H_qDx zwJVC>CMu%=_{$a8VjPLFzB0S9at#0!+bB?&u?rF0M1}JVn{xqQJo>n@y_y1n6}qTi z;RY$05#cz!G$vAkaE=x&6L$1!1^=9Ba5QCeEvYbRkz>c;vY2K{RZ4|sgZCZuuXMg1 z-3|T-FU@z@@9}XkKlr}};L9u?7|ley{5R!Fnauoqj27tJ9+Qvx{Lp#`(jc15dY#K` z3_5LbzcU^7o&G{sj6A;W<@(^|C`b{#&AMklZ<>!DTpUGt;7DaMM{?{fCb_FG& zbb7m;5ep)4y~|>B+s!_^#pkg4oi@ME1+pi3i9lW=8qPrSgGaCpi9|6+2`q%@1Bx2{ zYw<8sV2PkNkz~zys&>V3RPHv)y;`AN%{R$Iq-a9QRZwRk$RRVqG%r)jCd=tqA;n6& zNG=i1#KHGqD#lgZq8!pN5fA4AzpXJ2)0u!3ZX0|G5J z7c8wE?jCCOW*_VD*hHq&I+REHoh{Y!{NC)u`sC~7w=b98zFb+J-#=BDg1%fP*(l|E zIVhJb$q6Y+y+9I9y2z>{e}Wd(u~N6QL(lQ_@JM^AwVj)gH%Dy@a|N@$7&R}8W!n%t zc%b!e-m~cN;q%|_KmGOg!ylu^-&)rXm?>QWLEMMq9AP zzs=~gFz2XqU7Xp}Cnn^$rze+cwe7;dKS#qo7ml$GwOy^#k$)WCe!hSIw|Afa?-lpn*>W*d^W(&pOW z$W4|LOiw#$6#CpwX3=v9co=y=7(j(P90R`Z32u-8Jy|&R`od0GLSb1N^zABF!NO(= z4@}8wwTY<|B3^3G{@sn#X}!S$h?Q`OBDI(gJ8LG4%)WEARk5pGo!^_E+MJu(SOkTM z>5a|hLpnjEzVOW5#<MpD0R+oI70hc=>3o4;x#R?Jfn5oIxl)IM z$O4+tJP&}9JNTb;qTsRzbnKBikd$2qnqy?u%1eernNpdZ+nJi(np@mEI<%PqVXp&J$;sWT)02 zv~EV-`!QhAB>Cx*8a1lDUTZwMhK>-ZdOv=5fAjus{O)f2_%$Bx#t*ln@8e$nBPDS2 zs+UO=83;Ae;XSvS^bY1jomQ{c84USi$!I1PN(H?U=_^#i>0GA5F~aF2^J84)8v(@P zuxe3oHOb+dqQfY)AcdBII#;f_0ADZ{{C$cq5Ih!b^oRT3uKN#^in!$?H}%lAixrV| zUA0(&@d3>|+mS$9V0SS3JRE->-TXej{hjReTYQJSpzss;${pUPtIRgbBr{i8@C@|J zC@g^ZEB*>@uzg2uQbFCFD#O+1nFOH{kphepA)V4doBWgV!}5d65KIXJYyn|l7DW)Q zXt0rGr0g}s?IIW`E3?>Ln34%!GDf-C8p)z(x^i-FPQGz@g*Ai_7()^w5Q>#?PXc*m z@Wppa_Ma&h5e8gAmO^B42b?~kJ|AdUrPgfbH`9b6Wf@KsI zESaF$>6}){y}ceB+Wqh+R+G^o8$7*iCYljun*$EBD1jsXbT(1pUoT~W5-LYg0$-7k z*P$$UT*(q|WJ*pcyiUBQYFE1LD?8FX6BRT(+Rw9%8Yd*Aeo&qo69yAi$SC zyBD)8N6_z!1IJ{l(8%B~zbGgX#=PO%L%7j;;xRwl3M-Xtos}E;L^&PFW5SXWk>e&A z%p?M7IpY3Q#1jv>qCscGXAikRe}l_%?l7O*39BBC-OF+9_r!z#lr%q;4ux~fK(XSj z(Yk4Md41lE?tbeH-`5%=Uoe9W7Cak@BbLG=ZZ~3^X-4B}-rZ3zOO@};+qJ3J%M&k` z-aKDip4(F?Oo?ceNywh@N^ zfp|HTx{9KG0&bW(L~_83HWv8%_}f43K{QIsPk+Vf{d)Kz6fIyr#zruO(r~7>%E32w zdSYhcZ*NB{>Y7~qB&<^afRK6jaj3+bwNn~e|}5x+N+Of?E6dMlXMp$7RpzWej;-QOQSfw}*9_nF}S zZ&blj{rmerq43SS--x>pf4u+Wzux`+pX2v`#`AS68{gPykrncLQaI2S*ad&N()HkX zhz+%Acyg#w?w_3=sLwGj(OR4ar_bVZV-kL0H*3sBmGR=_ z;#_Ss8ST_ZLUz)-yS@1cP_mstHl~mbE55&?+&aU1LIF z`;1t_-Fp3GbNz(>!r`vw3>}@;?srBh5P;yD-oyRq!%d&M?3UxJ-@X}ksn+jr`uBWq z_oH`T5+e-+1Pb`=$7aQ_P!eLHI56LMXQ(OtSGLCo7Z7@j2+^?`p*-KUa&)_Sg@b?hR zv<}XVxKAVdlx8Gb43pBRy}AGM{@vdRZs3+j0(?J@g<0iqH+R3?-v3VA-Ti*c{T*NY zEJFN+PowciJgf%8_i`Yqf?kGa?m;$6H7`7~Kwc?i&Y7!>zv7B8rgPVA(T*AMBYzxq8|DJgD^a@;oAUx|Zm zSJ*_eA0&oGi;5US;7}R^8F3R#;o;_E{5hD9MN4pi=@dD0gI2o~P!OF89rh~1wgK5b z5KIdgGMtVQRB8*@MQ}w%)ExFZa61pgxc_*Ay9nfepLiJc$tUST0?I(MO!818e+j-q zM?<;_gpy>Lpp|3|*QV0Hh70ADj7QR8e>~uc1Q^xvC1as%I$FxJ89CFe<$2exJGD{2 zc{^y|j=Oia{fAq=jqY6!q5v`{S;2zSz!=CTa!SSS_9@GeIew{w)H*xP#p-i3y+APd z>ylaMvvVsuEKXDgrcm4-mcKSY-kbjWQIA(cWKB&*t5R2~a3SnT0-bWxIUdT90D!;c ze2XSjl_4xZO5p65j8P;`68%fcB#{8`;H6~c{v9W zf8@#^Y3QKDOD2ktLg265!{ucGe<@e#bbD+tfL| z*6Gl@xN*VQOMkTL?3ZU|?a}$kj_Pn-aj>B{*izih8-XwKX!ZX$lP$fUf(_ie^+VJotassP3#|@udXQ;7WWqBcb4XN7iRJJ z-FWkId2wz}aiCAeuNqghr|5Hbkl zkdTBBG9bM7Ac1gYx=eT9JD+QQYj4O>QPq9VM6AfzN~Kb%RPOyO`>dVq3$g+vg@Y$b z{rk(+b?h&ndva{VVK&*RAfr$blInDBh1}_4b(eBWiY^iAVV5^fVL#YBXwYnke!z)0X1w`>6-LJ*s1Z? zfMCcgw6sF-lQC#szr4G=yr)cNd+Vr1moY^+gE4|hg3gH*Jn4^-cGcfK2J&JEcTy|; zqMsDs~i z@-~j{B?_7rmdk}Dwv1P+8;ki$5+aU?Xe2N_8=Ko)+tZ*4u*#iONW_3O8Q2AY0MpC* zymC{X_Hm^YzW|jmwWzuAN`JzW`g6sSExB zxR+E3HGiX47rDCp0BHt!Q<6G$@%G}J1oFGH(_1a4gm=GnGHX9Gu4d#b>^|DR#5=Un z2f`ZmpvEA*)mEga89ZH3R;m=5HA=C_BPF4+u)^#U*V86t1uD~3&MYOydj#g-4G{VQ zArGf;n|!uxz8c4?lU#s^X^u|H*(J7EG`Z~Z!aQEA-Ie8owG|wsh)`E)0duu#O$L!p zBI0}D>_UKywdEb6il>K{r&yZDI7x0AgaA%&@S>o(J?d}G`q}k41ggiEr-WTVUQqZ^ zR0@Ou?g3f2P(-Stp)Il|wvWkwAW;NI5D>gV{E?)iVr_{qcxjE0?pAGYZ~f?C^YnP< z;%xu2am<5vcYUGd_JS%ccsZ7~=nX$hW~^`8NxE#mwXbKizt2Kd2;`O?UkqYrA%zf$ zI6Pr&VZy#1g2F_g=&BH%OQ%Z|ad3xE4v85x`K2c$80=vMpY5(4Z7l6BQ(q6g6+P6# zX_7z+bCLuC1Y<9wnS;OlA~07!%*G=v|G1=~UJ*UPOy+;g(Jlc4GqsqVEfw>%W%xaa z+!a^wKj-l_=a-gBlF>~p7zZ6o6DEnc9Z)cori!Ns{H00HT%wRB3Othob}@U)*`*BZ z)9xv-6#-;J^c$ZreytP_Ya0D0Y`UZ-i?hJG?&AL+B2K;eFyWyobSlky!7`IDqB zgTEx>RVq6W&F$>cXcdvBYiRNiCuNu-}WZNsl#4!nLf(B3vo zo%?ebpML6;5OABBmUG2`)AMckX=#g4 z-CM}kD0qoXq%eNN5Y|O<+4K@WXKSl|cyxDuf%g8ndHu)r&7aL%8lmE6{=`;%8+Z}< zEhLdPjv#!XQRe;$tcFU+pVyof5GnJMsb5o~22zDenat@^k*b;VYX~loBb@mZVpJ%& zTSch6gLy_5R>Y>~CMRYn9vtkmbhZt5Q3TO$?rJypbz4SFo`82IohUAsx7VfW@NfgH z!C^>V1hTxnPOZk$HbJPp^}}5(Vhk2m%auLG`*;-hfZ)qIumxZNWEc0>^|v>Tces2h zpn$bw+&SrS1^sYZ(yUy`gfFVnaw1kT0L|{9=Z`O@oPD0-Y54 zCDYQ9%@0`po3}LK(GQf8?@eJ&4t?g{D z?d(9ER9s0+r9z}ix`XicFXStrEygU_vxY+wzlT`67*oo~1#<}#vrme z&WT*m`wt5dS_ZBM8w5kC{_e7&%v%Ml7`BK;*hb_1<>mV;g}m3zkFEF%`2Icq8lhed zzQ$IgFfTz&LyitqIi4zwXNktrN3=!Emih;vji&-w30cNxvS^9K1<(z&E`+uN1f#PNg(1SYTHPWY0!IppoYv?x zG~-co*WccWN+i(fSiQgGnF)Q)vEQ0 zHh6x+Lx^Te3~0Hu4*6FsGCScWAI1-*(a@kB@P$Tzxj^Sq1KG%Foa3HCJ_7;f>#fA z2uN*7$`iuR63~ zi_B^w%d*;V$2j3Ow^}7ofxi{fTvNrlI6?420US@4b2K!EozLuXk9a(zUcp?;gh1_x z*JXA)hFlI>lMlIoUBof$(!$t^6+GY=8+48hx<&_FR+D$!7K#MZsl+1qyHwrV*f`zU zY0wB2M*1y^hVaR+pTKfPicxo;^;P@u>-J&NeTU5MA+x8a*9!8&vx>aN_Bq+P zr^XG)s|EY_$3mOb#?5ba$cL}qp+z7hyj9osXwn4FiBJctlo;ILJWCpawY94un5UNk zl}9Ap+HDgQS&W*U*m2V|w~pmSLxU}c2;A`cfNs?a&(~AMo|*@>$C*}J~(f4 zv&o{&ootopw&Y6`mP>^i(*YOIT4ie+O}Ms4EM}#&$)4)MDpD(NlClNC3c57mL(d~xxV0;Rchy4Qy_+xCngsvPxyFFk7Oo<5F#hHfCdlWh{sj0^S zjuHs<+}a))#c4RurZbb|na~X<5TkSpKKU>`?x(2z$;YDeF$N@dPG#rf3tZUl8a_c_ z6vOuR@)Ro={Jp9xF$U~ZP)oAhO;gsrTLvf+4QiS=p7i7W3xoh1AJm`>d|yb`8Tn>s zC;O*I6vC9(J=sRtGQgL? zqZNFG$5;!IL1LX4ye!BprvNVNst6%M+{r~(-g&pUQPms=`9*J-uiQ+UHU&zf8 zNna)fH=QgHszb{qU&Zg6qH4oKcR6RkX7ib;Z|%4B_FCxb<@3a8xJg(lpIs>yHZXhl zb}*m0=Xb}4*9X`#F!hNLRs1SAx+UWaJ|$3ttRW1mBo5()#rfKLZ4X0lbM=7zRSIh6 zs!41vNdyhyn58aYv$l7%b6&?lKEA#nQ*NJ>dnIB^;xam=>P;2uu7K$%nJf_~-sE5u z=c`Ml)s@ORovJq~o14|G?d9#=mA(D711P;twoXpAPw8Nd9B&>UtR3u9D2KCUk+^VW zj;2D>1ZR_EUIm#uREdsm$K09Q`|df5g6b*@XkSV4ZHYbE*20>EEp@8JF~ZSdbC%^eSw!l z{1|vAc20@%voPY(MIDkTAx?=5QGg1u^(v){YlnQ797#1aPUbbKVcdiahhMiuA|gU& z@(!vOTXYrnfWJ%R56>=UV)?n5Ty`dpM7=Y9%Y>2Uu{j!s# zW)!dER~aAm5u8GtV}6?%ccs^A_Dy(V1mCmiD&?;0t1S3p1LA@Pc}dcvECr@A0<7&F zW{3)3w?Wh}ijTK{fF6`qf@LpX(KM%zHg;@(ebxgCV+;3oTi~3b+MQN4(JA2sAon{1 z6=$woDlP-TxpaZPT8^=C`brNETAg-(2>8ga7D}`{qtPB5n~*LxV2fq2zRkG4xr_7X zYVY`(+_0nb+mrhJ)y*e(A&6Or!pLN3WkT z+GPT}2nnk|uts6?D7jnl$kcp#wo1%;sl119D^l^rsUUv56yTdrqdDwsu2WBXeR@ii z>SN>bbG`BL?EIbbtw~Df#no^1=BEZId;{znDE#9A!D})<`4#*Y1iFvP>h3(mEGs*t zpzAbyDZ^9*2tcsbnNb?yBf>P{+_n@1Ndt>GNr*@8v6uGt=d)MNTJ2$3W5khY-+ zE#aUOA()7b!&}F=ycGUI>Y@dL3#w_b7l@(2GC`GDE?*(tovOMOvhMLu*0zbTz*$EQ zDv6gQ45Kz<_9DGqV}S3-up9hEV8?P;C&!&3h&U#E(==azngi>VR0^sUGO@x!rn+3* zV0zBamS?B)gb5~G5faqB&LHX2iD)hpU(6=Uxl{$2OO&R98Qa*Td5DvHJ+3LgXJ*0+ z>H2FvP%Ojlvw()j__)4Gh=dfKwcg17VzCT!jL3}PS!*u5VMbX zsDMKTx~!%?r)Ajdq`RUm>~lsZ#%H{au*({-je19iT?9J&d&kK2C2gLH8|rR4+D)B2 zy&WU8x3-Q=2K>-f&1(oI;JdL-Js@03q;laLfH6stCV@Cyq^cX@anhlA0&{Ya6ga?A z1+y`f$f-pfuxzQnp!_!Ao_52nO_6o4t(O?h(D;NqnoSmomL6`OpY2_q?Oy>{r+bna zh2QvS=Yp&W9JXRY#^xuyGtjr1hnJfbYA1c~`fJdcpxnI#{I6r;Jy{2WEf&@Y!}>4T7#9@FU@d1zIdU8d#;h*#(4 zYY?B7YcMmwA%6h{(-A^?oA8WLb1kGI5BRIR6GWOGAb78Fyi?z*9Wcka3FL%uLr9jU zECL8#TY?1OU}yb!TZ-19W^|_&LpsdCj4miW?ahg3gJj|wXyV@+F>*bCZ|aJj%HFx`1VVvUgd>lA`bJJ#l%$F>j+qAC*5y>F`gc; zP-#I7wYCL;Mtysqo+j6@I)J%awu#i>=HkCQeSqLPkk|OIwS7K2TY)IMy?x}@UwdD^ z93;X!G6Ds?kJwyaADy1;B&oIvWh0<4{q%yz`P|m8Se0 znU0{DEZ3^kR-f(cUO_8?^ZEGX?djQj#K2#&I_u<wKnMrJ`zaW23sgNwqB7 zDqE7_cX(o%)P*^wb1{=BB*+7dQcX`b;2gXS!tOp>07q7VehS~VNIs#w9m`ih*6>(9 z#MD&zgR*g?2(*47a&gYWi_ObAbG|`!Dy12awBYf`l__aoU6ZmGDBvJkB=3}380zon z9*D~qyt2$<_9e3AKOKa z5BL)D7yGHAoh4SHBoho`(xz!T=ATGXcgV zQEatEK_dP%w$N4_tS;}A3Y3kPW~r*C@n5_^7>n{oE;td%gKQ9tUK4k&xvI$;Zf1H|jhmPqm0HHI+Y zyHVRN=1BV_;WJ681;tR*8uLGbm>``7%I~)tI*ly{gNcA|^AbZ=;i|*!6Ehg*nNfoJ^U$5 zF;N&4lLi+0A(Ku(;Ruw;&~84MLZ37b*n2xn9WMu8|JrW|7uMftMMIdKS*VqEc2`di zH|uH(1YaVD7*H$6BrvDri*Og#C0ut@>o$KEBfH_Q44Wt95Ca3OAIfBC1YVfiE{<53lmp3C}s6E0hWn zz-pzfOkCy>hHxQM#Sskyo*@f)3W%VfgmbczqHty=KLr_bI5S0Cu9*U~1~ea`OB9_A zW8^5#S8>W|FVG2$XWOUbF}kciI_(Yhjv%If3wVTUJr+r$*z<%e=BUOhk;s9dLW9L3 znMxs5%FYy0Q(3B|rUD845^Sd?;$eIO?kS%$F z+|v`&z6`G!6P#r?m*upkU@&o?o$6ni*jc3G_8ov>+E-b7ECQ_zh5BaP8 zea_L*3Hm9scoLF>5T0xqqP+tqk5My1*@ywbui;f_6KQK3AzqBvy03>sRtSm%9@q2? zi*63)F&Jj*yL-*O{p*9n8(5K#Pwr1>OmOxV2qwei!pQ0bf`4THDxb4JGlKC8Q7}&< zk0o>;{3r&9{&nE5c%^h1CYM_e%wCP4xlH4uuE{o z6xV8{^%YuWl{c}r5TZrM8ia?{EvnKqaSbFkxZNVOw4e-UblhR{;SHXSrpdsED+Y)p z;6>!i$O2`p&{!TD$zZ`z^Vwf$`@zT`wdZf40Hq_@f5BbN; zleW>YqSuT0-GaO@>;(f9UqE=9oeBf)`RG(W8l{owd^kcEl{64cT!Xy&!9luISfGoi zwGh>{B=8>}oRj)OO_NH1A@${gJuq<{(Fgw|9y!Z+8vn2w-OiUj=Pd(9C zXtt0pq{*Mr>5BT9{jW6P2lxG{uSIgH@Uy%3F1uY3z7`m>16eQc?5-ScR(5N}%~F1i z(p}P5ys%7<1@Lp)S+4CN+&&rk$05_!s;QiMPT=tGMI^HiocfJ6BUkm=4hutuk1?cWgWAp^h+amSL z2pnHnKu~+ZD8f3-svZi)!=X4mcW6#Zua?X#77ev#_%RAxr`r)2>>nE(uvjggh0+?R zieY$o24}1wuVyvW42M{Vh^SJ^1O~q##sT|C)h2TcMm0K{zyx9)3t+?gym6l|!9PMD z0h;L15RHbILnA(7zM$}9*``>*bh>%dZh7^}Oy7Z*F9u)GgC4%DXZ-*%3T-r6K#8rb zKtBI~zxxN^F9i{>@!YrK@5SXi3M=YOs(qiDzy|n&yjZ??p81U^5*l`mEu2x5eVts~ ziD%}JlqY)3Nh=n%FcP3VLyS+COl~-QdT{u#Wt>efmgZ|!G71(}DEG!;0ub|5Xyhfz zLy9A0@wymXJtrl2;sO$2A&wx;5~~oJ7m}RwS&9mI7{Ku=6;jMl^oQ*oTAM*AbO`w&xhr_2 zQ<+6rTt;pFZfQb2NGoazz1#)LpD5U0 zNR{K0X|Hv1xW`5X)0^l0ZO@^&9D4cd;EP`dUi`bCE$t3z`q10u80zrO`I($hI| zLgv#YaCsgdU@WJd8|io+qAmDXi2R~5-84U7%;GvWz)mAC+b7`rJp^l%WXorbgN=bc zj{%n&xQ%b&Q>_Tj*f^UW7)Snapij1caY?d0+!F9zEpIQ*)q?Jrsn^;0a^%&&2cG@2_t{T9$n&3ie)&Hg zKmR{%&wuLbdTkmRbi3{0aDWO~$x~g(lPkN46btL*S>>~9bLmJr(EAjmH16Q$fTk5j-EwhTB%`|YCx zb_*FqW)HNG0aqj%NX^Cy^BHpN*Ozer@L9VDj1Bzo7d7zfqjb zEZ6+l12K5D7~m@dj-(!$d~9jF_#l9<@&;U-@84`KALWx3k2Pc+@>mAl5->G+$A;Ye zDds_sd5E}xZ_FHUSmCOTPfpH7`RxgMGSc;lhF`mt+94bf@PAT5J24qYqSItzZE$|< z2ysO3*QpbqjpxR#zM&p-cUynQi{73$Ln8xr%1-Cvi)H@q`4zN|htTuVE*?eJAENUc zka4k0@wY;s4#hOQ4aGGv5NKVODi+b1iAE9o!`Q*=7|T&&ta)Pb2E(6&8a9e5)l z*xST9uBP0xOxV2|;Db#7f?iv`%3?;b&J7sTQ z`bPl4;4chsB#urea**VVIVPY}qevk%l}XQ4=_*cdwZnY~^zidHwup#9zCn71ik;DR z2lqQCgqH~l*2CS#;pW9!X(yK`g?vfdXkehn_U5Je*}vgB>;DA;$$$0#`tQN#&rGjh zjdir!`+D8OLjkL0%I(7V&4dChZiShtVq&J0jG-u&6Uj0LOM=XeWNA8HjM8yqx)2J_ zp~cy(!Qmmdq!V=Fq_WyaeWbdT=Bw00)sHW4>SRfgH+5M*u3x~^OJ*9$$q<3Ujfu@g zl?2_o7dMDmF$7mraYg z*J&B_ILs5{V?nPiGU1$_9FK)O6!j;f6Dd|md|#9NYks(}X8CKD$&w|7=J*QKyS*XJ zm>j3CVO9g$KsSxKty^~L12mrM4=NlKZYASLeb^77Q}5)1t@x`kxAijgVa9jquQN_) z>^Ck_qp)H5J~YL{dvJm(`1bDVBbB6>W-7>%#ZN-?QyFV}1PWnzAQSIk>zt5c1zy>B zamt@`nEeA(NxU$>{$=>(&x6l@>i_j0z0dyH_mBVk&Hwtpe*NXAp5XyE8d|Biy}e0` zF>8?W5Y-7hrR=M2XZ|)voMBK6;6o7(~7F5vi zqKGn=;gw~JMol>(5hY5e3;0YRu@_Q15(%JouPrXFVTxGm&}7_ww1`FF$qv z`mdh0=O~=R9WPAXuSbVE9kxE7YdGi~oeJ1y*g8#R^>$gMitzg{cvB_nz3 zkhky6Xm6Xj_svKTF3L7jSKCN;yS2X?+rc|FLeLO?(QG_k$!57@`{n9kb>*bCc1G?H zHy?%vN*H43z>!&m7%}PP_)K`NbUp(q&`@iVp*q|%*4JSg=o%qQ8T`#A7Ey+m7Nu%Q zg3dy6wGZ+N;4)BTn3xG9>fi?;%t5*iw1k=#nBo-5MG@|pVk{(AMCdL>ifpC(A(K>T zT&lsM;&xbCf|YcWvT;xtxAWZGaw=KDOt6jxu?MA!7S6yo=7Byt&S$?j2L8@WXCQON z@+Hlc&e2r0;EE(5h>*hr*9tK~a>;OoQQ%BW3adQmi{fMVQb+6v!htX_0Q?PM2ieDi zG#tUm1)+2kBH$Q4Va9;31}qJ}9Dsnou)@*}ZFB3awhXV}GMD7Ahpd)>(;0@MYMi82 zB_zg!zhuSR-BF8cYG`Z%7Qya5R~Oo^K(M{N%Z7Ax*|3FQyfi(75V(DG+!LRjtF3Qd ztn)u^(~rBk&x||96?{h%Gzj5^SU|{pp!E3$e>DUfuzN`tgPTtTh|d6Da)YtokDKC_ z;YSe_Izqd^QPVtBWb)uI+{>DESrac~0%QErA&%_*@KoCEow7NEgNu;;;=;z}ItlX^ z;s~Nnhe{WfNY7T-*ifhGVGYgc{4$m=5L|%zEK|bsK$-!$SZ>>-)$BG6z#TD05&aN` zFd6b@x(@m5)(JZq0*2TFPWuGV>~i2<2*QT#vQ5&BcWi_P3i#^1oe2y7bCCRtesu3c6&!gLJmjF=b^taoeK&x(Zxi(oJv$vscLGL7T%RO;7fy4Bu+QC zVkDZU`!+51EMtK|m?yifxFQF7fM8G9AB9kk(&MxJv-(j3p3h5cVWEA7vf$)s`{-cn z@L-GWG5pV%!;6#;`(xu4KUo#`5KObY+_+1nBp%$5i<2!d)kKD@tOQQ@cgIVU;o+j%RhVm{g3W{ z{hyAX{&ySM2=oA=>&?+Yvwrcefz*k%pvgQ)y)Jdlq<|u@i<}8_Ce55aPj_2#t!gz=c>`!DT@b5oriDew@FGd z54vGDf^3kOHS&f+j~9bIuS~;lEY{v}*RbC^7DC)3lXg@!YbfYVq~oP>ky1W^-R(_6 z;aY^~yOnMfM?HDPXe^RaMb5Ais#kOq1S&GtS1HFhfi^_9rv!WrUV13Pa5%F@DN=4> zCsQ_Wg9EUIX-)nFf(`toNstuVK3cwNAPlI4?@tcN=)PWF*qZXEP(JlU=mB=yMsP}W zzZvc8at!x-EF(}6#>3(Hbb4iRac^x6gZg%N{|4?;WEbt|=z43fv9@_a-4g+E0_YbZKZi!2fw{z3>g}5VQFIjh9;BIDcY=L!Czv3L@`K(twX7I39$n;2rQMv z3RRZQ*$v)HP9FJxKfXJBFG~}RsySv*A{=RDK9~ia=qr}E`09jyH+Rbkrvn4(F z(eq5^)h*6jtjLp#dl{TV$$oQi)ZE#*Sg!6(h3DX-9yNQpJlYkxToGC@I9y@7DKY+J+rZN*;<;Vb0k6Wn?_hRb8gvnnwW@)Adi`FCCE}8}SEXK(NKEGI_ z)7Iov(&-IFVwpmDjkbm;D%ba4?(RO{D}hy*)!SIETi0R6?B`vM`R(nWAMXCZ>fsKc zWYX>=LAJ?c*5Q~Q8uGQ%I^l)+*>lsgm*$skV{IL_?rzuMpnr5UY`0H)JgHzX7oEo8 zT&7V7;7b*GB3YVIEd?PprK{jfvIv{;L}->oED{NZP2Rx)XMe8^=g%OGvny6zkRgS?=I&P`J+DXm+AKruj^Pfcsna#wCR@C0gq`10%jE(v}&XJcki3A?$;piNY^X2qdjk|echy!v1EmP-gGQh zDHiwFR)IO<6z@(>-X78N^6+M#B;LKoHmruytZ+y7Wq@S`^Amz27|%$4lY|zu&EqRF z6%#XaIB5gE=p_Aj6BKIImdZkq4)_Z7r7HZCnv}=ZoB*pZ^TW>oaXPL!vX#Jkd>spG zIYLPJS_K-VbsBu1%H0+! z>P>hZ)2y<%nobt5qHsg?-Nfjh_Zs!!(WvhiT?r0E@*4siS zTc?qV(7EG(K2vgdc)hW9LKK(_8^M&Ij0Hf!MstL0v~`eTa1k3Q?3t#^1HD}PhP}|~ zcLBluuFhU3t!>&mtgqf!UK24K@HpMEbariX=j!a@10H5v%|v@e_&QN{l|Y*J=yTSd z=O z^A((CHy2xidTP0>Un^{VxtMOEMCb1Z$ ziMcj`6AO`<{3PwC{RwjUMwknOiOJq17?(+vqv1L4_%vShp+4Bu%@W1_W$@Ln z!>^w~k!@~&IokEw()Y$L((dSQcMNnm2RmJZUCyCym#J5PSp3ypcE=dJS7{0u&!rRn zhgRU@9%@9>H)dp<}@CA7RT!XagTjUi= z4OQ4Hxp}SltF2%Ih+F^DzZuJQDqU3hf*yPR9tx=im6DX%5{gCZBlhHTPoqGBO{Dnh zLN-Y{8ll!Q;252-n|yeimH1qwR$4=o?$}Idj@mRpDo^M(RmIgzqKk`s9`_9S0CY(> zKDoVn`};lJ%5FdMSn65Hwp9#O`N@C_)^f(3$HJm3;?d>C))5_c$~2-auT?7>n(dI4 znRS?a4^Ro-b^KkD^+5!RvI0ot8h1zM*Bjd>G;1J_7yhWgWQxp$aX0y;lQvi%T~oC9 zj0AIu>BYHJEt6cDi4-!kOJ(>9wxIH65`DNhdv|(z2Ztv*KhUYWs-e|u{a+HL#Av-_ z|HjtI+QtDz?y#A`?5+Fpkv%0>MF*S{aoouVVdgx6e;dc$<)L~D#cKYrFFXa&|1mLgqv(uexc%FHfQPdG} z^_SMA^$Z>=RqH{S1}=y+Z9U0gOy;w5Wx4>sBMtuIMrKAx$Xkgdo=I^EjeUvZH+IOe z$A=H=IECJa*W?3}It7_zF27R7d|o*afR+z(29nk!%#Dv-YZ{P{uvU|(Plh2rCGoLb zeAwG*kb3I##3%-#e_!XDu{W4$@v9&> zY#pDXd8^49=ry@J2b~@Lj&7oRCLhv0=;`Qlwf8!S5eK95rKN+D`frWq=ga12T+OF^ zi}o+!XljT^>y~fvS6jh)XXE;}%WLsG1HP#4s6ez^MWtLIUyg$Mh1G%#R!jWF@*kb< z?DCM`D2-b1R|}K+6sh0s9yV(02Ngg^P)#N@ny0&e*GWVjU=7A~zXZMmrK& zU=1Upb-=sKcOC#9DjqHRVi2|<>V#T|A&G0{aliCBr1A7Tx?FZSOEN!n1SyDZ3FyPB zN>V`~8DplGIDm?2NcMKOd63{l!rMu47SVZWTqp^jP}~#mK59I+DMYP0KAuCYa$XZdhe;dTLE12Z!i~#s#8|^M1V7k!64SV!_j zwov=7r013h4bQ|DB9Uy6!nBE$)DF90@F1-vHXTgFBeN;0CKL0yR3SgRpat+1{GB6( z68~p)Ayu%(wJxc`8C*&Ka9EG-8@Cn}WzkykStc#xFzY4s%i2gJXNm8mH;Azd%i7Y??)>~p zYIZR?oh24V|Ea*lOe9QDjAnCr5)z=!ATuFGEp`|#l(`fcYjoAgF44<|oi_81^6@~_0zDvwcNMNKfgtB2bRNX667~Y1h z4Jw_fx1yIsbAOk#G&~0H;QwqkKcmvawyj*{(pXA++qA=tm#w02FHQyx$9yBVT8^yW zv)n1K;~ic{d{!b1@IY$81i&XLZb{iG@xikjU2w!s$~}~Dl6y1?ei1j2n*$tkLokrh zIwajiCB3kd0q-6kGd^RlnG%^g|d-gHZn=!Ms6xNKOG^Oxfq`=<>o-i{hckq z<>nA7{*$+4=HL+(KMBtX-uvw{f_M0zv425coWnSxg_naQ7Frakg>*wTokZDytbiO9 z`s7kOiBYL^B*FobZ-)NKvjO;uY?C(DpwYR;Tw_aWE@Mh!soq6@BPvSy28QA01_JxK zAUJM+?fEBe$n%DXz0VU!0^vEv#d`*PBPykJYy$sA=bO=Xjla)_UcG>=h~guUmsaT$ zv2b`6l?=rU#fhYPAb@A-2#x4bxS8Bo<~VT7lcog}=GiNi*I^JckGg?fjlXRSx=ll) z<8&FOjTf*>%okrYX;+{y0{O=O=(8Pt@31vI;)t5Dm2tjyLYny?G!}kIA2eYnLt0EjJct7tnLbWiU^1GN{!|uV4mL>6gYT zhfQSo1{ot9z$%9+qf4)pY1<7ya4H>{I ztAue4GpDNAb+*VzL~uTcQ&+9M-19R@mJk;!K2kWM2>t<+M%rn0ubR1^A5BKR;D;d+HV62V=gFJ9(=mJ{d{-#h3(Dl zCk$R5DxN(aLT*$m)av_Y+`ZPf^hN$~3xG0V#Q@ait<*J$dBWO=79_gRg=Bq*(1Ywj z?#|G|`LiHt2e2Bnl#-WqxW$wkyn*Yxe$NNb;my8)a}D1VPa~xdCOKi%=x8&BXd>;SnkSrS9>0=0WkeW&MukMB5G1gPf5KzGW!IbNo7&* zGT$%oYaz{d+){)I&aG?JH1wU+H-YiR`P=i8`@_8}{O8-75P0G~ZES78YDLx>@ zN*fWl8sKIG<8adAswHL`qG3~H&KpQMJkuuoWZ#IV6Y}bQTU(zM{Oud@jX9>>fjNID z=kz8mu4#)iN;3%7-s}56Z{Gb0r8Cc!@zspA{1yK4?gI*6zDL{SFUE)fZR4>#TOe4j zEtcmxwamnFkQ|bsH@{G0>Ep>XM5Z}Nq^v>=;UhGeGjU9vaBpcB$YalAe0k5TlzI9n z%4~c`@W>EZa%JIFGgs}u!e%5$cLQQ#ynGN8yZ*q+qXlz@JqX~=WS99apL#EAEUUU~ z^+11CPW5mk$E(T3EN&Hkkr=l8G?|I&ni(|TY5X-HSO#j*<0MazSHG0W`_(9xOJe`S z`p*vmbZE@+_RC}cDQQ8~y#I`gTlJ;-gVvC$LB^L$jDl;a#n#RWp)6w$)!9wn27qUF?EbRkh5 zuHMN#SDM4^{pY)Tl!q_06cK9$L;g{_{XIHfj^f&ND<>0jMF#QpAbU2&Fhbsc&Hw<2o?I_;lKNGeJchd{|nb+e6Mja ztrxGy`Yi)Bj3ZkI-(EbuJ|D6>j87S-k{_<17Pqq@C-qy#T6e9>?BLGhSo1iQ2m|?uC?PsV|3T@B@)BJI5^{lK$=Veau2p32(0EI7 zUmry49&EKjqC6pJGR*ylC_e)(p8YD~|Dds8ba0N51 z$xv!Kme0*EW8L$ON|nMORr-KJ-qy#ASz~xta4$&Pl*9VU>TWENwb(rUgI4N~`UWhd zV3}Zqa0jPi*~O(TW<3TA5R72FD1}PA8RGjDdrIkY%tWe&@irXP$pI#xFrTIWNTs;2 zQYb)vQc0y3<0N7H(Of*DKQsX59<_J@U zXX9ZF)V^7TiRyvTkIlmYESM}cX!{5zBtXDcEC1{_mQ%)Bl$rVInq#mx??2suYj-RK zzY)6CvsJ9uN2qNb=!wi6)S{>4kMUPQFo9r^Z)YnnzuuGY3}k(^@>{q(u8rUF_Vew# zFUZ}y-|yc4ar^G~TN*^(e`yNZLRQ9dEy7ZU$$Sk=-+ksSiA2NQEkEj`yp;5HE!+@R zY(R$vP_X`5$?ff@TW+1GF6?g||dhsn&H**8E3H zgn6o_t(wKmUx##^*dE(}*Eih-;Nk_;(uphQg;<^pRz^HgESqrR%mN#za|u#+jH-+EkK zMQ7j|xD~D6%h8jH?}lKI2^x`I-#V`}^aQh$85$0POX_w5#3me7(Rjc@05>!YY| z`{TXUfJiC`j~NTp7aH!|zy0sG@BUx5clZBwd-o?jwyv5a%z%jxx`bA@TAtDe6-%8# zTILxl7JE2MR1}p#r%%Ejv@d3sA;$4aD`TRGf3H>8!>9PT;qe2V)Ed;)iadY_YLwYbOr&9)lUy(Wqt&*))i8pTrY#hem&s$C-cI%Dp|_(7b)u% z4E^Ctz0=t0*{7Y%f3y8MNy){!d9bjIi)Ub51_OQN`rYrZ|H*!>KX91d-}>uX?|^=n zZR-K8U#b@e_83Pp_?y$V9`^TR)+LYvpZwL`$0l0Mqcra%M9v;=h}K)UOB~izT9ekD zw93R~v|g(5yZG(K{V}fL$qzJsmp+4fDaw3{6GK)xt$t|m)j!-gvoZMoEA+`*xB3S1 z5f1+0mFRP;!S!KwFkSH(|$!^t@o-eoJEKj7Z1{+ zDd}fVS(-d2f{e`@`dZ?kP@){{mra2xEj*tLTEWp68|bMA#(oBzxmA>EE!wpfHM1VZ zk2`r+gd-n?3t(x|lSTU>QQ-_rhpYNa;jq>@tHxqFp;Qw}1O3son|EL6FF?u9-f>e4 zSuRxKkPSsjlA(L>K=N@t>y0^R4A^fxu{^i>OL2LXtLvHU;!J!FAfBRUX(E@&mKGLQ zYHNGA;(=*7Ejq0{?T;>2`4%yb*zzuxH9>r#QrVU?GpV~-Kftw4h>b8135WCxE0or9 z#g)wbQZiee&QvC6^6t>A)jK^p9zmQF$zZIQUf7Ifs==9@XEHH8TU^(wkdwTf+ zIfHJRXOiB&_n$Qi(}o!EHM$ZTPd+X?%BBkC^-OMwy!UkyoCqCK8b&x6 zyO_utF^CN^Ubc>_D|?vyBs%Kb*!ri4hgli6+F&#w&p@{)0|~X@?RnHQjfL^a!1!wz zeE*hS6(7)6f4iC^t>0x_2?H&y@9Hu8TT%6I!1wR#g|V zSYPvBom^iSAJm7jH3sbDyNsXEdUE5p8-pk3H}-QjTUjKfe&tM#5K(O&e48FfM{qDD@`i`^CP)!|;7zOQWF< zq<+6Oj@NH-a4V7;tB^j)_wPPA_{s6S)Of0q^oQH;;n>*2@dol51AP*8j7s)E&s5qq z`lQl1Q9BgX#4%kR{Z^TERd?;^~ad2-g=6^ zS}ElsA1}C7P34ll6`uJPA!;D8fL38f;Hn~&2L8VN{r24-w3SDQol#9gFqAEbe1+T+ zMW)r&XAi|? zgt<|HxPI=5`U~WD83V0*@RDOF(xJ|UG)`!}0b*!CVE>>PYJdN1n`9Ez9K5o!y|}b7 zUtZ4^*HgLW>Dkicbj}x^bx$U|q1oU}A+xYPTUedRlp-`8%a+TlyF161!0Rb0CEtQt zNEw2{Uk$;$#PU@KygR*mcU-^6NlvQv(&~O;aV?Xp;`%0AIGtL|P{~eDz|sa0YS?4w z;k&fF1N9BHNF@Bjm`ZsOR`Alw?)Kh=p613H$je9kz1OJ9<7xok_jvae^;E!xJN#sY z{Ql*WV|a<^^;7;YWo7@>7a3po!%Nbj{2v;>Pw-bM#!5X_+M~Lvhksu`18j|F`%w`! zG|~r0u|A;nUE?Fhp!HpSbMzh1H$hGR2WS41cR7GP`rwD#)q=nLar}ww*M}LmT_103 zjs3>Jc#DDlxE{!ppzJdJgy=C_{n7wCV_4z@PsYaO zf&R)t^i=_Pa-@DqQH;Jz#`eiQG+wqIz*r-%&STMVtWsGd*Ob4k^a%6RZ@KxR_HfP0>emsj2c6{G-z6(8jxzD&=)lnQ}6_R9xOIt?cJ28`<)D9y&+36sU|Q z+loL5&J(~_{LdJ_pD$(m=?VTGoZaAarUOX6xRRpYGgV9^7rBU%rjQMNqF;*>c2(&n#e+Z61r_OfZX>VP485_^P z9&rDSJqndn-i6AX(fIqr^Z$=K`HTN^%U4fK<9G%c6#Gk5(sxNetHxIDo9MR>>WbvFDd!jpkGjlWBWcmlp0@I%0TveP&Z`~Uyqul_IiI|PE+N&>T- z%e&T$-p><{l?fBv@SC2G-AgLo}5QMuJSxvZ;o-hj2oy21`z9k@xK^%)fjL* z$9#WI4!8ng)y-F1i3_NcbFc`OvP81(K9V8x_Wd7}x*H Date: Thu, 24 Nov 2016 17:50:42 +0100 Subject: [PATCH 44/99] BRISK and ORB are super good. --- .../inria/papart/tracking/MarkerBoardJavaCV.java | 1 - .../fr/inria/papart/tracking/ObjectFinder.java | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoardJavaCV.java b/papart/src/fr/inria/papart/tracking/MarkerBoardJavaCV.java index 64bca749..87538114 100644 --- a/papart/src/fr/inria/papart/tracking/MarkerBoardJavaCV.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoardJavaCV.java @@ -128,7 +128,6 @@ protected void updatePositionImpl(int id, int currentTime, int endTime, int mode // trackers.set(id, finder); if (corners == null) { - System.out.println("corners null, no update"); return; } diff --git a/papart/src/fr/inria/papart/tracking/ObjectFinder.java b/papart/src/fr/inria/papart/tracking/ObjectFinder.java index 7cb0e3a7..8410f86c 100644 --- a/papart/src/fr/inria/papart/tracking/ObjectFinder.java +++ b/papart/src/fr/inria/papart/tracking/ObjectFinder.java @@ -69,8 +69,18 @@ public static class Settings extends BaseChildSettings { IplImage objectImage = null; // ORB detector = ORB.create(); -// ORB detector = ORB.create(500/*=500*/, 1.6f /*=1.2f*/, 6 /*=8*/, 31/*=31*/, + // Marche très bien +// ORB detector = ORB.create(1200/*=500*/, 1.6f /*=1.2f*/, 8 /*=8*/, 31/*=31*/, // 0/*=0*/, 2/*=2*/, ORB.HARRIS_SCORE/*=cv::ORB::HARRIS_SCORE*/, 31 /*=31*/, 20/*=20*/); + + // default--> quite awesome + BRISK detector = BRISK.create(50, 2, 1); + + + // Tests +// BRISK detector = BRISK.create(briskParam1, briskParam2, briskParam3); + + // AKAZE detector = AKAZE.create(); // -> CRAZY memory leaks ?! // AKAZE detector = AKAZE.create(AKAZE.DESCRIPTOR_KAZE, // 0, 3, 0.001f, @@ -80,9 +90,7 @@ public static class Settings extends BaseChildSettings { // int descriptor_size/*=0*/, int descriptor_channels/*=3*/, // float threshold/*=0.001f*/, int nOctaves/*=4*/, // int nOctaveLayers/*=4*/, int diffusivity/*=cv::KAZE::DIFF_PM_G2*/); - // default - BRISK detector = BRISK.create(50, 2, 1); -// BRISK detector = BRISK.create(briskParam1, briskParam2, briskParam3); + // MSER detector = MSER.create(); // -> Not implemented. // FastFeatureDetector detector = FastFeatureDetector.create(); // -> Not implemented. From 07ae19ab1d1394d67a6258582e49fc5c34d964a1 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 13 Dec 2016 17:06:18 +0100 Subject: [PATCH 45/99] Cleaning font directory. --- papart/data/Font/CenturySchL-Bold-10.vlw | Bin 19963 -> 0 bytes papart/data/Font/CenturySchL-Bold-11.vlw | Bin 22761 -> 0 bytes papart/data/Font/CenturySchL-Bold-12.vlw | Bin 25287 -> 0 bytes papart/data/Font/CenturySchL-Bold-13.vlw | Bin 27622 -> 0 bytes papart/data/Font/CenturySchL-Bold-14.vlw | Bin 31446 -> 0 bytes papart/data/Font/CenturySchL-Bold-15.vlw | Bin 34789 -> 0 bytes papart/data/Font/CenturySchL-Bold-16.vlw | Bin 39465 -> 0 bytes papart/data/Font/CenturySchL-Bold-20.vlw | Bin 52865 -> 0 bytes papart/data/Font/CenturySchL-Bold-23.vlw | Bin 68931 -> 0 bytes papart/data/Font/CenturySchL-Bold-35.vlw | Bin 144360 -> 0 bytes papart/data/Font/CenturySchL-Bold-48.vlw | Bin 265045 -> 0 bytes papart/data/Font/DejaVuSerif-130.vlw | Bin 1839387 -> 0 bytes papart/data/Font/DejaVuSerif-40.vlw | Bin 178878 -> 0 bytes papart/data/Font/DejaVuSerifCondensed-50.vlw | Bin 260518 -> 0 bytes papart/data/Font/DejaVuSerifCondensed-80.vlw | Bin 643124 -> 0 bytes papart/data/Font/FreeSans-13.vlw | Bin 26639 -> 0 bytes papart/data/Font/FreeSans-60.vlw | Bin 344456 -> 0 bytes papart/data/Font/GentiumBookBasic-14.vlw | Bin 23124 -> 0 bytes .../papart/tracking/PShapeSVGExtended.java | 1998 ----------------- 19 files changed, 1998 deletions(-) delete mode 100755 papart/data/Font/CenturySchL-Bold-10.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-11.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-12.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-13.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-14.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-15.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-16.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-20.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-23.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-35.vlw delete mode 100755 papart/data/Font/CenturySchL-Bold-48.vlw delete mode 100644 papart/data/Font/DejaVuSerif-130.vlw delete mode 100644 papart/data/Font/DejaVuSerif-40.vlw delete mode 100755 papart/data/Font/DejaVuSerifCondensed-50.vlw delete mode 100755 papart/data/Font/DejaVuSerifCondensed-80.vlw delete mode 100755 papart/data/Font/FreeSans-13.vlw delete mode 100644 papart/data/Font/FreeSans-60.vlw delete mode 100644 papart/data/Font/GentiumBookBasic-14.vlw delete mode 100644 papart/src/fr/inria/papart/tracking/PShapeSVGExtended.java diff --git a/papart/data/Font/CenturySchL-Bold-10.vlw b/papart/data/Font/CenturySchL-Bold-10.vlw deleted file mode 100755 index e7dbbc1223d63747a7631967ec9f3f3fd9c9f389..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19963 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 diff --git a/papart/data/Font/CenturySchL-Bold-12.vlw b/papart/data/Font/CenturySchL-Bold-12.vlw deleted file mode 100755 index 85c0bf85c5404f41c0b8ffcc347a9283138f8e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25287 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 diff --git a/papart/data/Font/CenturySchL-Bold-13.vlw b/papart/data/Font/CenturySchL-Bold-13.vlw deleted file mode 100755 index d5ca7c105ec34dc5d308f85f853e41ee0e343680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27622 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 diff --git a/papart/data/Font/CenturySchL-Bold-14.vlw b/papart/data/Font/CenturySchL-Bold-14.vlw deleted file mode 100755 index ecf2a2280d0613414a76eab984d8f6baf829dafe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31446 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 diff --git a/papart/data/Font/CenturySchL-Bold-15.vlw b/papart/data/Font/CenturySchL-Bold-15.vlw deleted file mode 100755 index ebdc8e7cbca45ed57a60df12c642b26b64324842..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34789 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 diff --git a/papart/data/Font/CenturySchL-Bold-16.vlw b/papart/data/Font/CenturySchL-Bold-16.vlw deleted file mode 100755 index 7fee1c4d592469ce938d25439617bbfa5d819aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39465 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 diff --git a/papart/data/Font/CenturySchL-Bold-23.vlw b/papart/data/Font/CenturySchL-Bold-23.vlw deleted file mode 100755 index 6622707b861a27bdfad88884ca21739d3cad66a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68931 zcmeIb4NRS1wTd zb~+UaX_}CRG)+UAG=v}`q7@MdB9V}aSZhZ_L_~&>AR^)sMLgp1c*i_zaKhh%->>2Kx7r_Z2cBL=Fne~(Yw_ghT zd*NqULilA|3M+>{j33L-vNBH(Kf>RK-{mj~z@q{`wu$>OorAw02+PmDvTmdU{%1@brGM>^xMOs;;Fz?sISqwB){0pNT;(@6aSZCwQ#+t;-xahL9o*|03Q zEGNTU-Ty)BclBVHgX=(Co~&aq>>sjz<|ko+vQ*nJwwX)k%JL7}u&c^>BM^2u-9Pe$ zu$wmQs`veIgpuyrlejBO4e&o?!`KJGuzwVOmcf;iu1i-7oPFTJ*sd<@9|P`q!L^MG zt3w$3kMCjHATRw1>t}gL=g+0PW&Lg}1jpEK1mbhN1oQmOE5cl!^)@Ux#y}GI$MJM! zxSVH$4I?kOIFbmDKWS-Kjm_IOjAPb~Tc85}1fI-`?Z{uS4vp5&c5!V3RN$Y)lX3Yz z*ESM>M-zUoe9m=Y|C9~;JK$0V1>3XPhFw+8f7*t*chYt3*%Ao5+-83YVU#bywsz_6 z*mNxa<#fMg!^lUjyogIRfm7ZhPn0%*1gq+u}%Ik@xYk=Gd9eX zF&K6)5GG{_r2Dfr?5h52Lm10JS$0__|Fbro8)Lz?ZoeX(YnOixVdSB!(sh7NxyP{V zKpEjxzm1=h5gglmpMy>y9J7=M?2DkB_#OBem-Ng0*=6JMeM}on_q*_4PUq_Idp2(H zeINOKuR>(2IK|1h2_%fAJjcAn$;U|Ifc8<+9j52(O9Jjp}MlW7_5 z;NJm48pBzCy6$~5z+GFh9>iVPzYCn@r)*{VVAw4Dt_;ovN#NhZlRV(c@`nO)at?In z!ym(0Kli?WA2{2WZOyU-+j;?h@`Ni3-|6`5KLE~r+%L%Ui=cBHFwE&4_rCuSH0Bx1 z*M%(w!dQ2L3;U0Nvkgh-k7aSN41~0++WI}{EC z4d(gj3t@lx3t|5S!uURyXRr?IHXZwczu^1+%P)j&d?D<=LKx+$%agc+{~8G2PhR6M zSe7mLUESFi#9hDtH(vCzt16 z0nT!}`Vn`q2jp{MfAtGt|2@K3ZkH!<2m3&nC(A&73XX>Z_}S-9P7rtSKLEKL=IU_x zg|Pqe3t>kHV;S80h`T)hr!RyZBkXf!`JWL+Il%g{{={9LC&2j*_6^?|4EtZ;znmvX z0uekv7xuq?A?y@km+L1P;_<)Pbd+iQF@FdDI}rM>3Olo5P6q_j{T~S9`&>HW4*pLd z^ap<~EDD7AuwBTz#9f>HU)FzB*u@vZ{%?fwT`nDQmuKt?VgC=p-1wo(esbyJz^S`j zp24vH7j%}})sMJ?1dz{#{r(rik_dD8IoIV$JDcN*Wpr)k!ZZ-dFc-$O7QUlyWjZGh z0=nZn+60WtdND0=Tlep1yD(4wSeL*Y?>p*Qwu^gTfUm!!Ugvmc8jcC#E>GGDq_aKw zPU0?%w9ln;aj#0pGB6$A#X1tV@Eyx2We>RSeXOf1qiY+N&ZS}AE)SQE`jTzJ_qljL z3Evgq!T7E{*)A5o`#XVLuAd7l1j4*rI^q_-`(r?uj~ipbJa2;T@?@G|-T%1tyL7>@ zT7)rv@CPs9JFZ!g?sOw@3*X%W5=;{e`wbiB-WLq}O@#6NPCo?8Qg73-KU|*xC4BcM z@%UW2+X&-3u1eQp(=pufgzLXQWz)Ga%{VUXjt%2G`D2)c?|usi+n)Kc|B1VFe;PRB zGtBWkP{Mb2@nAlDAAi9-{|x+}OLx!4y(-4{Z2~uIbIx}F^+}reisPe=h6|k@ZIkL zaqr_hgYEeUe#X6u&wgm*x;%sFdcKhE&wnA^Uql$&lYP#7gR=Dr{45LQ0e`_d{3ZDL z{;T@-Dd^18r6X?PJI=%T9+!@|h3_~I|J?gH5C7czUL%bBOxfe)EKq{SIRa(9ulrN; z4v%w$&xP$GjJn0if~P(-ki4uOf`^W1&^6o>q7DEK#Kf^=s9mM~!D%x2p-=Z9FT;WS&JN zM0FvuuL9PEGFfO$_b7D-xwfEu0?+gd^;B}sa0xWtoaRBqxXzH=nI>0XAUq+-Rij>0 zH}$shv?FD!CJzH%>u0FhE91el-N%%&EG-l*)dgBLAJ_VLv;t_4-f7Xb13KBH(1N9i zU#0aSS`7&`a@KK_2sPKLKBiJk~Ivie1p1ldHPOO35N$NM=<2e&Izfa|rc zge;5-CHD-?zpCHCb9-7SFIdGGno+5_I#P-*itvoH_wOP(U|g#BPB(;lcPV#N#ko{5 zJfDcXbb_gL;xrMRzr|n+1eSp%)#dp*zCBg&i8x}g-T5l1^L>Iu~2 z2?CUQf#-H+#^EOO+lMD#Wzm@()6yzr(Z@>NfTN}Pl-dDyRwxauIkw9-ydH)g)O+Cr zxcgP!J7hOQ8eqpF5Ll{XDVB`RcY3OOGZBA}w!d~f!N#dx(7FjCub>k{xkfLjQ1Ycx z8!ar9QY}o1{={HXL-E^qKGJ=7R%ww;>tuYS(s$v!ks_%L4f!CAjHf~+=tPaPtSR0g z3MfNWu{M%xLeDc!IFgXAz8RaKS2dgq6R6_VM)9kRx;8;7ll|h}ikr^qGue2NB)Cqg zG5wLwU9D^2VCUr(9LQWW3`el=DF!t>mIt!5UV*O`q8m=9PL{x#(JVzc5n-9eV$AA! zv;oihHOdUp@^k^sG22>7Etq$!rdl+|xVqV*%C){#p)2b!B)m6gCpUEU@fjOUWz6bD zHiqhZxA8#VU!QrTFrx1l>Y{rbK101~2<+Hps<>#Hh|y~&Sr!9bU7ToGK!-b&_54wu zfLhR9pZ7?XKRUPcXg$&W>!^%gufQXrdSV(fDGPc|4M&Sqf1*LL-^mx0FCli@;L$O)$-hmP(Oee_2DwKFf2i$Z=Ts)fI$6{-y-AD9hIDbntbFbF- zFv_%ks`8*eZYfoVA)n9TiC)fz^LQ4I5VC|bcZLTugmVtzKNh-Y>&DsvwFC`>0%q*^e;b0N#q$FGF&MMosC% zI!LoP$glJmb@O9n*Pj&j@jk6UG&q>8rF1qh2?=W9{53?z^G%e0=@Gc9D3ZMG6@Acp zuK<}-D^(%ltU5R12Y6gfYkg$Of2y(v-&Tlap`WvC^*NbKI{89SzF-T|n~)XCdylat z+zc-j#Bk2S#RNhj(e%k69u&xM;^TNgI+6c&Ay;NVz7M<~qW@iix_yc^K|veeMH0!Q znJ$w*;;5n%k<>(CAZ-id8czrM_`SUuASC#Zv{x^T^1C zWp8e>*{!dhu7j3zpDBxrd6f@bqQ%xhpl~()8B_!YY83f}umfFVu=DFsdHVfXA~ITx zWNo6!B=g7d+7F4-(GqyZOx$Rl%Go}?;}vaz>k4XNm2+-@t}v=01L%JK*kUipK;x@; zfD7@Aa*SV>w@-t&!KK|GRMkZFU9a*)C&2kdFSinj{Sm|ml#HLl%n=dT5Y-JF_E5nv zb!K5;LwwM>g3zJ}Kaqn56)OB8vDbi^g2)WXWS)wzsHvHX{0s%g@Sxd1(^;=HzQ;3h zlPrBrhL2v30{2W~#TJ1Z*3z+uLWjoGdMRU%ii#r;nzrmnPkJ+u*W|q1p}l16!yr}* zZZp)t5KC(yQ8=LEv4l><5t{AVpGTKF)NW*R$y4sDuY;O-^OY0JO&EZT4p=z(Ry!09~46x6B2qB^~gm6fmJk6 z4z(R&KRdjm&mWA-7#e&lqFgngi4PzyWMGz~57A$OW1z2~PjBcFH!x^-AAuA}c!j}z5&a@?3oU@;mcXhLI@ z#M6wD^FlQcgHiH{!^1)0^Er!Fj3&4S0H_128DqR{gV={AmHFt9*!)cd6HB})m#7e} zdX+>#*Dj;1$ruJRuF<#EVWjQ#ck~_JGck)_qleAAK*$}4_&AvI)-t0SSoj=n^7;Pr zbMb?8VPl(gZy@Yva*A3RVZDKzIoBnL$xLt5G{ZGw;ecIWhI5 zR&W@Y%cMwq3IiI7u%VB-$W6y7mMj_GNyOF%@=c`2k*DR#s~wBpp?_q>Hv6q8Bx&bI zXlDZr(Y&lk3FhA)6OoR|>08qSkKS@Rc5y2kT~bp2X|X{S#VLK3u+Eebi)N?+eVPFa zmb3)sJ0Gc|nyH4udkBqd@Z&p9i|!9EH$ie`sGKC!QSMGr&zRbUD0qN1u(D6hD(9^1 znXV~1UXI7+D%*P1gN^WX@<57P6+_>@U9(lGjYxMtJsYS{-px@xVK|}e)m|cTFkuIS zRHs!Xtqg@_6Gfucxe@|YsSIPuxcP;2!tX(Ik?ytzY<%qe!2Ar&Pb zD%upMDW-pMg7PvuW8EWO==2Gmw3s$*M&f~=;G~6cv>{n#a!Wsy_>`Cl=}>PoZW<#* z0pE{MZ(JwAzl3KXo#d*T1Gw>pYtZg991;3>%<4>x5z1`Bsjo(p@r(5rg-lPehV=mN z4)Q)LC4~gK?Qo?`jzGIaG^8UiDksB!l0p#Hg9MgN6r)L!{{&-ogb^eOiTbq9G`5N1 zU7tr3ww#|SR|g~$69XZ94R|jVgBWdZKSlwt^B{o+%^O(rjDeAm{}k?VzTX~59$k56 zhfnj=VLTC?X)E~zrpMfHPbd0vR4Ex_9DcS-D+5#q7y2-F#FRk%ocd3z5JkD^LpJX$ zqjBZW!iRaY$YQz_#P-Lc?xoFLBr4G~0z`W{K?I;b!Xb1<8Kcf+a6jVJkkIQ0D=6YD z2v~0us3fQ6F_#YUhj%3;%;p~`R9PK|cABGZjC_hE6DKqG7|(C9_{G*#hpB_GP`S$J zI)lXl4g~PkbnD=rl?5rH{n>eb9L_qi&K0Col7gm9#UbzM{UAlcV&9{13xsjuV4M)U z2vV|1p(RL{QH+`SDo7DQQ5B?6buTcoOU1T5rsNWaDpxrVVQFm^1==Th@o9{8O0^i% zngMi;2y}Qx>(1p7mHAN^*?$q1FVhH314^yPHV^Ya_S4XeT~ZT6D2Ra&PK~*1>nWRn zF$kheSvGo9#o8r;$`R8co6=2UU^0v(83~GQODKg{>7*8L1Yq8-7?m~#2w=%uwuunk zyTxWK^Ers|09ls^vshmw9qkkDhERe(^^Ssw^aH~|26P7fjRVRPHDbfrHg8j%9ln6S z1gg>GckPp3Z^kFMh9Ryh-lzL*v+%7FZd!$2=Vzk`*l_Ff!<}E41~U@_e*LE%1#ZjK zJ{Dbshvb&Cuxs1CGAkQR87>Xww80=(yY@(~O1eI78HO8>ZcZBlc z5h&7eLapW!&>~4zpMd%rMT7dZ(*>89^Ap$Vjz*i@bi_f_K$ECckxPyDz}3t&VDTZw#<*HQ>ftR_x`4p@@BtoR5}eo@ zH)AZ-5RUm=MhI_%7v3`=H!>YkTPgEjfBYyj2N(S zDwfKmQTCn`pWC^+hV?M-`|TC=Nux|5AV!X1c}rnxiyG$-p5Qf7GX%;}FM1(B7!}=- zB9tVg4n84gT`YQOBxr`LcBq|;lssTOh+ngE2h2{f>PQ8E(L~5vp{?GKt+6mjz;qqB zSk&I>Ea^f9{XTHn6Kv4fc}vl=nHpKDv3Mv*7yB7zK`4rC_CS0Y^NCzI&FORx#u=8- zr_Q}}y24VK{t!x_m(%j$wj?H6G+xr_>Hz)(_k%CdInR;0U7`!uP=Wb$n55LuVE98g zDLPub9R40{wvAoUl%Dj){Y_PP@*tT=l z?5Ti#fiT;yttR}U+rm}w?!mWoZb7w9v zgO9ueIJ7*?iv58n9c2c_Ed=Sd89qZ2L%L?>j0EwUY0P=h{$f~?lF!CKOJcoholjFl z88GWZBw!c=gcFB~nTfHxIMi@HWDt(5yr^+tPZ1Lwl7yb(ijb|t)41NPRFzvgPGv+W z=wFK^FWx_u*7K#MPQ=dU`>D9(ZIJOfeHg=gq#$!sRxAO?T8dBLTzxkfgK?=M{TQ6a zrOou%%$%1X=Y0MlK@Cue0o!Za2G>R^I&km`_se_X=(HgbMo5*JJ&vB zKUjz+qKgkQ9pzpG%gO56mOeHt#Gbg|3Pd5AtcS5WP%@F1-036tw2zx{}-x1QpkeIYd3$QjbIZ4>6-a6Jtm6UZ6h*$&Jy{j<| zj*IyXBy@5qI`-6#NYHM8a$IoRUqJ(D8zgtm#pG7-?jpX`7w8JG=JuHFB8UPCTd(dI zue)UU@O>*L55^+KX5``$z>$btq>~uyZ8`}R-)4sbOu~$|WTlZ??j*VjIv&`!dpr<$r4TPUAV}5ot4Y^2gZ5jp6tv;-Q*NW=an^Pc73k^c(IfINi%-+$* zl?W4)_&yN8j9D3xh2Kq~gcF=Q0;-v^hS*boNf={9_O87nDqDdEASLrzAnHy54pg2E zT?_27yaDOhtFpRCqE&*V+eY0X388%g=~Lpp$;UkJGnzjxg_Z$BOCQ-bw{c&AB;zEN z78>3h=}VE+2WyUiB<2(9)5!ce!!)icW9|>2hA1;24?M{8ISjcmcwZvj9NZ3Oc?#ue zwA2CIHjroF<|M(~NX1;L;f0exH?~_FifVYsoU-A(WDfHQ0{auW(2~NuHIx_^D%MNk zuU0#3_y~?mBZa^`{6posZ4d5^$+%;a4tVzllG$vGq3AmsS>>`OM@wQ+UQmx(fUxBm zNRR!MWL*rfOKA|WsK%@lI&G{CU~D%uj}IS=$(Ii@_`rugSp`z+lRNfgLP})?p4y_% z5Nz{9!z>^NKuh($xRE(Ea6;?|lOK_(y-cyBqoT+|WcTwTP(H+KO;)8GI3GQ9%K!XO|F3@Vb(5VSu5UTb&aFi4qQV)MF67AEa8pb0VRITdbywbBKHuaZ8P9# zuPoRTw69I1s%V^sY(KMVCaET(W27ju%UPwmzR94(%8eQ{E3rA(J}v%`w=xu~+KzP_ zsE*N4PgV5?_I2X1^4^nD#;h@tr`fxutdm%@*WFo(0Y<{9BQ-1LI*<%D{yO*jhT#*q z#Yk;x<0QvXWKMK^-=1s~YW^8xkw1J8K4Ru6V4ReX*w2X~+C*w=vQJY$xb%dtaWG2G z-o1y~43Jch*@{dr%Gq=iBhCLQ$HL<+iR0m)rbl9|T7To$C@X{ott%IRNsYBC?)nSe@nZS*mv|^do zL(ng}>5#u^Jr?7JZ$QWaGiRk&u{7nToK!?son6Dq*hh^6Y=Czd(RF4bQ7*?&R&)|# za#AOe4lAOsXnIMT&gw+L{pDpzRldAT!R}zhltiAd9!4sWZ$$4yQh~o#;Hlk~C0VcM z5TdpnOUJRjadI$EnpKLG$FTzKbw}n5T<)6CQDlP`$ktL3h zDKpQim#+wtRa|F#6aUDg-bpC$x_G;)n7&A!n7L@?qa~b0`as20eT4Im9(wn+DuOtE z!Y`k&=rM*Y(Z>){+j2?(F|)cK=gSnHwINUgium*%<_!WDL-qcNM}3yK9}3-%VeO!d zx&iQlDKdJoe6zz|HgKukMIgH{Q@fwcS2BJPf1AnIA>B>Mea84Gd^hq7X!{^+08cPX z2ORje@XW9)lV(SRZ>1F_--L*vZhZ5g)mbywbk|zAaGfdu2@HEpFTe*4pzf^3PX>&A z!X7JmwG&GmPuBod?Fs#%Fa&i24PS%k*Gw1QS8JwsS%WQ)*;+`j-7lC_U=!pl!K!L` zMAA&r!w2)qgTWDhl;Jh(o)u#|9zMdUj56=xS}d_UY*z+u;56Ei^w>j;2AHeZ(yc<= zLez1_C_kR@=~RmL6eu67BU|+d@`OP_6JP9L|CG6suu3yh|#Zo*1zmq}RbX8dBl z&aDVY67#qujekzuW$QX(N~Tri90p@z@xJqOvvtK-a;61(s8--yE2viA`-`UX5lx{#7B%cb2xu#ol$k~fjA_GD3ca)xrL(N<=`xinUBuG zi<&ON+JHF*VJV{pRLCDrAkN@mR5&VFlDjb!?mstb2)YPsJ5*2?*($V!HqW)680bbR zzjLNTb#0@|bE=DSs2OEoAM53pCKBZkd*uAII$aL+UXnwU%uE93XLW^Bz>~$y&+nOl z9LnimkHxn7v+=4M5qvsTxWj#h!ZTU)!I+DLN08D=vX_unEEUJ$q18kzVIq>EpN;~z zZ+u%4m5q!}G+Bwdb%w7Y3itIXRY>?bKDyZ$KvkuUv})VLcW5^dQjGN2NfvkvKM`zt zl&cV?S8v3{3-d0Gl@#* z-g|aRohd6)P^Dr{nd2`^4keF1ppvGK!^M263_Fn3gzq_?%-Q(zSiNxJuJNgAbO~lf z)~Cv5;-^ndU74ML3;U5i(c-S2bEcY$-i`LLwU?^vAU=~zUeF^CG|K!&4wSr$KEj~I zXvOG^FR5{vxBq>F%H*jpNelVC-Y$eP$2d5Q55 zHSvBj>@jqZVTcb;%w|_uY~Od)Nn znQo3C4wwmi!1apZLoubeYVe2YM5H?|AYz?VAip1k8*=_}s{uC5YN>wg{i|=syAcN+^)$NFN%NTKe5N zR-QXmCF+N@y6o*!Oy2FZ_5S)^F+KRqlU=-F1}D6jsOcyLyubtaG%u?lyw;sh;XPr( zoOup6j*7!V)rTJ5>8_K3c=klfGA*otLPVJZPVwf6GetqDXEU>BQN%ToeewxNha3*V z*p+krucVbL;XBDx;kapDbTAeVo*f&pQ-FNW3Zh^nfyW5kJ#~yC%f(M^5GKk{=Dt+t zm!X3usHqJ#d1U3%1gag*J~ro$W&T#Z=oUy9kh_l6*$ngEL}TwcSv4@mK!H|RmanqJ z*p7tN+yPqY2m!D#7LhGpAPZcXAvwTwDC!CqJb-L-o&h?HkpVt~<*auyRTfUB7oiie z+=2@y8fjQz?bU0E>jo^vIjF&sEq0Du#qhd=Qh|e6HiTd0aHR_i0FccT{Ex^yM|VNX zMho}Ag?c(O>D+OA;|peH->?KFj{#ALn`uOixf1=DZo7`np|a$;74r_6QGBM{@_uj{ z8?Fa!NtSIr;xYO@=q>a;*qmWsN-lF2uYDRL=Qcrme9fV7|D?=q)B?~w<*)0PRV@dk`&7(MrBXARIOddDrQ z2qZ@}hP^j{WVhz?~XkuCzo^coiRUPmQoQ+My6PrLQ_Obft zm1^9@L4JBAD&<&=-Mg)QfC?&$O?+Cp>`P8IJBl-;0-hgKaT~J4Bk_CowNsu9GC#3X0 zvkL~qd3cS@WPw8nu<}qfM=(Ag=Bu0`SRKd36e5I^kh&-sJ{D0$1GF=~Szh$&FtOLh zbbK*^Zsy8^p1s80gNINb9tMMj_n!GCPrT^z`!J2`RXw_<3med4J96s=MaMgsPe`m{ zR5a!JXzXVbEtLUgCtdC}JR~jpR|u>4G<_MxN$x#-w48-ZMN^rAQk?LElSVot^%%Y6 zlIk5ePi0Y9PSYNUN@feA%<6a)5BHg04G+(Q=gtsVt;TJ)({LHhNuW#wD#dvJxslJZ zKOn5gpb-QKjL-+5$6%LyKYmQ}wH%EU0mA^oqUKeXp3~E`NG2vIhQAM3m0OEnyoDIJ zjq9tfQK)QUO7fbMl?2+TIr3U53<)zhxq|mD6WQgnxcHo`_I%+X#^7f51`_4I$GU5R z<2|&XV;efw2t}aJ8xXb6Yr<}Q3)??FiVQfXS&?y=|4CLA+UM#sruot&HV`s+3&x_Z z@*a?HvW8CL8<5j|2`D{0@L32YeQb&ARCr`Iq2=X)g5AcKezDErQfV4|m9n|pQ>MJ@ z!!e`!n&VtTB$RGX;(0Tk8nNMn9_8&n0=4yhEWSAOMqR(i>sW_>T(1{;om~8Q*E`!T zyipJGFdDXHISSDW)?v1#kHINXt`b4?;AtQcMMY1{w86vcGNN<$#NcZ{cnic%<8lZ1 zD*J=pDpt1+tMI^NHFQPvtqM&iD=?JK@^V*sT4PWj zXXS76G>Ym-K2tf%vb|c5i`Tp{k+Bt&G=2Qk*N4yHrU-Z<=8uE>8TtrQ6+Pd;Nw}H& zlpBP{@ey3rmUnmQtV8@G`>wvV$3vhzI0y@!kAmY)m3?;8$e8%yaJIU6p7Ur{q*{n_ zZVv6)v)F>DQbdt;ElW}GKM6cBjKP%=b=C$>i-0j88)Ilj#=yDJXTUOI@4+^b2ZUo@ z$ZJ~d#ao0hh3)3mys5sNvznH@)6>17vQLTACpXS>Rp&9ZuZ5yx)@Jw!yd`iu!Y+Uf z7<+ruQw8_lAG7xeg-%P{wc1oX*|%KGg| znVi0VtxC^y^j6NUo-9z)pK6eu(L*WM%~;KeI=+u>_j7PFg86`5Vce(k9Z=VgXfDWm zIMoJgv1Cv0VKHp{MI^b|rWRx8r)x8+E@%=U{BUtlo|pc zm5v@6g8{DthnG-O5~SXx%-(=)2N?Bfe&;pu&FX;AYl)Ewc_f_djwrmASf_{%?lPI+-KQ>Sh} z)JIjJGJP}=i+`wA#S<47V}+{XRJXO`rVH4pAuz`Znt?S~Wwz)R3T;0L-EOJm!;r>&!D4GNFkX}3+YA ANE#xj;{38 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 diff --git a/papart/data/Font/CenturySchL-Bold-35.vlw b/papart/data/Font/CenturySchL-Bold-35.vlw deleted file mode 100755 index f90d4255ea0c661c3c05774be9209d5c2a32d47b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144360 zcmeFa4^UlQ*B^9pKfEGdQHn?rBhQ;JrHB}*F~)q6(zG#+h)8K;nj+;()5aJhO=C1o zQ_5sAnaN}_OeT}bOom|)V?+@#G8i*v7{vG(qlg$0)3gj?L_`$vir4G?ZoB>c*4q1= zeJ+>0@AG{B-tYagX6`*}ueJ97wbx#IpMA~=f&;%N2!g*IzhB0WP=nv!ir-H>yv*VW zTnUHpOW{{;uQdh$oWOK`FMdq-@3!~>TnUHqW4ey__W^gj-v^v|AGAN>4(fq0O!>dx z;x69rN0?t6w8{e;0m#Cw>+9F`mos9|X?w z^Y{1ItBco!@ZW(S+mCs&OfKF(1pIHYbhbBtj&}q&fn)gJuPp!AS9r%Qk7aRb zy0ZM^Ux|0(E4*I;kNw7WWSbFpbw3H5hRB69^2BjnJZ_fE| z(^eOY*9$t+=h*u_sQ2H*)xoa%bX@{lGf2bMi#*nm@m#z7B^xG< zb@X|65T@PXyy$evjlaJP8p~dSAJZhxu|ep^&&4a$m%joYeI3_F?0Z+1f8F8?GtV>7 zr4?KWqxeyGo!`UwF5bTZocXhV+!%Dc7of53lqZk4D<9AWAZ+p@4d|6S0S9{J3V zS69CY;PgXCXWtWdynhck%fdb*-RDgrykA-VeekFQEC=(g_U4CI2s0h0FRY)d`+oqO z?aQ+8%Aey+1243#PS5^B@K_e6#VhsG!D}GYGxA)Ux%&M_pix(xzOcNG_XarY%^&OF z=s<)27{C46`Ym{rcYRAaSBF{PECX!;>*(v}e}eEK{5U6Zemvy0+1yun|LIqF@4)*B zelE?QcxnD;pnvD_zVmqBgZ|4N@0UH^e-1j^n0)^HIs84s%#VEPH?IfqBm5Wmv3{hn z4TwAV0AxSjfB6;Oe+8b)k7*KjFb{-jvLD#q#9dkbYa1@cTlfm^zX6YVxOl`}n*Xik zvEFQNpZ5`A=Ffg5&o9e=_Z8mKS9t$Dc+A74>F2i$`gb0W_yPO~{{wzb_c-2(JKiVY zOwXmsHg&we3Y_I;`CT1=3Vg=@e!Rc-72aP5?JP{0m3v{2I>rP2dh9xqs?U< zh&%WnffVvw9oD|W`=7qT`vM;Ahs%$+OY?vJ3U3`emfywm+w*?`opy@)Li@R2W=Ydqo3dZ@fF^-<#DV?JkN&w zpP(@h()siA`@d|MH1`84kj6jrXE|NJyEgm3zrx%73h(~`kNLPXiMup2U*Y|~;IUuX zN1Ue^KY<@1i(fTHb$ac`qrby6`IE65_4@((5^NWigFjEN z576IZeoRa9!_}3A^FGV%#)DUf1Juj?;)&kv6OVeyc+OrEw{U=SHuGTlr4G2dvT!aT z&&4Bd;Q;HyFzd#85_j=fFSZHm=F$X8I6yhdvpxA^Iu;I4mSv-i!yS)lkxo5hJmMA( z`~e_L$BkP*%@d%zHe(#W?!RKgjOW@GDB(a0{wVMN$N(JpgZLwz`M5R$N;q%|f8?Cy#>aNv*PZ@+kF!P_rhr;W#UrQZAb z{V^NQjcKOg%F<+r`BW}DE)e`j$Q?@u7iJjiqT0VNzbhd-vn{HXVSntu}E z{o-A)vc=;4DI1TvLVaTz3H$&Dy79+6*mo?ipWmNG_$TR{Y%`{?+$RLg{$Cq|1ibI?V>vi~ zcx6d&jX;}C`^$0dtq~IMzryk-|hClN7bL&^f`|F@FP0j_9W;9nNRzP!c$YcF%yzf|N&T|}>{4re%-%;1eqYm-s z^H^rKi7PAZjO~Z-n7+?r*ur z2b_GS>1>bV{p2e=>JiiAk2>Mn3FvqA_+z~}2eMs=yY_4b&bD!F=Joq`CqQTWyS`C(Glt*&*i3_GMc#UE&rF zF%Qae?swzC@hH!}Am9BQkA2I07?176HTvJg6>x}sz&>R?D91c)KOFj1;I56`)$wQt z8OM!H;*Lizi0$JJ)#3NPkT zUM^45a=9}lm(zW`>?Xugj0VAbggS#@z?eJ+(^+G+)(3j)xkwMko$s)H_tz%>SAEPo7& zQIHH;8=15jv!NLU!EPYGv!)|?Pn`tPPtTEHU&q6^msOP&NXf!74vbtr= zSP-D&792(U;+oKvHZ7Th{@BT&k)c;m(jH4mphU1mU!?nm)+CuE(7&8}37Sd0m$}lz zLk$|l|4*khpeDVYw4Mqr=nH|3K~a|Ajxp{=H>lxnLgu&>d11Nm&jMiE2Q~6;iqa4&3Y&GytNW9UVRv1Z!lN%}Bl2 zp$eJtF4eiiOvu6)mJjWtgHVZYQY1BhbTYWkkOD=SW{wKoN(w4aSfxw_XGZSQ0%HJP z6w{JMQ<+V40!x_sfIx1EvX_(+90Q(_B$1lb0{`ayHvZB!mW-9V&pP+~HXerdvAVMtwk+yE3fkNSwSQWkuT!R{ zeLnEYvuDdg(!tI5Asz%>?@@`|fTbK+qXt;0WS@U}V$72Ul=OX?P* zRs{8e*pLT|1!W12a*xeH>6dNHQm})@3=7RVCV~$bR5U?_UYEX2hL##0L3R-`J&edi zgP{GbT;%VSnEgrc7L@qnPRKlCUJ_4(c~OWBd2Kla63e@_q_H{6h?FkA;6>o3xh>ZP zFfkJcZFwDtP;4z{CzMQaO40cWf7S6uT4RE9& zb>nS1w>x_~(!7v$c0*G$+h;-e>WrxB8KET&=&B*nNnqT7;h~Rl)wmWscwgn$H_A{>tInrSyGszWh1U6KdlT~}fGVMNG#^T@$_N2PT0~T$ z5>qGPUG6>;1gMptA$r1E{8dq`-nS=LRJe;wnT8PVWnj*n8B|{SIKxjhU>?>a2F!M% zhN=$8-mMQxE-J47{dVMqwC_XgGi}6aTWe6?9}jNWmi?l`C3$ILJ(o+*KEmXOwalYW zx!m%7@i>ny@7@Xm7Ps{<6MT~5{{wnsm^x{353`I=FnE%vYqK%Wp;tK>$RETy_dZ3t zDpbQ&A)MLN(SO}!E-*Y`c4Zj#+Hrg+Z9bAt4+Ya48W74aod}mqY(qI(R4gcmM<+#w zfV2`}p=7|btt4x5jhUzG7(l^O$TO!RiUJ|#rFV? z-g_dXV8-Oc-~?4GW>!fxpUjx*b>+19`Xu*!RwgE?aj~}urnh0u2^Z3agAZ^#ZP4(BLjp*m!#$|^)Cg!Xn2TpMYo6+y=|kKEwFiA*D$#cM$W`v1&n z$bBqLnabn>u+zb<&lxjUYiegr_VaB?Db@Gce7YX`8>y?G%;!E0-dWuh;Te-z=?gTe zN>g4+AM6w|+O0=MmxF^a&1ZvaqeobbC7j=V-lqj;A+>WPT$?xf8s*4;$9RVqg5m;V zgh*dQGE!8<{f(n=yu@Jo$5CvFm{eFeL4Io}byL~Rz91zNsV;!c2epvd8jM!jsOAr_ z1dAvW)Sp)Rg2_S^t2U_A)r(xL)vuc|*yz;C4Jo;fT}J+yAt)bQoxg_I?--?Dv<3sR zq+3%+(W=1XN^nIe3(wS0cKy2KCVxkqD}&H|lcVVtSmUBw;iR>A3_UezXI&Fp*6jlM zta|z)KN_t|OEP9qX!yHehcLshOlXr}SnoQK%hn_^JnP&q3~9SyCi$i@wY(A*oY@P4 z24^}!zH4&f=EaJc5>fo2A;k7G{Mcl*sex};TMP6Q$CZU)wwVtHA1q{YOZS}xg&k0b zz@)pa7(KN6$mf;a2n-7nZa96q?THd3%s;Js zl%Cj1-|`g5|AO&LFnkH!^e8zmdvLliERA;Z`C=xw`{D6P3E{79HjMLqgAk8xo29N~ z&^SUyn%YvaVHVT`iI#0+tYbJ$>qu;t_)lfm$b1%mKzn6V79AK+pHbrHJ!w@E2^@2Ch*alXA@#+pKCQV z<~T&wSij2K)~JkuGANGAhI&EtCzqNC# z?y@72m^fVNh_Pnfn`ZkeQ{xso;L}mLvEh@nea^SsE>~b_l|UXNd~rhiy%d4bG%x^9rTK)>9HZSgo3!sf?UKogeer1RFjA6mL_4zU_Ov3Jt&$S-|7kIrD`PxgM~%{R zl%G{D*{gA*eTX(C=)bCV+|q(}(U&nis5TIz41hB1Q^cBzmRstSq&#J2CKq;d`Q7(V zj%&%k*ZV(FHL%yv=!J;p!uubVQGy-c%VTTV-0r(UwO!@V$6kNLa0IS5RvX6F=x!|*nCLy$TY6IoZaX$@dj)+uM`QEh{0zPL(xUbq1V~$M2+mzM>kW*kmPjr%^+Zsk+*|} z=btjRgsY@1^trlW*^(h8ZN5BvyhhACvO7(mVS_4Ggw(7x>S2;@_(6lr&7H=8rr zY$lzP-L`bJ8VQ>7*x00+o^?gRtySt(0~T+N^wjK@0dH5InAEduf57pV*LVR`V9Kah z)cvELa}L)ljG}Ijgk(muO73WE9&9IgAT!^nN3iO4!zXdu$8P*M^7leg2SRDJLWwF1 zs;(OJezT2uQKfW7RhnAGs7XLgh^i0TIC`m_&TctpNhqn_m!IIcERTpefYBIGjbsjU zwGgRz4{YRUB5`aS$QsPzEUphVIj*n<)&H|IZ9OQPdYjL64=7n39TzoL87PZ#1Hf!+ zwye-)x%~oU>OxIWy&+!bT?7@@*UiE?L{F_c3a;yYOz@!8(~)O5bC=$YYM~l`c?x4M zG$`1AV=tPEiPQIWyqQGL zwE%BDM#=|ulgbz6?(=1m7CMqa`Nhx1e9tnUlrc%V$v?C{Rm)@Cn#iT6Zn7r?DsN1~ zN-hpMD;eAjYx-1NBOFZt4CqSmJ$vN=2@{O{4#yo>{wmk>M-K z1^ttXtwAKQhP=mt@G91kO((0E8>G|(4I{X$(7W=@+jFb?LG#e3Tt59~piTsELgR;? z2(j_vmmi+Wx#iqPOmS*)x^(J;$%ozin23GSDb92rDbb5@Ct&Si>gE?qn8&;XsD0oD(rdM=jYHaACO@i!tyUJS zh_xH;pIBdX{T2tXf+Y=y0~90Mc?pw8ofK~7xa{7Y4vFQrINJ~wyF+5)^0Ly*=WEt1 zfY&x>iJOsRaFope@LK{oadgB;SQg*jC?rAuFJ9F(oFroZdVVx1ticaOesqpSA|7;O zF)Bo7ek|$-C3m8-b7vzFU?gFlzvyf`Nc0W}Uv8C$q9>-6W_BN`Ss*98Lz;il6iU|I zwF>Nv%AV=vUm>(`uV{ZJH?mg%oeHPLq97(6A@(M2!-~t?HZD$l?y>eH{+{S_zh6 z6hmfIc0fwGfq_Y|FBc>obS>uBZ-K3b zZ7M8=F6_c89h8O|im@{=Y!*0z7oy?I!x48qEkNQjp*Zm&d&|#-hwX-}3paI!leZ)J z*RGGbCC~Oco9#qCO4XKJFtp*0p!|<67}<13Ik!}3+v{#jtYz|fKImusc zP*%T8;!4(JhP!GLLE`ZF@toN_rRic~eC%dD*v@g26L;dW*_Ery9A`0cGcGukQIGcI zcsjS(9&~ng9vkFMi5GHerBwUb&{gP5uA7rJ`7H96{lVeNO0nbzg8}pGiX41+1~Kg4 ziCQl30MEiW=P)Y6Hj7P{216o=n}fVF$p)fM$f?0bTun9upM~NXs9=ytV~31atlf-m z^oVOgTk-((M)Q{Id5#qNpR#Rm9M>zR|BGpm{@}n*!kllAKcBCg#F;`WI)m46<&NA1 ztU_cCpE&Z*m)^*3H6hXz_VsRofOX|jof#Gm zpE!R!XvpJ$VC&mV_DxgJx|rX6bs;#B;hmG~Ca1F*vnHI{*46J*`0!Oq!hhwUT@)im z-sE1KJIww)H<~kPI~Ake&aff(+*4iVYXWsQC%@!O=F`}vP)ov;gA$ZeU9gB2VpovX z<1kc!u;v+GBR#%Osy97~hrUBZIEo%6LUrr0VAprDue&8qj)^pQ2<`IPTKPpkS~Ga0|vvWD5H!wAwcf{ zGSDPEB1ey{Y_l-+fC5Ozp=g%F%c5{?x7N~II~j2YH0niAnr_MpVSAuW>}=w6yVcy? zTW89xX@RsTwk``at~vcPGAW+V?k)LM*~LD01^fIQ_!0={>z(!?RNiWzzOpT z^V8XaNPtiWNKb5-^R^u$Pm7G_nR9PdK2j&r0hpf&8u0$DAM8;S)oSmRx9RLj-{wmn zA%bMW-h_)geZl$Mc(ayA^dO8dfi>-%Fcv}@keVFYvsp`Y)ME_Gw)J(1@O?zbo?kmd zkA?Bl74=G9rU)=FZ3C7r!sH$7#jeY+i|bF@X3cj74&Rvglrg#VyP4CimM#|>5gI9B7{QTeI>MzS;*^D!eBApVdcFo##7U)H=GO8w3!sKAz=YzUMq}e zZI9UVLY}U8^!QI9uT=@sYK1)8F@44AFrvbB#du-~>{;c4G_}d{su^)!>a&FHh*zHN z_geMJMwnUPPDR`VGu8f7{Ga?Ca*F9$enRt#^Rm0EQ$y#S4;$xc&iH>;G(j+ikeAci z5e%B3qH988>A=whoC1rlJ<8%0>JJXU+G9`}LuBL+Zo1yB^B6a$Pry=d*%M+OV^NIB zL;Dy~#DKTTrRCA=grpfV=q-@pz%r8O=`-(TDEo&ng5-IQsJ%%cN8E@m&fuLhiE-k* zIJ&k}EaWF;tmrXrkMV4)4Q%+94HWYj49ZFF6t9I0PR8PP6foo=KSr=ItnvkiP-bx^ zo#x5jc(Uz@%oV%)Y036}jJ5q3XZBG<)Y7TjC??)S!<7XoI%{vsDiuYDD@2_fMIxH7 zxR90hEueE7UktlP7gcNBOP`k%KI!vhk$jV;+@I}^$^)znGl{1IRz7*2t+|J;+@GBe z-?%`>!t$g(7D=Baa~ek6wVR+zd-E0gQ_(L$WAc`wmoVQL^@qwk)smxLVM=j*aISKp zp^NA)V)d2rHQa|=8aWF}(ax_IJC1M5aR!Zchw8j>vmQGvmtZ0ga?kyg zzM}Y?+oI`XNZeoOrT97Pj-?wZc2S`&`DIrqT<_^Pa_$9uBkW19WnqnWg@t) z=Pd1Zcu&LtR+*R4JS5S)hqFZJ=``)I-bv!Kk9$G=jcB0w68kxQl!@~i#yn_>JB8L| z)$*O5(yN#(jOAqMF`X{&*CZ4D%JZCC-BsY|Zd6`>R6f-X8Tm89oQ-%dgdn_TLGv&i z7SwpC#n2p`41lj~Wg8P|0;ek29VhF|AK_VJP(49UwHv&V)t_zEg?_iRRq^^dyBzA(MQyAetfIcIlRtnP*KT-zZnnQzRC~1quDrjSLasM@ z3tN9r3)iOBw{1#i;lP2u2Q|xBzw<)LR`Qy~_0L%qfqM>4CEelD9=-xtX};BMVQAqw{A2iZNs#Ik$Ar%*DzvRg^76OQ>!_H3+lSuo=5o99FV4G- zk@&zK3#?}$QBQxJ84X>lL6!F<+N;i@BbjshT1!|M5e+>NOrbN8UlrHD5uCvZi;MVv z%xCs|PO)SMy|+~;KZ=QxzH&<*8#iPQ02>GsjK`FFN_IsbirAQadgU8XJWwL<-w0gy zSgtC#eV`q-8~H5|voT&L&nWiVkE*1%Q0143iaJ^erBKbQRMF(Ld5kFm>o>^0uW~h} z;&gxjXKXxIAPwS18e!FWNU>g#_f~-W*hLjt*V)NU4Ymr`nK@1}09k*6zj-F{HSIGk zu_-66w*^e=y)*S#B#*vFl__i?R(40k^&4FqV{bcjw3D-k-XL$=*-O8tw|@)ep(dj7 zh4g;=W`F`ZZy`)Z`8tEq%_R@K45wzYol)DPx;+}x2ThRwL;KL5K8<9iwf6kS7QO>t zA}@P86tMfFB825fvd4+vAeVqjDY(fPhvkIuQTf~$npFu$z+G=8$RvWjFC4rpl&Dj} z6OA*7XZ;E#f?1*1M-eyBgnJ||Dy55woaT1J9*LyvOX?=*u-QrMm5`hNxEY8h!EMiH zh1$W@aEm63Ch3$HChf^ZpW4TxP<*^|6@@7x;hLm8CwG~ONYp9q$t6A1Ttvb($sA7T z70)GlNa0DZ5tQ_*1ov*H73Cpid2nP9m)OX88k0biP*vj+ zlQxZQ-MI$eQOs6|eQ_fxq-+HZgEr>8n}TZjRD~I+W5b-Y%qidsn7OUjWLqJ+n-|pE zT~$chc=jP$5W_75%5{iNP>NM z+}b%Spsef{y_R{=N|dy2hv;dKRjaItYkKYWSnW!>Qbki2e?1V)BLL^Bo(Qt3_EzGm z%Au1gu@4B4dkVtQjmyt0n2v>yVKnJjYv#_%ggIgh@|bCCIQ3{+V(>i{QOQnmQ{K8; zcTk9HYh+qjl4Er?5nNgyOzq%lpf8gH#~g9g$;vgC*`6Kk7Aq5Hs8sH`*x6*41}`9y z)cKDR*gP&NDnk?Jtp|WEEqsPO-d^OGht&tU`5cSkx|}J;7*acV)gzT(5H^dp+hG#n(>j$xIEi5Oa98$7=rLq>Ec4$~ItwPbl}j z-7l#4%+R=#RBzlm1!9x(Q3=!>%I)TE#?nXnY}6H@bRe`U*!3_;`xXtJII(N-HjihU zuEkBbGKehyxTJ)0L-UG+)&TrcCC%#-Uhyf#YUr-pKk~A3BP3@}G@By4jJ#G4>4$0> z<@eFO1+*b3z4ZZa9C?U2u|dl+>c(ydUi2ied%>RP$8i#UQquI#ndh~^!RO$242aM= zs)d;suxSre&S9@d?ZXx1oUkh-wynD#2H{x=R;@CkJ>-P-g}^dSf)Q%O7`_txl(OE1 z<}f9G!JE^GpyIyp`u*lTZEu8WtipR`NBUoF;efWB(6IcwZ=*e7sozCvQy^7+DS}}LYX11oE z@w}WsAy=g~wCy3`4q9GDgv7zis`cK+}3ZrqLc zjB+8C>=HL_wlPdLj4Kp9@3Y(DvBS8ai3eccGo~Uww?_k4qsTtDQv(ylxz+&ffLnqS zc>q7I?IFGpcVf?plknC7Ry!a0+GP6-wKF&)n$pXXPC0F*4?^PwylS)?t!D?JO9dLs z!Nixd3Op{T}&{snp+$^j6vDl}q@PnnEPJRTj7B}~1x;=Vk#w6Ja8Dapj>U1oE~ogDDe!LwF7 zy}c?PlMgOZp%r|2N8|Myovq+DapMPvVgnEb-L;cZSgvMkQ9AFc}8KJ#QZ}(#_6FIp=em66@=P01_j0^Ev8odG- z1`Oa&+Q-ZnC#ybr=oo=~%N{HRDkjCdjUH5OMO#bu=nz-P0tY{uEWBt7!`d&?ovCsA!*)oS(_7aBM}Q`6IcCXSi+9E*W&jkpg0}4GS!jE$%l61Aiqu zCfbGSl03r4m$;p7?INKTDdsoC<}cnTdgz88x6iN*)V%j#x&|7 z;@I!OO$ZNKmHCjQ0euIx$6XdKA1y=aW<3Vc>l*cvtZaO3A~U6a&H`VAyh=h0o@vx$ z*m1iVV=!R1;YOYneYg+K4j`8;sE4M~qv=N5+J54A8Ir(^PYiLZ5$z$tN9rUZANni? zugUdPJtjk!eZPkk<<8ENn7Cvle{a1r3Da&SjM%{TlSs7a)UeEcySO+|Dn6^H5 z8*cACNoh^;zA5;;EyudmW~=ANNUjkH_kz&(?qxRccL0MDQOA#ZQpvn~_wgN(P|I^w zaMdErDb{XaLLkTrp;6GhY;cT4ujWyECGB)YBxJbZg~@cI1hfVl#Aj7v3MhtKXq@Vl zj4@oTn90Fk_c93r)hw8$tLDq92%QV?p4BiDr}0=B&zZqNkr?CiN?|5pL!Ci`9d8wh z-NcKiCM=*f)JPxgvGz@S_^N2~-HV>m@7c0yj$sImNgUQiQC@D<>i ziN1$zPbP9ZLNk%0!1~@XMvb61%tUk`s!3=Qn0HDZvnIyj^A%Qk`=m;lPi@V3op9Sz z34Z8pWR`aM^4Tt!F#&{jtb9%5Jo zJE;*i?%OBFamU3uRBHd6WAW1D4r?<&`*ls7mUe*;c-Jw)103iNzBbzbh)Loj%Oeky zqv|n*X;#i+P_`a>f*fg}*9lh!yzDi%QuGr5yO&<}%5uA>e)h_7b7(AkW$CFzW94EO z$>?_&r}!GN=xWf`)z>ZesE0eDsV(6CF*)0D?JoWh6-Cdy5zJv zo&-#}2Z?#juRx(}645P8iPEIDC?B^)32Q9-y<~w7Xu^x$jw+}w32Tn84b?H08z?S` zP2EJf8&3iwl~p>TrN}vp{zAU>kgx{UC2<7C3Bops1?B>%_{3LIy5~P!618lE#h}ER zlRK0wIeu5PV>+nRQpEo!ij!a3%>dj_cJhKSMPdD-BCPFb*1~Yvm+0YYsWJXKqHo?g z5{_6bg}6ly=k`p4=tQ-D&HBgi`S~%U2=aBCXM9 z@j}*^S)uvz0WZ)W@WaG!ne3ssUbEXp>K7Rat32!!+%^o~iFMxM_VNr3fqTUs91?TY z?NRKB$nXXiSoLbtoVlm)2vVX2io|4#``8+2JubDE2)qm~rm@`cNFh018>qQmg z%7%U*ohlV;0+tblr-yQxVv|7bi9D3ttiWo+g4(y<>p545O@VYvg!FvTS|ZT{2zBQi z0=1Bd!_#;Wp{K4P!|US{E1T+}a5g#1JYcHL_F*8$*Maekz(MK(+UYf!LH+CS=v2oi z{kGr9M{jnrIHNJ{o?;4`oL`Cr)=o;iqij=rlrV9E&J;ec19%5aUs-gD*bCBRT9;*5 zf;4$Xl+%PgH$Y6D32DHjF@KOT)btA$RFq+b+IfGHB@Z`k&kV0J!~$5_bvpjp;jWr6 zZmFy$KT6*?xd(zAVaie#j<^lS#MvK*st(mr4vhnVQ>+c}u0A;QLP%zIX7-qtfZ?gb zTEc5V?ZbtP$)?{tf`4#mGLxO_ihOsb=pcNi$Px5P-2%jkTG|4logw3rzd^*(yDPcf z>2o%1EmG>eUT1Y}r~%vsQdmM8g*!_lm5Ccd9*T$`iE?o0j+!9)y5lavABEAyE28fG_j-#DWBMsS7z*WsuLqPwUx1ZJn4```jHR2GO{ zLF~i0-h_TVC@pe{YWMSM{Xo#V!HRTH~&fHq_36Wvr5>A_qggtZG zDTLY$-bE~(rBn`IJFM;7)+seHkdc`Ddt!auimMY}V1PbEFB+CKIzvGT+P~sdFpCZ) zJMs(1Qt@%~y`%0_MZ^Vbw%1@uTNJ}S~oGfg0MkVuAp&Oz-TQgs4+ zM!r2zN$OpS+BLDLhNK{t*uFa4>M&%rrEMc?H-j1?z^#ankQ$1p4bXWiDLJzYj|7v+ z#+~j0l{2WD3!e!tb>mcPHaH6%#!YkrP+3r5HK!Ye{h4*Q<2Ue194< z{qBcn(%4F@x{I$geGWhB+qT2Bki!XK!_1kL=1cfrr5=@W{ybYD){6pt2$~YvQ%=K7 z=-F=!#g+V`lp;;OB&2^5(S^x#KzGpLyfW-aivA7^C-gjAw;h4gQ3cyro5HYHPeG5( zX4g6Y#Gp%>@HlCS&QW{^X!rYv%_nqVwS(BD#+zB?c2B`>Z(`07qw%>pXrl7uF4RnY zXwp}4sLQCul!?fmy5zb^$Gf<4{;VOD;G7)T&l8n}vPxA8)eWjzW?wR91#yu^Y6`0EtmCBL)IAy5 z?qR4fW%>SJ_#vH$%%Wq0UyLZk7D#Lw#Zb%9`_>kh=Xlzf+aTHKlcQwN5s`7~)}P|Z zjDsrX{SYMq%@EDQZ^XN40js^RV#%YoU}o~?$kxM}WC^^nwFv63k1gPAS9WLqPYdQ#1pjg5*0HTzX6~{}O%q8tMG(sko{}BazG~Bv z%}is^C=LHslTqnKc0(s|b__ttVq-+h)nBw^RV@+mr9Iq3Z43T(N+&wBI&CbL;`lI_ zXIwh1X9Th7eaMJe@@Oah$m;7uruay!Df5ACH^Fz5{(v$M6)$;|-g)SBT}ko(NeUA{ z_VMuRNg^K8zEB>l-#XlyY=agI%L%u^$F*jDbLmIbY(RnD2T zn3K5tq0hKE&=iSV)jBDTvHt-^P2VnMuy%EzbYs8La!OuRZ0+Y#iOpXWr;0LMTvey}I2q!Bz3vaKBk+ z5}t|1PTP_;99AT^9OkASyUM&*o_MOP^)rcsGW}=R@9tjOGhlL1L^msSQFTlNu1Y*v zOu+`>2`N%Lgm~H$5LEhngs2w2xByMl?>vD4sWOYMGnUk%J!*%_?*-=)L2n~|D95-G z7r;Cy37@!zP~?e@c1j%nWnFjgE8vs|Zr;hUZM>WCiF8V+V3Y1qF_XV8#SD6xu$g== z7x~i#jPC1gnb(cF+_8&(XB@;DX~|;FpqM*d^2EHsLPP4((L!kEKaaR`WH3mbJ{lN6 z*Ul)o=N9hg7uuKfHa~iY?|>}~I`fOK8HTMseNbwDhQkNjIgN9;Zl44VN0G4a12qXs z*MOxPf`shNV7mn{01|E;s}FNlNU9@U>T1C^08~-ROvo;Rou1Xc+J~S;$o5Fqm(rOa z{YK*Jv{x?p+sks%996-uCRsjv*X|+FFQxLy4ztcu$oqiu)U9)z&}JKgCYr2Fhh*Ml zcgaC{ry2|L$!GX1dFI1o-9m9q4tH)QliPT~#tHkuoiZ_FQe*Yh`;nT09NDrv)ypl3 zD%nialMo`n&y@%E7Jeg8A*x4oMerw%C_4uB2L5M9R4b`kPtT1}Vjf&kBDbw5X`e&W z=o2nY-D_&0fZQPyDnxm(SiX6vHwJ`g@IY9j>|H&VI6}OmER(+@G>slK z4zEEgAJi$$5^ca;B%%wr>(5F|ToB0%+DsbT^=8yipuY<5$2q^>W|cTUwvo%O49RRW zmhBVrNf`%BdZd&CK^FVxIr+^u2aU7PG3HAZJ%Ov)VIP++6O|)TxH%0Nl%#rz8dK)J zV$d#B9X8z3*G<%Fp+=iHx&xy``!E&)x})(`Du=ZAx2uAvZM5o%h^n0}l0>UWaL}r; zRWDP9m!v?4)Slka-B3F@6G#y)X6pKD7^b-!DeZh~B9zB} zU-mbSn&{PZdpy0+L7?>MFso#!7uoD9w+inGg3EK6+^1V^gNzRVzR{OAQ0J?}9Q8ai zBcgtJ<|6(02=`DQGYcV&65GXtTVgj~F;5|h4|6w{e?_&iq}xOjwzw+gyZ2TKS`>ju z*_qH%g%nrtA4@v8#L^o)hit($4ym0=D?%cp_2rjb_RH9%3ty<qKwqfcL-X~1;WKBuu(>c32m`>Smz9yP)tRYgaEINWvhwwbKW>*cf9E-Zn$t`^e z)k++jMMbOvXI^iBZYE$jbGuKkjPS9)m0_7iq$W4hu}&G+kt8gngnC<)7dC1XlsBS8 zLD4c7JocWMTH!OUVMuza2eXM1o-&4_F79tbuwQN&gf?tgv`Fn0%+x1&2mGRxvNv&8 zkD5fCdw~TnRUg;h-$lz^pUvdcleEK$gJ;j*9-ds>1+M-HQUV@M24A7ax46_8YO6+u z6FK+|_;ZGr`sL9UmT`O9r|(KY#@2J6{#pWe(LkL>M=4N%{XF%{>#xj&HfgIeI@FKj z4Ck6!)w|}wLMFfY65}$Y4{1*LZ*wYW(nX2E5g9|~nUuT+V~j3<8(*tU5NqY);|&W0SD{`}`L`mbSpsg5?rQOJ44PS2$Dn)bTNw;2MYgJyD zoOZxtAvU8l`V`ivlxxt7F>e620M=pWx8UZdJK0Qw{MY%*pOiGH28 z$mrc0yqBXaZR`{Q(IpZ;1^8Z?_EZlZ@p)^L#zmd%)+=c11xmh$rLlTUp`>KPlz>0I_hI75C6wV6zeQc4tZLq zA~f*2W}$9B2;*4<-p3n7(ePn=+O0Sy{nna!JbCbxVF8brY|~9RbG;-;Hf>|gbhil| zZr|NDgS2b2W>tIHZ6Q44XQMt=xw72B6DUu+V2%h1i~hFGoOu#D=^Q(cBq03a8k*@9Ro} zQd`>0l~UJAqn@{zE=m-=VPZ&jR1$@=RFqitMA(@|)TOlH0Rl58O02QTSv!-lkGiM| z!|w#(83q&+pmu2!9m5A>7I*=u=nY`t+gjS^OsRwy%$hTH_5-R{@ij{CF)@Cck*6k4 znr*LdO@?$?R#(=oRD5`Qgk{_3reYbk&k4#xA#~@ zFv>!g6M>S4Tgx4|c6tX$gZoG;2aB?#udvp{q&wQ-V(Kk&C5jQLyJBD3L_FhZl(%>z9bx24&d8cP^Nhilfg7Sv`JwDlCe620s|n-3|I>dK>E$FnHuRZLM@`?@$exK>s|n}Hw1y%y(3^hu#eaVYI!v&2a zyGD&h*GF^{CU)`0^y4%fTKd=OdVAsXKv_=Pkv8Pk*RQY~j(i)RAebqfZ z=Q%_KT4uAmuWud}{E4WJ8d{j8%jKmbCVwv(J$s3y2>FImfAvMuZEPWIo4J~jjwv0q z`q)U-6R{>0mnL@dix)M=+nZUwEvBE*J_HFiAEuI&TuhG*pHcoiqTJaKd5z5fBQ4rc z-&@t%w$IyUbpC*9cTx-})e) zXY7=*Dx4A=>&!QFjtn+MdvAyG;>jXCYA7{xob!$V^chfn#CmGbtwEu5&DbiwT|IJG zYOqWX1#q0R^neI$P!$7w*_MSDk0RYy9#mf2wBxi7!$!gFv7+a4*?cbjre6&WcOySC z5f9#R-Q~ln*knk~wNV|Iz7*{J1?-DvmWPgq|?mf^bdxB~GdaX-G+RZqE!P z+p;s*K0i5|-NABTr@H}P*FH6i*KxE%AO;_URSc+x?>%AItZ7SbDudRI;M8>p9Z8eFed#%VvGaMe5tRvHnEk>?Mz%PZ~8)C;&jGrs?|aA zyPGC++Pa)xIm}u~P;VCtj=Wwc>jMOz9ZMvRJtsX|t(Gi*R&opE22E4mUQrCP| zA3JqJC!m2w%X3gUF>woE$f@|qN}(13nDjYZ^x;sDWrnpD)T;X#CWL(PrB%Rll<)X6 zVi}b0P}r8F!0W?9MJtL%|L~z((`Hkx9LQ{!Gsx@Yr~1mP6We&L*Tj{|BWrBG0$`(0 zyM&+<>V%oM#b`&>K$y1;n1;^GBG&XtyQH;G0k-kAZ2+BxbiL4yFT|6UOiMP`h(B_U z_#>gw4wP)kyUBso360Kncl469*Fqd&TZ%1ZDyM{&D?e;@tqOrihYfD(Lw&4*Vy-x! zw*1clW79=IW)+bVYpO*1ppkbDl63chI!LRSL<|24X}{6wF{8pfKx$Q5Ygi6@mqy5w zjyk4N{1;jj{OMQ=fa&o1)1@N`#yLHn&ZQ^ROTq+$qvJ4|qV|}&56WrTWy)cQV92BM z#211h!zV$RWhp|n?hI1bZ;2)6V2W0Ttqj?_S4if9Oju*ql$;n9?kwY-{46in1L1ut zIFd0>6G8Vj*{}FQ1)7_~s|;R*aY4DP=e>Zu-->dT&Z2BIcJHJVumG7J$}dy6jPKTy z%(kv3%U>97<@b{d$W9=Dd*+haJgpz$@G^PJc5Vt%GTsKssX2c_r((_%e6Jsj69yjJ zh0E~=lG|s5E@Og1a=1Hp2cg6pGhZ7Vc_+{GAl!qOm8K`*B4Hu*F84i3DVKR9foBfn zf|}Ag$z=#QMweU?x5oIjTYF&&nEh_^1KvAt?!oc!;m8|AwD8_@pAs0^TTeRRET!5X zU?v>pvWk$JF`3(JZh^$rZDZS{WX^m(?C8AWfcApKdS;egvspeKCL06VVz#BL8XhlZ za_PyQcOX`6@M)F>y#;(XZ(i00hlX`Me;#Y_6FR9slvY3z&)FJ5uxwfer5U-&)lEu} zO3Orj!#sU23t)C{t#E?pJG`DS^BGYbPV~wMYNZL1CX*9Ne1f2i$z{a9V56%eY-1)& z=DmFA>K!k^` zXBNr@#VhmEx1v6U7Z~b!0xi8c*bceM_D5)_;j$=+W>0tCwM2Achx?~6ZS71A9Es@H z-r%X7&o5d@fo*7%$!Y)rH0C+6jdYi~riRNCvK2tN z?2toC-L4PcRRqVTu^nKR`GWZTAW}%2!H19$02)sz6;$1~sUn zyilcVN=~4p(84qhe7|juoi}85Rfn(Z4%bbc4e(fCMw+!NV?EI$4HE6>VKt$yLcIPs ziX<2QF`Y0V$Zsx%ssGI23Rd4QHg9S`47j6W;B$yt@V_Zh3a4`ONhfSos{JwCPj~#C zy_3Efj*sN6jG0w)n1YF`ixP&J{cPrB@_K1_B+iGbC2^YC@%EsU%RQHtr);rPhThZN zM0uG^8HXL-`pZdT9%fReSi3`nxk_!|iaGwo-cMqB5XQeO9tO-qwRvu|FvEEkrp3&t z&9j`crA}52%KRhTdvpz~-&m4R+!1qkO8a&1Pj>O}H)f zoGk!8IsNjYeUYKYfu?7JtCO75dQ-dlzHjAFQR}Cd@Ju1@RopYH6{VB1n49f8LjiNS zVwG-w*@}5nF{#iO^sVQXFPFYCa+>H!+RVkKp6WScUt!gXj~Vj?-U^(@>?3ZlT?<%o zJ!}u>zV}`iUs;o^c)lN#8+qrb0_3Y_|3f;P&UMOm+swE$G%ghrR%B ze;!DcVDWWyM9;V0H=|oRfz=v(q(U<=xecY&n5|*m3Al&-;JoQCOWrbg!%VN1fU0z2 zI+J~?MvIZ(0yGi#Pf>^K^*4d?RtpsUPyaZIE$DAT32n;f0rA%GLO-s|dt))l(($am zQtKrua|48{tW>{UAH7Kh+}Hks2{N^8va;A7OHXk!z})5?L`c+}J%7_4N(fhfkO`+V z;QP_tsVwb&c=iNl5Icy#ZEHu5tz>?i=(w{%kaF7c$bjzHOK)XWFaZ;Mc?|8QH}*zf zWa3oLjA_%|X*+``SQ%UL!>~!ySQTSwbM)nQeuoDUCNeu4Z>C?356RZjW6dc34}0t1 z0dq`wi2te!MOWFOik7$`V}NCmb6+7zkn5z&5-d)ak4?Ue(&b{3$%B4(ANq?QNFUfo{`fw0ZcB&Y zl{2V;f9Ala2i30~nffF+u7u_XlRC_R`*iYL*j-5@xUjn_^&4H=A)(W~YbX1ij*D5H zDy7ZjFOTtv`#attON)|TEgl=!5U;BOy&e6=Jy2K0Jyt+{6_<6qL3IwuI`>nn&v%tF z)u1FLejOI^yEDYE63h(Wbjj%+3FMCj9ouH(SkSs@w%b9gyfc?Enb|urhZyj9HcFMMBB2shB>xjGk2$+QK>SRnz| z8TwSq6#0YC%h~6_9QA6zVrd{KN6dx%`g>CMWe=1Jnba+20 z4wIse1tTo8AqtkAE+Mr+H(fA()jnN|6Kx2~J%OUyjcptO+$Y)tbudQCr6DbVr)H~6 zmr|nz94I?q%t{LYt)}&h!GOtC1?9Ab-aQ^Gfn#~kfIbl>-!<<8ylOhl^}>v9La4|m zyY2c~xQl)~-rGGUgjS8(>T@wJWANHz$|hEf>vij7^fLPrj1$0M7!_r_6$YLPGZX64 zi2pT)W?_cU?83kCoj*)=0Nbs&*&90nH9(%;rEj_^_d2!*+G?3?;&l78GIwvCDIZl7 z|D09m@J4X@t4xZ=pi&<4j*-GZ4T|?R48@T$3`6&>hBybI2^Qz_9LBB!Uiwomljy^LjL~YZzKEL$o_>J*@UjN6dh|`NG$ML$GSoJeNiOscp4oe&lGj{xReG z+sOVlvVXxwcIo*(d00HCR&CO*!+0AVmJu2lGZ_8G)afrxiv%l7x)Rolho4`(1$IlTG&XWw2b%%XT0 zTNE9|IeM~sZa?N6tJ74RtE;o;#hJPe#7eUW*frPQ_qtPdk~sqK{@Xp!fEA8%FYe*t ziNAcE6gPb4CX&H=aLhdsRdCLNCt!FB_LC$$5ycS zM=>5wGA;<=p)hx4d(BCJrhb`yAnlrC;98|?S*<4jdD6)Ne6|8;cPu_;7tI!nA{KS) zO?$joq;&%;d?>FBPoqWsl+v9$*R6v%OBrV2wy@Iym{~vUIeM)!iF6LJ z7NlR}u@FkhVeIF{edy7^V*#A=8+)yHxR{ zsU7x_wmTjkXvozEG1PuxM%@Zy8SNKaOXRxs5@fxyt2MXXdL{#AXPAd;U^c{AeG}d8{f>I!x1Qxd zB-}k)6^-m6VMbvj7X^wiZC<+G)$|Jfonm}NBr0+80*}TwX%a7LaCfLz_wfAc?vy80oF8Fx z;hoTPhnbUevm67T#XOHbA+$Q0UdK$&q%zQ?KGb*Bt|`N(Dy|cN*KtlnBNSoKasvEn zXdIh|wKOgrTy0~r%{(~RQI3H|@GJ@Wm(7Z`YFWs*3-S!89_a6FMX4~Cu- z^^()UWj6QRfxA4F&hEauUAR)Kp5Ny<5Z3`SUcw>T4TgPaFr+CWcaD1th!U)O1-Im6 zF-~yivvD8IEZ`?@jrJ9gen@bX<=hL;^s$e<3|hscR1U_83RKah$~-K&Y6Lghj;==Fdh#y*Z8bNa>c{6!(%^6p!VhJ?$MaaC4T9!O^TbO(7$N z6;$LgIGY?K&vR1T%g}f~gn^_mG>XJPY508Q!Iwik&{li1u-gDKoALKI9qlIWtMxVZgP6czD>405i7a7 zpO$Rz$5@j*yuUMFvJbsrh@PNP-7`FK=!H&R;ls*^RXPv)QjrL_6~BGMRVPedp5J_4 zumlip_2_7`C-%e9ZzBqt^le1_c8sXf;nC4i=a%`JE8A7>K^>1la{##Lkp$%%@8+j4 zqaG~aU~x26#@8#pjWh7NV_9Tg_1=gj61PTe;%%ePtnV9-`7?yRji_%U3TpCOKcbF2 zyev9pb0)L?-6iu5%b|OF!%spIWOvZ*jRT-sSQf$M8EJ-3TpX46$lX6ZuA*J zvTuAx&?*#$2A6xhW)Tq-cYR&=Y;cHr4tmQ#nN`}83jC|xwGp&kSsqy1jD zTai7Ncv<41Z+**lcTGmzg?>oiCZ3IsMvt)%FcH_WO}afOYtSI^5x(IYoO4MrN66t( zykTqxAON`+Tx#8w?aG^@_E>fAXk-K!rx4=384rEyTXuwNG2$-tGxu%nOl}spL+oV^ z3C!xddvM`09!I0?h1+7-&9aw+bGcazbbE0{_^H=;|HVV!dJ`@D>+8+1{g3qZ)Jfn> zbQ{7lag)U4`M$yC*c?i32MYl1o2P4g4v#FEq37IQ0Te#C(7?OOrScZ{=(V#px2n_7 zE*x>_zQjixf1N;=nh-g|j$*b#?2B9DhLo+KVNfHQd9h0Lc3530E{3fR<{G{$qU z{xwUo4ISsX^DbtFE0Y2q-khQ^T7-u)i3k0}V zo0-^?An@{_c4i92@ z&0jR~9^$uAiO%^pDybKZXbGId`*|Fd`#&iqpYxIzq3=;`wfEk`-k}7?D(&Wlkm3+L z=wzlVu_Dm89}Wg28gheI>^TwdHpnuV9<{XLn;(ev>mOeHyd zMlv`q%=m{&g3{AEM;^U+vDGE?>%4v&df$egRiU5Pp?5E{dmTlrnKO$8OQ|089Ush? z#$`S}5QfR>(eDKKZ#sa~8F2F0&EV}8|1Atm;NsFe_u*5|H%B7}n~Wa|-^LeO`Pw$HL93a8IgNiV4p}-7+t^PP`vm4+W2xNpIx80i7k_J z_8VJdAG6yfERC6J-OM{rBQ-+G`z|d1&(0C$TOS2#q+X9~h$hYGH*4(9US!~~#Dxx;c4D5;ZAyF8&lhcyhMLXKxijPz*NfY29H-TAcGCsJ_X143Jn61jX&xr!iRlgH%C-Uqxpjlok zjg!19;muw9eLLJHurl6jx}=Zf?B=9Ie;=x=+Jr&o%RLZ(S8j;G8QtOFTfL%#1CqfT zJ9HCTx7m(lP;yE(>mFz=c++v>$P6P|mS(EuZ(HE`$k{`Boapw}* zd##?!y?2Vahs&|P-LQwOgbOUlzFVx?RE{7mvBL1ySDDy{m+IqeAyx_kiN*(roWCRYWBjAcmfs(3)oUh}E*A`= z!#2E^>D?UI%Z%O6Alpy&cMnrufX%Awma^XnrO~s%yV8EXFL*5a$PVX-_!H;1+-ug| zvq|3Cu4*f~^J3qX7VgL#{AjY)NTML(ykcjjvl6!$+n>O&-H3{(&l*Y2`u9BI0lQ+i z!G*Wp8{=Vzz5Vg@b~c|)zZ>cdjZlFMH1&CQBP?1WcN!`077}e(Y}R~nCT=|8U4(v1 zMsl=h-@Co;h%8u3&V1@9pt)el#*5upBj;pqY z5>Idxe!qcqmpzwu6G}Y#3Gy&A7aM4)RlKd1e)*$#90_66%vJ@RxF2+S4;RM|o-o12 z6>&vk{KVtYZY5Ma8O0j@*9l)8ykBL08`-w$+5g{0wzfhzG5(y)*){!ldJZpt%ppk1U}-j?$HG;{eXoE+=n)}PJ34ii4J{V zNnO{z%i+QV_YZ${e14VrZSdMwWlw$^yxIysZ-ZC5sPc98Lrt+EP{K1MgT*+qYjLRv zryDVL?J46Jy9uj^SJ4t9;#I7e6}NR0QHfm`y|e!sAuhUKh-X0@3`JWbFgW{j>N=Kf zlz~R<)g%vf$QH*+-wB*xw9z_khINqCZ=%?DSLs)=z&)-eO5|ksBz#r!OOp#7oq9cv zmzL(oqRcz&g4H)+gefeTRlD875YKxPj>%UIV^+6WIg3Hrdf~l=N6NY~;APL$u*6#t z))rr`R{*CqQY?EbB5SSq>eF)M%TNU)-m)~gf=nd%^UHC^y1NUM(bu5(1hzk?{My7u zHkVm=c06o@3p=)raS+kI<)D|8`Gdg;p5*#owreUSP4@LgGH)@utZ3!y)|I3!kv2t4 zcT|YTQiS_j9&MX)(WXO^OdiYgc7V9^xPo~*q9u~kIKZr{XGTDJ^vmD4tu`T}F`BY7MQFU&7Nw{Auk;@xTD73u z7l~+Xf}V=eWc>KV&Aru|9^Ym15xSM{rlYGIFchbNs{zRl5`VejFDvSO-7P*C1WJrxi^_R=FR9z zl4J~HBuOGkG7?ELl3|Qwj4@;+BN>t;NhHT{9LM4Leb!og?`J>HIeq8*@4oN%eSd9r zp1s#vdq4Zxd+oK?Ui;s-#7pg0&w>-gmon9uT<#reb&#I8Viiq;*wJ$uQ#JnCb)HY`73e`RD*y|-Z?-~hd^of^^dg+h_^}7gddjOh$dgIj z@b`nx4N|VxjdhVX`c7^2g1@eTKLft{21ucs-EEyyRs6Yi9-WRS_TKi@hDwg&O2~&; zEYho7bJ+#Sd*wt9qLz+Q_rpCKU*hSjDa{Bu>)G_?n`_jMxvgI+;y<;1TaOc)B`9S) zSwDieg!J`q>Ny}aAj$)*5tM-?fkk2Xpgx|T+-L!>S$qEyT^yd9{X+H|esAlSiuX^g zUn>3fz0_f#GM>?k{DQnNm1=eFU8KEvYH$VXaBqD(Qi{{bhe0|veg)FQvWq?3{`woL z-;mz&0oBf*%Lfh9+p$#ge61h4U*X7h9QWCGi(*x)R*B%1R~-W|VX)gPM|Iq#soCK| zCo-s@uku4Q*Kmezm=(x-RA;iHhPQ1~H?XO6^4U~yz2yjYNqBc)C zg|n9@6C^(P&}B7%C?+z+C76G+=Ujx-M<%GxSlg>u&i1lKP z(~%!OEZN;biO5B4+ZJwu6W~z*e?!7(p>H0_A=6B}#bnw*+v=`K?x+#*HJ>{_*_a5pGyd5*s!z|@s^||zfmSQw?Vkn z9WHGKk3~yOY^SiwZxb5@BFt2Jffepe0mDn{ydEraA|1GYzJZdhvee)&mFh)xuQp+7 zh<}}J^t~B@=F`NOAI56}edS-qd@b@dn8 z&Yj=TpyX&lLqo2Pn)$q~+CN&gB_ERqEhyO1?bK)0CwxJ5rP0pm`AN#0MoP4FmY$@A zz>ziN8WMw^YGGP*>iu#JP|>NaDel0T@Ynp@*5egFz~LGGl8=l`@+Kl38`Q6 zE`)9WziL@MMkyFotb#?pItM7~0>?bNW&E`tv(S&2K;CYhKdBnhzWim+ep zS`@g93&d~J|JD7PJ$UOh8)$KiXvmwaMW{=@ihehBIm7RR(`P_mMbQE z%ATJO?(71#qlVj>w*4S;4%q2EaThd!eui6G{K;vAdDcyQieX8?WUYpji{S-tbvH#n z<1ON!s-0?*6<75jyh|B9&x0@L1il!qXyUOehNEy}0J(dz)IhGGP^VmVNVAGERUuKi zYa-woq9m+3Ku16#2$D9HfMTp`(55K3JWlIFA3q*4i27IzKO>Ys)t$T{FSe&YpeNsz zQg{U)Z;$FEMRU8#siERdv~dzOq>qaGBrOTx`q^)ZRO0ItMic=zn*6T%X^o&E`l=4_ zvyGDT)F8kf;KivoxfWGj%uUZr$t!62g}bJQ!3uPz#ga8vWZQdNwSPj@(r9DHE>(5* z+;a;?Gq7+;tBxQG&N|Ub#pFV?y%^gR((J2NkR6O?XIW1fcT=i1OB?D`x-|_}YSz2N zdt0@CxN3WklBcVqP2rq1eLLcFu0{S)2Cq`Fuo6g%>M;yy>X){zQ_1x*RV~Bo(!pia z($4|6_4r5YariPZPo2PM?7UaXn`P{jQc$E@o1z-T>bhWW}BH=$~>?cF9T zMxC4Q8h&1PHpOi{{?U3wX|}DbO2?~9wx8qz1G(Q2aG9fb{o3r`-lx&@{59Xsn!Nwp7gMQ4 z(UR=M;4fHu6M#6A#*(8kmFWZRy*mZXC%!$psVA*1P4PtD&~%OB`3y~w#*X{cs@M{L zNjm5YD!DVP0z|JU$3e=>1-eKc^3#oYI0;l{!XB*?k&Ac_+)Y^#Y&6C2k7T(FBaNmw zM*BlJMoQ|%DNi1tf*BOs;787Tx)3yv{Yq0@;Puf;Q^ehiLmG~Dc&PJmsgY) z(w8xhH(kN^p~B(G-9$U6y@lPtd{&xbr~7W=D~{0IHJW1hD5ZN0j)b20Xv<=PLlS9kW)sg``;e1=DIp!T9D#D0|FnfJj>*I0Q{EALQf+L>^=i9=;1GCE@c80^F&tQW%Su|;@~fX1&g@vW z|CWDHrcxk(O}T`;%_OWVZ&c;YBHK%LMZ!N0n13y&oG5nK?I#>UFA47Rx&GMRBOl;b z2E>+x_pW>Q_cUb%7EV+4u%QNeUQQJ?fsgmYPUwVyDWydw)B#;j38l97vk$Ykq*mF)50(I9?9mBlB?nkKJy|NV00VeI)@D*o- z6bAR$P5IQw7fc#hq7~s4Oy03yQktZn_-11W%-4?B3xW4L4BgxdDPOLAFIf1^uU24k9*LF>x)-)iGa=t{R_CP%-@tAnu|J+EV1_P| zyo>L3{Gwk+=%Exaq$5#fZct@;w;@N`$q8d1hnbjnR90L;3p1mL{KrpNvn=j?Y+yR= zpFFd2T~^>NE7Doh|4yvPtZ{&~q3qsWX7bLaG8R;%(?%c|hI;8Ho)aFQRp&m zDpX!wCW7Y?YrqY+Z98?#SLwv2-%jMk{r}`6k(OnYEpO|`cTC;%;sYRY;X+o|LM34K z`2lZ>ytD3cSB?|9^VW@u9!>Kbp11o^s65N4 z#DvemQ(w7=|M31{=b>3lnYBVl5Y%SH5U`3eF?S=HTR`dtx#mPgzIzSEpUxnEU>5t4 zkR1zJTbccFY1xTrAlm_i1aZvvsKl?zg0FSmz9O-tL8HoWbM94ymzP3jo5pRZ3R856 zQKO_jV8Gfl;$r1Ji7j$JG*myKKd+Nt)L?IMvcf-dWsO^&44K~RXzKad-4~x&#{+$l z?hYhp_?_@Y_XL6>h+As8Q=InBR^m~ywPqj5Oj*5`Iz-n}jI^w0 z$JYI|25LNLg1-=%)*{zN28?_((Ud2~*=q`db(p)rH66-$M&BkbUP{`TLJ|FeNCkd{ zI#xj~9t|9jpgPNogW0AQK7;Tu0`A*9KkZKU{Pc%MF&5@E$giIr}eb_04Mdm7rJd}4z4G?khtst<2|q#-*ebuwhq8c7qG*Oxh(a8wCz7tPrwP-?iq zDS588i-yKzL`VoeEEQ?yKV3V;aY0`v?N$>3ld{9bVfwxF+;%^)crV!TFTlgHxgV&P z@*i%j%%&#`*+u;WG=3fxStu}767`_J!C;C=P`Fn`2B1B>%hD8rhT@489rvx^FMDq# z9u=>T1-Za(CEo9scpvC`cDTr@tIhx_xpKckg~|WqrfU^HcEkQ#R&r=-3TtQ^P=YL@ z5Z#^!rOj?aB$EQ?fZh8U!{180-!Ac-SM#bn&Urac6D_ubRq!>1OLyI5jg27xEVT7} z=K-p&KZtU2e_$$wCI);RpCaSsj##siIp+X^msIcROf`|>hUQjQR>>N1bmNno7nm z-!DJc%8Cz1nIZS>p?YQHu>ff36?rff=MXRYBm%*yE(C=}P6mw{r*ocv%t%!{?DvEd ztR>_+m{|Neo*vZ8z&D6{B>?KdeT$4J+%CAuY`6-+@!%_%W>^5%+2W~}B!2Wp^9HeXJU7pA8qmy^(&ajBI%aC)I0`U*A^okQR3kG zrj#1W+?hX0C4bCT={Px`#NL;y3nKkY;uL%oD~{aO{k_hqL(jr)GCj=6^H3-OW!@)#8Wb9&Vc|giKJ9lSF(LpHLk^7_PoRftdl@$)@cjw6{>@#Z` zx~1tnhxeHltLe%4;_1uTUFk0ZI6jRXT@Y7b5T~SQOO`Zs)0)eME0=_L@EJ@~Nzs^H zW}xY&bX3Muzl8J1I0pYHDN2i3gWv9`lZ*GV;n1s-dz%gSL~uN65ie1RlgdxCAPV3@ zJbFRZGz!Aah&in5WY`s}(3Sj`N$OXi?jv zfw{NqA1=8w(w}O{Rt>_lc4k&`rI}OXiut`ksH&8jH`AIfCUo+v&W+FpItFS&{q&_< zJLi{@L=>J;NoonnF}cmy(vhHJMCp@^02Z>43`)g8PE-WFClR+88kC0eO+iWM6FWxm ziA3fsDl0IR*)gXp<84p+3AY6$pXBBxCt*pw@05g+c$^y7MGfbTrCow4WMbnESt7|@ zKCtCkq;C^a?(0~AI;RQ**|-Z}k~cS?q_5Rl;v)4!`5i0V^&E4ibyL;CuI>~Gssk8; zt(c65eDW}2f(lM0fyYxAQ+)|?U~uz3)MQvAGEv{y?DpK;IOQc+Ckv1A6B)6hd-j?n zN>jy(bREE#O-B%d-->b~UDPvWOAs&3N9Emsa_%ZrRad!uv&ta_zDukPJ&v?cGnXXZ zG2!$mBbETr35fo!KUu)|tpFFdW{pL~#al;!m3OIT;gs!CxQSwgIs`RC91wX(cap)u z`gQ|HkrnzTl+Q**iHj@ze&ZsLb**M-TJMR^!jzIWka}?Vq>Xd-eQ*S(DfeqZD2J_S zq%6l!WjSI@wrTs$7?T~Y+*J+Go2cbyIb|%{F=JWI8FNZ04WCQU+;qUD`DSAP`|R(E z3YEx8jS#W&P6wUd7kTQmv6Ki(@Jk$%v2xs)`$1}~=#Zvw^=W{69bu;g#{=$gD)xb6 z?xEJ|>t11-XF87Q<_nT3wgYpps$#=_*rGxqAd>F|XNRO>o9(DsYm};TTr)E|o%y>G zrGK7#VH1DQO;FPaEd-8==83UqPChKe^x?LvLcXTa`1dn7ZU1L+TKSb@!T-<7- zYhfUmvjM-=e?v=~y{QS#;{^d}zsA{K;5V~Z9Snf_rm^Odg)q4*M@2A`XGohNeZZ6? z#W7gQ=Ugh|iiOx?f%it8kl`UPD^K$CPEs1GK?LQyLS#yJL8xC_6#oQ~MXsxNWJ+~| zFf#pq7n{R91m?x~o@0KXib}{raDmZ6ifA?jdJmaq55y=S6@jA)LbHB3 zwRbXUXpK~)c*`{FJMo*i>TB!p!Ja11X`y(flp|2H((zX5morG!>CpBQ` z5&Xyb_1QAN;^Z*SW@t8fR4*C!{VpQQ8$JjJp3|4iWWXN~cvkDd23>ZA3Gq4;)Sl>f z_w2C_SkFgG&~Nej#InM{1)!CwNiOxlv|aY zLYD!5>GDahK{&Q!Y-LLa`U8#Bg6TiNXl&hsYqjHX9O+_A?vv~#-JkhwOFn*(4AAfV z4RFKl6>rA0;kF)q{4Tv0cXfit)u6AKbb=)2$fZMcS9ur{-bN$9n1I}hd&r%hgtGj~ z8bl-mob9LmG3+?bUqH_ItHR2guZn&@Jk%y}aYh#UO6`_xzpuWey$@d`vClmd(N761 zqwKVPr&~Oa<>Y{Dd55l(a}H*)8;YgkA<_9`^)Jc?(Zl)v(+!S<8-B!gmK%F6B z(7?rJPt~IUh3_HFD2fKacPdBHDheDE=E@Y72H-@`=O8mt$`1YWSk6{VSw(cBrKL>o zMbSZ%#$OF!i2}}=Ed#OxG6jHq(@pS9x$p~RpisI7JWBEX3V4AYf=~>PzC(6QssuH> z0Q$bIo+x<7g?lA44nBGiZ)#(OAcQ_ZY~C9nHgJ`wd6c}@`7t2!^j@pvZD?ETYb+MX zps#VSmM%K2?^SVLyXQ0^8l=y~F_A{w9{;2Tx<_D2=9>`}kNxL=Lej>A6 z>27MxW@8Igc#I4x1FZ!nZ|EcCy*2=qAXzKVvTIX4n8cjOK9s-_lRMQ})5DVSB`qs& zAo#W5b;>o|m3fnfxR=Ivs@De^$fZ*?DG}XWo%@nuf{c}s$PjCQeMBcLN+T*$DxxBFAehJ z)VZBlmP(y<0B5+DtZPA>x}JtDh8Z{qCP{XWGvo2Z10hq5nem)bUbKb^%Yt+2VNDmO zirPw@*ZVRu3l1B(eetYP2lcWKhh;mJItg?~GJ&rEsO4b~r`Dx2pk#k6X>UiH%hCYvB=@UL{$v^c^u}*o3 zz?w0z5lmd@jE!sC#uBU%c>bILEn?-Z99lcW5uRu3qn64?xH~-DLGHf^6a% z?MNq2n7`4fMp@@obA}-vb$^htgRHClpa~-foG7>A8S+}gDp^NNpVz<`>*zAsEJmkE zh)O!D)58aq!vv27REyC%xpFJk0|C8K76s0bLPrJlF(ywdk{(p6qgk~C z6$+tF@w}}!uwk5_lBe>_wNg~8IM3ARr^!N<2=&@Cc|NvKtpe&-o6c#7qTL9ia45?( zdoC=_kfK8+6^L1xrwBM+HPil}jL9%#-$dhzRT{%XwjM63S4~l*bIl$#Xd{?mXa{e! zLkwdlhn}SXcRqu-HST+-&Z|5dU%$IfxyjS@vAceR({Mp|Y<9+0J@_FVquzfXxg!#8HKz&)U5T6u(bgi&?>%9d5#=0WlF-tO6O9uI#+Y!1 z@ja4yT8=q`&Z9|S4|LKV$rO=1zyzbnOP5+HJ413O&5JstIef<)z^3&ol5ihdj9T|8 zGXUljU_~Hz!D3612q;J*P(`AQ5jra>l~4^DoqiGb5Se*#sI970l<^_+i!en=Bn@3* z=@jU2YjKhb@;4JnDCS1PVgxm|JC7u?iL!4Y%k?M&%`nO%;Z(P&N^`i9j^s63(yI{V znHK5rf#3REFF(K3qKFej&Qg*ulA)SqClaL%6l#fW9du7@$ZjcY(!9Ie7`@-U!_;c+ zZe;YDgV}z}$+MBJw>PvSWpJr_`8AP@tvx1|D1W_|NX6a{X~~?wpwm96cScpmrLSkL zJO=W8d8mz=2-PK4J=6AMp1|ZIC(fydS8E-Qs1Bb33rnD!fj$m^a>>Ny<}7Zz5*Ne@;kg+JM3l|D4-rD8eIm_;t2qIoSBXXU zIhfX(k&=xHD+eLyC71yE;yMut#x%7btBBLtu_~@?_YY|MtLqAW_sHj7A-Lw=x6YG>u9wbv|%Pck2>*!H?81J`&@D`H1 zDz#xDR&umRVayz8(l2ZxTD`JWX+v;O{*h@Tj3_z28Y4+`gHxS3ZBpyoNu&;kApWF8 z-0sMGm&Zsz_~)82^{Cd70)0pggEAx(8a5Df>JJ@k;Zr`y}_I( zpkd0Az7|D5EdUV%jdBEg0nTDfFg1)6)-k1fXvQj)h zr)n^7V!p@ZPkZLwD>7j_wMX2?Xs~)lA;8c*_d$tk3ZN)>9~t=g7C&k{A0Ux#*?+LO zMic>=j?ZTgcz;m0F_`6L%}tr5sdA-imcD4k?X$QZ)bCVtw8HB!dZ@ zX{v-(@s;}xf-VdJ*{oX-RJOz7oGt4l7Kf&#Pd=+Xjf$>3&Sj#cjR0Q|XiX<1&o?tO zGwAPba#~E?igj$g_(NiyOSth#U9hC7QttVIti$*vzszv^Cav>NuogJbC4WR;S?*74 z%00>u%D?IWyyBsE*U9ANS|614dwh~g__fhuuKMm>)3FPAV7vY9s1vGx6@ymck`-

i;y82R+5J5=^!*VT;t`5URJ}qwCv;>7^^TUQ&wpYDBs`!R=f-D<4{YU zzzgH&P}#IQThRx!G;0t)e+==s!y{xUj|Hef`CKn0JRtAUh&0=qqR)10>(=bLn6)BJ zPnLF+?c|4Lu|&}-n7YbYykAr%cMV*4&u_6=8hc7OCv+8mb@_pXpzu8aZ0PYzVu`mvqVT z_az$6-sd(LCGB0@$)koCwZVMY5k57eeA<>#RLCCM;Cs(PUd>`F&<3O1NMnuLjCvIw z(L>z^t=g|it2Ss~5XU~09u9(g0@YlG>p3tc4wSEEyv>974fh*(!a^*APFHENeX zA(*#E(MBvMchwe-BCDR$ZLpwyZ0%5SI=HeyGJxOkLw+IJpvA{B^Gj{embJPK#yolD zwZW5OlVk(fT-xAyqXHHk(4J#zgQ(MY?KqdbZsdwh&C~`9mraH*Y1k%huxbL;lRR1J z@r|vf_RV{=CpW&_`Q38h0KZ#Q>;;TZUefT6ayD*%&|y5)xg4jE z9mYk*z9$pAqe{#Y*w;k;Ei}+TseM`PlWNRrp45y|Uh51rPKv7?+Gen6X0%MZVfM-~ zF1lTIn_ZD*NO2dUL7j0#t@1gUe?EXyRikW2&`p1#22E|U)jb%a=94;Jysyio>YZ=k z7`d3z7<#^NlWuas%rgz~At3KO3Njj~_@Ult2-=*!-G!tq+&Kgfx$1?}Wa5h{dGCx# z&xaY;)f}R|bKxEGj~N48*X*>!ZB`%0!FuHbU;&jlMWW#xwJquoj6-XO+c9DGP-Vo+ z{V*pQ#iYbf+^q`npG}3Ba!-X(9?L!w%)DIGflI)9qs%N&T`++HemqbrBJ_jA1{h3t zIXMvAaFd3$NZE0ZEne%xkj1n{L#91G`ShP%h48u@Dn#RYEoIpN$urHXdXr-%PPM?R zoGMm0=ADm_7TnVaf{L5WhHt6Ad&-6HAsob6b>jL4P78tiSl&S~dnUDIA#gPC7Br;N zOhku!k>j2T+-K^|bFafsnzJCBUe?|-lTx&|2r77AVNf8_EA{bMwM-$13Q+x8*3cUf z843SN!0W`d%(MmQhv?m10U!lg2i(qr;HiHrtA+%^M$gk47<+Qx!UAtALl!#ezOX`` zx81d;C_FfBlO=UF!<8QT6ipAmde!0uY+s2|p>3Em81sD@2GbTAlje31%8nJ}62^QpmTNVxOk5GE^!GR>PclLnRY*0&2z^6VpL5!_5ZEO0}*oZl+N?~E6z^dE@9#Ps6h>^B8u{+8d7cd?vk;^PZq~x<$>eM0&D=W*vR5bGE zPg0+=xZXEefB;R;6MUgs?`ku>+gpIS6C=E|0`A<GR~5rH^HS? zN8=ZEuhdN`sM=|opC@CdIjI3$B)4J7NE?@JxN?gHFCKDwKA!$LA1maDrp+KR0|SE53{@PKxb8gmDOKciD30h&1ku zzE}5=8gYCq_9HEi<65<6fqc1G<$a>~TJ};0EWv{aggdxYl#~nLLuW83b)@5#`1C05 z@R)Zki{t`Lox6?SjqFHVE`?;>?8&Mfm3`iee7@Gb)V}E^e3;)HSQ37aUtw+ox%@>W z6u(D8+AExezOb5XNa>L>t{OqwIYQkHt8gX~8x1RNL_)=v>ds_f#Nqb9aWj+s&x15} zI@6?7aYAV^CvswRMb0(|-gWg_R=FNaotG_1m-*1;}l-qxZ{crQ;}Hn7lbT?*wap=R6#I{ig;2%|VG!LlJ77+Pq4plej0RJ+p-t z%*GRoMTS^=c5Xnse1eJQlzHmPlVL-}TO0vvdO7P#xcbUfO#07K1P zM@6fSJ_=+X*5{{~%`5Z4IgsS7Zp-dPMxO_Bu)9Ul`B0mOeX*m@xXE;Bx$8sz*1#`z z7QcwR?MYNwGmk0;Hy~XP|3KtzPofLmdyXc^__&mO@n)6dMI}}PhWGFJ(c(HQfW=vVz0g=OvRpZ@}^0sdjIC_qr zvqVK}S2-#JVk3tG=mg0fsPVu(G$pP0anYEI%a>hs9|WRR(u^f?Q%p&~+C++gau}45 zTcqGO--MAYT;;3RyIr4FjG-O7Jty}pc;3i_p!&zG*UPJ9JCS=ycgqKy(qVkBS0ti# z`(H08b^k^nDGo{={UJ4&0Btq{_@U?gf-I8&{j%J4_Y-)PJ=ns z!%Pk4h38*`8WNrVbk?nD%yZUFzsYPyRZDYOG&2+FCm!?_84eR_qUicD0JD_a@2{n= z8xZUP{N#HrFJhxJ1O+BeX;FdRq^Q~sE%3$+&5^V{WXrYiVhfqvJGl(CLZ!Y|uGyFwgjA1VoN3o@r6YYyDNHY7Q>T~8a!%kVoU z3Gex_$h&X(2oSA*oq17iDZY?`lENJ>=?@}8!Z-%##3@0uG zA+j*q$DOSs_!%sv9gNza8g&5Ah1hnz75rr{i*|Z}xOQH$sY7_SI|*n;)u^6XhGOTr zT5!|G;Z!Y*7`!s8SoU^;yNa=z3~rkVw&1IrAqEwmy)Y&YtZX6IM6~48wQ5rm!tWyE z>9TBbT^x>AA~by2jP;IJ4B(!6pR9Q@=e0uA5G4;3bDfZmM&hFQKGUbskA>>Vewkt6 z2yHTj`SGm`>YB<{tTQ0)qBr_nn7(b>2ckfT8tA(WFbyDM_cFmwO(&_7zt2hGm``C3 zxaL+qY2i}iE7x23P8~N$6He$&PMpyU4Br-AXB}YtO1&v6On^UZ6XN z>(h&2SKLGg!qetzV%k_U5`9PO6sV}%frC0`wCp`yvoW+;@FV{3+yYBV78T#V?lfH*pdY_scM5~OhhjWR4p zVozWEr@+v&gA26*322M_)>SJZY}q2JMIWevK%O2=xQ7I?OP!V%!TDwXBLe9WlO)*# z2yfx`-Y^2tkryQ296&~EaKc59Wp4p`qNyIn+~Z<0yQWOl`~d!ygR!X|={gQ+$AgiS z>x~ikI>zE@_q0~01f$%`AIZcwvyxsTDDSZn31J2l4l^_4VA>_eACF;yI}OgdLN=mj zv`8q7e4;?-+!!;!7=}FgGc!u+cFv6A{K08XrrqV@7%UQ_u>iiRP_dHW{be=;x@4GpZEf9 zj|#40?l_hBLO16+Q;Fkt2i)(bN)`$Kun|9}5vS?x6bhkYC6U;ua;mQh6|4Q^PDZ1X z?&p+?m|-`Ca8545wfv@7ty8&{OsrO65leduDDK3$G49CZK1>&Pqr(x&RMRx2xaOGq z{T>~rF4o3cBB6PdFt-{aAUj|&Rj0V?Dy)K=4&9sIx=f`$g29H?l_3LfgUkO)8_tRj zj;b6Kz(*czt~v+2mjdryBes9!l;gJnj6BK*2lqM8+&75(n&zzASxxOGfvsNYJ!U+w z^8G$YMl%060F{v=_cJ)>gl0;U*tIh=c!F-k7e(Y7caOmKm?O{8|$C?_>rvPN5bhqOL56Kf_fOk4--7CBU&xhqI7dW33*Bi>g|y+svF|FKNbNC7Ro=hTKxK^>x?sK5^J z9OeR}f;-1&sDh*CW00r<)K4nNbHMqj3$)H(uwyEy3b>Di8k{QV0;h*U7x~VM^CT5G z75o;SW$Q^^idOkPdH%x5Jt3+dhr|e;V(ZuikCWR~rAEh?!6mEsk&wv-l%lSnZYpZ4 zqWl%+ASYaL=dwu%75Eg@$Q6j}9J>pqBAq*zyfRoq91pfx8R$hR6Msy7h!HRhEDEQ)7vJT%1$syD2=%H zW=EB%d?0JJ^}A->b8Ey<24VYLqnyw-Qi+*Q!kRX?27@L`ob`cp*j1lF^4u1;76qE| z)*%t3+go`=!B)TSanG-JVM5%Ew_CwVcVC4%mr2X`hR(WbdZB_E-TCvfwXVA}D6oSL zO4M_efE{&*S366_Q5D~uhl|f55F4L007k|881HZW`Xfr5@ zg&$ihad;A;&+b{j<81Xh1-R1^?J5@x7EY}qsW85U-7`0(K8AuM+TRL-ep$q8N)mPUv3SLmeDAqs+;D9P5-txIGAWYM0{HoiK|H3Dvb}IG!WjR$x)Y zs6b{)EKIw#WeO`+_01G+>H)G>y33Sj?h)sWhjsAfOs`-?h%kMCvq@k^NK*~ ztU}S7#p+&9JH++gPZp_azccqAACb&LQprE4cVAOqbpbWVoGA|}zGGR((3*bgG+IL$o9q=tbEsqz9Yg5*m1lFXNocD++#+o_eul}b zx3Sb-vm(#|TBNuIV8IpS(=gMg>zKwDAjljpyB`I``;y$14FdQA1gOKHhos~#I+vmt z02~05bATwEuZa?DR#CI%s0&|!DISB_Nu-QZs1&LA0tAen9Y<&YcFA?|>>ZEBRA7w= zNPlnRg*Ti?=2=J1tcfoqjOHIh&3=*Mkp%qR$9ie?#{|EUV7h33BpleQ`Z*4 zgOvE)E2@-+G+aueWs?S{luJwe&VQ{AUkLPHF$o*X)6HqW0DY~gn}z~4K$};&k|6g;#bDMW`h=$!{}cXqwWfGz2rQheoV05ZXtR#`3e258kyw8}7B$ z*8zi`>X}X8J&gxaNudn6g?^wJlY& zmC}Ww^6!37--y#i-2I0Ur}!!DP-9N22IzZ~Q>3dGNTc9Qh4)>cI9Dh(r%y ze3GwM4$&n<;m+3o;d11Ag^3H#10-g-G_mcJ1%Ou>Zb(PrHf%*l&I2&%7zs@76Vpyg zK>ZG=_}r^DSc$OqzSO>wN{@4yyDRpx!L#63Mez+-WPV7W^BSqY-qHkBHCzHY* zW9jA8sQoo!AiH{+=ai1dr8lEg#`pt4p0+Yj_UbcEi`}1Oxv~hPaXqL&a#X@$E-#!{ z>Rz{FG>w%skCWI4kVjr_l%fpfVdqPim`SL&ffm8WaH`*R9>75ZJVtW-a_6CDkBzn3ibZewcF4>gqy z57qPu&XbZ?Py&80UC98mM*wQ40C~xV(VJ7C<$GX}tOT%rK!hLj=5>#NS9@{C5kcxh z5m*kUU=|^Q66BEjRd#4*;(-KdU{far(KB=@7e@cd4yIZBi65+4HoP5A#XgQ`i8!TM zBsq@kz*Q(FKyo``1L;c6;Q*n$C#X*xuTM@Ixl{NfxCF5Qv1*w_|9lA=ox#0n`V`}6 z+@RH92Ic}l{h8+g`0j<^10aD%^u>pGD)IGYc^CjF6^-Z+*`?Rs+~clrsEGyG zCG}st))xB5HoRL8@spMgmMyzWD*zBXlG}&>2{D1RPlwI_d{(P!rOm({(UKMvJUfy+ zuXy2zlw}0^bh?}+o|Fn{PH&;N0{)s}G@zAT(eM~arJscIhtb|+B2=11alqJ67iiwl zP9l9RM|$(?^p6o58bHqwT2iL#weNW|=!4ANFx*RCNp%}Kc%YMOwZ#M9cfm!Uy|DP+ zosc}N_Jb?kXXx|14bOs|z2r0O!o{tw^~#mLmjia@2MJ{~t7iWEj+g7;ZyYjNa7P5TV9SN+tg$tmIrR!|M{TB?#4Ff*%bj81q1 zQBpoZpeUee>8l=e9QB+B!e<`S_!8RQrc1O0y1G&j?AE zNef`SeQ3q3FdK;Spp)qj!YB+q_FFbMEo-wF*dr;42h~r7+X$}1P;f|9U$fCkMUGr^ ziGYID(qs^=TCCMX@(iC)^`JV?1Nq#WBMNSl+23-xt?O*Ie?;XMbR7_STA=xG=we76 z$Z#m0x@0ytX}wZ=McV3+e!fiZuSgH3A@p1Y4`tG$y&c$8><@txwf)sYRw1uGj%HLl zpiqPY4%KNNS*fs)1X;516}F5(bOgcK>lx4@Bs-k}ZL_lw9b(z%u)+L+(B_R^YC*UJ zT5h2Q<7BN9K}lwx7)ZmfsZWEGcObAq3G4|_Y<5uu<_X$^>FBqFAua*ei5v?ZjOTMl zNKKqXO$*VoV;u&yNUhn(UmjYz7@I<^rYvYj;uxJ18tX?5q9=){WGQ}@Y-k4&qZlpQ zHK8#YX6I#rppO-_m;#uPfO>ENB)Bl)A}Fr5S~; z39ilLblj<`dD6FNFhH)@y-ewwuijNv%x()?Xpxn4{8HED9)~0(+#4a_Uj=dxpBi;L+^2=s`AD82eegjdyNL-U+<~f^Gx_o? zRz>3|GJ8i0E9O3#?G})R_9)l=Cpn{sCB+tC##?B zFyJ)mfII=hc#!U7F^)lKVPjsaE1~ml$)#pJ`C9rWEY5bUI>o$po9)DAm zr$b&1G;ArLT{zuR0UoGT3tI&WJy8Yko{h4am^UPn*?dOngwB`x*y6>E+^cWAu)dK& z7Tcga0NQCW<-(q}C1F@UG#FCJtM8-7%WB-ElJxE4QQIgHpm~9fPAl+Z`iTjUP`}nM1TeS@mspzWIM6up#A8)L`~yjnRzOuL%(b;Q$Zh`ix)qIPuI>;$?psIi@TPNG|(xS zQeBor)$kVTarc@dAyVPt6nudE-@qu1-|I(ikJ}m(qxoQYs=+q>&aWA|j>5lwz7oX%P`AMU+yS zW*CMUhG7_nVVGeuOpJ(8j4?7185t%b;wu#+A|j<_V#J6MjWNb}JonV?@Av#!d+l>h z^1k}Ngy*8gWcYwfl7PLgl_t|Uo*7k-=YWB9%J{Z9OTVsIm_%?1~6 zWoXCmm+_-4ufI1%z?FgWl>I&U{e1?z+*-sp;@5&-D}Mg~e&687@cZziYzKbp40alE zPWuN9cAeD0Jp3YlO%*iiA^-2jk9nnzU%-!nc&DudOq%Ol5BTrFk9d|NmizsPGyi`t zet*BgF1G=3rsH+?I{`cG4*;&mk9lN%e+fUQu};WKIp#H%`-6xxeaes)*YzgES=U~l zguTxGkkMA*>h0iV|A&mmGO!&e=V3Dd##wHsxz2ysXq0oEPTOKM=B1MMk3_Ueom(TC z%Xz*0qcv!r-nNKVsq+tmwi-XLPr|NqJK%4P#(o{s{xQUja+d$NuDf$;>B6uj~k9@aXgXc>Fu#N)8d$l<^D;FbBwW%#e2JoR(z{T_^=zm2PhUjaZH;WnA+c{mDywt@D5<%sRXpF^CyY@^EldCYj3 z9%W;>KaV)&DDxA8y?lQGaq_YZv?YYSe8&M(jySI~fD-AB8- z!DzH;J~uk;ByfMg@GHoNdizye8U985sPkL<5%zEj0OPfE{!73!|J2L*E-v3`i+_u2 zdj;(;TAbyoY=<+zeQS7Lsnf$>0`M(<-bSQ(U7rQaIP03fSngl8IPJC5yk5=$_Y?fs z*Z3ps;a>qjJ>TL-e5~_dwK(&_Ural1aoR`v7BTHFTfCOs1<;rd+uiHs8^8>I1wZQH zkM+i@(=Gz897jI>{wio}zk2+rlQ72yLoa?VSJ_|w8fXppvA&pBw!hc)zXq6T^T+x2 zSJ0Q<;L0$FANwxHAZc;m{nruy34T6~SWee@-)Q9L7$YC`GyEI)5zn93jnf_g$1*XG zq{a5^-!xjSvJZhqyUKDiKh*IH_%Zxj`28Y&q_NyTiRS5l8*%cojQkPy@DKp!J<54~ zI_=*9z;VYu#`MVNWgiCoOZa(R6L#9a3z+$Ldlu71fL|&v{~l;{_<0$=jmj_zJoWHL z+rzr{^!|Oo>?f>iUiov{7+|)m=Y?rA4Tk>!zjpk-#gF>pKK~eTjs?=a&b&Vl40{C~~=jj0q;XeYzIwU`TaXUOUT&=nu2aS24E%34AdHIil`-AwgUy$by zMs@al8QOoc4DAJI8}W0U8zY_nDe$zNPWuB9?IrM=jK;ZoQ$+jE5NCP+5b=aT`+sp| z_zpj&$2OoG`Mf^=bHL^lEzz)atLKEfW}0-zqYD{UTOub2PE;m=;;@;^p2+N+p0jX2wYa-dj_dA(4Mu*`hB$32 z>x?plUFRPL%rtzw$LZ|=p8PHsr}syU#<`Zin6}g6wdDS&(LA5A+#dstdGk4yu!V1S z0U+z?{H80>O?3UTst4&aZlm*Eg#>S5dR7wi1fh%=uqN7&^K8*eSSKVxz}W+~@+ zIbw43O+7u=`DcOSxN^C;>^;D@HnnTE^7=^X{0dR&gMr}yUoZ!tRY{8{+s z7=X?A(ZA;JC-_mc`O5%UpKb?Y+j;?b>ZE=A*5Ge&Mfm2g;E#G($LxoMopup0 zb-Em3r~OsHKf%xC2s^D8Fzd6yt3~2BW&R(gqa4%5Aze%S$hF-_AS~F>LvUQehBR>C(~oSvg}bA z+L=ez8FlkVofg_zM@-A>YeUut+o_9fN?nv;AMx~l1u*HvQI=zn`9o;`^Z28T(+E55 zFDy;_eSaM^ro%M7-2pQED$^y6y7-IA@T=6l1a0%9h0@1fFm#sa2&SV+@%IBX^Me33J}*w4)&!4F7GG{jR!dDC zBdVK{bFF7Y!8>AJ3D|pAF7w393)nApm3}5>LNM13$c4kiYWz@(VETwTD_}>m$m;=O zP)jnn#&~6?OQi9}ljJ54R;esI>J4?9j*uluMgSg$MZo2{VlDyP0uT*#NHNGsiQVgY zn$m(Gw5I6iUetc4Rh1AG>^#Nc{ty5B)zgJkyYF$^la&o9t9lo6;-Dog}xA8J50-nc5&I`D5uh zjM&vGYx5-Vr-7I8nsVlwa*S7Ia~Ak+;F--SXU1%YXu1b+ znicA^u#Na8L>}X6HiIONhD8D#iqvP}GNKqhnLfkQ{;|*Oz*Y1aege_+fT_>Mn^0)+ z*cexFrM}A0-5n(w6Tu%xGx%pksN2h`yVbpylWi7OUK6tdQks6ck@c6;3xW!NkJ?10 zjukTB$Iey1?cx`bXLpkF0MHBuFD{6|W+2SBCrJ+h_AgxUzm-uA>v}QGoTw4SzZvK` z6_C0RLL=D`ipj8CIT8TaFa-2AnHB==y%1!e06LNA4EPS+Kna__lJjg!_WEzq`9=-86K@1XRY&V8BN6lr$Yebug@WQ%PAkZj_NqN_tf( zNte&!fkS2;QujU53E3(0beA=(IORyWo^?E~Kn#X9ew;M*J$rRmG6+J_aFHDuVZKQ+ zJIhibivR6ODRIOg3hCTgaxqOik$dIPPmW>M;p&*2lkL2=^ z;}{VB=@nqWHFHWxQ@UVIctXUvM0?5UjBthc$A~x3vZUXgSVxKVJ<{Js8_1ZPo+T*_ zwKym8q%@s*EhPDSbB-Aap?QDb0Pq(NtPZFQ03nOS&~FCe_HFd>>d>%fZ|Iy#edvBb zVBR~Zf3lu-DmEqT|vWW?{38%6DC8!o|D$Fltxqy9G-#S(mZE zpOT7y4C?WBu9H_dDOp${gYq*?MbefQpD(7R&%dQ>q;mqCO3S&*YZFz^lnDvR+|&3ao@+omD_mZicT;xp zq%U2_cNrP=?@d)R;NW=I$%&TdUYM;G}sE` z6Ps^FtWR&}kHV5xgcr=c;&!FwO@J`1?omYZxtEK@*Jq&P9J!>LcQ2$ea$fn=cUbbA zrY}|`^)w3~HzwbjGDWDOUj`JNu~muDb4KdOKG}8KpkDT z$Oq<2;dQgc$eW|T7OaQN7?Q=UGx;8gwh7i_#b@aHupwD@y{y9}BzP&d9vwE#q|>>a zCoPLP>rr>|@j^O3cARcQ6#6TyM?|Uucio*>EG@pdy}gQ(A-2C|4M=#>lA-gEb{Aut zu?o(!B#BO|msclSWc0nS$hfi}6D8LeX^{E(RHYikSIrBTX6GPbGkiJTUSYDv6K`7F z;~Y=$&YBfX5w)FpHuVhBF2S~tYa-7eu@VVs`a~ip2)a>=nKkpeaBF6l_-wr}W=bAW z9N`gm30PnAX0>xnvStvrT|LzFaYLSLu~n8a;aupeS@B@KBXs_K?#s`MvDO35Rq6nG zE!_SPLc<@RlWBnyiMFaCY-H|~=5?<0NX+$du(yqAHa{T!Nvn9{1i!+?FRVXLBfr>9 z4ulpNqi^by%p+7o&<8Fz1FJqElCl8{?*-!DL5d$v)BC(K3@eEhv^{Xma9MFTEwz#Z z0oF)@MD7MQHq=6TMX>l2g9hSiBAUcf3hQaCC%#y3OA^hMy9J#=Ss8Q5QCH%?} zMwRzzU{bS3>?XyHD+m7PB@=LO=7+b2TA!c^$5;|?Mp#if4CuIfZvIHzs#_Ph(!1*Y$Y50L-E~RZ<21#bg|c|~cna;hX~3i5x)H-Y@<$E77!nnP*yL5Z z_Y@@4@s6D~7Ypu*7OT+b!;IKxJ5jE-u^@Ce41xN?_g^oR%L}g_9P{?weB%`yvG;d% z%1PRv7Qb9b8l{@fb5V?~85!GHWlL;+mt3BTiGi0SZQ7MQBzB|t5XFM*^kAlI29DD{ zmWVyLjHKyyTrTOh#hPyM41mzEOU$6as~@Igj@}7jpG1#h(xf5=W@^8JbV1Y?L3{&h z@txu8IaWNCtAMAqx{`J}$DW>eoZD1n4GC^IF9Qx4k#bu1(4KHaMUImz-K!DNg?f;n z?zQ=KbHZlntASN6T|1fKwr*_{m9fZkQDEA{QuxN6S_1RuHVK<`?nF$97xWrQBc@Ku z;3Z8)N!nth4UBl5i=F&r6dl^;O<@xNmUhBPNe`s5`Rf8!kUIkHEQY035perau#B_q zS*T?4cip}o5BbFuj7Rj6Ari|}&07GmF zjN(sHEnD0@Cf(u~B$|PPvy9;^L8`0IBDX+EKUzcw$$E{+mS1{YBid<9Ujt>*XG+mU z@~mkPirsM0zEQ40QJFcVsJ7=Ck=<9_w@=I+J*^ZS&Nk4cbIbN9h!~mKctGQXJ>!jp zM^!wz2)JxTlg*i%MxaTUYPJX#5 zHEzJwKPcS~ZKqiDv`Wuo7^vYOBfw3dZ1^U1m&a~k%4dt9I4f_AU2C`s_#Fn<7^j{3 z*N9ya1BxQa*dl0+$p_CUzGX} zZg0#o()K0&l9dnmmg65jr_)oMCm4>toWqd1-IO-nK`k!eUd2&KvbT_?)>30ILfmNf6&(P&t%IP8qs~*mct=2S>UXaflY!}v-Ehn5n zV{yqNdR_S@edVnjC{+khx+Daa2!K+A2ob>F9+U%GjOzabKYvQ7>imq8p#lB&Xa#Ia zd{F}=H3ZQKNZ zOF*`o#OR#>N-P`OTa5iV0R80YgPAxm=MGfl| z;17d+V?;;OyT3?mGuWj8jfDodBVvbBHxWfwp~@)$*TE?eI_Gk8A0&<$xFq|h5=)Y|dW+CvaznV=Be-IYFPXzASop9HBQkeU4@L3o zn7!h;^>egV1lxA7o0BO*w{V+0YDG4>^z%rgfZK0j%~70sc&sT$*@CiKShyJJq34!f zYfW0AA6p%v;~{t6kmATrn7Wh17qysdJij;GE>5=lE>B3%PWVVb&#GF3_sH5N!G{g4 z9*yn`i(6RtP z#MggbLF)J6n8mztm?k&fDIEw2l?15{QYs1Mr6fvArLo|-a#fzIcV3Qqqcmt<(h)DY z_km_3T=lwgmyxE0Vc$}t62OsAcKAwEWW zugoFC%oTI~h^(l(pKpcu_{1W@L!kqcwuYN)1wHNY>^f%m|Uu+?*F1MLV{`>iD2uSIG#4AuwN zi^Y%xxuwJ*`>EAQoXHrt?#CntlYQL`ZyjR@nBv_wkDHVdxH;tFwn6SPShKG&CYuOt zMoBrlxGlXW>P{LXXQAr`>&)$TVh1R)l1tOqQdT#VuSG#a@01tG1`ZZp;rbQsVoH9K=yxvstOsV!-lVt()0 z#C|9B?Tw^m68KM@uIP2R5x43C2-kd0N$Sep$~=MbB?!pW{7A$b;CGE@`$owcFzNz# z6sjtNw24<%j>r{ocMju`BRGE-n_0(md!Ui|tr7Ohb+svrUl+a9D-I8g&lO9> zxu*kN!6!;u@A~9TrR4`Uu6DAwJ?JbX?U!VJON*yiEo+G$kqSz@J8|I1v^TR+2{vpn z3${}ycHFdScWMk>`>;XUNqkcHoN!z+jHx1x;J}X$gJHqDEy6&0s4V*hkJF(No?&zR z7Hq|WWI4E7x{uVjXSaK({mLGD*VMCCE97-({B>u$ch@I7rPGzOPQ*=V3sYCxBnR^6 z*@F!@vMxi1%!lrBj|mqE!*z{yo61&8 zR#-{Wz-mCvy-XRZzC0oo%AeQ<&d-rZ`7g0YCM*kNq44^*b3x zdyZmV(Q(;z?AJpH#UD*eMIdzHq6;2Fygnz9RU!Mg< z0K_17#u$Z5;_2d>7eU51F)rSBLBj(^d4vicFNm^)RS5zrL#N&UgWcZ;Rs%*f?z#|c&S;ZEcV zeC#oy?NJ#N{7#cRhS==Yo%Kom-j~KBv+p)^%Lh#+ZSzAqgWAQ&3->V-9J0|cBB!gT zGC!MMu7u4vEXK2X9zxsPa*SO=Gf!Yw^7O#Hqn>)`;ETygvB{s?O~lhE*>*=bm*j-` zafdVqO&)y~MxEN#y-v6+DIoSv(>UjZj@Jr(>QI73;luO_q1Vdjn&w)Q72=PsSN^rw zlajz`0X7oV-nX%ktT{iY=tbQ_*gB=r@c(Xu$|p^i)bCZwhvU&utJ{D3@mw)ooEqu1 znbKr?U>6b*s@QbU0v%^_X!A$o3(Ho?@TUTBKJ9dY36(M7O$Z zTK6d-IrqM_IICQ{^d}iaL@BxQuY^#iJ$15~u{P~LGFr|H(~OO<)#HpVo~Wxk zEBLo-MVf!dRGpw_&P5{!r@wDLoiCT>U-s{Jv}atnv%g(ov60~jmD_UXf-+*iK0%Tp z9D*+|%N&pU^&xVqrE`p3H-W(JH}&G{{6evu7K`)qv*>9U9ek24oS8%v;kxej!X}ob z#uO_fa)L0%^)tuu%EQpz1TJJpR~Y3``z)1$UgCp{crMv>G(N(e8e%l8LOYez{n>F$ zCtM{wga8Xy8D#ChyAq2saddq3_K4`nQO%wGeZ*%DMvzboTsG4j(7Zd%Ak`6J!+wg~ zEz1#JiGcUijO1(ALm5h;aTTaq1(@-yUIbh+f!qxw>N2aErt$3-62ctT#8?zulMlr} za+6Pcn+vy1_<5b&i}z4qCN{MD8%4I!04{7&0th16oe68NZ;ME0n_92hEMB@I0zFJi!)6#V zhBxwWxf9Y!!7Qqzv-8?4gm;=+Owbm(H!1Wr5k)0BwF*x~1Zk1)%-@*G29osq`3}2} zl0NmZ*ERv&^D>j2k@UY@*i=aBck@A%^qtK_>)lz9e5CJAWTtFY*8p9$^1_>k=Qc+9 zfJ1iV{#*F-Uq>&)x5+~D)y#89Co(g}D@v0qpy?tW^}7_!(D#_iSe_p{ zfr0?7?=Utu{@!Fqp>$hJj)@U<7p1UIiDldT(fq zq<-Ib zgv!Cvt{M@F{*?x;jhRZ)(K|9-Op9|*?sYW_LjQil9?Or?_@Ur$TwWUbKH&un=q2?! ziN2`!7K9(BwaKGF-bSU+jGrPtJ7&X;tNOml(g$C#{?OtXACEIV+KR|!ZKmir)4G0d zzU(;Dr%}gc$C(!E)z1d^87SKe#P77M!OUwcg~&TDbhR)+dhAH&^*h_*@><&_d^?^s*p30t!M9TWD) zuF*}`UVjoPdMMwQIsk2DFP&ox#T#wL-hR_fCP*`VK3#2zXQGcM(S;=Ji0#{SW?J3Arly4T}6+3%F$BOPB^MH{RsBP*y1z*`M>zavM#C z`~nVNzN4HM%%=mOh|jVtIUt6q$5;zo>0ilTuf*>KkbUbePX1v z`pQCvF5Pik-yWBLHdvd@=G%(MFX}9$gYV9J(d;ueuggHi7Uxk5UW`{ zTNwu8RP`5^ivaBdt#gx6P6PH@gbve$0wJKCjsHc!vQqoDw`Ty4SF> zQRBCh=6Uo}f=ojO7lRA45gM8eyO``ylP&JEd+aZ<3>cg*y%*;o9AOdXlx1NkSVy0a z=b^Bq=}{*A$K&A)<-8+)L6B2hW6lK6Y$J^NTx+xe;L4hpjGJ}vrOJiBiK*Hr@QfED z&ph@F$3r{uR-04ip)^|9%q;I3yL4bMwLU&NUtlZO42!)ESj zjLzKG7+YJfxv($tc}N=I&Wd{+YcP1jnV~lerP9LNp)>4Bm7)2(uXrTOZ%?_6Fvf!4 zp0N_)GJPmk(jl(w=R1eiL9(vn;7uvdgDi)9z9=2v8OwCO0P1Cvq4vW;`LZ{r6F!EH zZugkCq2iwBI<7Kro3q2`+~t%TGr+IA^{KS@%;$~WNQjOj9CN<12BE>t@PQqm;VmZU zgSf@B0ex2Ip;b~K(&h&Ee=Olc%xmcx-VhBd-Vu$P7%LwTNXxkO0~2`;2UE*>$7Pi0 z8QPtCaY}g$2~PVke(D09B!it*mN9f392g=q_w3znx_hLjq+}n0iEw#Pe69~}CO4>| ztTya8;b&mr4joSlvk@D`Qrs7;-kLZ;n72+*9)jHzvnLIk=_Qt>lG{<4h>=4IXphrH zi5yH*K54~NK2pU^^4fl)B*HgQZJy942auTWOv~1u-uObDPEh?x$O#8)%O2Q$E+Cq0 zA2)DVV`6Q^;5SLB#5VQFZKYOZ8B(_#)bb>&ZCp+l9wmAmqMIc>92ng8 z7|pnrLi@3PYE9}U!SSr6aQJJQZ79BJtE;cak`bkOj9ow~Vfff;4sx-teigEJ0D6JG zfQFVPPd~3s)(*~<=O3L#7M`YZ?oe*=b)%2on=MUUkIg1JVOeb}SSw!9zzoWh%l`t8r!Y%c>_skt@>v6}){xY<~X zxgWdGzFhRDXsh{H8$FL)W6rY2%olkJE4VyMH7sibx5}nW-BJw;(@9dVryAc~ixPdI zJ*d?SF;mk^WNma(Dioq-!(!j^gXrcgA_1OORalAI5POsrBKJ&_3BZ9`)EOu%MAglv zgfF&nEFKrtP^@a$10d*Z1?{88mK)uY>T{>$u3Dz792;}gEFv|OvE9iiIY>7Lv6lwaomiR!%4}ItSa&ld@(`sh zv>pxR8qtJwH&eK*;}-^9=9;m1JhgaI2wFH*BUEwNW7xoBgTFRMs|#6I_h?8Z%NlNj z*47ac#{JOR9L=tFVkr&|QwhCGaXd7JX&d4e&CaKG8fMnlPL&+ntYf?uN2W5Th1L58 zwe!ZCoIytb=10z2eOKf(a1_U{?oirN9Ay0v?aBmE3KSamT%T9WhcIL0ILOuZ-cY`H zt>Q@5c<-d=h)~TDR=~wIOL6RQsT)gi)H{cEA&+G}C`(zpPz{ctL%UE7j^IwdUMe5A zTuQr;$Fh9rLvz6EE5YF2TM&)-YyIGuZo~@hH$0m5aah)GzdYxdzU8a~nC59sz5ZP& zy3Su0n_i2fT%3P9a&12x>B@l9Xij*ZOxp z-O70pDys02uymMfQSPgj&SI{M&`S#m_c=?zBx|1o=WY@d9rjKzaS{hi3LS?>nYoAo zH;%?kO?H_(T9NZ@BUx7g+t+LE2St2M2X8<6yjUvZ{P6WX+3>2eW98!F+}n}oX^NkRHM6Lyt{e`AU|r%*M0L7`9>&B>^u5^;)K3V>}@j18p&;O+y&R}h%8U5CJoo`JlP0tHB{%6@mx1VVco5u={~BYu&!s^5VPhZ zEN4|lT=9}jrNPafofuSW<_$ zo?Kll#lbskejlo4DqD2e$%;K2bCJh#-mC(aZiRK3_wr$@jJn3Xm)$c-o4(I}qo;tqe!zE^-#F8%4gFLs$534)d*1p@7>-M{^} zd-v)bW%7z{e#)ro^8bvX&~a9GUY(@Zz>opIVGOWIy|rvoNSZ0vGD$gxWHkrY5}8yq z2k){B+?8IIf!~{2p5cO7qrjEVWI$)Y-vJES$chI}$YQ*R>W`ntR*o8@yFbVh_~{vP z>eingdW(CX^RMpN^L6{j#wzk%f9h?hRvfQ5hXp*(MC8};$9?hUtdqO<(|R{XskNDX znYpyR9{uzg_3NwZ7Gd~s@IR~NkW^39*$=Hd-l=D z`OKB@j-)v%NS}r-dE2`8K%cEbu6>v495H1o-E}se3fX&U(}DHY&NZicj^g5ns+ z8Z*XL!#@RICi=4}$B+8ZJXs}#w#raHO+DAN2UW=Ue(Uu$ZeOxD2BkMUfc$yczv^^r znAln<8qRErzPp@_tWoVhqPz?Kmad8F&K~Vq%Vhdf^e?ZWXo!Z&iU##hOU9Y?*aPs6 zoTZMQ9@4GtZU=HKl)*oev$}|&-`r~H9$zd?ob}`@(r$R7h$rUhRgi7j8;)1!$zi?e zFS>WK-pLD#3g6~)@|~w#)#R7-xmUjqsDcR6gk1_>@HP7G7&o*m#$dhNKRk~96|14$LG`~D8+TD>w#QtxJm|aN znp~6Ps=;;xTpvO&G485FFHu(|SCuxd9;aIJDI!*(?G)nE`Q9KRc{Z-`{S%-$jX5@5 z<5#Xl$se;F(8z360dj16eZbi*#yHhX+s>^2?Ta}C4s6>O0+>dxT`_?`!>aqM-}=mb zX(O)zN?te9G@=ifY3TGZ1z}*q?u`xyFy8yixt-@-TobI zy|+G?y64NWWyeo)AKSU!@b8S|UC|=)Wdm{eIX%(+x(-#v7dcUU-)mw&o>7vt3 z0qLk{oMuP5?m1h{QSV0#{IxCdUH`BhQNMFCBvCrE`iB{=bUy2bLAu(${WNS{UNpVd zNblFov4j=PC-l7@8Q7yDR|tFbM-HzEz5ZAqQV(@aHn5kh5BN>>!nza(zoE2zo$kRL zzC6bhzHMo_RB&U#zM{TFUoX(1sCha>^(OjiUwfpfW?6K%TF20uZFiEuemsNJGTM_KXCIUY z+>U<_JKIr0vHlqHBBwN6Lv`Mx6T3&S7~J(OQ{_ zUt>Nj%9qVd_(CCc+6}yAwP(*8`bXQAXYX_Jea*}AnF((q^c&%|*ts>(VA|}7nD9k7 zPc5n$oGp}(aZ%#5(!()`8tmtQlY6OPx7*_C{Uct@F3-l>r%Doi_kc}A)w^kh4d?Xc z|IB&34IDuhZ1!khe5C9S@6H8tA&GK3p?(n{*DFcXBP>hP)$DwY!xXuHAUmGW(xZMg zv}ebtkzQ_pBG_2XW{xrURK#+O>5SPp=C*<{DQvkG`PNXMViA{W5(PQ%8j7JnL(6I zX(6gkPKhC10Eq5)HppztXw{6#nT#{4&KivRLJj5qw90kXV$2@6j;gaJV?$UiW*=^@ z$(XGAq$%_Nh9+K{G2ur!Je(2EB^VR`eiXT7QM(jlW_ztVmt@q>$WS4=4SFXoUQ@ir z(HrE^fa(OW6l3-%39EBC#s)jyM6DysF(&qgO)@epnKa&k7ggu7jLDX$cP^(1do$9%EDPXm!Oa3d46?Ur-6${uV@XQo%J;EtSFCie2vVGl2&|B zoyJ&Le@1IX#bF=J!{QySooj-(8K4TCP2tZTU!0UOuePrVP zVSThDP#jp>@4gMnSsGa9`0Uzv!#B9KCepHhr7rMn{3xVP$6Im4=G?4AKCTaB0(+#) z>9CnSJtdmX?}?b;S~0u|uKy}KU6bu#`pO~F?I>RXY_;-?M4J7DVx_HuZ1hP1&SDna zTuwF;=SztEQMy*mqJFYZ_M?d~ugX=uH>Ofc_^?IQdu{H!qAN)u48zFqQx~^_C44FD zbg=UCQTsE(l>kZsJU95Zb0AzD4WLesfr&GchSARs{1_a^7tk*2b zQ_AM?C3zOJWoNAXJ4L&{-B0SSv{Y~^JG5Ac6)y|B;12F zR_{Q3PVb_te3#b~EEG&qQ#d?^VG{-K4_~+&bI28iJ9y-zry-$B-Zur>;wQ3KX-3{$~c)W1^9b7saupNhR$sqtnkxET6#265waLC&1(z{9Gi zwGrR#brpWyF%+2}2t3Q588o)K12^!HYMJNf?nYl7taW%K#kbjJpAVhWkzSKS@`b<2 zbJC%*KInw#I<0*relF`ahgaQ(Gr?`)N){pOj?Icl8bY@eAEefDA()~s+POp0rUDnP zKO|_E^jI`H^?gqujEYnZj&N3Qekl&RDH4``z|uLEd`>eAHeF>nf0WaGj?=qH9*a0` zI!>$1V;M(y>4SClDvtGT-HTha5_24N8}(soA{V_o2963~VuNakS}w=&Oov~-PL-p$ z@P6dxp)icd5=32T)%8b?e3g7}ePm;oH@wmO&Ud>Zu?0cUu4L=KxxKORf?!THZ z(j!~)eQ*cHL%9JwtH_Wj>wFut5Pn@T@g;S4mF3gPHW=VjHmmo=c}Z58aUV3x-DC#q zNo4Hhqqk6{wuRz#CiNn4*{49$d7BZ)wO*6w3nn!T8sd^8cy$YTU6H{)tcjU|lOyY0 zp0AehCgw@P9`swHPZ*DV0XcBmRHaXFg-SdU=mNO!#}6B9a7C3*UihI9ZrPpW^xWij`4+2q`<76aARfM`aM|P)EHQ(^O^5D` zeTC1q;Ql*SLrVuAP3q+iJRPaU>b|gy@MIzVSc_?ol}>iz@CKQhnwp*I1ymf(KkJn# zop7!jb?tB}@@G7p?YJ|^wcpVdSMN+@`Yzbb3Z@m0gRXl^@j#?=@Z(}}{>4@4hc)IW ztm7BwUJmtckJQ&>v(%>4u_X6$YhZ=0bI@(QYvM$HA=(=jMg+%RE^Ag%Z z5w!b@${LCKnM4aWOft9Gp3_!n+1sZ(HrVm%%ydOX2>b$+`@^nqK5r3Q`Nc&z z8o3Zr9h{3lU24ouV`JedXI=hI9>}ReBxXZY-&UD_X(mM~*uq=8PLh~~O19O8SinRR zg-W(Ct@cJt)rrD5X~_F1RodP-Cbx8UWaz!4j@c8Z>d3(69+teHYIS$FZe~`og^iE_ zXv1W1M3h#sxk(n!@1Wo1sbUL@&jqNtWmYnqhl0;-4k$Kb3pgdnS*@@+vv=|+2=kG- zQcUScEsJ!Uvg08mcr>r3;UZho?1`+5-cal&(jh|?doE3RoO;!Nh{pZWSk=Hw#{`oCy3Wn zvS;tKVKA*dEMs9o_xQJ{<}c*OQawC@{n_o}^2^&@dfQXv&lZaZ`R?>6l%C%{6nPCh zBa(sduWsnyv*;G>`!JyOr9m zxcd`RcgkzkseSvUM{X*dVL*;`c(GO=xG?m=NqF}9y&Q^ds;rqT@~EiHIFg zAGOS0dAy3+C%P9{Ke^MS!q_Ur7gBlSVI;c_Azs#-!~Kr5t9tz%cIWs`o+^Fvo^Q&h zkE2y%vSJcyCs%}z<)t&(jM4rYw9lAj#BN*{tN8iqK8%=^`|hzB#yCxl;r`q%xTz0v z4f9e>=f#l$?UaphPiN?!;s|{h^ZD)vg%#mmbhM*_!Q1h2a-ak5r+Nw z-lI}2E~#d`TXH>?=!q8d%}&?}QpK_zm;%~+J~VO_3$xLP&h&5@7F5o9Oh)IHVZq$6Ytzt>ZR>%tI-$)& zLz{vI0@W-z@{cT4)e#UsR$Zuy7|2#Ml@q6N71rC<8!E8ITUf%UheG`V=!#R2FQ&v) zfqxAwH1+xLRQ2Zwdvh`2|7qCZl&!rLQoXr0n=jU!)JbsW+y+HvRhTg`gYx0saCmCz z!AtLE`K6K+cO%$z4wq=io5Zre1`w88Q8_2r9K>}gZ6y527S+Jt;T00C^OtK=z3HXJ z@=d?Eok>BrrmyZH46l4A=Z>iO`^G2U6?;?c27%Uz4~M%dT z6`QamKl~7KS$;}a=X!|4 zw~WFeTebLGo$ann{%J4ppQn8JfJ^Rkb&L6mqOpu$Y#p+fUo&v?I9`W_mdCx4C~$?j zIf}Q1F|#qk@=cK3fz84r=7Ql?hLZ!J`Ppx;GQoe13W2UPT`|;Z6k;tzFGb1;)+od^ z)LFFl6oK$*o$!$xp51{vUlFPbaRg~rj0A}6t}Mj!@Y2(q!iqwygV?DYgGMR}fo(wl z=uVC~Ux>Q7d{t+xxk4O8n(H%K1mz0xva&fd#!!f3342<;IWxAX5VxwEGw_AS1JW(9 zP?gOY*uw3_6dkRqIWx9U2;{7~IWxXch+55=v4ujU?=oaHlog^@b7uVB5;dDMW8=tV zh(}IF%^)j8?dHtbv=I5xnNb6zA30j8IRl#<9IhOlpdQdX`+tAMOVj4T;xt}=W7(6! zrZ=A2mmRb$^(TVey4)(ZWyMkTWxt$U4SI*Ok0Zi>QKx}a2_4ihW&7t(jB1Z@?XPV-IAX8?rkm=p4cF%7+XoGHUXdOg{T=#(ca7G-hPa%_fV7FG_92sL8yN z9w#3$^&bu4(>IKMG&NM^1_N5c7ZZP3 zCEOl$+B;t=Jg4qoV{aPPQ>1MXAIN;t~R ze&i+dHAj*Ge+DF$$#QdFyvhrfn^OI3YONKsbM}*PWM01e#|ccrP2UxdxwG8NNnVn$ zPl%G-%yDW2)#c$TF_^hM_&AECLT=1KK_9p9HD+@-)QwjgW)cn946G4CZX_?+*Kfk} zOL>`)8{5?KnP{QHkufRHjW=Pz{PVnLm?bfyS+%@`)j@CuGfshQRD=ySy#-X`t12p| zFPEGQN;J+cT{}o_LSF3fj~kO}5y_1Xejy%5VM7_QxTQVYCVqP@+DkrJG%_} zPHaH`K&Io*+?-Id{9^bd{Opm*peFqyYqFN{40Fu0vdN72i*1H!a;qMnL)ambksa6+ zW}=05SGAE$v@juD3<ZU23sl zUq7y7f!+J)Ea~i;YO-M>1F?EZro^Y(rLzRtLRiGdXLu@=cG$uWTk36B2LpDu$ilz0j z4uJ;pURjED#b=tEKJ^__}XmA`h zB|lLvjJa&F7;RhF<1E{QR3WrsXz4EN-XFI*S6$ZO<<8u(5lnd=79KrBRv(PywjCxP zZtQmkyTX=NVDQrDUl)_!qRxvB=A%eynz_$o2ai9LI^$E$$Wx{OMQ1iHmPr3e!I4i5{UzGmlx$hUOMY6I3H% zuZ!}K>2%ZyqVI#Hla48z(h2^hVtcxr2C>)eIXoy4SV= zJmEf_XES=_O*X`zqdGE&J#b}}g-?ASfTEhl;FRYoeN>0yzYXF!Agip$;IH1*5a#t^ zvI5V;oO~3CJhjEv2%iHRCPTLRa)ewYn-#oqa%77HO|^)Q`;jR#C|)PEu0N!nmb%ds z>5E^UBG0);GzHZQ4ao`6Rmt@;U~0@Kk&AUFI7+%?=#CD0S2J}ddkk3|=-Mp(voY99 zyi?Ey`hzfVZw4KhLk~(Mo7=VrBDe0P*n^=ma(eZ{h?7l$n$xRilQTaouU8&`d>^n!_tDlrgk8)SMXOx@-KyIgUVUMI-)Rw%0Jjj7doBkB*;+Z)LkxFaO` zrkePhskiCav9+3mtRAxbqFd+~i1M3xNw@8>_bk8V%+cbmyG(So^d|dJ{+&p-re1mL zOA9>b(0?Pn`p^aXcTK$;#TQsY?|Sisim~2oKJ1y7CYh_&+t7LDtu@z7<@=06GZJ{b zEOm5Q>ch+&LKA1t5G-Q-MA1J+!u{{x$`zt{KTwRqes0bL=iS;_FQZjEd`51^rqziY zt4I23yK2~To~-HUL5@RH9Y$B;*JssErjq!CZ?|*hu5iAh_c%tRCTwtDi{cr01P<%E zEE+-IRed?ch?|h*{SjjZ!snfgZr){tm9z0aNQRe(x{BF4ET+84-vrM{+mL>kZ89{V z2iW?}3}!^4vy6GSMmUcZIgDR*D7=?L$khb#3w|A4=41_3a>TfncmI7|W>ZaNPkvop zMxIHp(#I}yy$Vaj(p~0-y``&4j0>IpW?2CuKbd+)K!DI{73U`&9AE9M zay>9X#TLrL=KF)xtm!)m@0LGqg7q&2Io4T7norvu32j&3rEC;V-*?+CF)4u0@$IHo z_s2|!9drGuO?$-kWTR8_>JvliJRr23d7!xRV= z3hPZqt)B3F4a0SpVsz0WU8JmM_mHqP*|1H97h*H}3w1}cz2C3T)2U6aQJ5EduBa6L zuO_>`gh={yT~hGwFpO^3czk%Om=AR0y(#y8m5bt71Gmhc?IExW6JA7-Bf-qPZ$?OFeYh%O(A>hw@+*HIE)cTg* z!-yC@F3Pn5gIH4qv!geM6;Wd42CLxPP}Ztaw@ohjfoWj2SP;ZVnX5MvE^(-z7vdeE z&8R)xi%4-#`$t@^wI*$Mh4#VhKGI)Ak7|luzBb=iFG_IAs5rk%z_#;`=1Qf-SNFS| zWE@+sjLzaMBX8~>))_$2-PZ0*X`$B}rcGxNNuGZbI=5}r`Ecgss$|7gAx=5FJIR1mDqaBIsI_D_uhpI5E9dSS01SMVx>0Q3bijS z?OSX7pE7>j0a|Ph_eFaG0je+I$+c;fnBS&^W=suo=cZzP71C|yQM}z?LFB<3_Ix6sq5-4mUE#bJ7Pbc1D=-=i^!ZhXEspF|;Ws zt?Q&T4KJ5)i>}h{Ph}(4F_N0smnWTsp)8ncJ79)KmHU9ntY=Q&uw~S01@BSH<@}7r zd~OWZOO^YX_lKUhXE|y4a5FIed}eSkRXS<6oIVzDoI>z&TV}gV+w<*(x+7ERyL%S* zwV<0)K~J~dHZm_VH*I(S7JGNAb02@QW#*oNcg1w^b^i`zph}vV+I0ExT(LC&vfn=M zEg8jEwxjuE=3HpE2G5{n z>aK;;1-?mOvvz4!y&3mG%b$;{lU{?jjo@Z#c)+q)dHFI{iLrRG!X{^IPYgWmiThQH zT4SrX*Cf=Bb9P*P*x-O>77DLN4EjO%Plt&rkT+j{ z24grgd_114HrP@Vx~9$Zg}^ZxnU7kDtaWriKJmtfCq|Rr^Eh8qGWsbf`3)H z!%t~X2zQ4_rud5SUWNJuebLZ}h#7dHS@dQjPuJiBe>mM{aT~g#fPcQK3kU^Fb;P~H zQQ4KOzc#cecLkbK`2P`&8VI$az|W#i%*wF)M8TYSByh*99EfoEa^aW?EP;-+1#rjM zV(|sdado&Ms!Q4aTgKvc_nxBGpC6enmKHw^_iihk^9+e?+!Gn@6h`yON|_(`Vi^(~ zJQp~W90PbAu7nw%du_>THxOOPrt>td#0jA9lB<=?O3$O)I__LRiotxFXkls zJ_%a!EIYd3s~BxYn-|s(7E=e`bv_c>C8O!~=s}C=(TEjN1^!%IhoHlr5;A_7pKKdsOp@t~QQ>rbRgKLbyuS zUK4RklYi31=h*93@4fJjh)G%XHd{AP7W*Hut(CfqJ{K6F^eCQ|JI@b2n_WN&7v7Cr zKbTE>aT`S$a`1b|7@-568yCr6H!M&7|J4#Ku9>J>4h+w7VRqcyU*QVmRpSoMc4zXA z;}>5;$Xq=~`8q=4*)4P@r=^Qcg_9n;;p!ccie0*G(dU)q7lP7|>eVVeJ z{ful&8|SW6Zsueuva$b2mWl|2NX<=H$EtN-Z6*ab`iQ9aStq@NIVo>5M%-1kiXHnN zGE=YX{aE_g8_a+GbCG@Fh+b3GD>+TVYq)$d;d7_Xq}fAPpN!w-`z&5(`hx|l@0~1t z$kI2qA9!ipy7y4et%2dkGqUOHPB!yQ4V7`2yL(n1_v!L0^K4t#>0vy0jwTx zo8P(G&4cu&xV})%vC6pDK~=9ox2)(l+3f)DIn{k9TjzN1sqR0S9`8X&ys{4=`Jbj2 zS+N?{?b(0i+}-;l&%R1;%0I0jOzx;kC-B;69;oaSNm~^r3~HCkOzCe^jD4M*rL)=y zlSsg5Jxc``k9zAdMpxT0W(1M7du4%SQrGm`=-gE|%ziV4osKEiwJ7Pfd2)CvVwYlW z*%nE0jeKDcTWcHj?H6*3M@C3rvU8Tq7nqN_tQ)-DK?K6)n-dGgg;%#N{(XMe_tCKo z2#II{RsYp}EYDJ-$K@Hc@KvkZ!1UXQZaXwqBKr3TQTe`)zW&Yw+a*t@hwhrA7Rf`K zzVc?)H+J&+5tEPZW%pdF=$x3IGy@$%PCw5m+>4hZx%@Xi0a^NHkdEmqxjd%@|_(ib;>{4-AeGgsu~Tnr(N696j-Skm*}vDBAfOOD@thLc#p=I~}BbV+yd_2R0SZ%%I3#G-Em)A(v3&)1Bnf~!!*lzHK zm3MRY1`q!%xH~7EIBGWlJPzi%u`H5aOuGD@7_e{LvbEYC$ozwd7Z0Q7Vt!*K`liFf z^~vf?{mk)(!oCHSk)swYNH}kKhcWx)D(+gy#^Gg4-~ed|Hua}=Hqv)yE(y`6gCi2l zn01@cU({-^^6)*u?h57}jSp$U=KJ_KuVmIuLw^gKy-{K*W-Ehf{*hTK`sY;}-dDP` zxoykFwo}aI^pCi%^&ULVkyqH^Gv_g`wwrHT7yYyiBivxSG=&+Gh@pxP@p@nWVa!Qm z=f1AvckYk8oV|x+*Ia%vUyir0JdeyAMNx3&)42Gc~Nt<7kEwTsiSeEn> zcCgkO`U^gpyD3=}HaKo*9fq@6X?j;MkBq-+4{J*2UT=e{O)PVXe9;>gAf7GvM?7xn zhuZgDkfrFA{6EH}1}dg1UvT-&u59YME__R@DDk?M-e4tqsP$kM3=-^TrdN zG8n(L(=mEIF=?7`nY4Rpq;$N=@PuArT9vS4P6)4d77Dv~R~zTe^wjU>d5L`|4q-v_ zHQNChe@}&Z-1fq@cj!%4Qd@z9?^yLEe5p2rk0Jk{!9v4HCDoaR+?mEtmn6S_8;c4g5Q%2eC33;y1tXxpi38$RX z_~Oc>Poc+7d8zSU*vc0ImephNb4FqhR%n}yiz#S&D||22IkBT7FLo3PyWa`nmXGKp zcl4k6G@;|G!Q-9lWXB?1gsZ)|(<;ZgSv8N$vckUT!cW(=P%1v9r6QFSqt(%tDN;Ijr zb!=IBw`&e(Ms679d@O6ui9b_r4?ei850hk#VZ;g>oNWSm50tGwqgHSKh=n$4II0^; zA+C;5vn@l{JR0ZO7HQe5_AbTLeOejW3$x{RhH3V%i6;pc-3SxHtuUX%QQ=mb8MO_a zYVU#cucq3;l0Z$z(HD1or}0;fs>!L|uo8df2W*_0bX(J5je6Ge@1r-xg73ueT)8+k ze9W|xCCCQ;82C9+eKw9?o*lB)+V8pQZwvOusPQ-=*RCK%U^M@t0Nzm$DPRea*aj0C5h;8A#K|^BZks@&dKcN zI`j~o*>nr=vq_p({Y(ULM7Tw(Npu%65M#AENBYzcmN-N1*tMGIYRiM9dC4L^SP#a; zO%~B3W=S#-6YbPrYER^?_S}owa5(CsBs%JXO4M8Vz+GOQtQ$@9lG*V$3N8ASW|DYe zqtCnP`_0v3ukOguRJk-gbTD%7LzTsV=P1Sn_~$@eZoszO^$hiUBYIXt-6_YIT*j7BTTqg;r_9-xG9;^i1-^aYH?mi9=VuQf>>|=dSLnm-!+k?Rb3g6Jz89{LQA|MkF;)`q@Cd(GOxFeWi# zAv8$VYntl9<9B9_h&@B(^-au2tM+P`-!^u*9?CFCCwV9@xry(aoB$7+PCDRr<>dc; zEN|@|XX)Mnnr?>XX@0=d`*Hf=zC3uMG;<7?5#)C4T)UtpV~W%NN5p6ErgPG4C(x~v z9`)-i2j+@Pz|QLmi2~}N9uOm94ll4$lknJ>CaP&Ky!XPUE6n2vTsJ}Tuc&j&PNW6q~w{M4SL&tH~#9_bQsexlBbh=&F0ab~+S&eI#{N-frqsB3A z!S+9uD zq)vB#|Fj^2D;d(aDJuQK_4UDd{oW%qT6#&#tmSC&;r(~8nnM;n>kNB5ha?QwIUNz( z2HpDJMA8MUC#&g6VgJylQo1>N9$x1I*IO|A6u#My-CI(*N(>gx!{EKB{Ts?P)@`lb)m;k&eCCyzs#@q16J98TDnFQ(YP zWF86H=VHKs3|EJyITh`!CIQnY#P>C6$x1Qmw$`pjS|Dy8dHG( zKb*60*;^U+Ue4CHUkWq8+w0gs-hK0pYJI`;N4G77H=0);<~pI+0z!A48>~L9JG%+! zu|l%9>(t~m6h2<|Nz?ewIQO9rd=#v*QU5_{XDv6j072%$@CaYC*G4&EoO;Iv&sj&^ zV}sFjJHjW$lB9Vu|91W7$|_~TAhRIj@O^&dAlDK|L$l~p8UPSg#IdB&?|Rm5UqId^qhUm5936&`+f~6X+D{re{1ZHa9cmj+QICX=H#ozO0K1 zIX`Tl=1yYnT9&x^{=AkN|HZ-6$>H0!l~x+P(}Crjb*1py`ayF0XUf-Df3X!`!#mi? z!y(_DzJe-khewAAeKB4!`}j#`TAIeOOAMYUxK&7BzeHD;eSwJjjG53dvmwF@xFTdZ zJDQa7*lQIad?-T(XpgJ4mkD0{HK*MgB@>eUOM}VR%?}tLrvb$SpmgOU?_%)IRAExPy#v5)jCHvS+i>I1St;Li- zX!doo|7x=Nj$1A8EZ#pJ^`Wns@22u2%MyblM`jxGtiOF-j&|mWYRCWh9d?fE{jU@= zfnn!fQFd3Ok3<@?Il~FTrSmNiL0WTvB*XxQ`fcx#wuMNre z?7d>9*agqhpmt}e5o)oH_!$oRXLo&_<%Sj`MJCTV&aW<*vqMgF!K}KR0uy2>mVHXk zNMZJmsw<<~#1U0jM$^goX@rQtHSGVL5h4cfR=JLAj~vm#L8bZX>V=~6Ns8n1Qu+7Q zp|wb4AA4B&k~_2(!x4OUyy{bPRvTSO%XHOSPGKh)+IFJ>F2kel-;0TFXi`i6*qH5`7vuW1lrX``z~}iox`SpaTwKufFCl(2S!+fkwQq`IhbK*s>Z=O@;Z5hTGwUzP zj_HwoBvyq(uzEGZK22up9o)^gtsm=lvJa%Q<7e(Y`uf)D{i7%|bE4T(RkrQ%n-nQ( zIx8hNQyS4`(4MePdeI!$qn!_BAimj1u0aYswhnMv+?Mw;>hWTRTcYfVl?~Pd!A9A7 ziM-TwblY}OBU)^~nJ;W_G<>yKZ+ASbD{CjWa|qg~@2zg6B62P4?uS-U%=R18 z!jqEFDosfHqV?0YVpnF?D{13fGL{~0)94PdP}<(7-;-3n2ueZy=*wbK;j|#Y=rHJf zVs5vNXBz;*^)oA6wYJ=tvGJ^49v@*rH~kqB+b*@pur3;gO zt?(dO(GUFWfkIQa*1U4PWb)hI+ru7h7o>qe8f{`Gl7iVKfSvu5<;6#P1&vn&j4l+P z?LcIg7PmX>I4!I`=ovWCmt<0T;C%kU6Ff<_MJ=Q!PXlm zd=lbaLtB283hOAzustkGx{fLaUTuK-!VK7j4GjsU)&62BI=}m#FD|}_7F^7Wg~G98 zHd8uAucs>AM@6srYA2%d+31NP?mvUr}DWArxSv0d|5|@p*y3Ji;dLjbvvK< zp3!}x^+n2Hyl3B2v7T}?ofYZn)qX}SrD-ZmEwuD~C{EvkMSG{}<*kvYqg^+(K60O> zetK3+6;leHE5Hl!YQ^~rNz-in?&lY#zZHG!v}nLdpiA4rAU?Qae$s4Qf=W8H(fDs( z3AeLb7Pw?GYw)?~(*n&X>N9-D&o*?LAK9jfyI>2w9q`M}qt>TZO9u8?$Fr2uH!YU0 z4(arU&R$1}SAM~$7x~rnSN9LA(Nc+5=_k*-sgMhXXLlTT_-*ZvPQeF1;4IO#@UHkG zidKPz1NYwGP0O>ReI0q)IqhIlj!`YLFszcc_=K~WD^GwW+rrT|c7N29d>xRRQWNOM zmCWkMMwu9WzlW~x8m+%2uG?$P1%?-cL}+&rZ0>%ov3in3!Yz^C5ZwVn!6>FpMYJne zSF)UYUZAjIB- z=m;m@;fC>Xie$HNI=QjqwFydC|F&Yy*%cOopuFhaySk7RHe7%uDm6Vz(IK}y2Rx+OQnb99+xN!K{FQ9B8gf8=SOuK`5A2R%rgGtw0@9LRe&v()`P7W(%9I zT032$iXLIA_@k-QkyAn7#&tn!u!{1v(JQxtgx1C@03dbzlI9ik`My)Z_O?%>X`4AZ~?P`s*gWa*|jWj(-SkSkpFs@lE;T_XXXSIfQaSo5llumT!>hRf zN&=e03qpaapSfL@0?98&qQan#bn6yC%@Al5Y}iOQ&>vAgf(Lhq6gbnE5DHCPN_HXAs6_^()H5+8d^`| zJ4B+cq;fu=!(O`|Ni?2VLK|vsSOHK0=G7Av=H)=a&WOemJGjb-8p$|3>C+PIlyTvM zcTeKE;!`zV&0Tn9(R>>|102o1c7`zWUO31ezP(e9eqqhbU zZL^j0G>a70SF&khka*x6S+0TH_PrUaL17e~8k~W;ntv%vvjRaK`{ziRh6xF|0d;22 z^fkb^3+aC8AP`&f1c*juz{#ad%*;;Dp_#+-hCnOTR%2rW8&*ipa6J52L+PIU44+@T zyHQ;AaUDQ?P^MHdp~k&n?;TPfp+;`-WINQeRp4EKO3TTGjvQ`eZ}f^UV}>7~zfx#n z-JbVOQ%{hG6k-{)T^`TghJ(eu8b~k&(}AJr$}U`s$V0MHNNg>1`19nK(xQ__I1fcs z+_HFW7MGI1bYn37MP`6vt{)^_fgAWf_%wSXyG*2+19DxyPy-!q9SRTHs&3k|HKL`O zg9M>?l#__LJ~BP<57hyx1d&)E1-R@048%qC63P#ZjZ4wcAdeuoPN92+FjmrEyu$WV zu!;`vPYv$@Va&UGOH$4-HlMvI;=YkEPc@3FT%M)(6nv5lJXY5x5oGQxdoI&)-VYy+ z!T^CtwWsVWf}U|egTCDJ3jNI*-7EZ=7&TuIGou{C(psc}K4jIZu zcUoVB#a7G@2yRa@zUo$bFPA@DmYvsL1vH>O@;?I=Qrb7U?ccH)rI&s-R?9{kyy`}o zkZQKz3k7u;SP5kBj?H*{rLV1qOO_T0eZ$r#7?MDB^rspussUvLkDo1(t_pj1s{<-r zap&z7@Um&;rNUA}Pz9{{bR}9(5ZZKocKs+16Ku2B!vd<|;R>Al!s8y4r#kbp7tS-lS8f+`_4-!0S(NWZuX7KHPzhOPs! z(8Z?EAbCqk5#=|v#o7%dwtKlK~_ksxepSA zdOp<9#tG3T<#-)h;|0N?nYyUXa&5zS}=IEZomFdBtuB4!nJJiESEcxY5W!NXq!sp*yKMMl1 ztmgstH6KHgxn>pm*>M=msOfkIs3)c+0=W%zvkxJe*$=e$Hd*JO-apq6%oB$xU#rAf z4-#|Ku&kv7THZR>;1u){I>l}QXe)t`csh9u&_(WdLAlJA$z0I6Tx zgZd<2BnAZx8Z;<_j1UX~p$n+BR6O3qx&+|=boy1O5E)VOY+R=xa}PSyBlKuTQ2C%I zAw!{n?J-!)(i~*a7w9jqg)o;9%p#ILvzWbQ?hn=X;yd!Dz2Zu&7f>IsH$(Y}nxk=@ zLd#niuBBlD6s!&2C*5gg!Xd$(DVxMvHA!0e5NOlTKirvK0WVOLQ#UYtGH2-U(~D4m z-(Y8|TYu8tX~+;Tqh2ZSXm{3ma6a;G!MB!d;5FOcWwYuch(6H6gd~1FqgWsvX=(A}BW_KWbaP<5+ z3dYkp`y+e!`U*!`xhNsihgDTjPsQv(211Tx?$>!0w?SfkLiPEG)u7Yh9$c_Z6|{y0 zAk}b?I0`$|Q4NwH3!y!_T&U{z1bhdEV^BXNvy< zKcAz?Dd6-LjUQ!acv#M(qbZ_4q5P*6@5@{is4cg#>|TJ*6Ey@FL-qibZhp>;fnvnF zMAIx>q3M3@L>d^#E~^Ip_kG9=B8d&Bmh}##B)GX(wETa&yM%McpBdvz(rrnS5~*oY?44eNHkj zf&Vs%30f1*h=3NBWVmxTbCVGm29GLrl7T@qnllOfB4#JP!AX2Q0w**)vawyI2te6P zGMB$(e>}!Xg=Et?@$SGJFDMC?2UUVr)CH3aBCcwki3I`TQiy?R5z;ffh{>w~Z6shE z1WUW|02>?*0Z7$q3zZWkU(a(qdU+3nTFB`Jjm) zhJ*ZQj_JN@i;INeIeIF=q6n`7bWF#@AYi!$S69@;B7oT3t37NI0_YM*0f9LHrjQ?; z5Bh&%e()x(Kx?r26oyhW8V$o)t6!8ej|5~NxvX@VFl~}#1Q9+9(K&1l5cLn|W@w1j zM~!BwSof*H)a-K!IcE=Z?}U*(n^U*NvgH+jVQVj_mzbU({ggpXy`AP|y9dnRxiP=5 zlQ`Z>IVBD7@I~b8{M_v_^eT$O7Wx^Rc!q;~J#wlZ?YuU~iwXzc@aKuKEKd# zeI0C*yakJA(1w8Ew~_MENP#sXVP+ry`IV{Qf6$s00l4ktsONDIhZu=y3=~HCA`*tk z4+-~+G|{(?1UlsFHRSOIKo;t}W}MnsL%pbc3Vo58pbP~0HvS<4Z~Lf;g8JisDjhZ4 z$RIOH@XXwXDR!^J>@t~_b9kZi+?I(*(6_$wn1enLe#og@@%L22fr(k(7y{o7WT=+H zdIc04PrHso+HSKSw9;;fGSrcHfq<-g?Es*jc9}Bf4!#emiZuIxQ>`gf7;{&^)`?77 zqr-)EIzf$?Z_q1jkoPyKv}qL{D4;$^Klp@W81l{(O|+H_AgmG25^)bHlO|dFbUjQ|0qg5EjtZ@9MB-% z1S#MegSWUIqSDn)@DX~zRMY$7dYNO+(V%1}2))Mg1uK>{SW&@Hdp1;+q#!@7fhl}4 zTSDT-HO53)Hyhja^Q%z9xeR1W15`>hJ-XqaHZG`=x1(GCeGJwphvyF16G^XLvHLw~ zv9$oUNJbxi^HrhV!ywM`cx=l{QG*ZcKwLV(JI8U-tBhn`8 z)xJ`p46F~G7!sM<+Y39HY-Tq-ib)BX3ojqA6b{jYPHYz0OF>$Ui_(?l3DFp~l28Og zM~Cy4$C-8#`2MGp8bZSog*S6tSj6k0T$XwBW6-I4Ag)4(BFDmOp}Oq!^7RN zA^d$rl-tWE2amO1m&lXReCk*7;9Go7LtwCqWP7mK5cOoGp;)dVj!|GSTagU{Emmns z9C;&bPy#cbAR;kpJ{TCE$rME(rPZL!Doh-35*GEfMShP15Djx>%lLACl4d$9$Jxk19lyhLol!u-rPisZb$#D|zT zDhl>3#e4^@@1r5{nTn^Itr313xAo*^= zVkaxAmx85pa;NvsVoE|HZA4>zuO9IvlZa|ip)a8)v2=3hxOZN?@sp?B!T&bC?9+7( z-QSwi*XW#_`C`a^Zh7)FO(GhS1bD*`#M1YRuwa6WtLWy`T^ucLwa^F(Cn|Wq5eNaB7B!hfmC8gZ`_Q zLPzQ5V4tPjzFr&~+F-qwdpEGHPcUSQ`2qb{Zw;^Cb#Uj9ro z4PW#O$Pk#;b+A{1<+*$Pv(CZ(0pJ+)YYWb1A^rR$0K#>VFQs0pU*`vM9U(qD>*a&C zlE*aiKkSJ`d8uOU8S6)9U+Gt9@!0YG?-tuH5R`;nPtJP(*0q3^ETZf5gIMrDX(| z%Mho0v=f2yy;l1;`QA&g%Ml0>YG9UkofoLC{qzrR#iM{~`asxI^Usa!AYvTqo-n}1 zvMWF2*p?v>@b=DbyC5)RTOkI2Q_f^>lMkcQN z5}5t`EEWdqOJdez`Aod1Ab7SVx0^jO_IWy&mCuoqx+h5EIt&yj*P5ov_<)MRJ?^#QJNgbVhG z;RG$g7F+z&eC0^tix3O9*xRAYwajvHpvB?|BNsH8^c>Z=-GYVU$p;0MS!s1P^Pd6D zKfK3iUV}3QTMJP}j=nS{aYUQN;QU=4m%Iyh1N9o3|F#TL`_eR}{QH?=$8y++s)ZudHYFK+D-Vaa#&hVl?TPSR7J2KvtJv-Iz8Q zIgFt7ou7xoZQMIyvqqkyyK6ty4F(2AEF$uh!% zYy2_bCPc-5CGVnNFiejEa#@bOTq}Kaa^FGGsY(>yic1aKaVLhD<}lB3+YzO?u+8Bb zD>N51N6GCATY`}SGJ9fzuoe(QJ1rXAXG;&-@aC9N4{9!(q=J1yrF2DM2?dMiiqFEP zK;4CqP_TC(7>sCKgBuN|NnBfUc8Dmz@H#uak8}gNs{`e-FDpIZI7h#1w2R z1o4!^<OyJJ9N9rw5u-HRAcEhh%n4UR6Owe|nn*fpYMsZHTV%?#!jt!7U7C^TJTaA6- zl!c(pwlOVOI*~6j5%@r371id9G?Iz(KzKt6^Pd3yC5kgPxpy;{1^Ikx{z%DiBF@Yc zl^IN&6j+eT$4ppndMT;B$y<1O^9Y2}TG4*qZQa40Xtk5tnL4u||7e60*xcP_!O zqWIiBs5oST9>5zZ$G7!cAg8`vX00Y0hyfh<6)M~>CE@885{RmyNP?TsfsA4gbX(&A zp<-(Hk*Y3zLU-^TBu1PEJ|9Yf^2GbTu7Ex4;d~D&&zPv9ppR#;=!uk&2iQ!Fx(tpL zA=4a#_kvwQcgO?umFS@uCb~-)4q>7p)n}TFOn`YpULny3ft5sk(~82p1i>nhdLsD}juaxEAoZ32vVIOW2uozjR^IN~8~ zL9UHo>WzBn?%`P$xU>XNH<^q7#t)OAccU2Kb_*SnExQ6X;sM$?c^Ecw7dJ0B5rkv# zc79UG@64{tw{qs5CMuL9AvXj01=-Jn4O+4_@gC-Ze2YNuVR9_c_s4qZM(PlHz>e#w z4IXT99%`t>QRJ6x0zaq@8V@$!x-BB&E(I#Hz$@rCeRibnT_&l70iS^!0&@tTq=`v2 zKPM9Yt(}E9Qmwb4A7#_y_6oEkI-&Dd4;TKZhweY>;jAVcpXGzoYezXaF>sP)LDj;t zwpnC1zmoQi$@>oZi{14ga>!JI&3;Sth0!Qs=sV*qKWKe z20$tU0&_xR2z59Zg4aFJ>0G4|ehGqjo@PR{+ZBLFV2DTv;RlxqCM3)ew|UDX04XW- zCV@`P2Dd^?{Hw7<*G7d(AnDayW(B-D*9$~ovk#ePxwpMFtl=KNooosM>GA$BIT0PDBNW7-(Rg+{Xa(3xV+Ipe@va%<_Qh2MW6kA&XXh zPa@gVhJ~0uC?%t{-x0))c12z}Xd-$@9m0D>LJ4 zdaA0l34XGXbR>aIwICg3+) z-R~O?JmCDRo`*XcZg53NsqVA*Bnji6C_f@oJD3VERlPl~7+|9N-wW!*cUL`enP~5% ztkO>-!(4FVVY^_aVpvQn+aSQvsYJvw0oIcNptON%GMpFyokf)&KW3?@6=s4~xOyjq z@*dh{Q=xw`8DlJw{^j9Y zG}XbJb6tJxH#$OBP_=5diDLbYMt@kRo`TPt2v{4#|CJy|T+JZ${dB3hFu0D=b?9e+x8kI{<@|T|4N~jDA7^ zkAbtEq#xZ*rA&Hm5#l@8hsb6YKn?1hqzn3l40lCwZcE-=3Y!VA3&5QrnIbkQIrL^7c zFE5*c_-mCZ2BrB!&${03fEzy3gXMrP&Q1`x5t?%HfrFE!#c@l*JCDFPCtz0Z5@of~ zfJ&)7Z}QYWQJIu8eSrF4-?`|aj=Kh>@T1xGAfd1;yvH`dN_aklvjn% z9a==W4>mf7sQ4AwUV+!s(CnwBA>zIk*q-nxoxWkxa}jz( z2Zd(66QRp7+dw&p4u;|X*RlQ=W``7Wo&R-M`AO4=k$vP7Vm?jZ2ozms-4?J(i(9wl z^XrNU=vQHh>6#N+z*=OEd1xG)ogJ+YF#nT|V$KQvcXf8U-OVz40>DhWlV({X6l@Ua z?=@It2naVQyPuD3ITHXyXT}aGyr1`5d1TbIZPOB%7Vw%-f!ebfOvJ(22KokI52X>DB_9Yxe~ZG71-duX>PIH=K+ha!0sPw(W&+SV z=VWIuB9nl812k~KP6(6kw|5_8t-TN6&?pucUS|(CJ$Me#J(Ewlmb1 z`~r}(^H+fM0VV^T|C$FAt~_!$##)K5{n$8TEx7a6{o*JNbe=Frup{yqvq+%h_MC&~ z5y~Cj@thb|-7*GsJ(16hK`5*2NxDVFOBnwivw4t%Iy*evdO~c!fn7E*y>dp{dTup@+hph2bP0_!^q;+3}> z`{tf8jFxBq{7+_rj&D77)gG=n&SBv8!x`Of$(Ia-lrL#?xwG_orP_&~ci&dKx2;m7 z@`5c0aqjm8SWB-4e-D9xp9_;&5UxDF3OQHfdAzy|gnK~@PK1zoo=*cV+Xy=5t6C^eF^736nuM zljRt#KzJ80>Ud=2+XID}9tFCPG8C0$f?KAwKKv*HU$O)hy6*=yLox#t@U*z-Yj=%m zMu?KiBHUkq2B#XtG)oy7)vJWWpew(MKe4Y>OpKT@_NL#BmA_%gWS|2(y-L)*5fI@G zx3~~DdNc@qcFbub;xOJ_QjYs9>U+AhlgZ~ZJ4-JI0;>fsO6@IAUvN8DLiBkK)%r+c z0=POVhQN6n0X{fVA1TofF82!a4` z&B6x9mIyUKs2Co0DoB9!n;nI|i8Hj&H&GKQ^i7lvg}zC|%)hN~f>Xwei;Zd0cOf*B1`1Fl-^EWqSqlz9a%F~m7hQaR>Hn#cXi2n;Dh22z0<3{0S21by%j zwB0xZqanToxC6!o={N-5(Y$|-Ijzv^hSXqYbPW%i*Qp;K4mFe5VE+QK&^K}B75XM> zCxyO=vLV#y3gf1K$G9nVp||b?S$Po!{UT3hcEw)=(oa>y&y3&@)2QI*0j!NJ+c9D6{U2M{k5uW@O1?8Ds(Rl)h2(acnTo$b+T8n*x;isE#xEBW z)IUio^gEo}g?@)xQ=#9XY$)_QB7^=-W1?#_Ph~2q`RVj!3$Zi%0Vvy zDEB%CIIh~Jx)L*gI86+^;k=w}lYt<}G0Gh11d4fbb1aIfr*YLHGGI^xCtuY^F<$3) zKR;cDjFOjm|66+u1W2W3jF&2nNBll&p-4_uBz4{($Y^MYuMA3C@i2p?$0D1#u-+|nRGi{fQZXQPJRhysh+Y*Mn=oNrW$XO2j zw|X9w2^&ow>}1LKYpF4%&w2G~wKLSIH6OMpnau&YieZB>+k_s{{CSsQ48kg`7!^}6 zlZHpzlqubxSuQj1ptYIA5I>Q)9s+_)NFgZKhLKrwo z=es1#V6vgO-uU{VklloFV5=W`hutgpC0%wC#?mVjB-D(ijJ?pR)i9oba29jHORf8d zM$Nvcbicd8yx3(AGI&U0at;KBYY-O|KLHhK-ax!br9ZTny!juu{at4Xo_8-mJ*ozO zY4s2|u(?Px?g0j^t1iI{)Gvt7Z=9oAzke3l)M#?dd8K#7&l!s;ll~W(z1>*#>lYYxzP9CqR?H;;h@GxY{F()w^ zkCo4oKaDV;f54K(d9a;#r|WO*5`Ayv6ceo^v>;4i z72@{n>Zl1VlxH`9;Z&C-*lA!m-C+_ewDCC!7TU;Ofc-l%#62VFm@;)wH8$C9cm7%5<^t{)2|ziH*6_ILRU!GcZ03HKpJ@jUm#0Cxa+YHET^I zKi|2U0Q=y>L;|o`+s)fhYaT(89kX`9@`ARrcjn$7Wc}RH#=@ObK~{n*)zf=oPY5^c zd;!UJIw1%{E(KJ~Wg3Pr7B1w)FgfJD%`cqzstoTS)Xw>k=a7>wn8`m@?I^@mC++h5 z(4x+yC#YZh@zdC@kCt@$1*-A?1;(^w&QbXPD;?!8hF0iLx#S_Yoho2Tz@d?~01M^F ze<(u={i#z9h5qyp^rvU&q!niFSpeJgqomO=Bj7gQ`y_o=PH2kq z;0_D|BNuhLp<$FiTD=z3dqUcm1H&l4;}E+RUL@1ta9nHgH&BsSA*}q6bjmX9CQYX& zc)A2;b|=zlGn3|q^$*&Av1|LiutG=4B@7kIDQa-BacE=(szXwgODn)ISDZ}xTQa23 zQ93zX=qP`+qdW~)8nP+x>q{DV7R^Hi{zx;^JqIw_QZG)9qZO6|z|4S+ZhZ8A#EqRj zZ;N0!10w4Up(zLq3d}FU9#Ci}Mp}e3^4tYpfGLuniL>2p1InuC?>k|D$_f2D|9@}S z_KTqvdO$8xs4-62Qa!^zhep;QsQ~*=P2?7OK&NIFdca@p0ZpdC%xh@Q+^~$L5wglf&PPpEyhT2FZ!tIG&-sVOes+5MnH}AJ*T!6vHwknz_wBJhn5VRnv6R_>qG; z10Cmv_Kqg>kOhW~$0j%g|6819n}G^r%I6?;Cg=oY9O&BoriKB}-0RtAnBc3k>5P)| z@9}l-sWWi8PATe5V8&(QIn7S^cL((4NX?i^RRg)qhPT;p4iV@g+wuRVg7DsKHP?ao zTpjpaH>e&Zr{INlb&yZQQ)U5bOX(xv@3Q*f=eP-KoC&DoeF$Q_(k(^hd2s^f=J|6V z7f5xDfVAv$3al~9;gWa2#I@N~P&;EawJ{r7>qrjhxLqijBVu=;8^SS=fuZ3p6NC0zl-0~E+(G9R!Tci_^9}tw4v-gmQ80nI#vWVP<#RZ#?2;w0`@-YJ zS=nPI%KX z>D2e59yS!;Wp;1I<;w)~`jA&_{b6yZw#oehS=BErZ~A&^=?pos)8i(^T@Pm#9QWS8y;DE9C94$)OqRFx>(9 z-Beb?080gB5s3(w%=T97b006z@Bq;}Vr zZV2YqV02Y)bJgE&)es4i8G59#!4aF?&hDSL z&0b2Y1KxI5dTn7l>u2|uAFu*^Y4I?Bu%MEfa~S{6tYXk90Q-(u}qhauuncNhrw} zTRBzxz*()J4;J#QyeVrIIEy9VLJ37`k8)6_nPLYDRcFcpk70eRuq%Om14U(JWy*m~ z0A*#-U6Pjli?%|8Ei~AFtcN}KCX@U8teX^p>a2TUw+ur4{pVe&3eZ_dE1@df3C+Vb z&Xn4QONW^=naKlhU9i+yTyqDS5}BXQZrm6C4{VXC&L$56<&qmwd78T$DB9zNk?#Shz4!O} z%)al9tH4)z#BMY`i-A6jjs4C>nP1_az^WoxIoVc0^`2q&0^ zM~}_2+Z7~$?RX_f=!~Z-i*CUbsu1j>>N6*B+wDY!ox1%ooBIM2(|@}uwBWF?Or9Bsci$AfR2UPp6E zV8$D2=J%I%gf3k3P3k(&bfYIxYW|_*9dyzXubh6nOC2U4g)ais({B^$Po6v>4F3#r;45m`~ zYCGVua@Qg#UzYe0JP51vyyp{`!$>JwQJBB0vyyj!bV-(=z{Ay|R6Eq0z4q4(%|1Sz z@@lSPDnNg036{@ljpscxL6RkN6(geWLWS}53R1idu8mC8dHdqwg)R6Hb8qocJAv@8 z^}*6U9R0GnaEmLoVVrrmxS!1(eV*YnVT9i2G`aozy6{pZ$=Afa=Vg!v9vJT5uJ&r4 z5RW=HJg))FPbwK%IlB(wuMpYiet3}`u)E?a+rCo@&a(r*3f^MtW1{m!E==R7rtDuN zI-Mg9z-6szkibRjOI$*4f)`hsFd|Z&5|=UPuW^b7?a#kYDsLM-)FE{e4y%Jhm;w2*M0c^DHEelD)xOAn)t9*`O zO}S86xdifp+v9lUHx_oX*`u}Ryf&j=%4ZUmAxS#Lt^C0v0+|+vkeHBVITXX?4l{7}700H6 zL;H43oaynLPM&$K5~#%5pWK-()~j2egBZ?NQS_7u&sGquhqgi+ z4)%nvYK+rb>btvJtn07X3Qdj67CN~?Q`4+~=dU)kF7gwRHD0l_nXYiXYyjt(Wq=ZT$jPZdp>G0% zR=KAOhIovl9x#VXdsdlB!Kzi7$S(YT1MyW*pk+TJ^KvGuAjyt?U~ zwNdt7KfSx+4pkKLJD!Dx!$ni*qyCsWSpP1&dDE?cr1;NTitKZC6uu?SY16*UoRc%$ zIsJ}67i>6QH-?-sJqmIzLkGAY7}Tfkq|-0WsKxR9OV-k}J(q@_PcOXQgSibbs^()_ z;t6nOt4IMmGp$=E&Gdw1fko&b#vuMpgkmZ=_>-R8ZaSX8rA{|b0kj+?P)^g|@J{ZN zyJc?-gZ^QQ_bR%5onAC6v|EZebx8b89n#e7qWkc!>KJ8f=zd}MRDovVzjd^JmUJtw`p?YCL&-g-G#wV!&}0s(f&T^!1Z5&)a!XLNAk6S-@gp>fxXJJlau3CHNQ7G zi7LdOGU56aXiXfV+u$^gsL=8vQj2Hm@a@!Bcn>$yk&otIh6z_W=hF$2Vu5^y*N5pv zH=mi(_a(O>`WjpNF{k+cZLwmX24Ayc?unJ>a_NH;u`=U}#e8AUmyn{?{;#>uL;#Yt zBH|C4LXDy#vAIT0`1^~L-%_JY8m@oNW!{dkP=U2El0=5-mFUFfhv6#kQr`b)S!A2l zcamplwv6W+EC$Cht^pZ%)oXsDt1T$>Tmu&<&7iw%aBe4`S&hiH>VW~6!~Bn!($0$m z*Ct-2KkQFI{PhptALg^W3)fT@%U})P9Nyr*F01(aqL~Kx3pRu746zZcGZQY`&#Ma3 zC}dcBSZejEo-0c8*yxI~__QQ|Rn0H;u+2)0E+id>`S+Nh)y}NAsDD+Y)gAV)vocBi zFuvfX94ONK5;f7dxwxz{%nCpmPh*28>{gumg~61SX<+~5TcY+wvvHZJyN4KF?3Z{ow0QB>g&X_X&)_RGHL1+& zpkKu$5csel7Lz{p_y?X{Pv790*vj)zaM!o+b=Yjtz5))k3DfJCPb$|sSa1B)l}dHv z8Vo3XtatKPRsP2k3?Rjs3k%>NEVnrvkrOpMQ@a7JP-=+DF_8#kUX=)7Q`mPnh@+Al zY_Xf)R7wo1(5m7WfY~O2&ePBc98z!XMI+lfX{=t1(w9x-KP+*RN<+G8Tw5`p5$iA-v>#j*b1*{sF?&xC1KQfIK zzMrEmhM~XX`?*4EEVRbo-Wt1CvYF4%d#J9L>^b_Ks51W1RBuu7D`&61>IBdZ$Sj%0 z@J&hl{An6^7c{|C-H0kUhaJYtbDy^3q&gq1X8glfqI)5`ec-G?{oR&A%PO?2-`uip zeb0TBj$vdwyJA-~9#G>L!75GGeQhPhJlSysO;N16Vh3N$kby}OvFhqx5v%1tAuzET zeUx?iD;Uph^zGcN*Z=nCqNw-ntVQ>znL@<>A;fBRx@HZX2Yr;9wg}U>h(q zlS}(6`}t-9F&3FJf#t`Dp}|Z{bpv42l`BmVe2~yJGm`+>NIJI?h9(z+frzVUJGcOG zVPX}&Bil>gZ-Q*H%9wWxcNvPw>6uIrMtGL(xyI7LvrKC+%htI{9%Vx`Tv&=`joTqB zhIDRx=_WDc$iIv1pr{_Pou-GpGLw?qUPXpET$az_V+3~ZmtGg|)Yf2nX-;+1YXb3c zCMdN5_Y~_a+kys+!ebQoZ0r2+t}~a`l=a^MUxLp{#lQuq_kOm)a&oky4KUBU#=}B0 z%cdzPg)dM(gAXq<%ho;b^ARqZ>f1V>IPd#U(2Hkh*+hDo!(v4KjKYp{shmD{>Fz9B z{Vu%$SKD&Ned1ZR+BIUWo=c^Ac$Upv_+mcH;@5X(*(!ee^P}l4nPqdgY)`}<$_j7L zN=x(fGNHe9UUUsn!Fg(O@?4Z^DFfegYu(lvwwDy zhYNjD-H~VIBt>yK!Y~B->Lhc@xTBWq(6Wxb2^S-YnU-`yf;k7r^&70E?H4ayePK6e zm9$;BH1yQC-*SDSe~fJ=Q zThjYAhVw%uov2p&iI4Hm;|*WLw`Yn}^LJeWyhQ{RY#wQaxy_uPSsBF@n5ch!6MU9V zWir!dp~mH~{WT^6Hl8FH8sGUx30&_Y`i4#`fnUd25&ZJbVv9ec=lDecL`?!WZcRZ# z0A0ao{T=g}k>CsR<^P*JD##aXglztheBrjw8e60tzyY7ItN>nn}<;r$;xshJ* z>}qx!w4k8rzzo>Kkue|JFZzTr`Jbwt;G&W~RH&4U;lO~h7^4+Z%^HTGXFAEe?}yh_*& z1uYO&0NwErY9}=4@fSi=a?)(9vmwI4+@_2@xbBeD+Ka6GbNdaDGT^`@)Kr$5Ey3FA zK}Fg~mBPDj)d>+^TnOy_~=M=gfuJkj;@INojAY=$s@WuhJYjZgA!IDh@A*=*?B zHHR@o(&T5E#?Yki&;_h%c05EF7?!L+>jULWGPOd+?YUa<_`*5&Sv`(3uPoymn5X;x zGCT?%2^Gt`f0lUdp>wQl z=G^h1=eXi}gAd_lW?%;5*|@V1`I zNlQ~MP3?6&?crpXa^Ojw?puf8SnJVaAiEqUw7zx63D(BTm+P4Vfd;b+roR3B4P-Xu z{p~<@L1`fq>lk$K!G=U~fvyCD!r9=k^>^=b-@Zs|R^Lqxk6W zMTq5U z_ggK;$))3X1({WlSyZJ9GK<>d-zT%Uxvw2AnRefICgLZtGMH-~xHtQe~fCVBeD=$GLwmrsuEBf#{7h-CB`%G^iE0Om{+>}R0&j{2#R zj(I4`aw%gJ7+mk}5+n8$&Ki=zZZ6TV4uLqFCrC8fyF=HAdSZfUPzg!7A)olsetAsVha|u!EY4Bd5JV~M=NqGAvbPvO7tZnXL$qr9-R9jy0LkQXp_bv zfKui2DUddig6)F@nQmlJQ%3_FP6_|7Dkt#dce1$C0j_mW4p|r})s|~)R>~q4bK`;a z{yK01-vT7P~j5Zd42D4aNNcMo9x7A`saTQ4~?RrnUPj2YuP z&hj0QL3x;f=I(SXf$Nf4_V32_e=ZKUmyxlOGQf5mGlD!`y#WuV`}G6ghB-m0)$GYT zDWi&^D-e@AW;+Rl>x$0fGYa-pK2ouIY(_z@=c=D*{KsV!ONyAlI>X>Qdyi1`&Q@uJ#SA4lqQ>mjDlR( zsXwDA#Ag(wZd_t((dc6{3UWQ)py`5)WfPZChN&QWPN`q})VdzP#by-bdaQ|L6z2L} z8-v%R-XasIV-Qh5lQXJ&D5J_C*HvHOkcTzUP)0ofdQkHz)^Z9qy#^SK`jt*H!3xSg z8#kkhadc(Bxo01;Ar{hKYl0}_s{6LcP{;!69~)H#T5oL&<=fq!CIOdqoCkea&1!!e zhH|KGeCi0>BvP5fe+W4=?3k+(dxt|Cz6a%}8jIJCilt)a6qFeIM7bZ! zh!9bEz3#QHng$U;C_z=OXG%zXra4a!PY&}m73527Y(5{YUDpR6Ak*5T7urL=$&CH0-seE+qbf zXc!NjbVYQsItHGvCtMQ^o5JU@MnKmPz9<@Yv%|O*%{yvsY}abWr!>S~7HuZq{Wf}S z^Ti8if{t3))gBC1TRm$VI36RzPL)Ul=+#~t-RaeX=vowL=-TK5c<~}Hd~vktf@v)* zbaix*2DL@qUgYxVG|HF6J?khSZ}GcD|6hR5faG=|FnYFY);j2#)!pqZ6o*HluDubU2zXy5iNL zcQP1b$c*6zg{#63&Z!9UG;WulH3%&MHylj7Nk*d7u!@lD*R`v>Rk7~!*luf0l*bfP z5fan!{n&TGP|U1dcw)^&I%2|z$y0A(da%L_0^&Byz!zWn5;;{8LV9h&HI`wx%p2|? z)o60IX($9V+S_3NtdJpP=(AHs0On?a&&rW!@rLg|C%f4e9GW2nHT9r|(K@6Jp7M-+ zqKSA+l9DkLuW=Pm(wo`Nd<^IDkd;jJtaG5UCIclWX4KN3(p;p`*6-|W?(+v2Z4 zl~Hpvio+W;b++*nbDc-%XL%N4??#nZ!PRFSeKccF480sxED=sH)GU#9Ny1m}BHEz) zb`Z|9Gn7T(%6X+nNYza{@Qo#zJtND`Q_A?0KitwZFNhMNdm|)C=8C*6p)(m~iLX2! zg6_y8RRnlS*QZLLaE;Q6U9CWQzLoH?KTuQISBy&qWZV^>F+X<^_9&6rR50xMKlC%@ z=A${=xFF~UpiS?xhr@I1qZ|}Qx@ED2E2W=(1YO*z`#&Jd>j=`YE^)|XgUP_Vv28iI zCz4gg9UKKa3xzPbdP6cTBU~7iVe9Kk!GBn&50VX>}AYw|# z1F+z2R8fOH`raA-uuI-G1Zu!S$k5xxDxUz?isFBbN>mB$H3R}CeVb;`GBkok$G z{RSG%mPFWJVH9*MY*SraS_K`8s**~fsNB+;W;;%$gr6$mlEWzISej>@1sy9%$AXQH zt2$1t2DL$@J{-E>f8tK05xOpW57s$o$s5RM!;Z`8ML-Mnw`#rf*yFpZVkPPqyLYj^ z?gZvBNO=QlL~2p$g`)>9DXZV2;-+%g1(6OkH3OW|opky5j zz64la9@Ba@xV(H%?SbcMsK%2_xdno$F~Bqq)UeV;;6zKzqyYg_Uw{cmVPf0+nyALm z(DFkXFn+v7Mq!O1AB}DSGD&eP6d_=uZO{SfEqQT+ZU=UK8O$?>@E@@1_<>#=|MJ<) z!I$*ppi#CVQ4x?qf3#|TG6>{ln|ZZV%Y^YggMzI3l4!Di{*f&~bMS?)iu~Cf@h8_( zV~8ds6MPMfAIN+*LNW?6w@ce8jTn%fU%4s4$AQ|Fcp&3sbqBJG=J z&Ok_JWFS>J76gm8Vz}X`D-cqXp)OE-#%VGWEG32tV_Y!CNiO{})FYx8r}BeTUgkLg z#GenH0LladcB3mcUU?nKI9-sPbL4$=v7ifv%7Vc--H>#|uV1Xkf}SZg&!bFr28v}x zsmmO`I$cnaQIBQLCJxl6#7~k?b-N*%wx{zsF(9)5ZNzyLRJA2E5$rJFHXxmz>f9F6 zxFjgm{M>+EL6)SNhgO8JFLTkyNtLt)oCwOz*wJwm1oQqM=O6T79}{bqP2#}fRZbk{ z-aG0Zc?m%1yI`#VZip3g8j`G`Ik&$n&P>E^3ASH3=2@hn=)h*ou#80^D`HV~)&Oi1 z?hr_H&d#)QPY$r}bi9jIBSI$#uH7iYh5{uEML%*pU zF~fk?NGNMUG4rvek(yAnZrP$xih*dp8iLt8Vkp|!48c2+s0~Ghft}!rgsTf2rV;DD z0h@JDYsi?TtE)n=5cycqpVz40MIgFxq&sX(r*1>>8srUl6{Kp@*L<-r;K4q5GOO*W zqRZR<#+0~S_0=R0dAqeQ1cDDUQfo)Gmd)F0{SuSh2I6@arZ=*FW^J+q-YXJ{7Jvrh zXS138PwC0auC^Tk8T6N7Q~t>yP`O>b4s~!gbM=s<%Dx#X(EKCKdAC>4I(SMZ)cv>i z-83MZ{gsM(Z>D>rAP>jpWaczRCD@QW?~M{K3rgKCs8@+UBtmt&pp@x{?{H9YApPVL zvg;Vo1LL)YP{t`~qzA3L6X#|!sMC0zO$L=25N>a@BGi35rwc!bs|8ocrxC4C#Y~{q z5(edd1$2ytXgWdvAUWao?N*aPT_%w;$snUd$#=xY55GJAj~Qx1a!4x7{5AGu{J0?< zDit@{fl;ShEJiqemo^#)dZ|QF5aU8>(AsOppz6s+#|J3@J*Q2?3()ww{ZFMtVotNHH2fJloXpc(y6Yy5YGg7oyo`pGFEI%#zi1 z9NP`pv8z{yJYmL1p=~&u#8~sXR)9qFd#Vxwkp=xoX z@~&3o0PvtgO96e6VsS|d72KI&k;Aj&Gbgqm-G%N*3XxY=x+uN{YjH6_i(Iup5i< zdXaoSDV$3KREt&tV;VvzoKjhB={N=h{Vxw;L8kU5#0AxsF?V>k8o`2bVV}vEs-B+e z*llZ zy1{(%^B6rElP&CoQ5=U;2iqW+6v23J-rgeC7&PW2jL?grE6>9zinUR02=Q>+oi3PkLfEcg1U&*BQPzoQ}Vr#xaG) zh2bCjk;N~4UJ?AT0=@uv_!{r|{4m*TJ8Fot%LrSUX>q-^sT?x zYvH8sHDJnR*DotCvS$@{8|i*C(SAWVqIp8!x1&u4m|ihDaLvD1v;!XDK*-GSZ|F>g zHhP_YT$mO_`0>M3$q*-t@KL6U@ut_PJRNu#4f(@3Y^^7OYG!^K)!Hq z4M)7`YcgZcsj@Z0v!9OOsP6Bu{FApM7Ms#WsOM%<-I94er`#o|9a4%rhE2^zTwbx|JE0_g6TjEz01pUra!%~ygV>ot!?2cq z^bTe(Sm()n^4N;ab*{pW$0elD8`$$f6-Wfz7E2(WCi=Y`@5j^2A+6D$NG(3wg0kI%G6i5ml zj;P$!o-1`AHrTnl5t~w65M;)8RZfEGDBCoM)*fkV0Yt?+baEKx-y%{i_jpy=@YrGy z*7A2Eyws^NDzM~~LiE+tER)hf^lA*{SOncBBZ!`!7P6U_WO^BtDcfK;`8W>Yttet# zWl<;$Z{+P;@|lACy%HM+N8x#w!7J6JaQ#p~>Kh>Xjtc`7QyC$ljg0!H=Q$ekUq}w4 zjhkH;B5a#8gFr8JSEND{@S7(z693y-YIUVO4`n6=2FfSN55M?C#EJ5QSN5SpH52|7 zpf!D@7lc2&kybX|Reynx8*F!jP3mh6KpJs)I-(xniMq*dGw;aL)oxY+~%>m%|SQ8;rqB+QV)nRYc|R5%aeTcU6Cw;)mfhvh6$o6}-I1*}`?qL?IT_#1g*_ zHH}VNX*dWo)Hm(6fS?-wzn&lPO#s&f$&F}!fNI8FSP~)y8t3t0zzhtld5QJ(jhXvR zh@}p5y>X`3n2!0ShdK#`#9>Sbk6Z{Nn?;O-ImZ*GI~o99Kmg`vyAbe8 zT`(^y#a&D<|JG`|bHM#}QN7bWO8d8+k$Z7ZPmfvEw6H{*D^Cd&A;1lGX5vkQsiRcF zpAt;LDZ$ja0)cZNoMZpB8DzFTNUgHE*HhGIaq`nKGf{$Dg9J&Pc*(;b+0R3m8%c<_ z1izn*xWeJ(X*?R+iNmZB85swfdTBdx6&E_(5D&I4dnB@eynty16GhP1!$8(4{V2ja z{T^q7&CLff2nhKu%t?bnOC}xx?cWHTSVXrwPa22733r;8NQ$Keiqz4vqG4P-@DF+< zmH3Dvy8JaN5(PyOUg%tf7=(J3=YKt-(23g;`~TO8yE4ctd-^lC4vPscu^1-;_+V?> z0YZaClf_1BIzbj&+}4f2*&?8vBPDhp7qifi++ZslV=b|cV|FUhYhNQPt#BA30A7O5 zRuVvh1F(;gX1#m34_ZE$wcbx3_&WMDMEHa@bAdct?}J%?uR~}i%zl5RR%wQ4ci{(P zH$aQDBpZ=S`(H+eJ6+6|P{)g;NaveKbZfE{wIk!v+wVa9>qpYHb{v9v21eVBsJ_F8 zp==EyYTpDp*Jv0+Fz=*?sxvnjOEu03eX}bGiZSUJ+z0DpJKw1Qn^NF!x-+G5h-V~I z3`Z>{mQ5X@C`X?LQL2>CQ+G8u3RVD-8YM-E!U-_caq6>)BN_&F!uKHn9#~+lBj(7 zdZj_##Plv;>n20)d+OqPK4hI#?{D~7LqhzGA8j^$;64X$pk63E`1^<5p`I?-$%Xs3 zuv^m{es=W1(#^@HVg+9I>B+c~_mn9S*&p#a&zW~N!Uz!_FfMjijSB^x4NUG)j5K#) z9|108K z9%qhhh{pmsJAWZW{uC=1i*;2kW)Gj54Wt7$J^^i)-Wq_Cj&uR9)s)~CRpHXmWy<8|@=1Ix19;ZMZf_%m%O;nX zWA?Z+9I9Yeq+s0!oClb=Tw3xKl0jR+I#JNtMHDAmw&H1O{$iOojL-21+acTqfWQ6% z|2MS8Ic&$O-GZMx)OA`#u z%ohQVV!jc(0o9I&)kU*l6(!RN;|);Zpnb0lmsE9whQp_i$5tw;*MYsOd!!t`*AEQ; z>lXfZyL4lpK^B^XK|q;I(tHh%{4@ldSON96Ro#*2^+_;85%S+kD5&{nn4mf!6%+hv zzN=f6E_H|b1vlqFD1VGvFJn~W{)g3kOkCNWQ5ZYGH~deo;v?38_Ph;6-2x)%Wh_9B z0D^r@u%p5rlMup=U^aB}oA#h!l<&*6kyUR`(T7-Q48E4tR^x9!AceMU$FyXBl zC(XPAtbI)D#DNo8=~K*G$K=Pu;`#JV6IW_rRMC`>ex!)VL5A4N=PgP5v$OI(X(wd8k~Rmm08FW_1)O&=I!nGqYw3?A zrc7X3s8*$DB10Jh1tE-2s5L&tTd;lR>Y77_C4)Y%ssC z_>CZDUg>v1l1laV{h&C}`tYL+{K_77-@oGq#Ci~fH9*v92~|(OAmWS=C6z_*#NBTL zYL+rGD>x;~4B9r*LN?;rD@2+;h|@e_v3>6+X}@jXG7kblfYheNI6BfS5dRc% zV4{i&{fX;o6FD&BM5XBD7auF~9-ufK`^^;%JxIX$XDHPD7B?`c7TX{RJh)3Pu#k5;dC4j;Zs*C)%}UAdu_xz!}DVwDcLEmUUY`B>iW$bLJij`oR)jSVZYT#rE!mW zRkGTv)8F15Mjn;iV2eFy3yTBIFcuUVvoxS0d|u^>DMi()wpDUz0%+<21IZ?Ga@^@T zSFx&eI!L2WFy$H?R0J}MD&S2wq^Z7L$-O09xh!Ucy<{rAF}BI64CX$^QP>Umo>=*M z_9J3{6lZ{U#uMau=OI*gEQ22t;>n;G_z!a~J^O^C|0cVwIk3zKFXAucV(qQq9Ks4hL z7L41O0RM*MRbbu3H59(06dYEfXuWdr-jLu&;fZF`hGoWP5`JY*4|F%*N$alQ#);o< zTf-s1Ka=1EVZI*wHm6rJ^%5{4{6oT5LN3y^rp)cN!H4mnoJ08DTWC5~Q8|~0$NWZo z@61dQiD!zy6^4QI&}|rqM`O$0sF*-?@q9qP;vtj7kazi0ntx^dBij`puN4`*u_#`p ziDorNU|`0gcoBa6sbLw} z7RGzHJg<0ZD?o9(8xshIPx1`$Fd&;LG8yV>Y#}_X=^(xzH~UX0?;3_AMro1>AY%~^ zGGxMQR^GIN;i)vi!yZ?tEma_Bp4oE@+(QvUcn%3#0jd^q0io}6caA)}lEO&($Lqf- zSpyQ@;}To`og4=!jW_Fco2{1W0t$9b~-4cLmw%Tm8l?nSADahbBP02AUn0n-C zi{R$JibbV{BuJ>{v7HgC1ZS^=G!U{FwLx*_g@ZV=RZejY!gr+$^45f|#eH7fJ?c@O z`o5~q^a+j{nuEO%@_$3zQw}EeX{If;$&4F92bn|WCn+9G9K#JYGRRvL+_vDHO@$yA z@EjlxA;-$BYKwq=AU-iADEo@I?vPk3)#AZW*9OYG@>jdQ}wdOYo*$fUq_TR zSxvil=AEVH=bOAftzAeCoWasGvap@aXEqmZaARn^HUAy1nBQI)sh4ENKFWG~oP3Fe z01@vT{L!4mReB?x2sN+Hgl9Q-@CylSC39W|`YdHR&nJ{Uo34;@xN5zOsH6K@6O|l# z(l)zUk`N(|>#W*^Z44*G2l%_`^c^Ft+Gd#uRLWez^fjgo#YX^MqW2E$b8KjDBq2LavyP-K^;AfKxsd=Y zRns%3s`$@9eK)Y6B|m9K`;@>SmtFby_f_A~mxzHKT#L3G0|S4lraL^k-0IU%^y$KY zRs)R{jY{eSn7J0+$Xy1qXZRO?)j~MZzA7F@hoT~MRO6$kcs8M#yNNy@4>KB(_Vn?g zEo%4|+~Aa`uV7B0rCE;ZD_0ugLwlqir-2Wu%jI~OYR+_235*7~K-8~^RL|)5aX9{5 z6!S_0GsV55q`RrEEFCMHIwKtcaGo^@@Q%Xhc{%V6m9SnwM5z@AHyixa%7J-hM!nAC z3_*;1!_dIAPl5`2v}#mZrs{vsX6|!`I-DmdW`~Zr6Q0aUoOhsPtzu2Y)mMlvGfg|^ z!X75^W%7@V>{LGLCH^uOu+s3^1>{XtI~_*-Pd_sjsAR${E-Q1SiR0s!twjwN`iGv* zEUfP1S$K7i*D|@ox1ckXVG`L)!cj7s^{-O_29B;opTZWZ7pP4(=ls2Hs7`3on3hqt zPcHk}R!`3=3W6fumm=)d&l%+oVy zv8xr1v=1^UiA)MIFi!$TF%Er6p4W!?{iF zNg7~|?3-2T&O#RM;Y>gW&fvKEC2q*c_IsC6TB9Ol40mCRK=!`|=T%yDRyl7vYVkFO zXfO{=C}NS@Y(G0nf^b@JXX)gru!rB`F6g9C76qM@>XI|upep)DbW*8|H4i4Q#SNa2 zeH!O0-U~4FsDr&LVBA(`5VC2&4^Ns9Ko$<~8nk2KiMNfo;ixx+(Ip(H+yN_Y`SEzA z8o#i8)9ggzT04e^BO?r#|7YxFgVXPEALXZ+J{B=IUXZR1VbxDSLe>1d2l+l`?##Fo zQZ2uqMg4e}QZR>pemrO|hRMkx($h&=9UyZCc?)HPgTEG#on&x4H-xrTW#RK7@o*Py zF%=++PituCjr&rr5-cRx*l(#UjR(c2=dGZZ2HEg7Xu~919j^Oz$qdtOcwB%ldcl*d zIlLE~rYhdWyX-*nv&nyWF+lfzaSV5|Am?#>V@+=L#ibe>KMjH`7j0i38_}$}6##s= z$ljX{17vl)<9gi%BeWQ^$4#PbJB9~~fQ=M%*%PNCSfJjS%Keg-PudXNdOKJE|mSSznZxMLLV5$4Z+ zu($wPOU(C_c`KnhB%0tuzJ((^s4FF(P0WNf_kf`~Ii=fk{nuv67El#i;B%`2cZRUp zvy-t6Ye3q8GNUQEaq9ec9$$nOQ+aU;i(wh{4iHOw-LQ}w++Fm6XC?2ar}-^QFHJ1( z;ZCOYxtm;)fh3~i{$6&Crea*qG^WbAoP&4|km!f5M!Lep!+`AU{HUhjnmB(?WA%^PWeWu9fI{*8u}s!B-5x5o)jC z#XS}+xv4&Vwenp&#u|eq^X=8pX%muJ>Ood!d4z=(C5+Mhzl3x6S7<0X|cS=b5)uPr9kzeAxMp$edD^T0br)a4R* z9JVP~F1qQX?Iim~5KvAo>ey@vuU$yBKEgDnLCL0o@Gr}iZ|gD!m-FBC_T8U*v!8`~ zqnF166}{r}tF@zC?(p3+%mgquO~)7ba^O3bB^2Ll0(o~id=uZtrWatRjxPmu6x#0n zGewZHTiA|$0^5#n22#qVi;5l)rsH!DaVnWX&$N+^JHDXeGS1wDj&GW{2_0YY7vv^& zd~^$rc6>Wrs+wZ%jZMe5KN4)UxaHgJ_*TX*IU;8y+VN$UAN7{oz`H2bfxl0qCWP3I zZ$-*8q2pU-A=s@|G7z@E#{(z49x%p8$5;M5+y)5yL6TiRF0wxmLZ^0osjkOwO{*2i zbfDvF=zo+Z#fG^t9bfHrDlp*3cYL?lCv|*SQGr+By9rV>KWA`I7A2M@4ma%w9;BFE@hqgVe1eU3z!MF&Vn z^EATqDsL?8X0t~hp0K}Mg9D+l11~Nssqa|mq78-{t~Q+C8PZ%HAKK&xz7R#`b+H?ImFH}H%^TO zuE~oVa<99+yka|`bM*5c9DN5luQ?sLAbIdo{|98Os%L%Dg0?w?N2xS_zo#yE-WjR& zY8Ehr2bPL=o3NR*M6X<``!g;T<)n&>9bFY%pl}#d1;cdHa@xUh-LSyY1CcDV_J)&s zZqE+f3E+M~g&CBJ$atjmI}rEU%Si8cG$jtc4W(Z8EBu)&0+>PnV@OA{?aEvM==H+U zGl3D%$SPe(l#5pn<{iK|xuJ|d|13;9M9(QGOgnJ(ElfMGc>Z@yJAhF9W^}PDAQrFu zUwhvl(dYa2eLZhUl01{lB>PGx*)uVdnaS>ZCP~s`GD&*&+%w(NXR_OTO!6^fGLvLX zCYi(}NfMLHWJZ$7B$8y3$RuxXZ*Q*qbsWd}^SZ8g+xPqVe1G1Ze_Ypj9>;P1KF;Gj z&f`3<^J3|Nl@9NUAn*d+|5ii_of*iIKFeQVZt0b9Gcm|uP({jRu3kv-#IhMP#UVYN z$+C>>!R(d{B|L2kxG&2CjhYm2vkuF&pl_!g#b3(I2h=zbm}+2Uhkq`_8rAVlW>XWDL!E4ofH8@*46Q->By>*% zuTg1*pw*-Z30v_G*(7zWtpHIH`l9ui^-QBDMM+2#%JH`wM)Qi1TmvKp?au0UF%mlB zS&R?t&^XG)Nzgd8jqc%{I7uI__PIPcDP{pmC{6;jDJf?aCs8G^uTv7+7OwBKUEJ0% zel~h?+qlaOgU0tS7w!JhXl>jOLDtBqYj@(q`^S*@Y5vYo$>3hN`RhrE6s>TrW=^2# zSM|P~pJr8&OywuhmJ!Ied`^q$qkIHGP;(?Xt>q^PF3$5!B9Qwhxo#xXa1sG8p;u0( zXuz`Z;)x^|pe>QYmET>CE^}j~-I?&HB?k2X9pPtV)b$WfAfkgg76RqFuX{7x?e|6YW6s2r zYG+lI-I1g@#BQkt=6jkQC&LC+W>0vjZD#M}b;$Hx~Wr=J{xGWlc?Xi0jDd*;OSy_!we z@=W=lCVL}XHfE7`Qfi@t=lQRvb}0WUUaOW!eWOqG)kG8)2}6UQ642bO0_Q&q{_`%+Dx#4K;f6g;gOB0{2It2nZ{7^<1HrHyA^PeWIzz@`jA_ z*Hk`6cxTf%?;xLxc=$a!R4s`j->C24u1CqhF6Ph@%X$B^in)h}hf4@b{xUc)4V zDI~HZg1L>{LlYI^I5;an{i}Lh=LP_edqU9Z4|ZgJ3<}iDkMoY~QnZK&f@ef&e)A_1 z4EQJC393HbE+mtvh!xuLQ!4Z@0R@WB`<5kDniUlk|83>pL#0~R1W2^l&f2dFg8CV) zW+_xy17y5$sS%Q)l%0-Ce(V1App~7S#Zo`FZms5LS*mBbFFMV&h`NPICmaj2N;TA~ zY&A{_9)*jl*|e50oH~!`O-*jhO*%)unU<+jUkuFsNw-yL51Le}{1T;h{$aA36V%V8 z)3bKsaAP`tQmWv398iL{NvM9bq}>QJ_X-LgVvHrEVL;VNzl8liG87F7d8*WB6;MA; zBEyjtWLk)c(r(0i>8QX@Rv~yKRW%#(Nof)6`uj|J3IpyR!LeM^UBvJAQY;VA~;p=!HAIr$+Qu2{q0^+KT znvaZ5TonD7jD(=2G9uB1G5VCuX(jUhV>gI<9t$NE7pVcN;GR`6ht?uwU~8iZ0A+@k z&*bz^#qUncBb{kvt=xd~B@Wq&Ci7%IFHQ9Vh^R>eVP{tnoXC>@EgAF(alVke0iapt zAl?})p2W3rD)ON7e``+ITqc0}-!bq88q5tQ$R1_G0AjfdH&mo*yLgQ^>Ql)N9#qEm zwHQ}6`%U=_*+kOhaPFC&jfHNdF_NPR*7r?*#Jz3VuX`vl#KcRX5g~jra(`fQkP!f|20) zOt^C;sNW8=P+pQ;y9|Mx?d=HF#qq=J!T1Rc7@_|og2mUGZ+DN3P0jDiC@i|tc)RPR z30vM1IX-S!M#4YB!y@@gN0H)2!)BGB=LD?x#i{CZ1B?o&`%8Zx67E%kpzSEsl3q)2b6sZo-P?6o zp0uiG}1saclnn3Emsv?BP&|u>DAk{Ltl?~HN{UkdQ@VY9{mYPaAaN(9N zp2b<;_2cl6#^HTTCqi#=j*rabFx(Z}&s(E}8NI4gPWAaHcYFQH`{wMYMnlEWq zg>P-8$4i_B)ZR6W4Xha|$kdlGRn^d#x{vP_=sl++**Aa1frT6E{Vy$C`^Z|pg1{c$ zkrS;; zlz&F(RA2vR)8|k1bqqk|v_a_S^z{q38`T&pXt_;i782YDQr@72M{p6UuKo$NPuRn` zuM%*Bytx`5&!IUcqThk2A67h0AeuEqFe8vlQs>1?#M$w>B{4fbiMVl|^0>Hzg6CO2 zTxi!#P}rKU2@=ZrM}tPCw)Xjra`2(!eh{=tMEBmoKx15Xeu5{4?uludB-rIX_8{$F zb6wrZ5=v>ykD54UI?HZu3i1wW3Un;y^ki4GZKwv4DG1tRh;-*9(Hf#8q=uamnaMcRZIbl< znRYT}zUWU3ZGx$qVUyA;_r_O4Vr*N6E_OsBX~+IAB{KQK2GrbA;skx~C0O+julO(% zqHC{WAIfTM$vW4>JHM!LL7=9i+ZN*Ze&d*1Mou{>buDpbAlc?qN3wY4ycfX)$}!D; z%`=vvEKg5A`m5-@CV$6M%r#7Ybkd*s^19A^e<|S@ok63DnHg)p%u=G*%v!jfSBcvR zBR+>rMo=2sIAA}$zGjfLZNwZpZYtrWEB|8IwtVEJi|ebAlHF4B)8$X9zb2%s&P`&m z)N8PI7(Ef#SeP@FvFWl31A@z~H+587-lX%Gv2=AbddJgsus@q_zY|A!ubcMe$BU6{(ykdN~J3NoD0nI)PcepQ%b?@u5-kquQcioi_INTzHe$M z+M9GL=HH+c(*wJG2$VJ?Aq5{(P^Rk8XXA}3HbzuXw(IGAh73C7c1tPPIsS%TR(&;! zJweTfpq|28u5Y_=gei!pB;Cjkai@m9paiuuyH;O$0w_{{D418o>hjqo{xO9NB*Mtn zaCwf;Ch{S9f~t#W`{e41B?7@I30k1?E%{QO)xYq==lK&KwTLWTZ@WQ>HhSM;$ba>I(hBK-VJVbqwCM%A~^gVZuL% z5(8J=al0gv#P1EBsuriJg)k>QwQ5oO{=NM>RO|cqQ~rEB4y8hAzR--+oj8UQ`5K%K z3cdky#=w<_wa@;b^gWOXn}4jbjW~!I=#I$67$>uO~xV{LmkEnt~c zue}LF>cujx?MWKT+M6S+Ah=y6SEo2@Z~EFi++V`O-)wqJ5OV(7TmQy7R3e{~#zU=e zU+S=ax6}1wuVNaLM*l_cQ#IvOO%dLtr&d!8D;3_KJIba%K8kC{H?~!@tx7{Jo;L8* zN(J-$M;}#B_P!eRmq<_ZNqq(8OQ8Nwde)7`R-o~qfXzOeE=GQ=0V~%XjJy3SF6ufL zjy84Awl@3UdkiwF)1}t_1xATYTEon}q| zWIFl<>z9|m3W%ZhdlKp$$J$Cl%`z(C5Lyr{GD?@)iwxT>T%ryM!3y`rBUb^DLL&(% zWsAL+fMR>BcNW4Bsq-o^b_Rjk$GT)_t*3hhlq3KZ?6(6V+X4)fEJ@>`+Ab=H9-I&8M@Q^Q# zrh*jpiNDDz-y}@Se;RzImW_+P;0Yp)>ZIiT8)XreH(><5k8G~WFA@kn9B=enlY5!; z+E9(3nhuGPhb-#a4O2Sq#TdpKua`R|J3<0sA@+JXt~2t8z%!gq6M1`JrYC7bGJ@7z zN4&1N3U%QS`$ia~yB8(X^H@zS1eKVSReGQw8Xc`Yi&1b_m#ZxkrmJ}aPB#KL6@;1|}-lQG?{)lli;2g@j_2{W%R~jJB%e-7X5CHPI?TElF^8U!>%z zj;U|i?9Mx3V0s5N_Z9#-%!0| zf9>FMpu2Ie46L<$w)`VL=-$GWCm_M!_Q0eR4SNYFkia%zJX$V42f7}8+a2*}^HL_W zKq8`iXk>)SOqa?%$D7qY-m2O}VF|!LVYwI7eK;>d48v)f>lz+aUE*PJ3^nlTQu=6| z3mpW#>)GRl$H*V9Ck#vR)z`el2){h42`(S-Io($Zq+c!iCny>qU*3VNEx0lw<1Y*s zNd-KRaaPhkv6an!?YIUF%KCdZtQ~0@04b@fJhWxnN4R`?ocjm%h}_Z zEAUWJ;JSlL;=#F8CDy}mWLCk#Ej9Kq#z~g4OPA=3zXoUDN^#yG#T2V&4U`L2Ppl%a zkmWE2FiHU;C6Ujd43UQtWEp^&EG^Qr{NS@1)IklAh`XJ?%oohCwq@S5Wq!y7#v@a> zs=QmlnPJ(V9i!Cw;MYy^)q~&*dFUTs(k1ud!9bRe=iZWsYQd8(3ZJ8y1!ooy*SUi5 z@(-yPD31y|XBsxSb7c044adB;JD8ezismu*RZB94k1#**tuX)_mKs8dxXqEhiDVJ%VOGJ;V`3&oQ1_1qm7Yj1cXfTg?%rrVo@9QWi zI>E79LNapGjJsseY(SQ+^kH-!WH16EmF2vF-J2SvS+XF<^0i}P^16I>HB|*^f*h`` zQTCTs=^5tcUTv?Bsxv0T+YCdd*_@u)#)b*Dga6EY9!*`NzQCkfGPE&&pX!vE#-kYt zE|?lthlgAgM;r(D$T|{nOZo(jh1VhNed;2|LAi|*vIQp0DLE{(Ux`e2ri$LhAo|S1 zx)iJTk;VTDB5bonSYI<5}@S`ZD1n@*6u5EgboDK;;F!~|5@RUjv zemH{x_4yi7pE|~)Y9hxgYc(SFWULn9ei!X7C0r;rq-P#Ygs&?p^%ff@AGhg_cm7bu zhu_7QxnSl#HA$n73QHr{aj6aPy%i>c=`oVkQkLeNrmuVP8~6369La&ReXkn>{)y8l z*!%4_h{k?emi5XC|M+$L!bw8$n^q4Q|DKY17Lsyj0^tLd6qImANGbtGe>19**KS#M;rwjH%2iz0E^ zO^!re+%i`8bhy!@f_N?|bRZSaN&fE+>xS<>rexr<51EQI2<=_~a!UvJjdd=1&2f7L zsJ-XfS;je_v3E{@yt7jgz?{+c6=Je2Lh+zr&x2&oO7#tpG$QG90WI+?@!H^LRA<~^ zDIb2mZJXq5OMA;%9lWue%YAlaL?gnVoN&{pTyB}9YlkF#S4ZrUaF-6>)!{PfyD+2j zC|3=hQ4GXp1P~vWt0c{>A12%(iJI^o?t02#L@@o5nPD&CY5;r9Nmle6Im`p%qT$=c z>U8UOHNr__A$M3RF-vv0Bxn+mWaL8=PvO~SAq;{R2~)Gx&1N!ltilSiZZ4CVtA<#kfmV_ymc$(Sgn=ygq<|{xOM= zVFk=j4`6(v5u==QfIbp2wLm081U(yOx3jr#laMDbBUCmxLgc$LMaiUFauDvR#7EP@Zb}8qT4WW775y9?jk`v@RgkvzX3)eaUisJ={P~cdHR!Q z2hR++-<-O#NB1ef382LS6#1D0sxo7bF9Oyfy4o-m*99nYv}LABtkBYBh4kMd1-MT{ z0?_0z2Mh!iN0i!%z-SLnJ{ffYnjCG34`9cLTwRb?Li%Y8py@Gi+JXv}NJ|214&N)l zq6V0KfFQLFth#Dcal{L(w;yqS*M*({+CAV8zvl?87%ueoQ?2+Jx@6n+~G(g+1( zoLK%?i!rG}?_r#*3pNa#Jk<)vxoPE1Q#3O>V`)wgnBEQkUC)*EH(#lO?JkQOjVHRKvHp6L340apYCM{28dR%a z(YbVT>fJ9<6W1_mp)G9@iKl+V?Ta3;C_8EFw4Ny$)}wH8YQXyfHT6~D)R(rObP(?+ zM>;^KI^gUA1T0dLMAtPvk*oV$SBWLL}y$a$LgZaGN^c~`U({5 zG2S`#<%ZV?AT>rsX@$osRPoK z8@Hflh&7S#43VtR4%@hcCgNz2s9QO~8hpXp7)9%>I4Z{u3YZ6;-472_KS3?Z(C!l1 zLL!Mpf>aW-sdxRSsMSHs-FUT<(pEnf8T?7=T26ynIFeW-$mI_BqkA?>N6?WV4uFyc z=MlgIc>f@6Xu?$7bD+Kup)MGCJRBOr=zsY1hii89i@R>qUwBdg0JozP_t$j?)8DI_-Jf_5rG8wPLE@?9tn>Is)NEt)zJs){G42)hBXMS zUQlJIwwRdD>Vhm#aQp^69ep}Y!H3Y)-JJ>IQ5Y^h(-RD(TpI-cgM6UXMb+=h09NWrN*AzxC&u=>EE=PSwcSfD8^OVr*5O#|PUxr%s_ zmuePKwyRfzq7JV6F(ePUa~z_$aQlXxN=5~O=Ud2b<7x&!r*p@PPkEFYsP$l$Il-+~ zpMboPxbV>tK7@y?A?mRAu17Hwl|QB;@gc{Byhsv|xsnA-0`@Jp!e{~pAf>cqOB2x} z;kylrZF$5YE6;|P9}zaP!6zh7!80-uI+8}mE;*tbQMh|ZghkvFUg6Ry4w=0@bm6|( zBvuLin}GRPrzu#= z(Dnz^!Pog%YG5ab-J94tl9`~Nkr=NnI!*QNqjJ%_9^eG0zwQA@n1H4g{Fl(`xI|5k znSgADPs8{Z(tMyK466e$OkVdQP0fnDxk!upT^L)T}2oZqgsKW=EsLI5G#hzT3 z#+dh8Bi6ak!tKZiF@*5Q!5I6;I2Wh8( zKYA}NwgqldfaeS61C1-MYh(&Krk&Se!wYUEFJ4YIfy6X)0_h^9q0OENcy+@mtDK2w z0%9gq=F~hSWQK^2RFAX-Dp`W`b!fo2Cl-@$Vm+~#FkAnim`{FG%&PQ{in;KkV$w1> zxtMn=xw_a0$WzQ#UI7Hb>wLv5+F0czu7V)3HH&8C2rpS8fCotP=vZwCOp`#u49hikWEP0e+g0x1&*1c$1KMv?=}&$v*{XQ{h$UjtzUhHcEBc z1KGd;Aw8|Z;^coR?GC{8u29Sd7vlJtU-GD&=PBZmL+pCl%HWE*x@oIxvDmlztT+Q?gwubZv=3Ms*4}D0AD*WkzA)Q=*8uu%z-|6DiAhHFNM?k;g=MT}7jpIu_JK z{zXoOS2Pralc?R~9cLs}YPChIq6ftUV$I+oBZJM)jr`3H(erv_j(kdjRxl0gP;%Ij zr)hyobp4S)pIX0X6j;5`MsRzD@(qKC3`4<8PFi*c5k(n#iGYYYOs^*4#%se~@@N!(BOTg@$z1Yf>W7No9@khh;WLnOsh3bVVX+NTjq z{b`Vqwoi^38WdK}VC8kVz$Yr0pyXH*P%1cJ7hyU1?r;E08xWZ_KTIw;DDxbh9-7^Z z^a4Q|t##Q9s^$vyF zyg@OFdJm-*c%}y`gR);yt8D252JTM3TLO8gDryK}Dyy&ooXg_XumhppTajb}d=W9s ztsjV>mJZTMZpGtGAS;$6`L5q(DqppV{#8$94pdh?|JxZ@Wd-%Zc z5sn;xjQ?E`w#YIAsTs?Hm9cg+zMK;=-sX^sS9UR+{o=oC1@mUkg`MF3FeBL11y&5W z@1+KyJrY6Ye+{E|-Uv-RgyRt~m-p>yHN#Db{Dlwmo9jHSOv~Mw_ih>Z0BIXj@`8nEeMZS|}j zC3&UX?ql8fO4Ad#NgCDC5*iqjG}qQ3-du2M@5VTMdd|a)sa)~OzQJr}Tw#w){(@g@ zFbH^>KG;~{`dxQ~)Vy-4viHQ5KIH?vVv(pBQ+Y}_b$8WCamEpZP)_G8%I~P4dgxf; zA_yEMdL*JLhCpU?$|1%KQoqX+xr7*utIW5w@%qD-mGUtC;er1~h@pf#UAQLGVfv+J zJ*l>Ovcl_glwcS^-yyhNO(=!H%st@GL2qr1v#(sf3R*r|RJhcnvgQ|B-{LlUiX2?! zprfW8KCg68#l2fLR&L^ogYq+5_9iwrGdr9)awT*oaXzA~-waPQ=3cnq2_xCTOmf2ic-Yy^yE0QT{^S zF>O2{V*0lXuZgq`T|NmR-9U=jD#`Gm5W_Tg&ld*ErehELq2|MNlAm<-@T=k;)*ZGG zs3WM^NUi44{y=?=YxSmAMD(q&fTxRRoH9M`5Ew?_K6+W(HczzgwQXG+r$iUKglN4E zIepWmK1vc@S5lXwC?XQs-YtJDlS{VMkcNcMWI!^(cTJSgVET78N;XHeFD2ih8= zeutZ>VOa*NhH+epZ4W)^rkKR2f9I$KNP5RFUfHCS`dw>jkZKnH4V!CF zy~8kdsjsk@yA+{+vyf9ViJ1q=j7@>L&#sVF@W>E|25Wy+C96p1e!t%&1M>^26pxm5 zJK$>*bwZ|{~@w>_IaaFCdH z-o%H9Lr^B1oO_MaR$3ZZo`lV3n@c1Y5b}J&VUt3ch$yxHzsE>=7=pI~5~0f59Rkn< z)e_Y9Tb?`_qzMKTfs(()MnTmCF%hI9m@>pfP?R7hf}#Y`u*Wd*_SNKgQz3sp0i~i7 zB|p0;AR3OvI3-AKxPQuqG7{&9BIuZzO!NOC$p89p#y(is diff --git a/papart/data/Font/DejaVuSerif-130.vlw b/papart/data/Font/DejaVuSerif-130.vlw deleted file mode 100644 index 4231f0d86c3f47c6c0aaebd52262e129c94954a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1839387 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%0A< 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%0DN~XtET8a&BP3=dL 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⋘8c??Jn8r?uS&)y`jL*` zrsKD|&N%?RN4JeRg^+MZoeoxo$3Qit}f?$=ss z=-USXGqTR^vV|`#<@s9H4-@oeZ=b-EwYhUv80R27v&B=;>DV*$S0=gFkV5{%4`6L@ zYPN4=zWm!&pp*Ri!K7AT`@|k2GACqK{z55UfbAbv7Lgca7VS5H?;7P!7LgRBIfsKl zXC^^aTOaTXP(!`FrUNnqQkbFu*Di3q7ql%{pRHQzUxnMEW-nWdy^vWTQ8v+~+3BB|s`7LXQ52ZBwr5PYNq!DO0FS$L?)PX~gvZD1TA z>lXOZfncx%dz!NarTx-@V5(w;D;)@y_5fcx5Db=}XF3o}wnztpnJogd7OV-@PI%ic zMIW7DKOub|4DG^9p1u#Jjgh_&rtF~S8vCqxXlMF9*kAm8uv2~1ZKD5I-F$R1wlM)e z^4D0hLLh-w7-z&Fw5eW2@cuVz1v-XrFN-FA7$p!CdlJ{t;tK0+&@NL!=_Js?0?DSj z9QX@KNlit{R2B6|H7Zz8I>t(!gP#5cIkPOfNG%(z>Qm@CrfAR##hjo78dvxo!&MNH zO_NQH1*+Q9iW1}mr6QGzR4P)11yYT28i!E`sX<8%N@`G2gOb|QQCd$|Cbg%jJx%Rt zYEM&p>b8xeP*QuE+S7k(d%9#MZHtH4OaIOSqBhmDn$f2G4!Z_SAjX+M!?uKwe}qk~ z%v>&y_Pj4yEGXSr1v^&SWP>g7H*gB`i7)x{KXm^&^#j~f2 z=Xf7`v?Ceq&T|{Z_8Y5?_c2Htbfi1eZ4lc(+MVh)itUGnWSoyj+L(Az){z}DhJOn* z?TrCqiALS&Zpk>_k?wqVP%Oeocfwm3j<;8uu;HEY4vIz4ppZH2S#_tph2eOEpiM6M zvr$8!u{&#RywV>4t-iC~i^Pat(7HSAnY`CI;+^+iEJhsXPJ9OAbvC*)-$v-rFRpRR z=@++7L;R61&Pl+|B%eQ7$!8UtmaJr31pV_=^O==ih{{~$-leEFO#@X9KmL;fjm?S~ zA};VrZ7Z{jbh6T#tRzjte92187(r*UQqVLkAX$kSBj`+43YvxmBr7pv1f74cl}_L! z55ETqu9Z@%Io&Saf;7ug1Rpa~0xyhQIv-2|zjy$mepeB{XG?+NrC8#sEtsP$)D_pHW!bq&LN0)&K7pL)=Umrp7Ot^+6XfiI1U|*3 zSeQC%f^d}t@;?mA%qOc)Ud=OV;e28e7ZAA6L#i`d&ZEeOx5wL^os<3$`8`wCXbogy z4&McDQ}>L)a{50JGu^Y;(EH}QK(0vm`YZA<$M*>@rUf7Urq-?@pFra208B<~!ZrPS z@9fstxPQFCD~;fjp6076%~wp0bsC)fm6|YL^OX)$>O4h)!E$Hw6$+Dz_|*rfwY+w4 z6&!c-RRbs-ag%0Q)_Asm3t}i=r5%kOLhUSl;~DtIv+KQ5f+l@e zlpyg7qtO=&f-HVf(|l(X=vjte9Bur4%`C$&Y>xFoR?D>KGqpQ*@q@88Div1+JMsr)ZB#0*>4UPiZIVA( zz_LKP(FR(|i9PYAkclBGpnoAKOmBIf=|&qW8_qNztDzmkhPlteY-fugJ#&YQJAsy# zN;cI6hLsH4nTizEsi^DYm<1nxj$+Yj9jI{0uAQqq4LL+^+<<2XBM)K@Y^$Or70&z4%Yv&V~ z0pf#`0{@|4*x;V;L<)3F4Bx(T2eGSXAMjwans=kLPvFK7+kn8IK7oNI`kP0O02t|z z1Ebp`fMH%o67ZVEBK}jX)c90AYin5={LZp%{Z9%sHY+P0%$C?{uwd7j1YDcAlw>8> zCN3pe$+d|~Nmg=g;!={8T${L*WF^-oE+tvXwTVlasFl)X1z=!&D^&K~1fqW8@qF<{ znl39~B@vweh06*a%IUiPRrF;AvNS2*!p`OMw=&t+Q?E1UgpN;W-wYu`)bsoD=lGBU zVd0v=Yv+0RRtO;)=UM%9BFOW%Uva`QT)W&r6xY{AjBpGOO{@`m>6+Au$Q6GIia5SR zI~Aj?k7tfe>E<8z{Rf^WFVjAehBUgo<@0EK#DR15vHE^cXvU9$fKto(|K=i(z! zziX~0iHPzNu*5APGgv>OCflpxnE``bORkwG6Z4y-H}`ECpijFcGB>8=dFXNgaR-XfrDvUpq1*l}n&i1FAMyGZoYw|t#Sz;!A)>B3T=j&m z!MSu;pG-){328=HHaJ7O%Y@3FN8Ym(juw__Ua4g*n3qgh&3&aTjOGggGv)WZonFF4 zv~i83?iB)M^S4#dU}_t$uzGcuxPUAAxo>hpJs$Ue&1Lh;hp$AM#BihPF0kA!V$qs2 z#(A_kscu})zBMr>8tbHNwW4_8nIDVhMY;&MVJGKt!@GvjsL zo7^#o)4R|R73sL&nm|2pwP|%uulxP})yd`rGr)}|QIZAzHVdfoUH_{p{;M_O2fU#P zx?2?n=me#7K(8iT2d5Zf%=8bpQj7gWU&-jLs=i=`F~UgmiqXUy=73wQqJRd2VADY_ z#F1i9mPu9$6%S5NR^rwOxs#Pbmf`edC2oz7J6S1Y8BR}D;?@Ycla)f2;q+uBZjF#T zSt(>0PES_i)(E+il|q)`^kgM&jgUK8DP$Q=PgdgA2)UD$LYCq5|Adv;Vq~84)W^EP zO2G{leLm0EiiKr-s|KLUXu>&m44t|d#Il~frY>{|cwp;5FbzGULiuP1P^!pX1JDUE z{oyeLxkA#4er5ndpNq*rg_1AsgsY71+QiV7Wb%O-OTIIrN4sF}SMW^pno*&A+(zRP zBWx*<+af4DTjDVcSU{w6-pGFj`KNgdc~Fs{JXE-f{YEc5igpkw6adRs726Y_ER+#7 zFH9g_A$iEt&^)Ulqt`--%rY=!8PT`9WhpFKguo`ATr8VNnVBI^MAMA`M@INXf=b^5 zkD(&Nq?GZ&GSVM!s3CTF4Br*0^?;y>E7MLJL5rw@jj#tl%WjNz-qYVCA!@{DlS+q& z_OA)e=YmS3^*Qyi_-Rv^g*E$)=D$r^%f~S87K9>B+~rhz8%2-DkiS)}ee=Y$v7Fat z-XgM=QAO?_TK)pXBJvJ;LL>4T>`hn_)-Zy+qD=yUS*SQBimx3A2|Z^{AOY%&p)pO( zI`M1QLpy|B(5E^B5*SvpA`DZ>$Ubg|HbX5OF#PB`ItA@K>88FBb+By5GPiaNUBBVH zLM>|?Gq((zIp6xdlkT3nRpX$0cKPtZLbUU$YNcGpId$PkM-VRJBT&)piMkyDpAYw> zmbJbmY-eKN^ZemwEu_P+`5K2^aJ`N)%2g$OqaPQ?!x$Um77wlR=tlW+^utMhGs67l z*<&Evhfn97Rx`99_tM(#aqqVOqOUP}>EHEE_SSziDxF^J$sLoL+<~YG9(|hNA*Tr* zXWDTKqNX%IxHQ2dN|QW{M2+p($Bt-RIsO5oOEA0`*^P9RXp)D9HjP@7I39Fru#TPT zeq}=9yPP{C;kJ=5unEpcIk68k)|V52UmoteK>>;x2>4#9K6Nw|uhkZ&Nuuv4g;9B6 zNrb%>0%pJ*pT=jc*hCKDzyNL%$8EY=FVCrmCleAsB7nE=i5#JU(flM1%RnM0aV%z{ z2VnM%jn!l9qb?IY)H2cID-%7aGSMR`lRbPg(PJhPK2Va5j)dF!6p}1pEU?V3{3Pe9 z&ps5)T%5B8ebSz)v7Je#?VNu&#kR8Nyb{`FY(Xrz*sA0W?#ZF4+>$Sl#_XNN7~GU~%9xZhgoP_sisvh^N)7&^zQD- z+D~dv(SX9=d-yv6tD0w*xcsj7;_|V9H*8>GP2G9fkoZ|{y^6!iX6{kW<9OG*xFWH# z(6*og`O)027K^1e(1}K+z|gb3 zgq?pViy;EOw|@Kx*q{a@z}r42k%BpDH!y7)1bQ zT_$0oY~d4Ppa^CMK$}1csE1(NHG7kcV9x_aBcHMBfx1l+nnh*~+6olEStMB3rXEca zSOmD^JD)%VSaEp-9kAOZBKU0@dmcdxHXBbO0;sq=f~meq!XzSqlSMoN+)_S~2v)SV zB7z^LY)vGBU;#@3$pXm&%`L!2Y++~B>5+7EB6KpX3hQ@(De&wC=#u=OkAdBB*n+)& zrHOa|yvg~pBi)?nvq}{W#^SvY(}0)J5K|RB#ZYA(2uoH1OH@6Rm8z@*VaZBhiK=I^ zQk8WeELjOGQT0q#sp<9l!b-1`nqLZ@Q}6Q_T43A;&s77^4atlhL#Hl=JHt>u(#?s1jOcPJ zMO+W%z+4-Ewi99q+dKxfEv)em7RrO$XV!QOw~g_$4E96FU2zO3-JF-WbaSF@9`Hk@(bhTza{ZI`_0?=< zN;fAe+oqcny(KE$oXA@#Al>`yl*hHXP3QxEz!M)m&=H=fKqA#u=P z>wSmnZyRGcCgL#?YaLVc)=V!UOGCuEM_p^7GE(b}UK!|p^Sx?!n1#;NqCx2fYBh8( zC$j*Um(;pI>hu7y4v|>zAhkZ|0N)WpHG0V+wP+}_2-~ak0pT}M>xP(bK`rOPG~)5N zP_0jMW=8R>15~pO*krA3jED?h@xp}MB!a*wvt8k%OUoGT9!+$k9N`q?c zBUFZl?+`7*g=#%el|#b^r=%F}hi-;~uD1sdCIoX_Uqbu!o!0g4Q+3iLm-9`r%xnu@Qx6zR?0_|6pZllvSO1IHL z4Z>%-jSfxG%rV`$etx;xqvdE2pFg~PeY)JBg(wJ!d;T)Z=AX27s|9z>0P3;f(wK>s zzIvPQ3QbP1{V>-eiqKjQ-EF3>N^3LrEyPtfOg36Z)gV14pFa`sG+j8SIJy)N=@M6l z<~glnie1h5TO=H@$tyqe9SmXnCyF#R*sP!-;EaVa2qn2^DCW_^7$Y6<;WHyo<$}sY z8Ps%r5x=EpfZM1~$58a+6Y0^8TMocJK`jSIY&9|#8SYjq@hR`JjOQL(*N??jpW`K! zFS!)^@R_)+jPq2xx6R#e!(-Xn%$%DjKWK|fHIf}VfAlyQJe~fu>Dlu6^I&j);5K^> zXCfpEBn$liTA&lYKn+5|TUZW&#eH6OsSOLcf-fIgFC?M{2HkKNgd||FL}=nn6|x@k zIF7&0#pokFIw2!YqOoG1sB`TRv*Qo zQHpKNV?swJ)I9E4P>mCIPCd!)9HgdSB{J=O1dh-XMonx>n_yj)z|IGt1vB%&zS;12 z>rx{3m~e%2_DzeuhsPQ7pAvbw0*-=CjnEd69M_Hne(`696#F&QLU)oZeRRY~Ge_(X z29fXTmp*o*cLDv~k`a4+P-E+K0E20b^V)sLkS#B?P0^^MM}iMZOoFI8qcfbGP= z1>BMC)zp(jrk6(>_)arMx3JcG^k=9G*)j^m_X&Tb%HnN|w4Qy}Y;3131^Qhe0{AOl zHi*8-OBp26Aiw&m6&UQw8*7MYvISH=a`_;O*?xVO$)(`NYYqLq*%r9I??SZoTDY{_T z8D7)&`SIsIB{Cm09GjrJ*4mG}ErHo)eHe|^_Ah?m>|P?%z{~_h^oV|BP|Vpn@q4^0gL$PaZ^#I{dLf=7UMrOSW_4jT35aYk zN;Sad;c59%BGz##AxodPuZjf(K6{v0Ap3h)kcfT4y9;R^7!Sk(BHs-`magCk1|=dL z)-aJRF+>6c*`QKr%_~NUL4-g6RAUX?4RDP@h8DO)o+NNb>pFRj6ENm;GDR{4S^yoX zR3uZN1<;X7MKT3i03E4RBvYUT(2+{TzswZt_-)}{&&<{2q0nO4d zSYYfYtXPi?WB@*3yNmI^!KTRA=b5Dm?lv)WljqSD(Oxv9y$YiNvcXsh@Jw4;MgzPs zV&?J94lRrXh+`8Y&3CDc0@$+lQ$UF+b6^BOc5bAUmbagd0BCKi$yY_$Xb#AR@1^jm zz=JDd;>)33V(fb+8*6xJB+TQR&VXr6n*wf0JnMj+!fXg=uk+qW12zVP!5ygi?w-nT z>mT3i<3vh?BS11wSz?GU*0ns8fG4qn0lwLR#0zYw4oG{*R*CrNoaE{-Svu z09dn|$di&dlCuZJEirLGz-8@r8hZ~%d(tK54NRw>kK?|lSv#7VUT6z;!{@ftFCS%2 z6v33kE-}qEk8&jK=95Z=sv~VZyQw{)YUT=c@bpdvX8OXh{b>eQgwFzxF&Q`|)eHBt_p5tzmn|qglV{fy% zk$B#7POh246quv}*v&9&RLBoDaa~|uL`j92rk_AF{T$_50fBCpn8@Lez~COc#2oU# z5!~}1GQmwR4R@lvm3W^mhoc!`PvYg{mKeU&Q9$>aspD`@KT8Fh-RJMXWo+iZ1Rmi; zfCOEW`sD{QxUtVJG5vAJF?UkIhG#)s{r4qa?YS=(K~k)vZ~1up(ABxL7pdUbCFYOB z8?xyMnUYA~y2Q)rtV1M##kOFzF?UvYW3N?W8h@R@j_|-rus+XVbH)4Z39UczqF&CK zSE=C3xJxqU5^wAhvmx=CeQL#%Wa~^t{h?3~1}9DRrGhvG%9%p$u90ms2D`-I6e!~f zIz51PiJ>XbAPNg`0qqGbHU-M$f=(Ck!Wh9k_!MXmg#|c(n-Z^aiLn7Ir$Ct^L8k@i zOo29@p0EH9tpqop(2{^PQ=q|gvH$^Sml%5rl*t910`O8M*qH(iqObrCxFzx2DNrUC zbTUAD3UoNqTHL^B)yDO0OU+Te?d)h&QNLWW~b_~7gdmznZSgUQd)}?l$>0T#VWoi7D*#ql7H61MD3-b#s zl-H)vFu>93y!kzsS4Q2hU$Kz^U&lx`pT5RX_6A@@Kl>)qy=Vzw+%=NT7vNxaxcQ6? ztWMsHJ5>RRNYDR-1y<=hQB7RM{0meNQ`%!6-6R@es`5jp#=^B3BNx%Oih^rI3uo0& zPCe^MoH$YWa`veAA4Q4EH9wd=j}e`^%lQvxBw|FnT#%M6BScq+T$DQLdQmwk$i{26 zqR^V_nECfaYei`cQwZ}BP@Slp;kxC;rbbjQgEv`%oOvp=gkPhDfF4Md&mFFAjeA>2 zHd%p{D=W_phF!C-Jkmy=F}~)KjTWHU+k(Q-wY$bPCRpwzGPOHObY3(@P`hJ91GPIw zRL&zD$A}mnx!6dxyB?w?ruIUDJ2h6~HXpj1cQsCGYd zb-$a8`+Hon(ax?NA=zZL{MR=ZZB)AlT(VK^zTuLMmVV^~eUsWP_kA_lr8WP~)g7aD zH<=qg=5bQr9WJpLB5QY(4`9p5_9nG^`jM+!Rl67TY!|&I{^63M@5U4vM@w_!d!n2< zuB_db=#MWRX?5+EqBBiuw-mkPan{vtA-W?Z>uNU_Wiv_&qqcT4(YXPSw7zyT(OWJV zQM*a>P)J79ZWLV+1J;<@4WhDk=XdP%c*tocb$WL~-6o#ipb59&{ZEP7O@PlowRQWE zzh5<+YxN;%+QNge_szK53Ju;n=HJ*0`~{+TPrA}^jP+l(qYY=feKE@hAfg)kKsZf| zI`c;!G@2W8q;w2M1L0DX#|7d84;sxqaT`uNm)R0Yo>%t1u@+b)D>hsr3dOL{FEd!3 zKA%ioR`INy_4{`xtiDV*rZ0?7iCvA{?hKfFR_y3DjC6L^>&X97qD;y(zuuS?0q zY)V#~*3Hu}{~oOT2U*TbjGxCwDhA+wA8=dtNZ${4eC zO$*RQ=87p$O=vk&peR-0;DEJLpcOb6!~pFn&~zR>ef9Xk(y z5u&ij$~l5=A(=N?`x^?`*I*Q$0I|c@vtr{B0g{}zYIKP92iLgacV9;@5?MwnH&VAu z@!Df)<-3u#3@)s6+KoGVFm!q*3;YW#kPaG)X4vQHs%-500_tg_i>8Cdp2`zAifA&& zBS56C$Shosix5o*jj{NXIi)KdG?w=8_|idRk5MEkP`f3Q-^YiS`4~qL(?Mg8edStw zla=#EM-gSrJ<(q8$iPaU+=@_l6p=%vgT~w%Ubj4om<}3yjFb)*9%CIjvu$0A%6PHY$g5h z@0r~)w-Pki0Xu!K4L3B0VYq@*C&s9a&Ir%JeC>sO(a+qS!Mks^$cd*qpIThK?B~GX zH9qV48?J8D+s7U~1XP%daMDux0 zDa0gM@tESMvf*Pj>wr?Wv#WAnD%w#0|B$O=hFR_64%!ExZ%=0spH>JoFA|%&1>^)QLt0$uYUO;Kq&vekZutSqfIg|!W zAAUCWh_>ODWx!p#3N!??ciE+b#uBH}@P{Rm4AO zVyhAMr-Q~}+eC%Ph3K(f>&y7;W25QA&r#XHn670NNe7LYZK9mC`?0iSI%phaHO3_7 zm6Q$BL1Si|80V_2!p-(pdm=~&jXg$bLP`gXM>z?>EzD;Ai^81_8gt{sxYI%77%Nrq z99WHNKo2 zdo^@^-h1lSO@28G3Z-IZ(?;N%b7nee=-cnKVQ^0|fx@w1b`NGFQn)Whu#0=8iwPK&Z);EbvdWKsrEf z8np1EtMaTL4z3CrT{Ima_tccY5mS>n9sweCMK+}aYamhv-#J7c{*%8a3gYNXD>Y!;LAbqJCED?O-J7rl8tG;FHK;SD?DSF_9 zhY51})ZM)omP`l8!?rOYa&Mn_XRnjRcgHeEJ##fd0J#SBC&=dp$c<_>QvyO<9x+V^ z$c1sVCmkU77$qGbFRFKa?S`Y=Std8YN7QZ<#aY6#MTx21AS!EjIzV0;(E0ZdIzaBL zX(jE)#{OyVqTj#hopn3Qjc(%9m8pO22CFd&F0NgtfAf1v&|MPy6dOZS!y=S~b&;<)u3M;0%`_V~}yyxerr}E6{*0cLL5{PS;WRriKO%^-&+h=v> z8mZ{0xCy1hB&(er*8o6CAYci4PQ)e?$zsw8Uhv9{PR*k>OlsL!0Wr>GlVlUu0xl($ zlVlUu0xl($lVlUu0xl($lVlUu0xl($lVlUu0xl($lVlUu0xl($lfTF&zuBD9$P*6j zNrP;=sg0v>O}64hTrNH{)OLg8D0|E%k?V9WFk9UDazhzquRO)%T{59_6?tC0fY2>f z_OB0oP;!o0yslG&Jh}l{wnP~DvX2328f55OC#_p%LJaugtgjfnkS0eY;B#qB@+UWJ zi!i=xmWB-o9_c}_1!h)%<{>L2Cm&h~T4af-y_yL$$@2>~=R9-3R;kV5A&S^>5s11z zdT(X1)mmKHy<`wES6wrZ-2baQo~4zl1NpLSPw6o z8fb3QyD{SPVx=l}PuSer{&{}@I=w&k_I}$-%pR!#sil5mkvqUwMPAYeEsOuv7kTsD z3KtcK+rr*q`|xFUCGzU7lAB2QzJLNd)HJM!h?QsPFCx==$(wWEd((4-EPZrsdpMUM zJM$iG;{Wty%ss%U)8un+;JI)hw;`z9gNP?B^A(G8{?jlHSIZET8(7A?1V9)|^nf6H zja4AuLQK<7hBW*EB=wvg7%JNik5>*nFverU_w|zz@vC(^NW|~A%GI*25vMP@J{XF< zXYAI{FAe05@jE-ja5w8}$q6Pb&sU;4r2|e|YGYn%KyNeLF_9fBxmDvnkYL95$DsT` z6JC4yGT27_kR59gcHUJ=!0FeW=p)l`hSn{3B{Dl8y>1e-E2A{N6O))<%71O#zD*Mw z2IaJni$ChTXT)j`HiNC4qqtWF0d0&`srJzFsSy?1opJLa>jS}<^#_u{m~>tfPjOmj zLqKmFnVcDI>=feZ)7qoOyMR!4kQjBUJvL0|Nb3#>n}VWLxC1qEZ;^^W0KA4k#t}U3 zi^epJ!2ul_Q!`c^kl%38t()@1_n`t+Q#)UVSeSs&)9# zj5}FowzuW?o{ltYy=cC?c!wJp_nWNMDr9Q=(}eX4E%uB@eFJ8%RS?W?>5zs5>jiE4 z9XZw4UG92E-EQ}|cMo7i;FFf^Fh;+#tr?+(^fM{yso~4;-UdG_YYyk1{VXN5&n-N2 z8RR^*#-AHx3oi2n=>RpAl{zNZ8QI~Py7Fy;Bz<9Vn0)oiZyv;Cvx-Qbr^ zuO4*w+YrmP&Z*Zj+opP`$&rfp2z`0Jov|9GRG2?!fq8xi-Efc<;B}7j`b63j=;V^*X*9k+pAzOpotNKH@6lS-585 z+IcQbyvhqWFuxVuJN$Ne9KfNJqMEluRO!Oc=3p->!waA3ZRboYP%?bn_aC@kdOPg} z3V$9gmfHO~h4Q6e5q=`a6{T|V5vaxFz$JLF?iENgXs6?B1~9L|0{S`gWJKSfY0I4f zKNh&(r-r#0AIjgA3E8_d4nE4(tm`J^e4rhk8K+sp(l>T{k&%?XPt61A_jM;Gf&n}| zC?@;+rUne%zGl(ra&v7QD-O)I2|4W=hw2ur-;)XHKrdj8kg!L|RS)oHm|rQM3%Dhd zpAkW5=`9_ zkK-~4wT_~2HvIM@>BfVV`-M`l1Syv+&%}{s^H8!l&n530RJu$nN-VlP1v8Y->0QW_ zg6)0_T42GHwK}KQ>ZY)(lTEG!@GO_+bT-6mvU72gIh$z@*vuhZ8wK71?DBS|Q)QR2 zHBBDs#sd_@*Rmc`wBtat=T`lMfx@%JzHZnrEPBt-ZTM$HFNY~i2AZFtWlh7b<_j6K za$JJl8(FdMeZS{&ao3(K2K;Zalbo84R9!TW*7tU6wOk zW#!DWxgN&)zUvfWUBWvh>~FHA(%^yO(vj-cqO|3&vQ(4GA8pNI{+m&E(T&bJ6?SO! z(!84*r0Czz2@hO?_oAeJDo*O?fKfde@4PNVcZyXDF}Bh<+|jXT*&iKrtU5s`dA*g^ z&wXZ!L(RKoK-yVmoF>NEYl45+T5Pp@#{Z$LZQKf9|4xaQyNVkBS`t2~p*rRq;4XUc z8SUYH_#T9_XA!9}71V%I375D0K+?JvrT7cx&X55r=lfDgEs1ug`)j~?2PLQJhi=P= z*}s`%Fn2zLF ze1yO<69||pT_UY?AaI}Pm^$nA z8g2a5LS{^znBr2w2)vKH8KzFRjTnHy?4CAE-8r&p2LQ9FWK5lXzbXQE2?SE-e5eC} zpQ#LD>eflVbOA6QZ9wXH6H+n*FdKqE>O^@jm;sp0y+i6goSF*2?J}D3-(g<iHKp5 z#yf=LcYSsnq0gPw7(>SL>5jI7>f@{(L3}@59UrPfxZORyejzfro_V(x#Lco+A0*&; ze;^lNXI742Fb*uklbABI@d^C;`R?tXv!AEdXz^*WLf8u&l|w89;)Wk9DfCV_cb0_?Y0VkB4VNvIwKx1fW3 zgsfcF5&D48%)L-yPe6n{Q&&Rl$j3Q#EqGXW<>O|wDVhH?>>wWKb#)9h>>`ek3n$4+ zQO{LS(3fgxXQ?)XThd{rK+B2|Wf3kHbDG@cQ%J9BRP(=hbK*Z5$QBG+JSfI}CcxPs zO9^j_FgZkx!N%3d66d?cWN3b?2>Y&Wb(pAeZUmK+Ns2FiERMbar)FzW^fI4~x+s9> z+Yi+Q8n&K25$8y1+qY-J_*kkvbOwN+TJ=*_kQc*zD%8HJh6sjEy$Kj?@##+wF$fV3 zkd1~e$6Errm<|~2XU%t%rj=E)HyUsu^(vGs-Y4fo0gSljC>Z&Pz{p721*!4cL&V?Y~vaeL$eGqy-j)grXu=3M^@L!LGjjKEwQx1wo zzxYJ!^ehzZ3!j`xZ=ME;CP%L0V$0FnKYdv`=*7%^!R zYi7iq=xG$$waCjG+2)Rk-51z@WK?XJ^!&)OPeB-YR8^?KPaWmCYOiH0tCuhu>I>{0p{9EIm9IMMz&FbC zRA8$&8#!h>8U+(%?l|^qK^2tduV?_Qo?jfh)Uv}VUt?sZ93;1jNM}SziJUMi1nu8G zSJJ#3i!2zUMG?j|g+eSwKiS$u`$eHBbFvWa@x-X2GulrS<_=(pm%x#Y(q|gdyKBbZ zCf-IYDWYLwQ`fV6fWHCBY4+rE0ykWAgQaJ*+%zlNB@SEBDk9-6)<|s%FUVGpKF6%W zmYR6lD&4SZQ|Rrq8+=!s6>lY|3A`qwzKO-kGW?K2*)n7duHs?&#TU&``jWt%R3Ve! z!9TZ+wT83ujVlK{pw>+%aq`e8d*%T(HwS2HQ8mLc%F(V}TXg;jnd}8to0a=_P$~?q zn(}*O(_0WYM994{M4=POW9TLaW~dImTicza82NS(dI)8=r$PG?n{UefVhs*K*{&l4 zptjN?e^1l;CWuPT+NUAq!(!^D`Zs$6%=u#rS$mq;H(`XGEdWg&W2l+WYrh%se0a>7 z=ANbk4#Uo}9aOz?rEKmTkaM}_RfV0+n@}bD9BLJ(_eq02rnIt5CAQjCbEk0i@5zTg zd+-k7->3G(NKXg#4TrEvnJMjS6QoAYSOOrs4!r`z8vVJ`s*f%`qc(EfnPB773 zOPD^3^t?y>=rT1BuuT+!M;JRGP?Gyqff$ys(G=)NHbGOM<3DB-b_FQb*-;&<9kk;3 zj(!4bY{bdhj1`T2ri$kRU{+u_=RMJRkHn|eo!TaP7tYxeA?V>O2~3%V8zk8b%55qd zsc2xEAuCBL8mVZcqQNX+Ia7xM2H}=St%kA+H%J<5q_GB6lvFeVmPoBeDjNTlqH)lJ zA1#!q`(S|Bqb-X|NaLKZNL5`+9~#%dlX{mJIp18kpkO!bghPmy&BHyq?SnR}gB-;kA` zlc9mbG}upx(0Fcz02nOW4V05!ec~NZWDNEmseHEK3aQLo?0Ca2!LrLhj~KO!2t6;A zwo~wpQGGA3pL)s)bO&QYM~4MpBDKpRz|EI*FP94KdwKm-KQ0w39vkf&J7YS~uErjt z(tan}(~^HvMP$b}9#GwENC;F0%_W;<5Umn!5$iVtfPux4swyu3IgFHJc&Mq#Z z=ovA?^Uz-?Uci_m(61Pg#xA3~p_awOICKBKXPo>oV@dNcbu5dPeLK{wDV{!=lvPzL z;137m5|m+zgB7siQabt#SR8F4XBlO3o{KF|OyGkH@a9Hr%w;*tiiQ$pMJ5+6)Ak}1HL{+znQ7!!v0<1x#rb0=s5zrG) z9NV<|O`VG>f%hZ;yC6#in3Z~5qf_GNx5-TPi2i^btvb}enxsdTf`tL`Q*T{FL=jx@ z1W?FupX*b)OPPVFT82l3^qh)RhIOfZbMS!R8|0K>ODu`N>>d4-fqUOFi3QO+EGh!Z z9iBG7cf3?^FX_6+vqBXD=&|`gs^DJ!G*;&UY%q0FFyU_nVAwss8RM2pE`MW=(ru64 zF`fz(0gk;Bb$l5*oIYU;hq$7)1~RC(ZqX&Vv1k zaJCA6`CBLA8_>$_-J4e@8O!&90ED9McplT-L3qtT4*1nvJWN9d{Xs zsL?F<@;i+7h_QE(svI1L`hZ@Dy~_fK{hCn)dXEJVd!JFqVZUWKgdThe-~pmP)%Nhe z9jGw=Hhzh=>$1q{wLt}USir!`-bd`#cpl_3=^bc&X7j^Fux4gvmgaxc3I~!}T*B=$kap<5C8@4_mM&alaI&0;q;kQn?yc0Va zm<{!E(oliV5_i6X(QXlyy<(|g-pbJdjz7eHjTnWaO94~_c>B37*!#r3hXJfrk;7Vc z81b9T$nv6#7=?osfgT3<-|vcGYAMPpp814ct;bQe3`l-WraOh zi4tvyc%h=V5#S)VutEViq$9v#%5& zz6QY(XH5z1p~Nk34O9s-+PZT^Aaca5R2I2X#5ajlihPL1+>}uz;-6hoB3Cp*;w3sb z?X)At!(7C1|7435EGry74}p#Cn%>;Tn;H*tB?Pq6m26d(y@-Bq9=%vZlh=` zhMn_JA?DO5_Z-Cf6~!)?Ky)CeQJyy=E4uwCNnDq?jbrCreG{wfWjIIBeQ89GgB-zt zb0aDSoI!38&^4kRL5=e48d2UgM+wq|PCJsHu|XkjF`9HPc2<^KzV;m^TYWvuLaV*n zS?uT}eGVS`7w6rB&bs+ws?xB;N}VVY zWx1GY{ZQpXeLV8I|1wbD8Jn4w1rvR)C#X9xe@Qx8}yFqo7zejZ2D7;dqo*UjZq9e5a|2om0No&_NLmlN`C)zh@ z9bp*quM-`ZwD#+A(GCCCi9+x6>ZYZRVyx8sMKa6&7E!z#d{~zZX2!D?# z-Not~wpQv4-D{q=D)~Hte~;)Ul&1W*N2f|s2SwYJe4fC+NAv&{78Cm({TxykMLSMd z4dL$*Jwt`}YxHx1dnnp!2=ZS zJ7G11zen^F6@IGG&k07!<{j+cBFeT?d^(A#CQu*QxP$$BMA^EUSpBR{W*JI-WaAEY z4AEAXer%B`LfhptQ!}HH$+`YaEVAe1xtk zi5*{HH7%`iq%{s~$08lhYD1))Vw zTd%I0zED`sZ@idKUz0fT;a1Zgjlx&eY`)NUBl_SAtfb+YhxbZ0Um&amYpkSdh%dN`)?cSn6Yzv@t}-P?&8{ZE7a=-Ot9EGe(iOo%&d8j{1@5yxF^AOX9h> zA5KU?P`g{^i&9f;d${bCn_!mk><3Jx;0A?q%fsPO@2cGL;2pty6`L*obh|pO!~O1g zF{WhutaZRd2R{Zf;xWk~S44FGxU{|x`nSCkGj1AoPkVRwgAX?$+DspV``g}Wcc;_- z-GVV8%;`a4nrkhubauOEy}O4&IicE_UvBxfT+ufO{i|N{t+qd)h-uZR=p1ALHNwx1 z5p9QALLvJ`bR)zNrgx2K;})Dwx-{-Lvh3Q#Dt5z%mE<9PBiiG{I5&)b8h5XB!^LA< zOq|Q;+k65(n+MTvju+*oL(`$nUO^a|AZ`VD0s$MKaP#k4cTlt)01uM8DB8FXpQ7kq z5IzvlL(#_N{|-gZ1K>e2ywa%y2|=DfzyM?I2RMRc>J(psJpKS2HsyKKffF>~h1!1b zAQg7h7NY(pJ}BCFjpOJ3_4AjC=i{ljjpGpuetPevPz8Ut-YJBgcVqy^gR>c7z7Jvi zIqb^alfPUj&3=s|B&FhVp|}6Xj`FZ;JY3!zh?gJtaoO@CW09UGjFHU89jOUoVce-t zaNTo~*S)2pCUuvbVml9nak83Q2pN{M9c1*P!ReO!nt#^P3S-_uM*B4w*>PrF zhvXwH^n6r@)-ppcCqNQfUFi?_rfHHTz)_GtWAduVtr=>N!fHETIF?Ix9vM3+jh9-`x zTYO(DrZVftkriybZ@&bW8XEi3>p508(=CVR4E4TkL22*w_8paj!Ku?!lF;<8twXhR zy|?CTpl1&r6wJ#hT8QLq*VN{%((U7_Z3lS#zb;gIzxun7J?oIFp?g-*5?{hz{-&{rqva^Fgo@*igwp+eZH z_DdExd8b8Ys3`XPRy^!dP!iLweVaA>5=k!=MyBV))3V{w-?iiEV36%_y8oWjkVCDq zMa6-59iw-wRmwT(Ik)qtVz|3%r>EuWVkrFZekrxLVhNuFWwU8$H;l-0m=#~E0lmeq z{Zd4EeBS~(0V(|~hEAcMl|gE9@|P%ryCK1XJ|pV%Z568=l$DqJvJ301dwU!p-oCN% ztiz`W)2x7*uUWT2&Ce=JlwjrMe}&bCXW??Gqn$bdL*2JDC7as3d>IUG_F&@5kiC!P zKaYdK{ZT|$m9>uggTYfz4R3tEnP2P0%_eI<>lF40XLKt{Woz!0jUY~~oIPV<96p^a zN5}}4d8{+%f<76~%)T>{8SFK);{_z|v#x_5LFFyhuR}cQ^*h|IyKyX|+>RSKCS~Rt z!7axne>ts;g)U;O9#2$)1Oi(xmRig!FR};#6yyUGsu-45$X5g{^6Y(53m9h)7?~Q! z&R2+1(83qUOuUB7lKqBfEgj{;88mxJ!|jgwDa?fjZzN+7sq74`cRacumR-vhhzVgfad+G>QJU%LBWaF5cWQK?aRbFh&itsTOI;evI80Y!8I$|O$-UI1Xv;?c=0+xwTkWieW4oGl;6x7 zgt&#%i!>tf1)`C6?*kf*s9%9(p2r}_zIkG?OvFpI#3^G1{ywOYTV<4L$k9af2!gDj z2Hx@TJqBB&o&T2_QfSRS|I%_((L(*?P0`u^PYo#*Izk;h?~JDyD4RN3LB4TQHDL(_Pu2Jv88n2>OA2Na#&Uu#f4P{XjLW_mT|^ux53! z>byD=Vq+@f6(>E0ZO*_p#BFeTwuOqX3i@B>`GXM-cPWz1FC@!0kiL|0P27K}i(htr zzh36r)G9V~>Pwn(W$^#ChUkRzJuCUw!{x>OCt5Ghtp(x#-x^|aX6BYDWI4q~O~qeb zL#CH^kJYuW7rmqHU()cwLZC!Wv`8oTUA#KXc`n0tlgv8K8t}2wN}B-_O>6wtjA$v+VO} zIR8RgJ@5aV&E}Sm-ihRl3j!KRa;Sz(^%42|04nY*?qlI!lLSE4Iecycar&5Q!AJx3 zPz^an{oa2L1o?q+s)U=tG*%qK42?ac&!m#+nxbl2!)97f=cwGVQq#iSX=Ts%7)IhxA(; zW%>=nc;2%K4XL=2r?FDgbv61JjRc(vC{ZfgK?V8HjNa7P*U=zxlwKJRga@DJ5SLY+ zsGxaXpy<1!L-xkA2~fGyU#jhL*gg%df*Vw=44|VJdy?@MW0T`<%|#WQy}sO`$cn@& zeQ1fweZaP0sD@;-*p_@j3&>?@yVMhs>FatQqP7`^6;%HLMd}@)8p7HIr;3!Qm|;2Q zG3Btgludo1hVgk!HKb=H1{?4EzzWgcYm5!w8A)WvD?%l}ZnnJaCGi5HaW>vPK}cYh z`w+v=0G>od+XKPuQ^co8t8q|Ca?*@NP<~?!0jZKhiJBr2U#ZPlskuX#YDdM!J6aL{ z_G8ctaRt>XPy-` zgnutJ6x#sxX=}hP5~4*cjik4thA74nVjDq3YGnDahIlvLjS$-iB9=CEAW$~^d*ozfnyferE$Gg{&5=ax?rI170?uRa@n1kLLq8Q-1nc~Q* z_eUMumkFoNZ{U^4hyi*>KcAx3)DXonjphIYSzu&h7_l;&`o^pLgTaApqbO=>NWu7u z8n#J}x%M&q0;nYN14!a|h$1*b6XE2ck-!!aEf=OC@CM-tCsM}()81=T&|fi8X!->> z1H+Dja|d{Gf7d_2a5NW*xPy-Z@*PF^tVj`J{m|4^uh29$^1d`t9eG1^8bcBd12a}f zUK!QnjNEwli0NJTfM6o|L9-_mk#iJU{s=>lJb;XZMWK4*-7ez!@_2xuY#%;VoIfl+ z<76`xaw^JZT}9|{4Jl;Uc6GPNP@~LSjM;C%wpLLKJQ4}C;{}uY(F9aQ4JkQKAU5~L zlqt$gk^iSC;+T;7F6g_I;=pr3W$ISvCzlV5F<3x19bWP4j1;>fXLS_C=z%!t04%o+?T2q zzG1J0;T}i(-Y0@HogRsT)U<{W%B)ekm?HvWEa-gU~spuypYy_WaID%hDT*^Tp1zPZs#@ zG(s%!iw)aN^b|UzVFIc~p-xH_4+|Z-FDH~U>INgHc8i`%42ZNf9vJxjG%92qGdC>w z(hkk0&ROu06Pz8f;B7Z}2Wo)o2i%gJty8h`)Pjti>wfc$5m^80t9|oNsGG0m&fH%5R#YMAIvWbr^*tC`Zqo>d7S|e9gsN+=szS4cs@|$-RXv4B+obs4 ze{-r91*(%YpKis(aAnf(4fNTL!r*)_s0=Sc^WZ&PIy4XLTskae)iqe&a*{zA_K&b} ztIw-9;d9Viyn7RlcUgRST02#Qp@a{2WOB7{(lZ_PZ26M`_>KeCiH^ zA3Qle1L;zInJ3{bYHj%)6Of4CtjSshB0bs8rD2E2;Mzyc^4#vz6we!dsvbJoyWu=V12Qki`u$^rSfh--WLSRkE8bFegOq!ctT) zy;-4H0*gTVdKbPmFYjB`gUukQp^$B8s5J%bi4`YX1e%5)P+BV=zO`d)N?+_e%W>E0f*{`;3J=Hl4 zj7DO^pW&N!A-eOUQh7)f3WVJ#Ww+z0Il2-~n$N1E8Zs^twc zU?b&h;ttC=A+)@A;Dp5!u61cu&9uL~Mj@>NNbWQ?QSv1d&DCGT3pt!nH*;%mqr+H5 zpgBG7fTBv2g<%&u&gEkpU|MGipT$(?q_d;dqt*ux-M=H@gZ!5%dR4+hC4X02CfNdg19P9qs^O3c5vg-RS%OLvL2{1&bf2yJG^h;aq7{Quj@DgFV`NVXPiT%lj%DyL6vd(juimOSG?(s zB2K37I0RM3={sn}bT3MEKhs3|j&(>+{@Wi*43(BY{8KzJ7#U4rH9wC+5zq<#ar%xs zu*w4=H+E6q5w#oDk55NT#_2mwAwAW5MEoiM_2&>!#^^ifBBycsj&0B+cEK0Yz@KyY zj(g0>4c+IU$~b)oZBAcr7(HXBJt#Mf+SECbzJs==hu&gi)VcuEzPNJ*G4dtPMEVYT zrMrxd*kzo^E8S%Jj%zTjJiq7aTt!(0kg;Cr27oe7-*E&W&S9LY1Xy8{d8M03-?0hl z3GExURQGx(^GY|7zJp%rw!Esw5%0k&mzg zvck(X;a9qe^c{cybl@|X_J3qL5azw}zrXKz1=C)5%VQkz5J3L^zGJelbpIpMf%Hn} zS;36UV#U>mTpp+I*aDErOb0rvdC{q1mm~b`(}9zDrJHcyan!(+Hfz`Hl^i^d@!nyB z2L1EPo5kYSM!Pk}>Pq(Gp!l8~{$8&3mq$^4b`N_i#8NAYH`~toeK0*`z^wD-J%k(H z)!*4f;G6F#=yQCWED~>(YYyLdd@v<#cwMnJir7B~7Qn|~;L)+)Mu~t!?MP+6`-5NQ zrhw_6d-wtY!ToBz*nY=6@BQG>E%t^0VxCtm9xmM+=+&7H{Pki%b)_`(v8@HUyD>y< z4Y4vKh_r}PG@(xr!uBwuTL@|TiIn&4zAKbx`*aj@2nomRYLADtje{&O_eRl$kk*LB zKJr39>hp-i7C@rcys*|K;srtZQ+G@Z)w5X(-^l4jqR*1#o=w3#dF+xOFA@$m)h%T; z?IWG|^C8ipSoKjup@GMPRnUjT%=lf~EaHg4gVbV`v;N&+2Dm*)EaUQsw?Igqi!{Y5 z+;^~elf@29IdGBIv4rHI&qff8a={d+i^Lm?Jt5=wOdCTvNaA~&QFHR9)o_qDS>nEG ziltVvrzIRDR+#d*k*P7cgT!)WjqX4=Q$P_a~qRo^8?qTy&6{=UlDZ zQ9+yt`kS<`*-u}2>M_z9g(`pAw{*~0rjL#0j4PO|2C2= z?z2%A@iWPi+43_*Q74DQN0@p2-8CNVF8liTAj1VEjqYDwn0PMC+k zRa7F;U2-9>yK0Xir(KPyVv%x6HzORk!%+kzP*^%S6AEC8Lc+nl$#9^-o_IPi6?(5+n$$vVoFujdxShU0*)tpGYEQb2h|r8fUs!KZ$n*Gk^1M{Jh(qk-}ZI|}88gclLn`Qfs^ z8KiYLC^IjSB}Z+AfzI~R7bops%JWB0OoDV_R5}w>@T{BA;?V}8|A}8|S@MVX399es z0P3mX43#|E1CjgATmy_c7Y}W0uwI>zQg2l)=T(hL>gI}Pg7OsbOyxfki?xp)F9ztP`MDcP3Kpd3YZKvT?CDk)!gr~94G?(y{pq)R=c z8fXz!;$O`cNe8nwceqo3DbNB4_sTghEU!QCRnzd8wZNlR{D1qUfL^Is^$F6^b_-bER z#Ovvm-~$=vodoYlo=#u-eLgRE?x~dv&>9(((ZM|%t8XmTO7Lr(jC<0-G)q?ywB~yS z(=`*$W1KdMm5$OVrs){ypuUoB2!5(Wil4QR zR2XG=P=@5AgD*mpAYRHk1?-6#V~h^of{pHc|4eC=r|I#*@nkUTw{Df*Y7KA#;CS69 z?w#8$jMBw*L}QkDH5*9FJH3L3myhD>IBagPQ-rnhi&L)<=HN0| z7exh*w+-BDhQ1Oi7e*%njvxNpEzrRz6Vg0`;Zbo`7mYG0a6D*!V-A1o@xnyRq6V9v zMeeBIW@(gtZTty=XWJS(|0qhzgXz&G1x|aq)O9D&&rJ+`iAGPxC=<(2Wnl2IlJ z4sTLulu3eTX2UTWWuoAEyv}d@nplP^tIrJ7u(qX(c=>;l;MuQkSBz>W3eJ?CyygkK zut2A1tXj4$nE!9c(CK#ZD+UPacUyYo+{y2Pc3gyR7A|*f{AWSlD;U&UMd2o%mZtLm zGWi1@#D{=jl)hw8z77N>aBdqk3z)||TRRtz<*VP@!}+%V<;s#!8`ZX8_-kUg-7z$1GuQupdbSE(nsl%G0akk1CMUPI3`>$pVwQ0bhlw@Ga3XO*N5nI^3euwba9-Ge2dO%i_N|xCA9fg&y&n~trHxwkr zmZ9DggK9804D=&Wx!BAZ(S_?+%c1T<$)#t`JG?*L>l|L_>EqKvj(uc@rA^#Y|9t|D z@_GqYOz^OhOk&WblrcWG3V8i1@6Ii*^Tjqnu|V4R;!SSd&DT?W>IgpX`-~X-7D1lh z@D55vSmsip9yn=|HP0gZ2>F9tB%cmNnZ!toVi~ipp zUgo|- z2O^lpz^X-ZesnXAorW{OyK{sxyg566!Eue@n!zj=%9o)V0O{W0o8bk^PDQ2ra({a? zSsNNqt9;>o&hBNxS{EZH@7>3bS-jCZv5XXsNe=gMcrktOZFJ~|2k<|jRe#+tpr?Ny zy&Iun7m;LCrEmHOz|{@UAfhDiLJ9)L;yDSLnAC(FgjPJ~_WEE`B{zIHY*jFepy}T` zN5#RLquut52x#m%qy>Cmscnp>1nA4|G|C(Whs$h%VT)&*hm7v-b4+a7M#oct)W#{R8J$ULu{D2$8l(#AZAldIsGbLy(^P)!AZCy0+n zjK=F8wnik@#e)%`t8awEn8iDa0Ud_hQ6?F7V&4Ty7SGT~A`HVrraw3qxL-I+WA~hELxQsCR8Q_)(4H~gi*99|_uFf&nH!u)tU3 zbs4z9f})(S1{2>43#k{OXweKb`GHDO4wTo>LlIv+de3N7G#~V{8j|3Q07))cm+RO=>r3-TXglrA_ zk-oH%J=E^Q)e3;72hGx@Yxkis<=I0)lY?eC^=S8@F{PCu=83L}rle(4_n{dEhz5t$ zpm`s;sQb{E#@^<{`E<1=G*Z%21ctNpF3@sX&@8uZO!uK%wH!%O(0qnnH{FNEl-?T2 z_H|7#HG?yR?LIVv=}4Y+MKIOD_HFl}88(pu4+%l@5J_$Kp)utwjf7{qCXkZ5=dSzE z45lL~4w{d!b=Q4pOd0hcX;IMJd;>zC`_Q1$y#nn}S9nwF*tXAoXog*+!b3~f_)=F$ z=5rsKUPik}e57kUDY>%tyARE9VF>!BD?F(#()!(pX0RN|x~_3k&xjdtADUrg2pZGA z-0Kgy4~=+%}p)oB-67&vth#4f% zkPU0MAS8y|mcWY*qs4ltw-x2-9s_M3a31lBiW>NIz0l+xckuLk0=5h{N}fY zG%*9#i00Kbwkz!&CYOjAcOM$nawNW>S&|gF4-G1X09kxN^B#&>>Kd6s zmHYJ~iOk~&(cmyJD_Kr%%=yosLoNz>2BsS{_pv@;XI@ab{e-ML7Lgokq48jmW7c#e z4;GPh34N}v9)l$>l( z&<)Cjv2UvT(5z301_v56%c=E36DOwR=mSi;(>%b|RuhplnG7-zU|-e9SNx^B55-Ep zP0C@PRfP;o!#KY8o++TNCB*K*Sqq>124UWW3$>K>U^<)+DU}4(9m@JcP zcuDeaNLj(td3fsvq?&3KdCY@8Bt4nbDymf^hl@`W!Lp&`;>X&Ge0r)?N9llJhBA-@_vRXxkI((U0MLw+hNW175TJcl+`LS)Zxq2D)MQ?D63UusKb}3Rpir(QC6$SP=_y5tH`Gn zqpVhup$=cBR*_FDMp>;QLmj?MtsseNxU(!g^^ak5U=wmQU{^ zgCvkiykqun-9TkGMB5J&H5!4ll3(n;;5r{8#9=&L!!0dDm|uQw8*V=zBf!C*4={fY z_RAW%Z@Dnp>7L=EMV_zh4s0o$o|&?^xz%R@!5@_{f95w1IZ@t&Vhn9oU_Y6-JXZlW zJR9YCLbB;RM3ODH(6{f|u-SWC-?`XF9Kidqp^M#h6&EWJk21PXBXX9hv4uw3-qz<| zY@OuEErv(HY}NNhRTEj*;>|Q4Ua8rGL5|#=0HwG1jf?c#Tg9-=Ntr#$oAWH_DTj6k zB(}9Y4fYy`)=$~l;!lGOua#)okSeb}Ld!+qzYLv-r;hd%l#?)Czs|7(??ZJM@xAPK zo(fr19$UOJ#6KVrygc>=?`71e+G9>aeyKWH0qb4FTe}s6gt?R_vkuI zi3K}E9U@sFcK0ue?L5r*n)HgDB#pbFPmO(L+sVsZk}ea7+_37tlGot!rvFgvp{%PzELu3~S{4xspp-O%T+ihb$tV2M&E^vPfD1Y7;9VyoBH zD2;%aJ-*)H|`AS|C$W!TrK7S~7B%b!j7Atb(&Is*e zxV+8@t7>fZHFGsA&F?!DsWe*eglwtHhA1jjI@rNyS`)x560t;73W+=}Yw;yy?a)WQ z{3U_4ki^8U&b{)6DRz84S16`Kpu(#0mQy!v0smk$`+coW3*_)O!2;j&UQgw~cnW49 ztbg%rNP4JqistTxHts81C8)+*umg5g*&0D1;}>R5D~nha^4gcs#(^rREU_&n_VIRQ zfC}hPi2Svt3aUyp&jj*&b(=3zve|2a{IVnqDmyNqIajw4AVpgSbH1+LoPWWV>sj^Y zj32P5F7%bkXzYMFXYFY#=4j#w%-Oj-7iCJRY!1MjjaT`kFc#9x-hw$>Z!0Y1D<)Wg zW%|P(V9p~U^G)^UjGs6?uil(D!8`Yg^_EMq2j=X%D3=Rm(Vqx4f3>aRg6sjmIv-bH z^HLzchb|HYS`e4*L1TG)B0?Y;#7m z3l6>GgT@H=GIWN0JhTk1!}@v*5pK-jDUK(-#)bB|rUPCv8Bejx*5?4OYr+WkyOcRY z58&m(j%{It`&rJM0a^&{xF(Enr?|AZxB;t4+chnLIZr-DC4YRVz|ZP7M!2$enxo~K ztWUH}gKW7bh;XL@)Xau!>gn?7Q`9wKggZSbAdvfrFv6`0nYbp5a4SRBpFdxItqxQm zJt&{`Q86-cO;saLekiG{hIU+&YNGI`1u#Lv+K@urAaOx%&c8_%1i zrE~aAJ%8+30`(laJ4F~}G>RX?`kXOJ%V)Mhyvi=D+ydUO@)8-G_z8;2-041u=Z3pR ztLYh7wCjmAozqK+U%9yRR+cCfVe(|sDZ%Pv!S9!Sm0fz-m|~STnOxZAW%Ji?cGt@C zTYUK0jW?^fbaoHKJ1PxeF+KpEv%s>*QnUE=NFB#I`(+b_BGoXDw?pKpu4RCyqWgJm!KTP3GvHo_fe|m z+W99m%kBq>N1J`1+lk=)?i>38Q9H#?Cehs+6M5wrrUEHmXr~ytHh}KJ1W~zJ7}^?) zrJ}2eD0KbVcQ93d8^ZT|4c4052+R*ly534* zl%e-ZtoladeSEXcEku5(m*X8dR9JwYw0#WKv+^~$mK$&+_yxx%YA0zqxhB!rG2}bI zw4w%}M5h}cffW=yEIGMWJki977BKL=!2wVtE+^$T7CDnQFu{*z2O4u_MNh=>yj?<* zI(0eyB?lY{e%{ab-9cUQauUM`!R7HsSpDJ`##f30aKL-F{t(1FaBD&(9pDiEEr;j@ zY8Rb~U;*8Xa#pqYf$yy4SyKmxcf_Me9 zpUKmppS`t$?Q6hWwK?K>`lU)^ju4lRCzH20yIcDTV(|Y9THA&4BU+Y{Mx*82#vF@d zJ3JEvz;T06NYl|Y_<_dAOr>ef)ID^J{}a zH+dkG`VkQLKSROu!;s7V&^d9u@q7iF*62Jr-lV%N4wLh;!g0PEz~KK6w~!8ngh|by zOaf^v{$G>$LPRu}2JsF7X>2Mz^2N?4!KX0#>qV-BEb4<)lv% zf0+)Z_xuF8r57k*+H$fO9fJ)2+N+q|p^(9J+o>s8&=(!H;^>lCoDG8M(lNQZYTsZM-+N6O=0n!*3q(0CTU`Dj!bnb87K&#qBrWylID(k|QY z&^wZAe*GcvSXsr-D4p)hyselKvu#o~l14G4vOnLj!FD&IMbainG{>s%x54@rIuDW< zPYiCyvC{EXTQ)McdHF5r-hi_s^ZfWi=jQbhRE=T8s)n!45xmfskYfEX_W@ku|3Wql zXKWTR1fiUBzuoX>S$2l2`;6e3M#n1g@l&zb?E<0qSz^3pee&FF{2*t}!DCyyV0k?T zelGyWQuELU^^eW%HmuYc!Un^#}o9f_)M5;|qNB z`ZxyI0PP64=mn=wPSPCle`@wFHqdao$>h?lRwYAD&=Rn|IYH4i7IdG#&B3H;cxu1_ zg*kkf6?U%A3E}54X-(bZGy*WbWSbM65P+ZZ5`{(~DFL{}35TTAO$u`mc$1*X2rdEG z;gnA8w&I}b|LkdlRYU*R$IZ>Y01^McXy7y&c--XxNckYf8yH-_q~4yuXulR4jSlck&OLL=5!MOQ$FXWZ zy17VQ|2|jM5V>C0rQ-0oc!M?YwBEuOWba#)Zj%NIPeLIuQ*z?rCb6G|BLq-yH9bW9 z@4kXuA7Ys}NQ2(dg&}UItLe~IqS>Xmm1NRx{_Ti z2oSF&U4x!?7x9ywIsEOpwYubmoYf_&Sxo||Z3)MYV6`@d$iM4$8KL{KBgJ$^@MJiq zDs{qI280o>%%LFzH;n`-_pJf=#Ia52KI7I=)v+gm_|*NhD2IWFZ1sj1>E!LeBObIcx35ii@_ikNWac}AC*J(~@Oaf!vMuZK?&%F% zrd;$kh*jA{#rc`#)s5}dAMv*QFu#tUu>aq89pVc7)Mn}SlcD3cO|v?h`$3%?z??)G zXywkg(QqF7iHDaJ*{+qgr_%xEcnl@kcd_MS~ppbh>4zCRkwQaWT8{?cz{RT)6+kX&nDTv4r6aeaq)&TJC z6emj*Uba*|8y&gvuDBf~p+A8)!LW9ud++MT<5498l!h{SSLhqBz#s5;ijF1jWlMVM zV-w4MueV>|jW~$hESOA0h(d7_(tEP$_}h#FNc#K)e06|N6hlZV+ArZt*OlN}<+0Yx zIypetbw9HrDW}d?nH$HO+7%X>l`9Rov7~S)y4?C~mw6mSjjy6z0k>gR@~BRjydA+y z7APcvNh?4SE~Z{6bH-$#+R`SIa2uf-;zdRwns9kvE3E|gjpi<4=FggY7?vrQJ#}u<`E&Fd?Z8hGDW#`7|C&>WNZyOI;;%ZKiu-gb?g8QM`o)Ws4heTB zLg%ldVQD`1XsWh}p_Xupr0M(_bb)fO`c)GyrCx24&5d{Ffdtvyt5Zon9rq?}yA{@t zzozpia+56=wj1u3FI?KAlG6))VHQ$jaFg=1?w%}6K2q+zWG+caxjV8j`S?uwy`Ib^ z2}gt*_kCqm!jW>f66j45%ALOuB!b5-I+;zX9N`|R!sGHLKw)%J&64+nYbhevV%E z(<^!2h8k@!>d#{}<0#)yDERD^67xyk0;0mqGk<%!R5R;GmX*?qwox}!%RJE*sA?5C z)Q$L4*9P~MAX42f3>rQSZWzomRx50}VK7f7TyJu>e_T8bSls-k)(b34*rU--MDVbU z(>5{(?jkeP_h>f$v3r7eUqxq&!yK60DmR9cXSC#I$lXSYlO=+8Q&cMNjSddMYS{CSH=HzwUK|Vba}fs7@YOCSMpgSy~?jz@Js+JJN@h7 z>*#TKey|~ZNILS$TgxP7Z+$R_=j&iA3%2uZZb&TBd&AXfnA{&OnGFYXb9{UfDHjH= zF-hE~eR<6-2*)ZmggGh5nclbL_a4W$n+4~+bqS0Ta#guuFQ6!V??pt__xl25^CS#p z)C_n0C+o+l?xTQQdNTN;nep(zc2G;*2g<@B*G;>j)&BJ7&GFXH7E|rwkB$9{kwwI` za}Yk!7I8{;ywhl&rw}I7e6g91ERIzh6!=nvB^vT|PsJ%5P5l-q+JAKv6mM{NQ!X{wpqx$}bY!uKu_i9rVL7_x(U$J|Vu1@#YJu}UGk-CFpPq^Gr^%Ce-*jf&)8#e47$1V0Wu)uj12jSWNz|l zFR0dLM=1>;SLlAN3#Cf}YF#`aE?Pjc2rm6MzVEFXGs?>Ty}`{O%S^k^mq)w&J=MMQ z2YV8IpKr_$jW(vuun(}fpVFPY4X+1-t07TOdOP=QILa9kxV~<>dW&K9XZJEOf7eA9Ma#m}BOFZh6D*%vIL6ePLNyJ7y8dLzjcJwBk1LCEpBbZSl9q{jc zIpqN4L*Xnr(=n~jhP-0th(8Xg8<3^m<5EuzIveoz7vW%#&p${$o?P(-a$jfWOujl9 z7{e}hKnxE{yP6E9sIYe@4YRB^s= zt?_8|SNaePBjTw+LGv$8d5{OB*9A}LdANN={*}nQ?09^DfBHY-k)E2d zhjjr17)m!~x>Z9?sX@(N>r(4t+EiVch)c(1?t;)*kZL|qMY0Rf)Bj-43t{0}{*<5{Dq|&~$_m|+sw7k?>3)7i zzSu~^smVA(XjCoMp#e3QsnT_5FqQfY=08H0o@ir88-0w#75*wuv|%ii%y%r5^lL3T zvi1APN}_Q#a}8U`3~Q`mtDj+qRRllAsdu857LPaI~EGO@IG3t@PxB!I~_vwo^Ct5pE0#KX}yC8Qx<1(3FQQ$qU0n+7rj) zyJ&mJ?LDNQ@tL&~=BEmN?-!la5T&(yLw8}kz~6VyZItGK(77b>o=?_OcRf^n2VEBpZSsmz@^rMt;(T?m*jv>HdHKZ zrknzJZd-pg#nb;XkR10{k8V{Nz-1vB>U==hDIgiDSJ){b8R~rJlI|&1w71dxee|f+ zIlYujQ2tv`!nQ=dnm;Bi-=D4$k_*Oy^eV1*SJTHDrPct^K63(GDmT$!sG4{W}$?EMgh zEASG+&bEtnaDSM+F`J-+_d)jlcJr6<{UMKDC*u;r&TgC*T{J8qY@@Yft!f>4nXs9= zJIqZK>Yx?$C6S7_4oX4t))qUL^d38+fzps1_UFM6?pPpz(=VQ9*ZZ~|OeH0kbY}I) z@-fpvE_ZKT2U{L;VSC`;hb;#=vv$mPG5o(0kShoAYY>@`3!RICz0uFhj4K+5 zH>VKKfn+bz`=NxNCV^5`BA%AAGVu`dXMW^9jZ$jfS_6NU2I^}R)-+o_`}f_dH|L)6 z8q}PB5nUFH+NIS3f`aP)bpb)Vdf~gwcLp`)5&zbB`5%9C_c%RdbsE~|=5Xp1rxwhJ z5coU$-WrL&3)WcnZ46D^75U6qZ_B3naa#_Ck`EB6ZHo8g`>|>BZQ1-}vPa8P(?iYw zTH=OJ!=vQAG+jt|t(#}}*`*4t=enXAA4d74pBOM?oqy7m>5}y&p4L{;_wj9Jr zSK2^KrIkJEM%Yx<1MnZI0+!f;vQdH`LBC<1EqO*0{KzddWt}WMrO#9-Z#rPDhDCcB zvG59-AJ{ZKD1Wfat$c8_k`ZmO7})_db8QrgOdo1)-5OFNTlr1OFxeUdz=~U?ORy2) zH*_ha!lEh4IlOMLp-M;sKV=k)M|vRQ6X7DsYp8WjjUt)(0E$gjVkGdh)uv@q3N$k1 zH)tJC4*}jXO-0pwgZkhr8P=fwD-e%#pqls%1&xU(py=7#yadZQ%d##v@os z{f3Pc^&@fN01CVK=J6w5zhMgy@gqa%Tj=B&_Auopt`jHO6 zMf`>h^8_5=N1}t;=7fA3_&>!4_a@Ew>77#QstjQqN`FBI+T>kchvav_srvb)tL``_ z!%y#&s#E?8njb4;a7euca;j?gf!`dCUKX=(0DRXtsf{!5)SUSQ{Ex09Kt-vsUMD;5rK_YfjM&W{NmYv!d|`0u&76 z4p4alz&6wr3}ZTQEdl79VpXXuHuC8UfKjyQFg6FSf)$B`VJwyGe^n2jn#eG|1|0=X za$y)#WMn;n56(pcs2`a9*13XVEC+6QkoBQ~z%Y*2axtRASPopz+E{hrBGSVi)CIM} zK_VIs4P4c>NQBRD7n+Y)2M3TA=0rns;1<1CON^IUTTJ?PLXRBLGEPDvZS6Lk%kfq`qVH&ke-i_xsYI~SUirFzg9G1LK+ z1P89c-k8G~P7M?}aP@?5GT6C3G^d8Koww=jyj+cCkfQt=d9FMzZ zePQki0J?2BCJbB?atruIIB>~kxJehv$*3M+Vw+k4ggxMd{}M0Wl;HpeNF2DPB!^mn zQmR#1@*5N%D2HaFe^RbgUuV_l)W>IscoP69eXyf-l{pf|LCsjIVYppHo z(gD%mt1jN@kaB;LZ1t}CDM;y{Lo)tkjpx^kD6L$7+86?<`CnUIe!=^882Y8&OEbHE zd`GW+2D%y8T{Fd--6{MY4ZCaC4{RGL6e`l@!6X6BI@u<8aLrLYk6{ z!r2$PCy%Fl>pxodtMC>-@x?D_g_|2@r(M7SQIn>>W?^dn>u=?uSi7`cv|1V^tT zPog(aB*AqF)u}m3tQ;W>cDAYSC78U;S^#D?1rBe!6Ql)~d{f}a6YB3Ybe9W)P~Y%MMXeBut5b2Oi&R63kwSsK~b;QZV3g&#=I(ujY=viAfa@3 zv%tdcvc2;?&(xXok5#;Q4_qy6fSh9O)!nG|kL)5bQd*7??@YrT-d^Uea0b|+QF#US(X#B-WXQwj!9bJaMW6Izi3tlx`wmeDO z@;nYS)1Quu5+!||XG#>Kp`ZYgK|odBBc%ktPZEbm0n@%(iLk7dnxC_~z|`7WTF znu~35hxx z@UmrN{q-<7^T71@@ttMd43~Z1=ba5V!-|#8a}1C9Zfs~9-??xzoLKRl2fP`sSpLp8 z{upOu9(o##ZH0Lt-?oWfpcxq{ zZFtOst#`}2*yAxh4NynYF#8xD%f(aj_nl57IWit3Wf|#F%%| zmUp$mIS!KV`@072c>eksS*9a0zH5y?j^(`k_^vZkW_NSY$eH0LF4+J+Qn< z+dSL|n*D@*lNal@1U5~7T#TP-^A_W_>GXNG8eXh& zxeYwVL3!rS_cx#n-t9(~W3sI$oA)~mk8P86?}vFO-0XLpzsV<^fQx1zF3Q_HkhZ+L zJRbSvSu+R(-HmavYqaezvdN z3!3u~`vBVn$C4CWH22|(^k;eZgU5cv@R$dNZNq#6G|Pb(!#o#lX$fqaH*qn3hGWM9 z8|D~b8Ms(K43}kX`{rAq>5px~=E3IgZD6)c$YUF2+%)gtVwth6kVo2@cR@78W%JH) z%ckW$(99Rp$T%6djqiQXlw;n=W0~2!{{uAR;Kg#Kor;U*16<4-!=&wp`61k_JC-BU z&-$}@{|K}{*7;>U*2uB{v5m6t+H`&lI$l~n0gvHR-saEdVVuEZ@jeBQ<;aWWL)-fM z0(9iqS`HY^m$;Y~=8bj1{MkDC3Up&!Ooy!_oAyT$NRnv-VbH)rj^0_u?*f% z;4yuN;8JZ6{ZE3X`59LWT&x4OTfYrXhnsm|9ohWZwlt#*-pn$1zm&n7Wq537tXIZu zz}i+Lk$>wT?p$KtIkgSQ?$=G*!sZNuD925%#HYzx*OY3pwjXj=zt zH>53ZGic_CV~edT%i97h0~g1n$oy?BgSV{=-gfYqCmW`pzf9wgZJt+#R}VW3kMoD( z!M5q#X?W~^mIqRqUAQw2;=D*(vl|56tXn&d*f941%fMyRN!s$VLDLDqA9?Yfy?HPwB;3oraKm|s0>~)c#&mh z!z=-h<21wMm4V9|34-Ie$W&M%1ydy!g zoT>yNbccP?ng!Fq3OXv;ef z?hIV9%KCiZ%pd#N5r($@dcw{6Y=(<`zixZM&G?vSUVi>AfSY+@n_~O*^Vb{hc>XR1 zF9VnLN7|;P4`}*hTd?)cz6_Ia32uyo?VEf*zRTfed0Kx=tM%6xG~L#ppT8@B$BXYu z@G@{&f23_XuL4bfZ2PvofTT&d8aK8D_FwuXKLHo5YjE@Zkv1lwABYTGY@hT;+WNZ% z^kKM|=O%`>X}J|{#%J3LY3uJc(2T?SBW?W+0G)x$`Xg=q4F*kFJHB|jO~T!V$38~B zALc!9GcK+#BI{@fFxHXvN7|<4UeK%~>yNbM-3OX+Sbu(e_XE$sW&M%1{)U6*+`;;0 znKpu6Pz)O;@h99kX0uPTzhvOzya1En^EeJM9GDFD zAM%)Y`lFu&Tre3-J9(@-#?AcLFd2r=^TVVZdCUXz=7*U9H_Lo3!FJ4YXMM9=NZWL_114Sl;DTwwuvi`zw{=L~;kY%&#kwQz<*&)< za5Fvh$FM15%B;y1pov=^ZOgj`H2Z?(k+!^k@p;W>f_E4$#>0zwFs6ukVcHlL$A8kM zJd0?@A1ah2yVmEN~L^IY>;w*_+H8@#G6u{BmO33 zXK}fdt;O+DHW2lstSA!HmPf1`VvjJ5CudJ+I2plD$iXdpDsGdSPR*Ibg%m|${VOOh zRSTsYNN0PD*sRjP)Iv%+(K$fMSpiI{x0E@m-ae7?nK0`mDZe9P+ViQqBorQYh?v4q4(oDW9VqnAfHJLAg*#=NNbjLW*gG_;V~B?ieYj zDr$w47n!JxwNlE5N%H*1>mxww0AWuNJhOlqi7fE>`kycU`a+ITqSq=af{8^R?wIZUrgj6#rOF5_p<_rYRt}U*X za()1ldctnZza`}hVb)A3M=E4pWZ70Omhu9!n%IDy&+dqvBZ0V5O3vz@c}mK8%84HP zs)vJ|CFM|stdX*Bm_?V{y9`+S2}(F^M+l%p6#RB32{atMxqNa zq*Oij(H&%p+IuiOU`|kps5ylY%26Kel3H;Upap<9IVmYs_JV^8=KurMg`Eqie*l3J zzX8g^bZMjr-3v$-Jcp{KOPPvGh|zT5P^(OX85)st+v{D;V4Hm18Vkym*P7Wi@yvHP z)G9NBqq8!}Qm)q6QqGdfAjUSYl@R@#2MN)Yd2x+Nr;8)?UMZ=?*wj}CgqV)=pbCJd zOZkQeodxK2w47^+sjwQN`z}cXEWhpDI2~nw+~eq6D;kORqhUL-=Fc4!* zr*cQZ&uxK7y=*D(HO|_3at9~W+PmalDmdC;u3StNh30N4A5+AWQVvoCZf7FmF4lqZ z>qJF&k@6b@rlY}*u>xYVlsa%sH5(23n3OxIZfKJ)rPiBLk$MdshHgS#!I&5lQ!tsk zrYaZ)I}XdId6z zsuoHtkE+&jrNN{`J`6h7yrau?K&jsaSMq!*KUH{eOL)Q5+%TpewUnb~lv6(1RIqvM zDO&E-aa#&Ef2vx&_trV|fGJx}1@4P4h%ArJ&_$ zMnK$SoA=|U!of&cC?!{W+MvW#7pb{Z=IQn&=xeu{0JR88eQw9J4zqPF5o?UW<7UlN z_k`h*HTNZyEi07O!)k!!ietHrRu$r~7foEIAY1Cjp4 zayvSmls}o#0Yi#0mqO}RG>~@5pA-2;kE9{~sh9vUH96iaMLxu2G&M*n+2ZqxG0zaES_M@{(7RlO{IHC_AbwMWh~ z72a;QTt`J3=HwE&*bH14v`ycuvd5|p;#n!DX-Vcq54;H|h}SiUL1Bw7riZ|8ufU5z z-J&Rt0xu})P*4*URTI=QMO6l+M}Ra?*$PVpRjjB03*<1e8oxn!jANwo5yZ>1=n_Es zwyN|cppxHEV$8?UibCFgQUvp>R1bl^`l^CZE=yF)$AGY2sVhDA$ob6_Ps-O!*Pq~b zTk=q&$0-?iYcC~MLB2Um%0rDib>dm18cUf$`>Y8mm}}oYNG-CVw;c42ly?uq__Vc` zsLBbZ7fQZxsK^*yfFY$JRzsMp@<*xUH5^qSp)Kr?dBf{5ESd%{U|!07mKu;TwV%m_ zkLR64-JyH6ulyJ4Q>6a$@bQrexnN`i@eE?Jv0s4L3!c4K%6EbkzANRB$Xra+-36Ol zK~7El(WMbxViZLk86OeW{}=<=-CxElNCfG*Jo0~#fh_Mq3DkhS0QM2E--LY`>`P!n zx!8%$ei$ZoEN{xsk#a_|s5TYbGti|ly3C+TReAg)X|UL8%P?_wN$FLYlcij0Y4Mzt zPdmp7vy(^wW8Y4_R)Axml5(U<#r7Oq$Rc_{OI3vQYe)^*1_nVGI>cv^mkgR^3J^?*+>i!RXEUO9)IP%e80RpK&uU9Ekp8$5BLL zx3?DT-o4=MQ=Kv^GJdjE|8rv_+y;gF{i)TfpN4wL(i&>*b*Qf-@{>>v>(t1M6s6k?||7B+WIvn6sm)zt%Vqaf!i)IM0E_yZ-^A6U(c#ab_yCs3e+X(?T}y@E4$u< zo2wZiP#tpc+qj)zqY$DqoNrP8ZW3V4;GDGFnpRC3_Bh5m9(iP#%EW}M^O#4rU zGd}`L0#>jSHF5p|@x z9P9EOU6)|%x)f~@&D3tytDlNG-)+=1(b%<(=|S-(p8C$BJ$n|tb6U`bMA8rxnJz%w zoBxdbI_C|Txt+7_c<2ev*?Xtl-cyY}%CD54W3}M8dsItuPTe}4Q^$6|>B<=e61OzS z2#k{RoFeJi`^PTHEX-a%AoCHDRy6_vmWLRXaX}?kgWr(T%m;sUF+? zAcVZYDp5E$MIia;jF;=WQun_>>~V80Vc>Rve)U8^Rspm#45a|d3q!R5Ee=Dc0vZv9 zpc>m{wqaDjn&#uM5R}90Mj@zW9*-G)Q*oh`FZqB-{RZ2-ZcZU9bu5NXTP8}j+?O~P z)2lDzHw|<1q>xP7SJ?P6%N;G0247#>{V@fleu3_xW@{6SNX7d46Ia^oaH*d`y-u-w zRE9{wRR5lrLTuoU!+_}xc#!%8CG@8ZVoL7v$oRE61>0tiK3$Io?MAV67_<0zCWemj zXV*@ta{Op4PYci0(A{LgoDFOb6nk@0sjwH}<0(StC?{{n0)nDrHxmg}21FgmGpT@b zJvYdDfEI?K-hdFiXA-fF-CfrMM7h_|czZY`sp?S!q0B5k)*)&b%YXkouPhZLvpzj9 z!AYS~>YVX%KF&Uxc^JsUS7M{qP2!q&7~0$dueOMeLR$R}1c;6NGws9PYXRD19olA5 zV77J24A828FpnMQ2_6M#zOS(f@d%)ycC%ZFHrkDCn6`iyWEiiF(HG?Ns%G~*b7J-6 zs>eKmwW$0@vgr60GU3eTtCWZGXFvDdn%%|O8>Wru5s^P3PN%d9H?S&WmWlztL^MkJ z_j9l+uDDm7e z3wIaoSoYyfHEfao=2DycjGAlUE_|tTt<<{bVcL+tayJJ1we3wBdqbm}Um4KOV34{6 za-(e?w4JyVJGxE77*$(4x*JYsK%N#$ltb3qu*Wn&5ukMd8cwid> z2)+NwAcn+c7{yxZ$;P0!Lg;O_!Z~*AzYy78RYNt*9S?P^l2ZF@&W_7b1|43>24zhC zODGzcv{RoPzj{yc&gElo^>(X7V)s|(?J3S(_rs{GwAw1fDT}RN*gE>VN@VsEoob|H z+_cSNNYFgvqtRw9*QQu*YoI*{ah=AdNO`M;1j+++cW5wbKyf%;Jal`v4y?G>ZgM(^ z55&k*1E-=ma5fcH`hUAFf9I0d&Q%i{f|CdJ!DgB^za9n2UqSy(W4h@d`M>L#AE;F=;()aIx}Mafk|N6eJ&00Jm0=rO2kz6N&;oYPj} z=C%p&NF1CSrs3wzE^JMEU&PJRtQ6KCm{(i$yRHRpomDc_jd4sAb3&5pxqUdvNj52wrOlm75l>6`RTwD`{p!pxbS=gY)qetbUg%K| z;+>&zRS5)0eI(_mFw&q{%EQCZqZs(Y2)_C9^t8=+d7FQD>PX9J^li{?#_Pf4aP+E@ z7ur{-(EfQS;9J=g(^f$0BJJlQkjt>RK=EOOG=}>a{e_qe%a!sea3BR7!Q6JsL2zsl zq6n7jk5st|h2ZEBDTksq#~6r*;eD!m(OWiN>eVb%*rh!+*b6&NZ;(tLRw9c>v@2h} z-SA>r@?4T;A3hxO63wy^w!o6k|7fGeHhy$|q7rM3(QD)Fhn6pY=77~I7H#bej?dSkgLkNWZVX7LO+e5{I3;-+S z5a$hN)#2PW8#gb!W8wS-OJ_gchv9szB?8>;(pM8v79GNkK>33Su^RHhJ=vsxz}`5Z zW%=?g2e2sKXDKAyz%&|@dA&)0TJKlpZq3i%I`@@}gEi+N_f1`&m$m5q^Bq)u4BC!1 zOOMrFTc8o`eY9=GO6{L6lqDAsthyWtG}X{4Tjrkt>~;7$L;Fx0dyA4qQ?%}B77}7U zd+88}-5g+dOF3Ii1V%mEn3LdawjMX5=@701=Z%=@g7b0gfx|fpGn9|9?5CmXeZMUG zl|SLu$;N=aH8{6DiQ6p!)(_4+R`QPl_8puBf}UO8I>R9|MQg;o&6GiN)ect)abW?< z>X9}TE42Q5j#{d4W;tOoeb8*_&8g{q2A_1{Tg!Lnulwf4%6!mM-V;QrC@!J8M_`z) zaw|k&AN%{xnpZAcKNgEZbi!!eN?G$Z-0N*M4{1Sv;#dLG2pXlX8^pf-=0+*iJ3hWg zmfoegz^qx)RYRij)i3_AZf{BUg4fP6{j|}<>?w_*xydO!!p@mYs`2EU@0%JQWm)h$ zp&|VSPj64g)7w*&{-l`ntprFgf@~6uL}d>VO^TRO$p7=k#=s_|Hm0C$s(o>BK8PzB z@EDXIRmVDe_&htzSgfkcp&LGn`ev@rK5JmdqX3{Wt_G`MSC1VU%Eep4_oMl#Cv z`~)oxCd5cQ`PD3i%9&oX7Hyx}pwX2Nwg}`i?pdhO%#o&}lXuYdKOj1oybsO}_MOr% z{H#!+B@?gIYO)Ha+Z)I;&2Iy--QyXJu6v@DhbfYb!n^fY9pY&pEB+oa9b;?cO%un= zTWW=T;BAwOKG&%#{`%6$esRzZ({w&^-af<4SjKCIn+Ds|S{ucBe z%}PAwHB-9Ny#Y+~%Jmu-qdqjR+O<<-)S%`y7&K2OWxw2YnE$5xe#wCjWZqp`qlwB1 zw1p}Cyjj%=D1QYX_jL1^<=pa%4l?VNlOkJPiwCh`N3-FnwpQHQ$Br~}=z_Z=$CH$^ zKj55$r2KGwWOuH7)g(QA7JhnRx(&G=sB51yH!q;AT==llR_Mr8sYK+}au7zz3-04r_Alc6C>tWWy8*slZt zJ&L;}+B5;M);egH1CZ|n6#!)UKyv^KeV{LZkv{M}08jrA7r_0ICvY6p)P=!%A^CPF zJKws3I%F_Z)@6MHdE{u+DgGKHs_pC#Ac*geQW+DoCk7=6Uz3o}3BGSPYg-U&)9{Li zvv`K(dUliR-kiQUw|Mv3iNntIW+5k$ek~PjXZDWqn<}Le`)y%!|6BK_m6Iwq>NW&3 zYw3HnoqrGwQBB#8_+7ry(|ctmwm_^o8jAfZHLc6o^}mwE*IMkjT$$6`Iz0Qn(o$1_ zE%4O;NggL4`^!R==yDh<&I#ZU^|btrjr;Er4a}EGn@2saZl27nWZV;EEne1f{(#klj);Wuac)Rf7IL`@-6(wJ(?{UvnZ4$|s?# zex>E#b!Ssa?06=WF7jt++IJ|CHrS9XuZ8h?vJ+__*I^NGvSK{v@6nv^MABp)`had* zbL|s;^ib1@RFJzdr0J%yBX|rN74Jkc~%ArzrZFX|s$uDNVKf{BZj- zKBZBGq-xE&KaK`At#L>Kj@l0yJz5vvM7JXJ1rv|I@AIWN7+W*@&8wRD439n>0fZ(8 zkEdQxlv%bOLL4~oEIG^-k+5<1Q7QA5uOYd~@(I>A#()^6xy-4=#qQ7;JicD|s<;r` z9Z?Dv#8b9nS0feUqW@@*3#O-fy9@)3eFepFNQ_qtaIUIkl*`z};w8#VUw|Ro%VII8LFzn21VzT)SUwokf>;d9F8U2=RdPx~ z-I(09dg^v@Bvv}~Qcm>q%;J`ez-)T=0$beyNUC(nqgFeoQ^%21z0=?|*pj+VI|ByY z<;TLU%Qwsr=_|3hpqfSm1Mk5|`6xX{GL8f=GZv#N7&~JzlEEm9#i$0xwpfhzVEh`3 zF%XRBVlXNo?|Rn~wkZ;dRs0OjcS(8qKv~@ljX_Q=uR!|n&F;Y%zkC4QJ8S*-&-V2; ztxCY1&@Y?5$+-#(ozTpP-Cf0LgZc3aN(AO=#YsY^o)&xQ88}D4i|$7bHU#{6OE#a&hIWDvIQmy`GMvjNxVe0g4>+2mAGPaf18vc~D;vqn z0!R0=NDj(DHi`t5dmK2&#pK)#j_Fbn{I=kXiolF>K8|Po)nFjiH%3J5fc+v8XN3-H zl^1A}UAAKSDDy%Gva2Tf6@{+{O|aZ!A2J38&|u!x@$} zHt*JLZ6CKZOUu%fv-JMM{Sf`|{}s57FPtyNyYILy!@tVbsfsM0eNX4Ug+u9B{UsJ2 zq%B;Y{~Yd@r;b&pCmwEPY#q|QKhqP0A5h`&|GRL%9KFu1%FOYCECp1%dp=#5RaB6< za^g$3cJj2zq-(eW4ov>U0Y+1A3k5Fw-M+1ArBrIv{V~iXG%COg^YMgcFs3Kn!ihn# zdX&hLYlBEZ9nZaW*e#%u>UDO&=57R3eQa#ar5fj(goR}FguuBztmvD_f~U-sC>C@C zzJe#;h~g-qKUlZKW>IDD9Giux{FkkKAu8=Pd?27%CSExQ3?a&3MF)srw24lJrhd-tSW^R?4MO-V}>fxjeK!q?}@@2Jm#GH_Z}g zHtsV-Mx?4?iQZ6f{*e)Qtabk`%M$GuLF4}L%2qX#D>v*mXrek%oN6?ll>XF-1G9ca zry!7oWB&g2itLiSt;?sraD97)2a;@FQPA(ODNhmY(cOK>r;UIQ`Skx9n|Y5gwg@9& z>-5={{$DG#|G<3P>Y?pbhYwr&ci2{pHbt#{fOaJtvrPPQ^J!JwKA`I-8gYV(a5oA% z#{rrD^wLN{0`o)lRT0Sc5Kk;AwJKR~>@7`^>{v$rU;~M!;j9zFYnfRsaL$ zEyZ$7ga&At$)jZH5HC7E&Z-mSUiCzCh_8J%TOv1i4B>&#E<5CJ4WfCfgsv`><15DC z+45Zy>{xnIjFVRU_-c*@Q*%hqTr-cBml~QzXAndtK8A zu4am)w@GX;>l7$8NaSN8a`U0qSBNPRUM6>IE00USI1@(EvAuP` z^_U{zdAc%#2Yh^{;K!42Fr;-&1Q2Gb(>l3}RZE67Hlimi;Ms=p#12uDA_Ia=tX%L9u*WPvY=Zihx%r# zFPMyjl8_LON7YuoCv}y?qSFtFn+mz1r+Y;5DtU2OC=GL>`!=Hv?P|FwF)So*gFD+l z1WZ{adxwS!M4ZmEsfWE3T_YDJMhb~LA+%ec>rgahHQ%|4h)(bu74iWWR6n@@Q)i?Q zzXB_F=_3XNv_?Hh6(v+@2cUaRP}j-@JadZ@688bh)Duz4TKz;;v``f;@bzBNb#guf ziV+f@HPnxWrLNT<438yLZ4adGKmga9fMN-WMF)05e!p+i%oEma4~R}fGfAu$3% z=UXrFgzEn?Yn)9{yy#pQnuwjII6@TGCWe4z1@`X?{bsb*AT5D!QlarAU{PGTf)cSI zXxp%NHnPrWHa0-zPfGiBGC`f-g(Zfs4^A!LXNz%Qmv*x(+97tewcu~5|1@3*nhe+lAZV+ycZqgf)59dmk&9>tZ`#UBwKXj6MG+7?@?^=7})OJ*JyS! z-(1TxN>nskG};ONV!inogDuWu@UN-pW3h!&!}^dPlb!Y}yzglik1bkcgFg#;draT@ z+jl&_j>G0>Nu}%&mtA2A*qQa>`4(;1w5G;o+fUD`?1%DT5N-v>_bsZev1}!$ZZ<61 z$FOOUh|Ly*44Wb`Ov3meZnD$Q7&d)%Zeiw}*DtdZi1Af^5GM>{_Kv9O1$GSP$_>L# zZCbHHlWs#dKxw|vG5hAr!UyeZ6C$0Tv$k{2C8e@3^mzLD$Vz|ZlVy6X3quh%;%J(W zj3oUg<|&#HUyanArlh@FcYv1(0Ucm#)Z;?Qm`)ca@JW_eJRgSSx})_F z+-{2I-2(U)E~ZY5=5+=2(B*3w9a0lFCl-a9*Tk{dk7-hW;PYkM$ z#7EcBnecWw>ULg?x}AxK(YZg+HfEd1!^7n;m!d75ttfLluSk~mHgw+tS@8Fu4L(>X z^DlL>$DqA#7}~XQh4PKNK1bR+bP%C7zjJWJ`AYhk!>6yw&0RBNL=VS7Mtrk-^|%45 zs(sMVc@LWTh;E&p%B^o-4aX!sPX;)+6}UKmM~Q`Sev8OdVHk%7WuAkJz?;Lpi~&X9 z>2T-l10FA&8xYRR(cz>o2Y!4MUV*(RGGCRBP~|W=CxL-9vEnZ4$-+ug1X z1+_%@{=bCV!cw+Z4DoO)a$x+oB_aOf#(%CHV$2O3|MM_%#hOz%{%`sXw+xppN2u|i zifx?n|APVG#TozaXbWDP@xL9vq!N4l|5g18D)#t~jouV2=cDF!jQ{gEQ1ZFCXq}+= zIF%oaby4HLdjR&X(#Y|@bg(Oh9?+fr@juglA*ag2p3bx9A^m!k^P1LU==bYcDU;52 zvx{RYqC<(y3QbEs`$_nmc4O-rQCbOvlD-6!rmOG6&}r|)=LvD~>UjR(J^9R0vv-^V zLWkh)g!r>kK<_6OneH?d2Wk8a^B&8Ww2-B zOvtZ(0Q?`0898TVKzemtZaHw(jHV?bLgsvz7uRoNaM#4;UJCB}@wf?mCDGGE;R@!X z#Ao69F!1W-s6z8Ap~%Yj{8cjj24>fXth>Mj98h~6iO|@|rEF6DbEbh@(=_l1%5o{d zHOPtzKHKAps+-|@JRX-H9}91%`F;gsMiJIdo2ZT+5j-SFLTf zJJrk25q(tRvh=oie${r=1~;5Wge8U}qc`e;rbW>lKmSd-TlB zSWzt=_ec-3L{A+=b={hhU+!s%Z`-nprd@qlrKHL&F8ZLDOd-C-u0yc;=&*@kPuyN~ zQQ=prkX8E=!8r!FSkwwWniLwC&IE{2)cyKLg;EP3lXH?6rXsoQ{w`vrrH?&6aH^K} z(-f;Zw7;RPLP2niM6=}akBw z-x~Rk!a4xai@yy?UIOr8T>e~84lB|E>d@Ii7HUnPplZnShiltZOD^BA`wOg`7ZXIQ zhpFfXX8CzKiUyYr|9V+wLE(;-Up=ZP!$4+VD3@S*`ZqXSl%b)?LrI3x7UCV?{QoK) z)~7Y0iq^fuunflv(ssf=7|=1;ghD>8Oc2-swk;D?R@U(!Tr8Xi%szoltw_ z)y&3@T|M|5%Q~_G9*z6S)$rE9?cPNVKV(e1yB z8kh=;GaQFRlaiufM#I!DzxLE=f#U&Bp{zx1ZCrKdzxro#r=OKh)FQH9=-H%da@8h1 zN9M?#;hfZbGnk5zkdGU=kPK0y-^;VsZF6fT@b;om~AKPTHH1b&Q6qEzu+?hpMd*n*z*ki>tur6 z!OgDdvs=rZPCv)@0Ybky6*#vW76^03pAk4kxt&t)Rw}GQSOE6j zLVTir+Zy7~F#z1<3AKxY&o1~PHK-Jyba!w><}=mzlI6QA-1iK^O!e9QQn}Xeke)>1 z8U!8uE!pEJ@_sN&8bqSjT_1zkSJt6y2Byu^7C#qmxAtbch%ip@B`|KbzMLSG<}5JO zQpGU2V)LV|FZbwf_#qhg+7Q(L(D0c7Z-vp%{y*a?2>uud-T|lg?Mop(wm%213%t0R zlbj&gqlP+7bPfi9$H92RGR~4eRb=Hhx4`4UA09db zH-GyRVx+uZu*=$xYoS2a}SGwEk@ZbVmIZub1- z2I2eUI#0X1l%d|GJPFahur#FbPyxt4Ofl0JMSQu4Uv-whsHQqxE{v$Hix}z=!iDtrwFh|QJLI|U<1z3hVwv*`csp&E@tF9F({;`Eg87LD8gjh+l0PJd=^e?u zQD#DuRUd8J9)1K*w8+)ZP94hb_I}7?@(lY!`nwtGIX?4#xz_9#CC>(LQ!tx|4n?JI zSF1I)Z-RM2q%Zczy1z5j(`~5Xs>Y96a4ug-Gb5|ILot{yg2w=qc~}eHY2ChE7B6@} zFz6A^ukk2^8i8)C5Ox>hTqF1&}XO1Z;Ji<6$2QSYX08$qQTVvJPHYYh> zP}CL$BX}S1g0J+qDlE~Xy_WtOyd5<)jsJI#2*MB|BL~cPHFBF=8&as%Y^n<%Vy+Uj za1yI@bp<%SiPjj~vGAYaA;T?%Hno4cLaKHkf8Fb!JPeJ#3!u`|8(%MnduLN zflt*}ZV22ybuj%!?w48t@+=)`|F80xZ);+eNfgflVcY9`K4Ts6aIi0dUwU#B-ksi_ zgJ@X31{cz5&=2E0EQucQ#T5)C)a6v<{7IJlDQcikoB}wfSvY-g4P+?SMZrgKOvIoX zVN!ns%mFpRJjqakZDq?nftw<4T9>mctp;odQHSb}@dpE_V{pL{^^i4my={OO1cQZ@ z{~T~3mBX;<$55aOMwq5lC8OuXq#priN6(4(FqD1~Vc<-JgMEZXiApTD5b*X|VR7K< z!QJ!1FdDUHRzWnR(vrZ0k@-pWL{VJIMFuv2Va9A|O zIYK`kW+M7H7KVx-5m-nCzcCK|;5hv2W31_dM1+2q9Qu)R_!rAeM4(Q8@9iyxf7p!W zZtyE-vBLj81G<>oh~UCGdm+G7=e)Y6t!>LRSAD>37 z>?Ac&fkQ6MG^$^LNuLC)v+6a5uYs!{;EiBorg^Hr+zkjw?voD8@#=79P**>Doy zgX=B5Ig&mG^m}^smhd{3F~K_aW(?)8DXnTGwrfsw!QwliTl5KXZb5 z1m8RflA#4sU(^S&i0=0d0x0RC{9(bnL93Xf?LRgXu@<{kG4b?7!I6qe{Yoy=x^1~h zdcjin*0HOy3%369d}k%V+wotp=(L$`wQx8yZ*7uNspE6VZr0&i7&D$;mx>dxz+S2g z&c0{^kq6=HawY2h_53h^A8G%=Jq_TRz-cIextdJsK6>`H0=TtN;K>+HeM7J}H16yN z+v~*;nZPoz2(&5Isu(~NnD_A*Be@uMO9rEi0drsn&B%bcu+6ra{vS6ZVtSk&(a}g! zrF+VRC|)+;5h&rpE*iavlQ_MLzrikeqIJ3Q9Y>c^ol>9}hyvGUNqa*;w&5ewcNAqU zeH))LwQOzcK;1p?;UG@VoAixVxiJ054kp(=oAu)}~Sx%Y6~AbOqh&)Y+A^)={G z4rLIp7*xkaR&$_p4QkV_|5dx$pp?=k1+sY{VR@yV>Y;jUp>#E%HiTfz<38IQ6GG5N zxiT1S(2M9<8H@{jqd>*>w!ws0;N>{KiGjJt_#|oAvT%kT92$m7@_M=Qin^%{Sn9h_ z>J)?#x2PrxY7uKlVa!|ehh}Xl+%%zIP$E_OeX?Rt!Pc3hFR@ef&D^!prtrgK;5!wc z04N^Ou}W&gi!m~)B6Mk6tr|t8``@(+E z<@|bsz6#q0AVepF{tCO9lRem=9Nelnw46cNp@Pb{xghE_IU@_z!V4kEpmSl{8CwrU ztRZwIdvpUA=U<|i!Ft%Gp|?RR>`^bl82lZBil;zyH((Pr57SWrCAmqLWW^b3no=UV z)ElJMy?mv-&W3e{GK3s&!h{m7lJgib{C4-c#qj>CxSbT_p4VdA98{%_sZSK!b6xR`x&qq zmP4cy7|qw`*GZ{-^wYUcce!9CP;Itql@6jQ7reeGvnXrvyO-jG%$U?GKHrd^zy7Q}u|56mxc_5|ScJKS((@!x>C}>ZiNG9BDfTebX=s zO}SP?h!0>W+uY!c5dL3t`lVs=ZXp&83`f_(9aC-$CUAhR?=Eg;3luNB+0pgdO>0qS z$_Q_Ct-0b&Vhq$DT|1Q+G(5U;)kfLAu!7O`W`l-D*W(Nt9$jl0G(5VNH|YKzU8|UI z!=vk=1`Us{7a24>x?+K*OUEBw8#A4%%)HUH!p|6KHEK$oqw9(yTMm8=WuET$29B-; zn|`{h7M?BBDk!TXFkFYP51fWN2I#~nbTCjoK6;O1q%KFWb(Aa~DlVrzC1Mb^&y;}r zrFWy$)cU@`wjz&jK0IZUA!Z|WY_W!Zm@mdh()F*4h%7JBBlSGaHX53 zZ7$gI&9!b4R|#yt&g5W@-5sa<(A=+1s934%EReSR3C|s)N~j8Fic@sn2=6du#C7&d z0X)Lwz8m1#0erTBn*z=ZV5^-}23#1xdI=5H9Iz=)Qf>$i!zO6I@B;xb14lsp7r{)l zHYU;5Y3&dUN7uFMy264%HLukaRD_M1I&=NT9-8_?_o%3~FT(!?lr19Pw%HDf$uB7N zRHi8^JOs3Fg=K?w6TbpXQ_nOS`Z}2cKo$+uy0KG;| zcRIY27cDl(AM8l#g>%?uIf(OGhVUDWG<6n;Eb za3#mtpp{MhWbR|iC1!#SS8o+Vocz;B z+)GLui;Fiv6_~AJupC~E%h;b|%qdtAcn?%Nc|MqlJ>e#i;p4A$Xwz~MXGwp>;jO@` zdU#a^XpE&zvViKq$^M_FO!}**J&YDFtt!a+{aoQ1|!nLkK&l1qBzW_bWXo3{_Z7`!t!J1J%utU+Qi$R~N z6G4g97>;1LMkqD(0MMfYiH9}W9;n^y=m^r&icE0SgKf|?L3#>Oh7Ln1LWV8}2~Stj zyQaEb`?U7RkZlu>qyq^}d3^%_r4LBhGT4XmV8LmlJw?-&&%oo+rb-g}Ox#tl>GR&Y zX&PZsiQ5%4uNv>rHiE$e2Xp|%WabhVm=`E0kpT5^Zx z7Xlt1NMB(BfEC1FY54#BFl zYV`kdRZh;TFZ=6bRbYvC?Y3UB2I>x-_914-=h|1Q)c!f_Dt@R6cMR6UC#WFAiI{)J zfaFf%4H^>ab6XdS#AW_Ye+pI!OB2t8n0FvB6wWhw^Ue*NQaJZUVAS&V(y!i6RcYi_&iWa+9cq)TH;t!13+%iAI}grhPRDI% zfDME5w1lORd0U(yE&}I9D|jOu7sBy6VmD>Q6Xe&(PkWzb+OA^7b}ZBPb%RZ~6J1A} ztUJvdA;dv9ez`g~cePhXI)ZXHP1#XsPZW(e(VU%Ta4|w2b!o#O?1`dzBo&P2KoS$JtdqBjUD6aci&xhd?#p8=t^z}{@O}OGr z>TopbMA4$6_Mo4zg%zAAQo_XLS^q+mQEB7F?+q(HO8UT#st{E4gA=bL79UC`d|vh6 zwxg=5JhHNNANjYUx^0>wb}5O0CSUh`R^f`_Z4FD*;>_ZilwYg^p^zLTCv~e@wO6L9 zJOY_-sloV42W-*(y|x1$cL^|InEgu)GYq2y1wb(L884b;?)37X2QXE}=)_qUY?s>B zPye*NaL=-LuT{!f`PZFH@yExC#EEc@?o=_g#eJNl#kIISs=c0wvsLjU-1eFOp>T6T zw5O1r;LeBpX%kf?xPOIPes!XY{06%5LfPYOHIx8FMVlq})>hC}>n*bPKDDw+Isb#b z2KvBEx)u9OP>17cPSXLk`kFG+Ttp%PGq}w5zT$Ei+}LEWnyM%V_YUvl)zn~+`@Kh- zl>Gy4D!+M;x2u>`^DLeWjS<80PD9$K2z|UT4B|p9|h@>hM*71vtJod44%nxJLyjEAwoE>2D~{%BrFeoJ4ux1 z{?~t-HegVa07w0xaGMmD} zNK`+Edvi2gzgXr5I++Sm-Bev-%pR+~935~Br3CKBMyzgXRzRrlbQ@p#h4}MrtiyB> zcR&cnms;((T2ELn_3~;BB#f`S8QpHP#ofvN`ujP6rmf84tYRN+deXlBd_1r$&=OLwB$^JcgVNd*D}@aOk26dG#<4fqkR1=&r8Nkr4L;nvh5P*d%(7% zX6u*cq>I<#P|x5j3f?+bzD^e67Wsh?ToP@ z>$LLT9oWW%+9i2ZsosU-S-#iaBM?x&j=e$uU#TYqR*S}RPtd@%uV*Hzm76G!hk0cC zJMCMJIvD!eR9v820ej)2KZjq-QoiiR7PybGvDDU|Nyx_l<<;6zxquGW0yKCDpdw5$ z%6vhAKE`3JD)2SILQo}Tfj#@T;FsS1Np*}NUs?u3QwEyP0!s&jRtQD;b0koQ1n@sr z{%9)WCVIR>1=(NjYGlIZhsS095pdyS->w~tI#7P)yfjf^Y3OeNEJ&zdZ_4m51l|Bz z`hv{$wo(va<<*q7g=XTz`vPpuXf6@vaiH_8=8L{4=`bwBcfj7ZIf6Y`Yo%ubE(}%`UE~%u8YHj~ z9&_U3>;o#-0p6iUGJeP?-|WYvv!ZV_;zNUu`3T^pdS0)*$4*H?)M19tQsTD-AMX)@ zTJ|Kui7Wl5kkvHY7Vx=pg&lP$H5uY>!k%K@-5>^YHsFHVqOIIrNdx+xunhRaI9_|s zM}_DQI5Q)^q;VLozzvp#(J#cah57G78DI4|Th9pxK^MoOzR@to_RVIn4lx(v>BDG) zg0?fe&m5*V0euK`l|A@qyJw_Se(&&K1P5EIA=S2qr((cMj!JJc&0nH0Ean+zQxh*> zkZqq^oL8`7M9_XTTMK)4>)%0nKwMB9-SM<~fN&IK=XOZ*Yyc}U@>(QyHh{vTToC35 zU$=X}ISk};4`{&2X}uj>!ASZ6K(W;rDfuw{4DtM&!eM5D*XU|;KJhDHat z!_9I(0a~vyQKul#U4AkS0*1D+tLc>N2@N>{ zPDDSD*;7b0otiVLkxfY0R&^HRR-LumPRiPRKcpo;2Xr((B!&;Xd`1m=9;a`lXK*zH z|M-!(y?7pO?+?Ij{4m_6e~R0Z-*DT)Ob1;lqKz;y`wOan_hd|2J7!8` zQ=nd@tN1;p;Q; zX6NS2sQcJ__ceAbJqX#%5_b3_*LKHd})osYM@R_ zUq7*GN~0ULfT6GnAg<9qnxe&$>I&!^4RNbNVJ`!73-qQM%P z@)}usg+oYORw9eqilg?(l1oIj+b3rhZJ&7iL833v3&1^buPlC!D`}eDuL0GX%o)@R z0#j)9(5Hbd>02+gUf(64MwpnYVVU!Zo`TZRVY7_pHxQ2s*a;fnOEY^o;s^U#Kb1W0 zwZccs$d0TvWos_y)tpGLD#B**imIIX~S17z|zASo`6CKUgp(V29O5n%l zNR-*ZccQ#^OufB|=!4&hT`kh^dhod>G;N(1t7zdm=IX05SK%O>{X|s4ZZL!DAIPthh8J2T|h<^nq$Vp@>VsL!u zcj-`8{ND1rK2=H*&--9iZqd$p@88;jAvJ)`VGW#>F?RfLTAd25N1lYyj6l)GDtUL3UKG<44E^$uy;5O&E8Ed{hSy?fe}>iL>VP&3SaWfHZv z2OxHXjp}1e%LqD~a}7-!r0hBf?Kn}p)6n&jCIcuOs7e5;$Rtq-su`kYFTGFca>VZUY5C&E@{bLI8Au zo=8b+kUXgTvZR^;j!<9lavM&`Uz(SXONJd)F||o=tP@s1CuTy7nZg~$<~P4RbLFn$ z-3wkjmEkm;ko_&!#tpyA{;odtwQu22wp!`Hp==JQQ{hl{^B;1iQW0$aea`nrA%v^Z zfN{&Ri?f%F8_*E0km>LR+Lke;Uv%(!<(@B*x#O;GQ#-YGo2x#_l_evB)>UhkEPUSV zjl<8u!wcju)>&(rTxaW1hu3ysNnfPnWaRKtD>ZSG?BG&dn^`zGT|y z>slh{HR@>P82#1S^w&zi>QW`G`R&vq;JtN0X-EEe=y}lT)9n#RGpM5sdpORjn#o*7 z{i@t-$Hsx0d2nuN<3Vcad{}AlQJzMci7&I?@wqya!E*XEhUJ^9<)uT=bVU*3HogwD09N zruKW3{K&n4VSF0>*wP{tzepQdyzr7bsr9?$EI&9%31Vk z7hs~Mu1}FZN6uATg2vSPMb6Pve(hy)<53n?_L1x4GCR4}nk|b)y2OfupD&cNEDxWW zeW6t5esWctS}C>KT={V>j@+yop#tgz-OHKrOn%5Tx%0CXIVCwOKD)DthbNplW>tR9 z>QDOWpw3uiLs;61QgZM8ZK|d<><)EwGu0^bgn=5D9`%9|Rd9OeyD6wKl zOsE=92c44b@iq+H16r!6A)~%6)y0IO+)$rQd*ObO5E#GAz~5WB?}xTMuzC5)ZJ)vv z0e&imTV+b1s>0yl>5~lwxyxT}rN<-_c3kTU<;&jQ*B=wL&fsIn31)lW+IW~-1!?Un zll8~*tzCb<{G5jf)^4?4&f&(CwL9;U8>j?Y`=WfA-4 z;&$W3+6b(`1Zr#y_E|bwYwHBDz?m>z@JurMv$gTPl_@%N)jxy@y1@4_dzY7NhArYaf?$dju$xcPHiP)~!+CX_d~1*!LM?Ge7;bKJO#Un)N1uwgxh-JwgEvpW>CbIJ37rkET!?ye zTfoE


-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 DoUZou diff --git a/papart/data/Font/DejaVuSerifCondensed-50.vlw b/papart/data/Font/DejaVuSerifCondensed-50.vlw deleted file mode 100755 index 48aae779fa29586d1b4667c2c90d2a965e0643b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260518 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 diff --git a/papart/data/Font/DejaVuSerifCondensed-80.vlw b/papart/data/Font/DejaVuSerifCondensed-80.vlw deleted file mode 100755 index b8ad7178eb75d7c4a07d7db7b6b83d61051ac1b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643124 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 diff --git a/papart/data/Font/FreeSans-60.vlw b/papart/data/Font/FreeSans-60.vlw deleted file mode 100644 index 7bd70546790baf85713d5ccbdf28070a8aee978d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344456 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 M=+YOQe@R9CAGk%uYXATM diff --git a/papart/data/Font/GentiumBookBasic-14.vlw b/papart/data/Font/GentiumBookBasic-14.vlw deleted file mode 100644 index 81e153eda0bb5b0f9603fe953f6bd53ab5051ee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23124 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 U&%Rpyi{Gk|AF|6>q)MLsf3oqMod5s; diff --git a/papart/src/fr/inria/papart/tracking/PShapeSVGExtended.java b/papart/src/fr/inria/papart/tracking/PShapeSVGExtended.java deleted file mode 100644 index 77c5b0de..00000000 --- a/papart/src/fr/inria/papart/tracking/PShapeSVGExtended.java +++ /dev/null @@ -1,1998 +0,0 @@ -/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */ - -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2012-15 The Processing Foundation - Copyright (c) 2006-12 Ben Fry and Casey Reas - Copyright (c) 2004-06 Michael Chang - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA -*/ - -package fr.inria.papart.tracking; - -import static java.awt.Font.BOLD; -import static java.awt.Font.ITALIC; -import static java.awt.Font.PLAIN; -import processing.data.*; - -// TODO replace these with PMatrix2D -import java.awt.geom.AffineTransform; -import java.awt.geom.Point2D; - -import java.util.Map; -import java.util.HashMap; -import processing.core.PApplet; -import processing.core.PConstants; -import processing.core.PFont; -import processing.core.PGraphics; -import processing.core.PMatrix; -import processing.core.PMatrix2D; -import processing.core.PShape; - - -/** - * This class is not part of the Processing API and should not be used - * directly. Instead, use loadShape() and methods like it, which will make - * use of this class. Using this class directly will cause your code to break - * when combined with future versions of Processing. - *

- * SVG stands for Scalable Vector Graphics, a portable graphics format. - * It is a vector format so it allows for "infinite" resolution and relatively - * small file sizes. Most modern media software can view SVG files, including - * Adobe products, Firefox, etc. Illustrator and Inkscape can edit SVG files. - * View the SVG specification here. - *

- * We have no intention of turning this into a full-featured SVG library. - * The goal of this project is a basic shape importer that originally was small - * enough to be included with applets, meaning that its download size should be - * in the neighborhood of 25-30 Kb. Though we're far less limited nowadays on - * size constraints, we remain extremely limited in terms of time, and do not - * have volunteers who are available to maintain a larger SVG library. - *

- * For more sophisticated import/export, consider the - * Batik - * library from the Apache Software Foundation. - *

- * Batik is used in the SVG Export library in Processing 3, however using it - * for full SVG import is still a considerable amount of work. Wiring it to - * Java2D wouldn't be too bad, but using it with OpenGL, JavaFX, and features - * like begin/endRecord() and begin/endRaw() would be considerable effort. - *

- * Future improvements to this library may focus on this properly supporting - * a specific subset of SVG, for instance the simpler SVG profiles known as - * SVG Tiny or Basic, - * although we still would not support the interactivity options. - * - *


- * - * A minimal example program using SVG: - * (assuming a working moo.svg is in your data folder) - * - *

- * PShape moo;
- *
- * void setup() {
- *   size(400, 400);
- *   moo = loadShape("moo.svg");
- * }
- * void draw() {
- *   background(255);
- *   shape(moo, mouseX, mouseY);
- * }
- * 
- */ -public class PShapeSVGExtended extends PShape { - XML element; - - /// Values between 0 and 1. - protected float opacity; - float strokeOpacity; - float fillOpacity; - - /** Width of containing SVG (used for percentages). */ - protected float svgWidth; - - /** Height of containing SVG (used for percentages). */ - protected float svgHeight; - - /** √((w² + h²)/2) of containing SVG (used for percentages). */ - protected float svgSizeXY; - - protected Gradient strokeGradient; - String strokeName; // id of another object, gradients only? - - protected Gradient fillGradient; - String fillName; // id of another object - - private String imagePath; - - - /** - * Initializes a new SVG object from the given XML object. - */ - public PShapeSVGExtended(XML svg) { - this(null, svg, true); - - if (!svg.getName().equals("svg")) { - if (svg.getName().toLowerCase().equals("html")) { - // Common case is that files aren't downloaded properly - throw new RuntimeException("This appears to be a web page, not an SVG file."); - } else { - throw new RuntimeException("The root node is not , it's <" + svg.getName() + ">"); - } - } - } - - - protected PShapeSVGExtended(PShapeSVGExtended parent, XML properties, boolean parseKids) { - setParent(parent); - - // Need to get width/height in early. - if (properties.getName().equals("svg")) { - String unitWidth = properties.getString("width"); - String unitHeight = properties.getString("height"); - - // Can't handle width/height as percentages easily. I'm just going - // to put in 100 as a dummy value, beacuse this means that it will - // come out as a reasonable value. - if (unitWidth != null) width = parseUnitSize(unitWidth, 100); - if (unitHeight != null) height = parseUnitSize(unitHeight, 100); - - String viewBoxStr = properties.getString("viewBox"); - if (viewBoxStr != null) { - float[] viewBox = PApplet.parseFloat(PApplet.splitTokens(viewBoxStr)); - if (unitWidth == null || unitHeight == null) { - // Not proper parsing of the viewBox, but will cover us for cases where - // the width and height of the object is not specified. - width = viewBox[2]; - height = viewBox[3]; - } else { - // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute - // TODO: preserveAspectRatio. - if (matrix == null) matrix = new PMatrix2D(); - matrix.scale(width/viewBox[2], height/viewBox[3]); - matrix.translate(-viewBox[0], -viewBox[1]); - } - } - - // Negative size is illegal. - if (width < 0 || height < 0) - throw new RuntimeException(": width (" + width + - ") and height (" + height + ") must not be negative."); - - // It's technically valid to have width or height == 0. Not specified at - // all is what to test for. - if ((unitWidth == null || unitHeight == null) && viewBoxStr == null) { - //throw new RuntimeException("width/height not specified"); - PGraphics.showWarning("The width and/or height is not " + - "readable in the tag of this file."); - // For the spec, the default is 100% and 100%. For purposes - // here, insert a dummy value because this is prolly just a - // font or something for which the w/h doesn't matter. - width = 1; - height = 1; - } - - svgWidth = width; - svgHeight = height; - svgSizeXY = PApplet.sqrt((svgWidth*svgWidth + svgHeight*svgHeight)/2.0f); - } - - element = properties; - name = properties.getString("id"); - // @#$(* adobe illustrator mangles names of objects when re-saving - if (name != null) { - while (true) { - String[] m = PApplet.match(name, "_x([A-Za-z0-9]{2})_"); - if (m == null) break; - char repair = (char) PApplet.unhex(m[1]); - name = name.replace(m[0], "" + repair); - } - } - - String displayStr = properties.getString("display", "inline"); - visible = !displayStr.equals("none"); - - String transformStr = properties.getString("transform"); - if (transformStr != null) { - if (matrix == null) { - matrix = parseTransform(transformStr); - } else { - matrix.preApply(parseTransform(transformStr)); - } - } - - if (parseKids) { - parseColors(properties); - parseChildren(properties); - } - } - - - // Broken out so that subclasses can copy any additional variables - // (i.e. fillGradientPaint and strokeGradientPaint) - protected void setParent(PShapeSVGExtended parent) { - // Need to set this so that findChild() works. - // Otherwise 'parent' is null until addChild() is called later. - this.parent = parent; - - if (parent == null) { - // set values to their defaults according to the SVG spec - stroke = false; - strokeColor = 0xff000000; - strokeWeight = 1; - strokeCap = PConstants.SQUARE; // equivalent to BUTT in svg spec - strokeJoin = PConstants.MITER; - strokeGradient = null; -// strokeGradientPaint = null; - strokeName = null; - - fill = true; - fillColor = 0xff000000; - fillGradient = null; -// fillGradientPaint = null; - fillName = null; - - //hasTransform = false; - //transformation = null; //new float[] { 1, 0, 0, 1, 0, 0 }; - - // svgWidth, svgHeight, and svgXYSize done below. - - strokeOpacity = 1; - fillOpacity = 1; - opacity = 1; - - } else { - stroke = parent.stroke; - strokeColor = parent.strokeColor; - strokeWeight = parent.strokeWeight; - strokeCap = parent.strokeCap; - strokeJoin = parent.strokeJoin; - strokeGradient = parent.strokeGradient; -// strokeGradientPaint = parent.strokeGradientPaint; - strokeName = parent.strokeName; - - fill = parent.fill; - fillColor = parent.fillColor; - fillGradient = parent.fillGradient; -// fillGradientPaint = parent.fillGradientPaint; - fillName = parent.fillName; - - svgWidth = parent.svgWidth; - svgHeight = parent.svgHeight; - svgSizeXY = parent.svgSizeXY; - - opacity = parent.opacity; - } - - // The rect and ellipse modes are set to CORNER since it is the expected - // mode for svg shapes. - rectMode = CORNER; - ellipseMode = CORNER; - } - - - /** Factory method for subclasses. */ - protected PShapeSVGExtended createShape(PShapeSVGExtended parent, XML properties, boolean parseKids) { - return new PShapeSVGExtended(parent, properties, parseKids); - } - - - protected void parseChildren(XML graphics) { - XML[] elements = graphics.getChildren(); - children = new PShape[elements.length]; - childCount = 0; - - for (XML elem : elements) { - PShape kid = parseChild(elem); - if (kid != null) addChild(kid); - } - children = (PShape[]) PApplet.subset(children, 0, childCount); - } - - - /** - * Parse a child XML element. - * Override this method to add parsing for more SVG elements. - */ - protected PShape parseChild(XML elem) { -// System.err.println("parsing child in pshape " + elem.getName()); - String name = elem.getName(); - PShapeSVGExtended shape = null; - - - if (name == null) { - // just some whitespace that can be ignored (hopefully) - - } else if (name.equals("g")) { - shape = createShape(this, elem, true); - - } else if (name.equals("defs")) { - // generally this will contain gradient info, so may - // as well just throw it into a group element for parsing - shape = createShape(this, elem, true); - - } else if (name.equals("line")) { - shape = createShape(this, elem, true); - shape.parseLine(); - - } else if (name.equals("circle")) { - shape = createShape(this, elem, true); - shape.parseEllipse(true); - - } else if (name.equals("ellipse")) { - shape = createShape(this, elem, true); - shape.parseEllipse(false); - - } else if (name.equals("rect")) { - shape = createShape(this, elem, true); - shape.parseRect(); - - } else if (name.equals("image")) { - shape = createShape(this, elem, true); - shape.parseImage(); - - } else if (name.equals("polygon")) { - shape = createShape(this, elem, true); - shape.parsePoly(true); - - } else if (name.equals("polyline")) { - shape = createShape(this, elem, true); - shape.parsePoly(false); - - } else if (name.equals("path")) { - shape = createShape(this, elem, true); - shape.parsePath(); - - } else if (name.equals("radialGradient")) { - return new RadialGradient(this, elem); - - } else if (name.equals("linearGradient")) { - return new LinearGradient(this, elem); - - } else if (name.equals("font")) { - return new Font(this, elem); - -// } else if (name.equals("font-face")) { -// return new FontFace(this, elem); - -// } else if (name.equals("glyph") || name.equals("missing-glyph")) { -// return new FontGlyph(this, elem); - - } else if (name.equals("text")) { // || name.equals("font")) { - return new Text(this, elem); - - } else if (name.equals("tspan")) { - return new LineOfText(this, elem); - - } else if (name.equals("filter")) { - PGraphics.showWarning("Filters are not supported."); - - } else if (name.equals("mask")) { - PGraphics.showWarning("Masks are not supported."); - - } else if (name.equals("pattern")) { - PGraphics.showWarning("Patterns are not supported."); - - } else if (name.equals("stop")) { - // stop tag is handled by gradient parser, so don't warn about it - - } else if (name.equals("sodipodi:namedview")) { - // these are always in Inkscape files, the warnings get tedious - - } else if (name.equals("metadata") - || name.equals("title") || name.equals("desc")) { - // fontforge just stuffs in as a comment. - // All harmless stuff, irrelevant to rendering. - return null; - - } else if (!name.startsWith("#")) { - PGraphics.showWarning("Ignoring <" + name + "> tag."); -// new Exception().printStackTrace(); - } - return shape; - } - - - protected void parseLine() { - kind = LINE; - family = PRIMITIVE; - params = new float[] { - getFloatWithUnit(element, "x1", svgWidth), - getFloatWithUnit(element, "y1", svgHeight), - getFloatWithUnit(element, "x2", svgWidth), - getFloatWithUnit(element, "y2", svgHeight) - }; - } - - - /** - * Handles parsing ellipse and circle tags. - * @param circle true if this is a circle and not an ellipse - */ - protected void parseEllipse(boolean circle) { - kind = ELLIPSE; - family = PRIMITIVE; - params = new float[4]; - - params[0] = getFloatWithUnit(element, "cx", svgWidth); - params[1] = getFloatWithUnit(element, "cy", svgHeight); - - float rx, ry; - if (circle) { - rx = ry = getFloatWithUnit(element, "r", svgSizeXY); - } else { - rx = getFloatWithUnit(element, "rx", svgWidth); - ry = getFloatWithUnit(element, "ry", svgHeight); - } - params[0] -= rx; - params[1] -= ry; - - params[2] = rx*2; - params[3] = ry*2; - } - - - protected void parseRect() { - kind = RECT; - family = PRIMITIVE; - params = new float[] { - getFloatWithUnit(element, "x", svgWidth), - getFloatWithUnit(element, "y", svgHeight), - getFloatWithUnit(element, "width", svgWidth), - getFloatWithUnit(element, "height", svgHeight) - }; - } - - - protected void parseImage() { - kind = RECT; - textureMode = NORMAL; - - family = PRIMITIVE; - params = new float[] { - getFloatWithUnit(element, "x", svgWidth), - getFloatWithUnit(element, "y", svgHeight), - getFloatWithUnit(element, "width", svgWidth), - getFloatWithUnit(element, "height", svgHeight) - }; - - this.imagePath = element.getString("xlink:href"); - } - - /** - * Parse a polyline or polygon from an SVG file. - * Syntax defined at http://www.w3.org/TR/SVG/shapes.html#PointsBNF - * @param close true if shape is closed (polygon), false if not (polyline) - */ - protected void parsePoly(boolean close) { - family = PATH; - this.close = close; - - String pointsAttr = element.getString("points"); - if (pointsAttr != null) { - String[] pointsBuffer = PApplet.splitTokens(pointsAttr); - vertexCount = pointsBuffer.length; - vertices = new float[vertexCount][2]; - for (int i = 0; i < vertexCount; i++) { - String pb[] = PApplet.splitTokens(pointsBuffer[i], ", \t\r\n"); - vertices[i][X] = Float.parseFloat(pb[0]); - vertices[i][Y] = Float.parseFloat(pb[1]); - } - } - } - - - protected void parsePath() { - family = PATH; - kind = 0; - - String pathData = element.getString("d"); - if (pathData == null || PApplet.trim(pathData).length() == 0) { - return; - } - char[] pathDataChars = pathData.toCharArray(); - - StringBuilder pathBuffer = new StringBuilder(); - boolean lastSeparate = false; - - for (int i = 0; i < pathDataChars.length; i++) { - char c = pathDataChars[i]; - boolean separate = false; - - if (c == 'M' || c == 'm' || - c == 'L' || c == 'l' || - c == 'H' || c == 'h' || - c == 'V' || c == 'v' || - c == 'C' || c == 'c' || // beziers - c == 'S' || c == 's' || - c == 'Q' || c == 'q' || // quadratic beziers - c == 'T' || c == 't' || - c == 'A' || c == 'a' || // elliptical arc - c == 'Z' || c == 'z' || // closepath - c == ',') { - separate = true; - if (i != 0) { - pathBuffer.append("|"); - } - } - if (c == 'Z' || c == 'z') { - separate = false; - } - if (c == '-' && !lastSeparate) { - // allow for 'e' notation in numbers, e.g. 2.10e-9 - // http://dev.processing.org/bugs/show_bug.cgi?id=1408 - if (i == 0 || pathDataChars[i-1] != 'e') { - pathBuffer.append("|"); - } - } - if (c != ',') { - pathBuffer.append(c); //"" + pathDataBuffer.charAt(i)); - } - if (separate && c != ',' && c != '-') { - pathBuffer.append("|"); - } - lastSeparate = separate; - } - - // use whitespace constant to get rid of extra spaces and CR or LF - String[] pathTokens = - PApplet.splitTokens(pathBuffer.toString(), "|" + WHITESPACE); - vertices = new float[pathTokens.length][2]; - vertexCodes = new int[pathTokens.length]; - - float cx = 0; - float cy = 0; - int i = 0; - - char implicitCommand = '\0'; -// char prevCommand = '\0'; - boolean prevCurve = false; - float ctrlX, ctrlY; - // store values for closepath so that relative coords work properly - float movetoX = 0; - float movetoY = 0; - - while (i < pathTokens.length) { - char c = pathTokens[i].charAt(0); - if (((c >= '0' && c <= '9') || (c == '-')) && implicitCommand != '\0') { - c = implicitCommand; - i--; - } else { - implicitCommand = c; - } - switch (c) { - - case 'M': // M - move to (absolute) - cx = PApplet.parseFloat(pathTokens[i + 1]); - cy = PApplet.parseFloat(pathTokens[i + 2]); - movetoX = cx; - movetoY = cy; - parsePathMoveto(cx, cy); - implicitCommand = 'L'; - i += 3; - break; - - case 'm': // m - move to (relative) - cx = cx + PApplet.parseFloat(pathTokens[i + 1]); - cy = cy + PApplet.parseFloat(pathTokens[i + 2]); - movetoX = cx; - movetoY = cy; - parsePathMoveto(cx, cy); - implicitCommand = 'l'; - i += 3; - break; - - case 'L': - cx = PApplet.parseFloat(pathTokens[i + 1]); - cy = PApplet.parseFloat(pathTokens[i + 2]); - parsePathLineto(cx, cy); - i += 3; - break; - - case 'l': - cx = cx + PApplet.parseFloat(pathTokens[i + 1]); - cy = cy + PApplet.parseFloat(pathTokens[i + 2]); - parsePathLineto(cx, cy); - i += 3; - break; - - // horizontal lineto absolute - case 'H': - cx = PApplet.parseFloat(pathTokens[i + 1]); - parsePathLineto(cx, cy); - i += 2; - break; - - // horizontal lineto relative - case 'h': - cx = cx + PApplet.parseFloat(pathTokens[i + 1]); - parsePathLineto(cx, cy); - i += 2; - break; - - case 'V': - cy = PApplet.parseFloat(pathTokens[i + 1]); - parsePathLineto(cx, cy); - i += 2; - break; - - case 'v': - cy = cy + PApplet.parseFloat(pathTokens[i + 1]); - parsePathLineto(cx, cy); - i += 2; - break; - - // C - curve to (absolute) - case 'C': { - float ctrlX1 = PApplet.parseFloat(pathTokens[i + 1]); - float ctrlY1 = PApplet.parseFloat(pathTokens[i + 2]); - float ctrlX2 = PApplet.parseFloat(pathTokens[i + 3]); - float ctrlY2 = PApplet.parseFloat(pathTokens[i + 4]); - float endX = PApplet.parseFloat(pathTokens[i + 5]); - float endY = PApplet.parseFloat(pathTokens[i + 6]); - parsePathCurveto(ctrlX1, ctrlY1, ctrlX2, ctrlY2, endX, endY); - cx = endX; - cy = endY; - i += 7; - prevCurve = true; - } - break; - - // c - curve to (relative) - case 'c': { - float ctrlX1 = cx + PApplet.parseFloat(pathTokens[i + 1]); - float ctrlY1 = cy + PApplet.parseFloat(pathTokens[i + 2]); - float ctrlX2 = cx + PApplet.parseFloat(pathTokens[i + 3]); - float ctrlY2 = cy + PApplet.parseFloat(pathTokens[i + 4]); - float endX = cx + PApplet.parseFloat(pathTokens[i + 5]); - float endY = cy + PApplet.parseFloat(pathTokens[i + 6]); - parsePathCurveto(ctrlX1, ctrlY1, ctrlX2, ctrlY2, endX, endY); - cx = endX; - cy = endY; - i += 7; - prevCurve = true; - } - break; - - // S - curve to shorthand (absolute) - // Draws a cubic Bézier curve from the current point to (x,y). The first - // control point is assumed to be the reflection of the second control - // point on the previous command relative to the current point. - // (x2,y2) is the second control point (i.e., the control point - // at the end of the curve). S (uppercase) indicates that absolute - // coordinates will follow; s (lowercase) indicates that relative - // coordinates will follow. Multiple sets of coordinates may be specified - // to draw a polybézier. At the end of the command, the new current point - // becomes the final (x,y) coordinate pair used in the polybézier. - case 'S': { - // (If there is no previous command or if the previous command was not - // an C, c, S or s, assume the first control point is coincident with - // the current point.) - if (!prevCurve) { - ctrlX = cx; - ctrlY = cy; - } else { - float ppx = vertices[vertexCount-2][X]; - float ppy = vertices[vertexCount-2][Y]; - float px = vertices[vertexCount-1][X]; - float py = vertices[vertexCount-1][Y]; - ctrlX = px + (px - ppx); - ctrlY = py + (py - ppy); - } - float ctrlX2 = PApplet.parseFloat(pathTokens[i + 1]); - float ctrlY2 = PApplet.parseFloat(pathTokens[i + 2]); - float endX = PApplet.parseFloat(pathTokens[i + 3]); - float endY = PApplet.parseFloat(pathTokens[i + 4]); - parsePathCurveto(ctrlX, ctrlY, ctrlX2, ctrlY2, endX, endY); - cx = endX; - cy = endY; - i += 5; - prevCurve = true; - } - break; - - // s - curve to shorthand (relative) - case 's': { - if (!prevCurve) { - ctrlX = cx; - ctrlY = cy; - } else { - float ppx = vertices[vertexCount-2][X]; - float ppy = vertices[vertexCount-2][Y]; - float px = vertices[vertexCount-1][X]; - float py = vertices[vertexCount-1][Y]; - ctrlX = px + (px - ppx); - ctrlY = py + (py - ppy); - } - float ctrlX2 = cx + PApplet.parseFloat(pathTokens[i + 1]); - float ctrlY2 = cy + PApplet.parseFloat(pathTokens[i + 2]); - float endX = cx + PApplet.parseFloat(pathTokens[i + 3]); - float endY = cy + PApplet.parseFloat(pathTokens[i + 4]); - parsePathCurveto(ctrlX, ctrlY, ctrlX2, ctrlY2, endX, endY); - cx = endX; - cy = endY; - i += 5; - prevCurve = true; - } - break; - - // Q - quadratic curve to (absolute) - // Draws a quadratic Bézier curve from the current point to (x,y) using - // (x1,y1) as the control point. Q (uppercase) indicates that absolute - // coordinates will follow; q (lowercase) indicates that relative - // coordinates will follow. Multiple sets of coordinates may be specified - // to draw a polybézier. At the end of the command, the new current point - // becomes the final (x,y) coordinate pair used in the polybézier. - case 'Q': { - ctrlX = PApplet.parseFloat(pathTokens[i + 1]); - ctrlY = PApplet.parseFloat(pathTokens[i + 2]); - float endX = PApplet.parseFloat(pathTokens[i + 3]); - float endY = PApplet.parseFloat(pathTokens[i + 4]); - //parsePathQuadto(cx, cy, ctrlX, ctrlY, endX, endY); - parsePathQuadto(ctrlX, ctrlY, endX, endY); - cx = endX; - cy = endY; - i += 5; - prevCurve = true; - } - break; - - // q - quadratic curve to (relative) - case 'q': { - ctrlX = cx + PApplet.parseFloat(pathTokens[i + 1]); - ctrlY = cy + PApplet.parseFloat(pathTokens[i + 2]); - float endX = cx + PApplet.parseFloat(pathTokens[i + 3]); - float endY = cy + PApplet.parseFloat(pathTokens[i + 4]); - //parsePathQuadto(cx, cy, ctrlX, ctrlY, endX, endY); - parsePathQuadto(ctrlX, ctrlY, endX, endY); - cx = endX; - cy = endY; - i += 5; - prevCurve = true; - } - break; - - // T - quadratic curveto shorthand (absolute) - // The control point is assumed to be the reflection of the control - // point on the previous command relative to the current point. - case 'T': { - // If there is no previous command or if the previous command was - // not a Q, q, T or t, assume the control point is coincident - // with the current point. - if (!prevCurve) { - ctrlX = cx; - ctrlY = cy; - } else { - float ppx = vertices[vertexCount-2][X]; - float ppy = vertices[vertexCount-2][Y]; - float px = vertices[vertexCount-1][X]; - float py = vertices[vertexCount-1][Y]; - ctrlX = px + (px - ppx); - ctrlY = py + (py - ppy); - } - float endX = PApplet.parseFloat(pathTokens[i + 1]); - float endY = PApplet.parseFloat(pathTokens[i + 2]); - //parsePathQuadto(cx, cy, ctrlX, ctrlY, endX, endY); - parsePathQuadto(ctrlX, ctrlY, endX, endY); - cx = endX; - cy = endY; - i += 3; - prevCurve = true; - } - break; - - // t - quadratic curveto shorthand (relative) - case 't': { - if (!prevCurve) { - ctrlX = cx; - ctrlY = cy; - } else { - float ppx = vertices[vertexCount-2][X]; - float ppy = vertices[vertexCount-2][Y]; - float px = vertices[vertexCount-1][X]; - float py = vertices[vertexCount-1][Y]; - ctrlX = px + (px - ppx); - ctrlY = py + (py - ppy); - } - float endX = cx + PApplet.parseFloat(pathTokens[i + 1]); - float endY = cy + PApplet.parseFloat(pathTokens[i + 2]); - //parsePathQuadto(cx, cy, ctrlX, ctrlY, endX, endY); - parsePathQuadto(ctrlX, ctrlY, endX, endY); - cx = endX; - cy = endY; - i += 3; - prevCurve = true; - } - break; - - // A - elliptical arc to (absolute) - case 'A': { - float rx = PApplet.parseFloat(pathTokens[i + 1]); - float ry = PApplet.parseFloat(pathTokens[i + 2]); - float angle = PApplet.parseFloat(pathTokens[i + 3]); - boolean fa = PApplet.parseFloat(pathTokens[i + 4]) != 0; - boolean fs = PApplet.parseFloat(pathTokens[i + 5]) != 0; - float endX = PApplet.parseFloat(pathTokens[i + 6]); - float endY = PApplet.parseFloat(pathTokens[i + 7]); - parsePathArcto(cx, cy, rx, ry, angle, fa, fs, endX, endY); - cx = endX; - cy = endY; - i += 8; - prevCurve = true; - } - break; - - // a - elliptical arc to (relative) - case 'a': { - float rx = PApplet.parseFloat(pathTokens[i + 1]); - float ry = PApplet.parseFloat(pathTokens[i + 2]); - float angle = PApplet.parseFloat(pathTokens[i + 3]); - boolean fa = PApplet.parseFloat(pathTokens[i + 4]) != 0; - boolean fs = PApplet.parseFloat(pathTokens[i + 5]) != 0; - float endX = cx + PApplet.parseFloat(pathTokens[i + 6]); - float endY = cy + PApplet.parseFloat(pathTokens[i + 7]); - parsePathArcto(cx, cy, rx, ry, angle, fa, fs, endX, endY); - cx = endX; - cy = endY; - i += 8; - prevCurve = true; - } - break; - - case 'Z': - case 'z': - // since closing the path, the 'current' point needs - // to return back to the last moveto location. - // http://code.google.com/p/processing/issues/detail?id=1058 - cx = movetoX; - cy = movetoY; - close = true; - i++; - break; - - default: - String parsed = - PApplet.join(PApplet.subset(pathTokens, 0, i), ","); - String unparsed = - PApplet.join(PApplet.subset(pathTokens, i), ","); - System.err.println("parsed: " + parsed); - System.err.println("unparsed: " + unparsed); - throw new RuntimeException("shape command not handled: " + pathTokens[i]); - } -// prevCommand = c; - } - } - - -// private void parsePathCheck(int num) { -// if (vertexCount + num-1 >= vertices.length) { -// //vertices = (float[][]) PApplet.expand(vertices); -// float[][] temp = new float[vertexCount << 1][2]; -// System.arraycopy(vertices, 0, temp, 0, vertexCount); -// vertices = temp; -// } -// } - - private void parsePathVertex(float x, float y) { - if (vertexCount == vertices.length) { - //vertices = (float[][]) PApplet.expand(vertices); - float[][] temp = new float[vertexCount << 1][2]; - System.arraycopy(vertices, 0, temp, 0, vertexCount); - vertices = temp; - } - vertices[vertexCount][X] = x; - vertices[vertexCount][Y] = y; - vertexCount++; - } - - - private void parsePathCode(int what) { - if (vertexCodeCount == vertexCodes.length) { - vertexCodes = PApplet.expand(vertexCodes); - } - vertexCodes[vertexCodeCount++] = what; - } - - - private void parsePathMoveto(float px, float py) { - if (vertexCount > 0) { - parsePathCode(BREAK); - } - parsePathCode(VERTEX); - parsePathVertex(px, py); - } - - - private void parsePathLineto(float px, float py) { - parsePathCode(VERTEX); - parsePathVertex(px, py); - } - - - private void parsePathCurveto(float x1, float y1, - float x2, float y2, - float x3, float y3) { - parsePathCode(BEZIER_VERTEX); - parsePathVertex(x1, y1); - parsePathVertex(x2, y2); - parsePathVertex(x3, y3); - } - -// private void parsePathQuadto(float x1, float y1, -// float cx, float cy, -// float x2, float y2) { -// //System.out.println("quadto: " + x1 + "," + y1 + " " + cx + "," + cy + " " + x2 + "," + y2); -//// parsePathCode(BEZIER_VERTEX); -// parsePathCode(QUAD_BEZIER_VERTEX); -// // x1/y1 already covered by last moveto, lineto, or curveto -// -// parsePathVertex(x1 + ((cx-x1)*2/3.0f), y1 + ((cy-y1)*2/3.0f)); -// parsePathVertex(x2 + ((cx-x2)*2/3.0f), y2 + ((cy-y2)*2/3.0f)); -// parsePathVertex(x2, y2); -// } - - private void parsePathQuadto(float cx, float cy, - float x2, float y2) { - //System.out.println("quadto: " + x1 + "," + y1 + " " + cx + "," + cy + " " + x2 + "," + y2); -// parsePathCode(BEZIER_VERTEX); - parsePathCode(QUADRATIC_VERTEX); - // x1/y1 already covered by last moveto, lineto, or curveto - parsePathVertex(cx, cy); - parsePathVertex(x2, y2); - } - - - // Approximates elliptical arc by several bezier segments. - // Meets SVG standard requirements from: - // http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands - // http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes - // Based on arc to bezier curve equations from: - // http://www.spaceroots.org/documents/ellipse/node22.html - private void parsePathArcto(float x1, float y1, - float rx, float ry, - float angle, - boolean fa, boolean fs, - float x2, float y2) { - if (x1 == x2 && y1 == y2) return; - if (rx == 0 || ry == 0) { parsePathLineto(x2, y2); return; } - - rx = PApplet.abs(rx); ry = PApplet.abs(ry); - - float phi = PApplet.radians(((angle % 360) + 360) % 360); - float cosPhi = PApplet.cos(phi), sinPhi = PApplet.sin(phi); - - float x1r = ( cosPhi * (x1 - x2) + sinPhi * (y1 - y2)) / 2; - float y1r = (-sinPhi * (x1 - x2) + cosPhi * (y1 - y2)) / 2; - - float cxr, cyr; - { - float A = (x1r*x1r) / (rx*rx) + (y1r*y1r) / (ry*ry); - if (A > 1) { - // No solution, scale ellipse up according to SVG standard - float sqrtA = PApplet.sqrt(A); - rx *= sqrtA; cxr = 0; - ry *= sqrtA; cyr = 0; - } else { - float k = ((fa == fs) ? -1f : 1f) * - PApplet.sqrt((rx*rx * ry*ry) / ((rx*rx * y1r*y1r) + (ry*ry * x1r*x1r)) - 1f); - cxr = k * rx * y1r / ry; - cyr = -k * ry * x1r / rx; - } - } - - float cx = cosPhi * cxr - sinPhi * cyr + (x1 + x2) / 2; - float cy = sinPhi * cxr + cosPhi * cyr + (y1 + y2) / 2; - - float phi1, phiDelta; - { - float sx = ( x1r - cxr) / rx, sy = ( y1r - cyr) / ry; - float tx = (-x1r - cxr) / rx, ty = (-y1r - cyr) / ry; - phi1 = PApplet.atan2(sy, sx); - phiDelta = (((PApplet.atan2(ty, tx) - phi1) % TWO_PI) + TWO_PI) % TWO_PI; - if (!fs) phiDelta -= TWO_PI; - } - - // One segment can not cover more that PI, less than PI/2 is - // recommended to avoid visible inaccuracies caused by rounding errors - int segmentCount = PApplet.ceil(PApplet.abs(phiDelta) / TWO_PI * 4); - - float inc = phiDelta / segmentCount; - float a = PApplet.sin(inc) * - (PApplet.sqrt(4 + 3 * PApplet.sq(PApplet.tan(inc / 2))) - 1) / 3; - - float sinPhi1 = PApplet.sin(phi1), cosPhi1 = PApplet.cos(phi1); - - float p1x = x1; - float p1y = y1; - float relq1x = a * (-rx * cosPhi * sinPhi1 - ry * sinPhi * cosPhi1); - float relq1y = a * (-rx * sinPhi * sinPhi1 + ry * cosPhi * cosPhi1); - - for (int i = 0; i < segmentCount; i++) { - float eta = phi1 + (i + 1) * inc; - float sinEta = PApplet.sin(eta), cosEta = PApplet.cos(eta); - - float p2x = cx + rx * cosPhi * cosEta - ry * sinPhi * sinEta; - float p2y = cy + rx * sinPhi * cosEta + ry * cosPhi * sinEta; - float relq2x = a * (-rx * cosPhi * sinEta - ry * sinPhi * cosEta); - float relq2y = a * (-rx * sinPhi * sinEta + ry * cosPhi * cosEta); - - if (i == segmentCount - 1) { p2x = x2; p2y = y2; } - - parsePathCode(BEZIER_VERTEX); - parsePathVertex(p1x + relq1x, p1y + relq1y); - parsePathVertex(p2x - relq2x, p2y - relq2y); - parsePathVertex(p2x, p2y); - - p1x = p2x; relq1x = relq2x; - p1y = p2y; relq1y = relq2y; - } - } - - - /** - * Parse the specified SVG matrix into a PMatrix2D. Note that PMatrix2D - * is rotated relative to the SVG definition, so parameters are rearranged - * here. More about the transformation matrices in - * this section - * of the SVG documentation. - * @param matrixStr text of the matrix param. - * @return a good old-fashioned PMatrix2D - */ - static protected PMatrix2D parseTransform(String matrixStr) { - matrixStr = matrixStr.trim(); - PMatrix2D outgoing = null; - int start = 0; - int stop = -1; - while ((stop = matrixStr.indexOf(')', start)) != -1) { - PMatrix2D m = parseSingleTransform(matrixStr.substring(start, stop+1)); - if (outgoing == null) { - outgoing = m; - } else { - outgoing.apply(m); - } - start = stop + 1; - } - return outgoing; - } - - - static protected PMatrix2D parseSingleTransform(String matrixStr) { - //String[] pieces = PApplet.match(matrixStr, "^\\s*(\\w+)\\((.*)\\)\\s*$"); - String[] pieces = PApplet.match(matrixStr, "[,\\s]*(\\w+)\\((.*)\\)"); - if (pieces == null) { - System.err.println("Could not parse transform " + matrixStr); - return null; - } - float[] m = PApplet.parseFloat(PApplet.splitTokens(pieces[2], ", ")); - if (pieces[1].equals("matrix")) { - return new PMatrix2D(m[0], m[2], m[4], m[1], m[3], m[5]); - - } else if (pieces[1].equals("translate")) { - float tx = m[0]; - float ty = (m.length == 2) ? m[1] : m[0]; - return new PMatrix2D(1, 0, tx, 0, 1, ty); - - } else if (pieces[1].equals("scale")) { - float sx = m[0]; - float sy = (m.length == 2) ? m[1] : m[0]; - return new PMatrix2D(sx, 0, 0, 0, sy, 0); - - } else if (pieces[1].equals("rotate")) { - float angle = m[0]; - - if (m.length == 1) { - float c = PApplet.cos(angle); - float s = PApplet.sin(angle); - // SVG version is cos(a) sin(a) -sin(a) cos(a) 0 0 - return new PMatrix2D(c, -s, 0, s, c, 0); - - } else if (m.length == 3) { - PMatrix2D mat = new PMatrix2D(0, 1, m[1], 1, 0, m[2]); - mat.rotate(m[0]); - mat.translate(-m[1], -m[2]); - return mat; - } - - } else if (pieces[1].equals("skewX")) { - return new PMatrix2D(1, 0, 1, PApplet.tan(m[0]), 0, 0); - - } else if (pieces[1].equals("skewY")) { - return new PMatrix2D(1, 0, 1, 0, PApplet.tan(m[0]), 0); - } - return null; - } - - - protected void parseColors(XML properties) { - if (properties.hasAttribute("opacity")) { - String opacityText = properties.getString("opacity"); - setOpacity(opacityText); - } - - if (properties.hasAttribute("stroke")) { - String strokeText = properties.getString("stroke"); - setColor(strokeText, false); - } - - if (properties.hasAttribute("stroke-opacity")) { - String strokeOpacityText = properties.getString("stroke-opacity"); - setStrokeOpacity(strokeOpacityText); - } - - if (properties.hasAttribute("stroke-width")) { - // if NaN (i.e. if it's 'inherit') then default back to the inherit setting - String lineweight = properties.getString("stroke-width"); - setStrokeWeight(lineweight); - } - - if (properties.hasAttribute("stroke-linejoin")) { - String linejoin = properties.getString("stroke-linejoin"); - setStrokeJoin(linejoin); - } - - if (properties.hasAttribute("stroke-linecap")) { - String linecap = properties.getString("stroke-linecap"); - setStrokeCap(linecap); - } - - // fill defaults to black (though stroke defaults to "none") - // http://www.w3.org/TR/SVG/painting.html#FillProperties - if (properties.hasAttribute("fill")) { - String fillText = properties.getString("fill"); - setColor(fillText, true); - } - - if (properties.hasAttribute("fill-opacity")) { - String fillOpacityText = properties.getString("fill-opacity"); - setFillOpacity(fillOpacityText); - } - - if (properties.hasAttribute("style")) { - String styleText = properties.getString("style"); - String[] styleTokens = PApplet.splitTokens(styleText, ";"); - - //PApplet.println(styleTokens); - for (int i = 0; i < styleTokens.length; i++) { - String[] tokens = PApplet.splitTokens(styleTokens[i], ":"); - //PApplet.println(tokens); - - tokens[0] = PApplet.trim(tokens[0]); - - if (tokens[0].equals("fill")) { - setColor(tokens[1], true); - - } else if(tokens[0].equals("fill-opacity")) { - setFillOpacity(tokens[1]); - - } else if(tokens[0].equals("stroke")) { - setColor(tokens[1], false); - - } else if(tokens[0].equals("stroke-width")) { - setStrokeWeight(tokens[1]); - - } else if(tokens[0].equals("stroke-linecap")) { - setStrokeCap(tokens[1]); - - } else if(tokens[0].equals("stroke-linejoin")) { - setStrokeJoin(tokens[1]); - - } else if(tokens[0].equals("stroke-opacity")) { - setStrokeOpacity(tokens[1]); - - } else if(tokens[0].equals("opacity")) { - setOpacity(tokens[1]); - - } else { - // Other attributes are not yet implemented - } - } - } - } - - - void setOpacity(String opacityText) { - opacity = PApplet.parseFloat(opacityText); - strokeColor = ((int) (opacity * 255)) << 24 | strokeColor & 0xFFFFFF; - fillColor = ((int) (opacity * 255)) << 24 | fillColor & 0xFFFFFF; - } - - - void setStrokeWeight(String lineweight) { - strokeWeight = parseUnitSize(lineweight, svgSizeXY); - } - - - void setStrokeOpacity(String opacityText) { - strokeOpacity = PApplet.parseFloat(opacityText); - strokeColor = ((int) (strokeOpacity * 255)) << 24 | strokeColor & 0xFFFFFF; - } - - - void setStrokeJoin(String linejoin) { - if (linejoin.equals("inherit")) { - // do nothing, will inherit automatically - - } else if (linejoin.equals("miter")) { - strokeJoin = PConstants.MITER; - - } else if (linejoin.equals("round")) { - strokeJoin = PConstants.ROUND; - - } else if (linejoin.equals("bevel")) { - strokeJoin = PConstants.BEVEL; - } - } - - - void setStrokeCap(String linecap) { - if (linecap.equals("inherit")) { - // do nothing, will inherit automatically - - } else if (linecap.equals("butt")) { - strokeCap = PConstants.SQUARE; - - } else if (linecap.equals("round")) { - strokeCap = PConstants.ROUND; - - } else if (linecap.equals("square")) { - strokeCap = PConstants.PROJECT; - } - } - - - void setFillOpacity(String opacityText) { - fillOpacity = PApplet.parseFloat(opacityText); - fillColor = ((int) (fillOpacity * 255)) << 24 | fillColor & 0xFFFFFF; - } - - - void setColor(String colorText, boolean isFill) { - colorText = colorText.trim(); - int opacityMask = fillColor & 0xFF000000; - boolean visible = true; - int color = 0; - String name = ""; -// String lColorText = colorText.toLowerCase(); - Gradient gradient = null; -// Object paint = null; - if (colorText.equals("none")) { - visible = false; - } else if (colorText.startsWith("url(#")) { - name = colorText.substring(5, colorText.length() - 1); - Object object = findChild(name); - if (object instanceof Gradient) { - gradient = (Gradient) object; - // in 3.0a11, do this on first draw inside PShapeJava2D -// paint = calcGradientPaint(gradient); //, opacity); - } else { -// visible = false; - System.err.println("url " + name + " refers to unexpected data: " + object); - } - } else { - // Prints errors itself. - color = opacityMask | parseSimpleColor(colorText); - } - if (isFill) { - fill = visible; - fillColor = color; - fillName = name; - fillGradient = gradient; -// fillGradientPaint = paint; - } else { - stroke = visible; - strokeColor = color; - strokeName = name; - strokeGradient = gradient; -// strokeGradientPaint = paint; - } - } - - - /** - * Parses the "color" datatype only, and prints an error if it is not of this form. - * http://www.w3.org/TR/SVG/types.html#DataTypeColor - * @return 0xRRGGBB (no alpha). Zero on error. - */ - static protected int parseSimpleColor(String colorText) { - colorText = colorText.toLowerCase().trim(); - //if (colorNames.containsKey(colorText)) { - if (colorNames.hasKey(colorText)) { - return colorNames.get(colorText); - } else if (colorText.startsWith("#")) { - if (colorText.length() == 4) { - // Short form: #ABC, transform to long form #AABBCC - colorText = colorText.replaceAll("^#(.)(.)(.)$", "#$1$1$2$2$3$3"); - } - return (Integer.parseInt(colorText.substring(1), 16)) & 0xFFFFFF; - //System.out.println("hex for fill is " + PApplet.hex(fillColor)); - } else if (colorText.startsWith("rgb")) { - return parseRGB(colorText); - } else { - System.err.println("Cannot parse \"" + colorText + "\"."); - return 0; - } - } - - - /** - * Deliberately conforms to the HTML 4.01 color spec + en-gb grey, rather - * than the (unlikely to be useful) entire 147-color system used in SVG. - */ - static protected IntDict colorNames = new IntDict(new Object[][] { - { "aqua", 0x00ffff }, - { "black", 0x000000 }, - { "blue", 0x0000ff }, - { "fuchsia", 0xff00ff }, - { "gray", 0x808080 }, - { "grey", 0x808080 }, - { "green", 0x008000 }, - { "lime", 0x00ff00 }, - { "maroon", 0x800000 }, - { "navy", 0x000080 }, - { "olive", 0x808000 }, - { "purple", 0x800080 }, - { "red", 0xff0000 }, - { "silver", 0xc0c0c0 }, - { "teal", 0x008080 }, - { "white", 0xffffff }, - { "yellow", 0xffff00 } - }); - - /* - static protected Map colorNames; - static { - colorNames = new HashMap(); - colorNames.put("aqua", 0x00ffff); - colorNames.put("black", 0x000000); - colorNames.put("blue", 0x0000ff); - colorNames.put("fuchsia", 0xff00ff); - colorNames.put("gray", 0x808080); - colorNames.put("grey", 0x808080); - colorNames.put("green", 0x008000); - colorNames.put("lime", 0x00ff00); - colorNames.put("maroon", 0x800000); - colorNames.put("navy", 0x000080); - colorNames.put("olive", 0x808000); - colorNames.put("purple", 0x800080); - colorNames.put("red", 0xff0000); - colorNames.put("silver", 0xc0c0c0); - colorNames.put("teal", 0x008080); - colorNames.put("white", 0xffffff); - colorNames.put("yellow", 0xffff00); - } - */ - - static protected int parseRGB(String what) { - int leftParen = what.indexOf('(') + 1; - int rightParen = what.indexOf(')'); - String sub = what.substring(leftParen, rightParen); - String[] values = PApplet.splitTokens(sub, ", "); - int rgbValue = 0; - if (values.length == 3) { - // Color spec allows for rgb values to be percentages. - for (int i = 0; i < 3; i++) { - rgbValue <<= 8; - if (values[i].endsWith("%")) { - rgbValue |= (int)(PApplet.constrain(255*parseFloatOrPercent(values[i]), 0, 255)); - } else { - rgbValue |= PApplet.constrain(PApplet.parseInt(values[i]), 0, 255); - } - } - } else System.err.println("Could not read color \"" + what + "\"."); - - return rgbValue; - } - - - //static protected Map parseStyleAttributes(String style) { - static protected StringDict parseStyleAttributes(String style) { - //Map table = new HashMap(); - StringDict table = new StringDict(); -// if (style == null) return table; - if (style != null) { - String[] pieces = style.split(";"); - for (int i = 0; i < pieces.length; i++) { - String[] parts = pieces[i].split(":"); - //table.put(parts[0], parts[1]); - table.set(parts[0], parts[1]); - } - } - return table; - } - - - /** - * Used in place of element.getFloatAttribute(a) because we can - * have a unit suffix (length or coordinate). - * @param element what to parse - * @param attribute name of the attribute to get - * @param relativeTo (float) Used for %. When relative to viewbox, should - * be svgWidth for horizontal dimentions, svgHeight for vertical, and - * svgXYSize for anything else. - * @return unit-parsed version of the data - */ - static protected float getFloatWithUnit(XML element, String attribute, float relativeTo) { - String val = element.getString(attribute); - return (val == null) ? 0 : parseUnitSize(val, relativeTo); - } - - - /** - * Parse a size that may have a suffix for its units. - * This assumes 90dpi, which implies, as given in the - * units spec: - *
    - *
  • "1pt" equals "1.25px" (and therefore 1.25 user units) - *
  • "1pc" equals "15px" (and therefore 15 user units) - *
  • "1mm" would be "3.543307px" (3.543307 user units) - *
  • "1cm" equals "35.43307px" (and therefore 35.43307 user units) - *
  • "1in" equals "90px" (and therefore 90 user units) - *
- * @param relativeTo (float) Used for %. When relative to viewbox, should - * be svgWidth for horizontal dimentions, svgHeight for vertical, and - * svgXYSize for anything else. - */ - static protected float parseUnitSize(String text, float relativeTo) { - int len = text.length() - 2; - - if (text.endsWith("pt")) { - return PApplet.parseFloat(text.substring(0, len)) * 1.25f; - } else if (text.endsWith("pc")) { - return PApplet.parseFloat(text.substring(0, len)) * 15; - } else if (text.endsWith("mm")) { - return PApplet.parseFloat(text.substring(0, len)) * 3.543307f; - } else if (text.endsWith("cm")) { - return PApplet.parseFloat(text.substring(0, len)) * 35.43307f; - } else if (text.endsWith("in")) { - return PApplet.parseFloat(text.substring(0, len)) * 90; - } else if (text.endsWith("px")) { - return PApplet.parseFloat(text.substring(0, len)); - } else if (text.endsWith("%")) { - return relativeTo * parseFloatOrPercent(text); - } else { - return PApplet.parseFloat(text); - } - } - - - static protected float parseFloatOrPercent(String text) { - text = text.trim(); - if (text.endsWith("%")) { - return Float.parseFloat(text.substring(0, text.length() - 1)) / 100.0f; - } else { - return Float.parseFloat(text); - } - } - - - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - - static public class Gradient extends PShapeSVGExtended { - AffineTransform transform; - - public float[] offset; - public int[] color; - public int count; - - public Gradient(PShapeSVGExtended parent, XML properties) { - super(parent, properties, true); - - XML elements[] = properties.getChildren(); - offset = new float[elements.length]; - color = new int[elements.length]; - - // - for (int i = 0; i < elements.length; i++) { - XML elem = elements[i]; - String name = elem.getName(); - if (name.equals("stop")) { - String offsetAttr = elem.getString("offset"); - offset[count] = parseFloatOrPercent(offsetAttr); - - String style = elem.getString("style"); - //Map styles = parseStyleAttributes(style); - StringDict styles = parseStyleAttributes(style); - - String colorStr = styles.get("stop-color"); - if (colorStr == null) { - colorStr = elem.getString("stop-color"); - if (colorStr == null) colorStr = "#000000"; - } - String opacityStr = styles.get("stop-opacity"); - if (opacityStr == null) { - opacityStr = elem.getString("stop-opacity"); - if (opacityStr == null) opacityStr = "1"; - } - int tupacity = PApplet.constrain( - (int)(PApplet.parseFloat(opacityStr) * 255), 0, 255); - color[count] = (tupacity << 24) | parseSimpleColor(colorStr); - count++; - } - } - offset = PApplet.subset(offset, 0, count); - color = PApplet.subset(color, 0, count); - } - } - - - public class LinearGradient extends Gradient { - public float x1, y1, x2, y2; - - public LinearGradient(PShapeSVGExtended parent, XML properties) { - super(parent, properties); - - this.x1 = getFloatWithUnit(properties, "x1", svgWidth); - this.y1 = getFloatWithUnit(properties, "y1", svgHeight); - this.x2 = getFloatWithUnit(properties, "x2", svgWidth); - this.y2 = getFloatWithUnit(properties, "y2", svgHeight); - - String transformStr = - properties.getString("gradientTransform"); - - if (transformStr != null) { - float t[] = parseTransform(transformStr).get(null); - this.transform = new AffineTransform(t[0], t[3], t[1], t[4], t[2], t[5]); - - Point2D t1 = transform.transform(new Point2D.Float(x1, y1), null); - Point2D t2 = transform.transform(new Point2D.Float(x2, y2), null); - - this.x1 = (float) t1.getX(); - this.y1 = (float) t1.getY(); - this.x2 = (float) t2.getX(); - this.y2 = (float) t2.getY(); - } - } - } - - - public class RadialGradient extends Gradient { - public float cx, cy, r; - - public RadialGradient(PShapeSVGExtended parent, XML properties) { - super(parent, properties); - - this.cx = getFloatWithUnit(properties, "cx", svgWidth); - this.cy = getFloatWithUnit(properties, "cy", svgHeight); - this.r = getFloatWithUnit(properties, "r", svgSizeXY); - - String transformStr = - properties.getString("gradientTransform"); - - if (transformStr != null) { - float t[] = parseTransform(transformStr).get(null); - this.transform = new AffineTransform(t[0], t[3], t[1], t[4], t[2], t[5]); - - Point2D t1 = transform.transform(new Point2D.Float(cx, cy), null); - Point2D t2 = transform.transform(new Point2D.Float(cx + r, cy), null); - - this.cx = (float) t1.getX(); - this.cy = (float) t1.getY(); - this.r = (float) (t2.getX() - t1.getX()); - } - } - } - - - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - public static float TEXT_QUALITY = 1; - protected PFont parseFont(XML properties) { - -// FontFace fontFace = new FontFace(this, properties); - String fontFamily = null; - float size = 10; - int weight = PLAIN; // 0 - int italic = 0; - - if (properties.hasAttribute("style")) { - String styleText = properties.getString("style"); - String[] styleTokens = PApplet.splitTokens(styleText, ";"); - - //PApplet.println(styleTokens); - for (int i = 0; i < styleTokens.length; i++) { - - String[] tokens = PApplet.splitTokens(styleTokens[i], ":"); - //PApplet.println(tokens); - - tokens[0] = PApplet.trim(tokens[0]); - - if (tokens[0].equals("font-style")) { - // PApplet.println("font-style: " + tokens[1]); - if (tokens[1].contains("italic")) { - italic = ITALIC; - } - } else if (tokens[0].equals("font-variant")) { - // PApplet.println("font-variant: " + tokens[1]); - // setFillOpacity(tokens[1]); - - } else if (tokens[0].equals("font-weight")) { - // PApplet.println("font-weight: " + tokens[1]); - - if (tokens[1].contains("bold")) { - weight = BOLD; - // PApplet.println("Bold weight ! "); - } - - - } else if (tokens[0].equals("font-stretch")) { - // not supported. - - } else if (tokens[0].equals("font-size")) { - // PApplet.println("font-size: " + tokens[1]); - size = Float.parseFloat(tokens[1].split("px")[0]); - // PApplet.println("font-size-parsed: " + size); - } else if (tokens[0].equals("line-height")) { - // not supported - - } else if (tokens[0].equals("font-family")) { - PApplet.println("Font-family: " + tokens[1]); - fontFamily = tokens[1]; - if(fontFamily.contains("'")){ - fontFamily = fontFamily.replace("'", ""); - } - - } else if (tokens[0].equals("text-align")) { - // not supported - - } else if (tokens[0].equals("letter-spacing")) { - // not supported - - } else if (tokens[0].equals("word-spacing")) { - // not supported - - } else if (tokens[0].equals("writing-mode")) { - // not supported - - } else if (tokens[0].equals("text-anchor")) { - // not supported - - } else { - // Other attributes are not yet implemented - } - } - } - if (fontFamily == null) { - return null; - } - size = size * TEXT_QUALITY; - - return createFont(fontFamily, weight | italic, size, true); - } - - protected PFont createFont(String name, int weight, float size, boolean smooth) { - -// System.out.println("Try to create a font of " + name + " family, " + weight); - java.awt.Font baseFont = new java.awt.Font(name, weight, (int) size); // PFont.findFont(name);ç - -// System.out.println("Resulting family : " + baseFont.getFamily() + " " + baseFont.getStyle()); - PFont outputPFont = new PFont(baseFont.deriveFont(size), smooth, null); - -// System.out.println("Resulting PFont family : " + outputPFont.getName()); - return outputPFont; - } - - public static class Text extends PShapeSVGExtended { - - protected PFont font; - - public Text(PShapeSVGExtended parent, XML properties) { - super(parent, properties, true); - - // get location - float x = Float.parseFloat(properties.getString("x")); - float y = Float.parseFloat(properties.getString("y")); - - if (matrix == null) { - matrix = new PMatrix2D(); - } - matrix.translate(x, y); - - family = GROUP; - - font = parseFont(properties); - - } - -// @Override -// public void drawImpl(PGraphics g){ -// } - } - - public static class LineOfText extends PShapeSVGExtended { - - String textToDisplay; - PFont font; - - public LineOfText(PShapeSVGExtended parent, XML properties) { - - // TODO: child should ideally be parsed too... - // for inline content. - super(parent, properties, false); - -// // get location - float x = Float.parseFloat(properties.getString("x")); - float y = Float.parseFloat(properties.getString("y")); - - float parentX = Float.parseFloat(parent.element.getString("x")); - float parentY = Float.parseFloat(parent.element.getString("y")); - - if (matrix == null) matrix = new PMatrix2D(); - matrix.translate(x - parentX, (y - parentY) / 2f); - - // get the first properties - parseColors(properties); - font = parseFont(properties); - - // It is a line.. - boolean isALine = properties.getString("role") == "line"; - // NO inline content yet. - if (this.childCount > 0) { - } - - String text = properties.getContent(); - textToDisplay = text; - } - - @Override - public void drawImpl(PGraphics g) { - if (font == null) { - font = ((Text) parent).font; - if (font == null) { - return; - } - } - - pre(g); - g.textFont(font, font.getSize() / TEXT_QUALITY); - g.text(textToDisplay, 0, 0); - post(g); - } - - } - - public static class Font extends PShapeSVGExtended { - public FontFace face; - - public Map namedGlyphs; - public Map unicodeGlyphs; - - public int glyphCount; - public FontGlyph[] glyphs; - public FontGlyph missingGlyph; - - int horizAdvX; - - - public Font(PShapeSVGExtended parent, XML properties) { - super(parent, properties, false); -// handle(parent, properties); - - XML[] elements = properties.getChildren(); - - horizAdvX = properties.getInt("horiz-adv-x", 0); - - namedGlyphs = new HashMap(); - unicodeGlyphs = new HashMap(); - glyphCount = 0; - glyphs = new FontGlyph[elements.length]; - - for (int i = 0; i < elements.length; i++) { - String name = elements[i].getName(); - XML elem = elements[i]; - if (name == null) { - // skip it - } else if (name.equals("glyph")) { - FontGlyph fg = new FontGlyph(this, elem, this); - if (fg.isLegit()) { - if (fg.name != null) { - namedGlyphs.put(fg.name, fg); - } - if (fg.unicode != 0) { - unicodeGlyphs.put(Character.valueOf(fg.unicode), fg); - } - } - glyphs[glyphCount++] = fg; - - } else if (name.equals("missing-glyph")) { -// System.out.println("got missing glyph inside "); - missingGlyph = new FontGlyph(this, elem, this); - } else if (name.equals("font-face")) { - face = new FontFace(this, elem); - } else { - System.err.println("Ignoring " + name + " inside "); - } - } - } - - - protected void drawShape() { - // does nothing for fonts - } - - - public void drawString(PGraphics g, String str, float x, float y, float size) { - // 1) scale by the 1.0/unitsPerEm - // 2) scale up by a font size - g.pushMatrix(); - float s = size / face.unitsPerEm; - //System.out.println("scale is " + s); - // swap y coord at the same time, since fonts have y=0 at baseline - g.translate(x, y); - g.scale(s, -s); - char[] c = str.toCharArray(); - for (int i = 0; i < c.length; i++) { - // call draw on each char (pulling it w/ the unicode table) - FontGlyph fg = unicodeGlyphs.get(Character.valueOf(c[i])); - if (fg != null) { - fg.draw(g); - // add horizAdvX/unitsPerEm to the x coordinate along the way - g.translate(fg.horizAdvX, 0); - } else { - System.err.println("'" + c[i] + "' not available."); - } - } - g.popMatrix(); - } - - - public void drawChar(PGraphics g, char c, float x, float y, float size) { - g.pushMatrix(); - float s = size / face.unitsPerEm; - g.translate(x, y); - g.scale(s, -s); - FontGlyph fg = unicodeGlyphs.get(Character.valueOf(c)); - if (fg != null) g.shape(fg); - g.popMatrix(); - } - - - public float textWidth(String str, float size) { - float w = 0; - char[] c = str.toCharArray(); - for (int i = 0; i < c.length; i++) { - // call draw on each char (pulling it w/ the unicode table) - FontGlyph fg = unicodeGlyphs.get(Character.valueOf(c[i])); - if (fg != null) { - w += (float) fg.horizAdvX / face.unitsPerEm; - } - } - return w * size; - } - } - - - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - - static class FontFace extends PShapeSVGExtended { - int horizOriginX; // dflt 0 - int horizOriginY; // dflt 0 -// int horizAdvX; // no dflt? - int vertOriginX; // dflt horizAdvX/2 - int vertOriginY; // dflt ascent - int vertAdvY; // dflt 1em (unitsPerEm value) - - String fontFamily; - int fontWeight; // can also be normal or bold (also comma separated) - String fontStretch; - int unitsPerEm; // dflt 1000 - int[] panose1; // dflt "0 0 0 0 0 0 0 0 0 0" - int ascent; - int descent; - int[] bbox; // spec says comma separated, tho not w/ forge - int underlineThickness; - int underlinePosition; - //String unicodeRange; // gonna ignore for now - - - public FontFace(PShapeSVGExtended parent, XML properties) { - super(parent, properties, true); - - unitsPerEm = properties.getInt("units-per-em", 1000); - } - - - protected void drawShape() { - // nothing to draw in the font face attribute - } - } - - - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - - public static class FontGlyph extends PShapeSVGExtended { // extends Path - public String name; - char unicode; - int horizAdvX; - - public FontGlyph(PShapeSVGExtended parent, XML properties, Font font) { - super(parent, properties, true); - super.parsePath(); // ?? - - name = properties.getString("glyph-name"); - String u = properties.getString("unicode"); - unicode = 0; - if (u != null) { - if (u.length() == 1) { - unicode = u.charAt(0); - //System.out.println("unicode for " + name + " is " + u); - } else { - System.err.println("unicode for " + name + - " is more than one char: " + u); - } - } - if (properties.hasAttribute("horiz-adv-x")) { - horizAdvX = properties.getInt("horiz-adv-x"); - } else { - horizAdvX = font.horizAdvX; - } - } - - - protected boolean isLegit() { // TODO need a better way to handle this... - return vertexCount != 0; - } - } - - - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - - /** - * Get a particular element based on its SVG ID. When editing SVG by hand, - * this is the id="" tag on any SVG element. When editing from Illustrator, - * these IDs can be edited by expanding the layers palette. The names used - * in the layers palette, both for the layers or the shapes and groups - * beneath them can be used here. - *
-   * // This code grabs "Layer 3" and the shapes beneath it.
-   * PShape layer3 = svg.getChild("Layer 3");
-   * 
- */ - @Override - public PShape getChild(String name) { - PShape found = super.getChild(name); - if (found == null) { - // Otherwise try with underscores instead of spaces - // (this is how Illustrator handles spaces in the layer names). - found = super.getChild(name.replace(' ', '_')); - } - // Set bounding box based on the parent bounding box - if (found != null) { -// found.x = this.x; -// found.y = this.y; - found.width = this.width; - found.height = this.height; - } - return found; - } - - public PMatrix getMatrix(){ - return this.matrix; - } - - - /** - * Prints out the SVG document. Useful for parsing. - */ - public void print() { - PApplet.println(element.toString()); - } -} From 661498b44150a1bb83641ea1590713ed0d78aaec Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 13 Dec 2016 17:06:58 +0100 Subject: [PATCH 46/99] Cleaning old data. --- papart/data/old/configs/Homography.txt | 16 - papart/data/old/configs/PlaneParameters.txt | 6 - papart/data/old/configs/kinectHomography.txt | 16 - papart/data/old/configs/makerboardNumPad.cfg | 113 --- .../data/old/configs/markerboard_480-499.cfg | 53 -- papart/data/old/configs/plane.txt | 8 - papart/data/old/configs/proj-homography.txt | 16 - papart/data/old/configs/proj.txt | 6 - papart/data/old/configs/projectorDist.txt | 16 - papart/data/old/configs/settings.pcc | 71 -- papart/data/old/markers/A3v1-a.svg | 783 ------------------ papart/data/old/markers/A3v1-l.svg | 235 ------ papart/data/old/markers/A3v1-r.svg | 527 ------------ papart/data/old/markers/A3v1.svg | 235 ------ papart/data/old/markers/A3v2.svg | 172 ---- papart/data/old/markers/a3/A3p1.cfg | 139 ---- papart/data/old/markers/a3/A3p1.svg | 235 ------ papart/data/old/markers/a3/A3p2.cfg | 139 ---- papart/data/old/markers/a3/A3p2.svg | 527 ------------ papart/data/old/markers/a3/A3p3.cfg | 139 ---- papart/data/old/markers/a3/A3p3.svg | 783 ------------------ papart/data/old/markers/a3/maquet/A3p1.cfg | 139 ---- papart/data/old/markers/a3/maquet/A3p1.svg | 235 ------ papart/data/old/markers/a3/maquet/A3p2.cfg | 139 ---- papart/data/old/markers/a3/maquet/A3p2.svg | 527 ------------ papart/data/old/markers/a3/maquet/A3p3.cfg | 139 ---- papart/data/old/markers/a3/maquet/A3p3.svg | 783 ------------------ .../old/markers/a3/small/A3-small1-mm.svg | 311 ------- .../data/old/markers/a3/small/A3-small1.cfg | 72 -- .../data/old/markers/a3/small/A3-small1.svg | 137 --- papart/data/old/markers/a3/small/A3p1.cfg | 72 -- papart/data/old/markers/a3/small/A3p1.svg | 235 ------ papart/data/old/markers/artkp3.svg | 158 ---- papart/data/old/markers/mini1.cfg | 38 - papart/data/old/markers/mini1.svg | 119 --- papart/data/old/markers/mini3.svg | 131 --- .../data/old/markers/my_markerboard tmp.cfg | 62 -- .../data/old/markers/my_markerboard-big.cfg | 77 -- papart/data/old/markers/my_markerboard.cfg | 69 -- papart/data/old/markers/my_markerboard0.cfg | 78 -- papart/data/old/markers/my_markerboard1.cfg | 53 -- papart/data/old/markers/my_markerboard3.cfg | 77 -- papart/data/old/markers/my_markerboard3v2.cfg | 121 --- papart/data/old/markers/my_markerboarda3.cfg | 101 --- .../old/markers/my_markerboarda3v1-mini.cfg | 139 ---- .../data/old/markers/my_markerboarda3v1.cfg | 139 ---- .../data/old/markers/my_markerboarda3v2.cfg | 139 ---- .../data/old/markers/my_markerboarda3v3.cfg | 139 ---- .../data/old/markers/my_markerboardmini.cfg | 38 - .../data/old/markers/my_markerboardmini2.cfg | 38 - papart/data/old/markers/nouveaux/2285.cfg | 38 - papart/data/old/markers/nouveaux/2285.svg | 118 --- papart/data/old/markers/nouveaux/2290.cfg | 38 - papart/data/old/markers/nouveaux/2290.svg | 108 --- papart/data/old/markers/nouveaux/2300.cfg | 38 - papart/data/old/markers/nouveaux/2300.svg | 118 --- papart/data/old/markers/nouveaux/2310.cfg | 38 - papart/data/old/markers/nouveaux/2310.svg | 118 --- papart/data/old/markers/numPad.svg | 230 ----- papart/data/old/markers/touches.svg | 269 ------ papart/data/old/shaders/Filters/alpha.frag | 9 - papart/data/old/shaders/Filters/alpha.xml | 11 - .../data/old/shaders/Filters/alphaZone.frag | 17 - papart/data/old/shaders/Filters/alphaZone.xml | 12 - papart/data/old/shaders/Filters/blur.frag | 129 --- papart/data/old/shaders/Filters/blur.xml | 12 - papart/data/old/shaders/Filters/blurZone.frag | 92 -- papart/data/old/shaders/Filters/blurZone.xml | 15 - papart/data/old/shaders/Filters/default1.vert | 14 - papart/data/old/shaders/Filters/oldFilm.frag | 149 ---- papart/data/old/shaders/Filters/oldFilm.xml | 18 - .../data/old/shaders/Filters/oldFilmZone.frag | 152 ---- .../data/old/shaders/Filters/oldFilmZone.xml | 19 - papart/data/old/shaders/Sobel.xml | 11 - papart/data/old/shaders/SobelFrag.glsl | 41 - papart/data/old/shaders/SobelVert.glsl | 7 - papart/data/old/shaders/Thermal.xml | 11 - papart/data/old/shaders/ThermalFrag.glsl | 16 - papart/data/old/shaders/ThermalVert.glsl | 7 - papart/data/old/shaders/Toon.xml | 18 - papart/data/old/shaders/ToonFrag.glsl | 169 ---- papart/data/old/shaders/ToonVert.glsl | 7 - papart/data/old/shaders/anaglyph.frag | 15 - papart/data/old/shaders/anaglyph.vert | 12 - papart/data/old/shaders/anaglyph.xml | 10 - papart/data/old/shaders/blur.frag | 151 ---- papart/data/old/shaders/blur.vert | 14 - papart/data/old/shaders/blur.xml | 15 - papart/data/old/shaders/calib.xml | 42 - papart/data/old/shaders/capSc.frag | 45 - papart/data/old/shaders/capSc.vert | 26 - papart/data/old/shaders/classique/color.frag | 8 - papart/data/old/shaders/classique/color.vert | 11 - .../classique/dirLightAmbDiffSpecPix-tex.xml | 9 - .../classique/dirLightAmbDiffSpecPix.frag | 36 - .../classique/dirLightAmbDiffSpecPix.vert | 34 - .../classique/dirLightAmbDiffSpecPix.xml | 9 - .../dirLightAmbDiffSpecPixMult2.frag | 56 -- .../dirLightAmbDiffSpecPixMult2.vert | 37 - .../classique/dirLightAmbDiffSpecPixMult2.xml | 9 - .../data/old/shaders/classique/kinect1.frag | 45 - .../data/old/shaders/classique/kinect1.vert | 39 - .../data/old/shaders/classique/texture/t.frag | 29 - .../data/old/shaders/classique/texture/t.vert | 21 - .../classique/texture/textureShader.frag | 42 - .../classique/texture/textureShader.vert | 26 - papart/data/old/shaders/distortFrag.glsl | 33 - papart/data/old/shaders/distortVert.glsl | 27 - papart/data/old/shaders/kinect/kinect1.frag | 12 - papart/data/old/shaders/kinect/kinect1.vert | 13 - papart/data/old/shaders/kinect/kinectTri.frag | 23 - papart/data/old/shaders/kinect/kinectTri.vert | 12 - .../data/old/shaders/litSphere (working).frag | 26 - papart/data/old/shaders/litSphere.frag | 14 - papart/data/old/shaders/litSphere.vert | 25 - papart/data/old/shaders/litSphere.xml | 9 - papart/data/old/shaders/litsphere.frag | 14 - papart/data/old/shaders/litsphere.vert | 25 - papart/data/old/shaders/normal.frag | 16 - papart/data/old/shaders/normal.vert | 18 - papart/data/old/shaders/normal.xml | 9 - .../data/old/shaders/processing/ToonFrag.glsl | 25 - .../data/old/shaders/processing/ToonVert.glsl | 31 - .../data/old/shaders/processing/normal.frag | 20 - .../data/old/shaders/processing/normal.vert | 25 - papart/data/old/shaders/projDistort.xml | 10 - papart/data/old/shaders/shadowMap-noTex.frag | 69 -- .../old/shaders/shadowMap-noTex.frag.backup | 75 -- papart/data/old/shaders/shadowMap.frag | 161 ---- papart/data/old/shaders/shadowMap.frag.backup | 161 ---- papart/data/old/shaders/shadowMap.vert | 26 - papart/data/old/shaders/shadowMap.vert.backup | 26 - papart/data/old/shaders/shadowMap.xml | 9 - papart/data/old/shaders/sponza.mtl | 312 ------- papart/data/old/shaders/spotLight.xml | 9 - papart/data/old/shaders/spotlight.frag | 49 -- papart/data/old/shaders/spotlight.vert | 47 -- papart/data/old/shaders/stereoMatch.frag | 70 -- papart/data/old/shaders/stereoMatch.vert | 29 - papart/data/old/shaders/stereoMatch2.frag | 197 ----- papart/data/old/shaders/stereoMatch2.vert | 51 -- papart/data/old/shaders/toon.frag | 35 - papart/data/old/shaders/toon.vert | 18 - papart/data/old/shaders/toon.xml | 18 - papart/data/old/shaders/toonShadow.frag | 65 -- papart/data/old/shaders/toonShadow.vert | 26 - papart/data/old/shaders/toonShadow.xml | 9 - papart/data/old/shaders/toonf2 (copie).frag | 28 - papart/data/old/shaders/toonf2 (copie).vert | 11 - papart/data/old/shaders/toonf2.frag | 84 -- papart/data/old/shaders/toonf2.vert | 51 -- papart/data/old/shaders/toonv2.xml | 9 - papart/data/old/shaders/transparency.frag | 36 - papart/data/old/shaders/transparency.vert | 40 - papart/data/old/shaders/transparency.xml | 6 - 155 files changed, 13644 deletions(-) delete mode 100755 papart/data/old/configs/Homography.txt delete mode 100644 papart/data/old/configs/PlaneParameters.txt delete mode 100644 papart/data/old/configs/kinectHomography.txt delete mode 100755 papart/data/old/configs/makerboardNumPad.cfg delete mode 100755 papart/data/old/configs/markerboard_480-499.cfg delete mode 100644 papart/data/old/configs/plane.txt delete mode 100755 papart/data/old/configs/proj-homography.txt delete mode 100755 papart/data/old/configs/proj.txt delete mode 100755 papart/data/old/configs/projectorDist.txt delete mode 100755 papart/data/old/configs/settings.pcc delete mode 100755 papart/data/old/markers/A3v1-a.svg delete mode 100755 papart/data/old/markers/A3v1-l.svg delete mode 100755 papart/data/old/markers/A3v1-r.svg delete mode 100755 papart/data/old/markers/A3v1.svg delete mode 100755 papart/data/old/markers/A3v2.svg delete mode 100755 papart/data/old/markers/a3/A3p1.cfg delete mode 100755 papart/data/old/markers/a3/A3p1.svg delete mode 100755 papart/data/old/markers/a3/A3p2.cfg delete mode 100755 papart/data/old/markers/a3/A3p2.svg delete mode 100755 papart/data/old/markers/a3/A3p3.cfg delete mode 100755 papart/data/old/markers/a3/A3p3.svg delete mode 100755 papart/data/old/markers/a3/maquet/A3p1.cfg delete mode 100755 papart/data/old/markers/a3/maquet/A3p1.svg delete mode 100755 papart/data/old/markers/a3/maquet/A3p2.cfg delete mode 100755 papart/data/old/markers/a3/maquet/A3p2.svg delete mode 100755 papart/data/old/markers/a3/maquet/A3p3.cfg delete mode 100755 papart/data/old/markers/a3/maquet/A3p3.svg delete mode 100644 papart/data/old/markers/a3/small/A3-small1-mm.svg delete mode 100644 papart/data/old/markers/a3/small/A3-small1.cfg delete mode 100644 papart/data/old/markers/a3/small/A3-small1.svg delete mode 100755 papart/data/old/markers/a3/small/A3p1.cfg delete mode 100755 papart/data/old/markers/a3/small/A3p1.svg delete mode 100755 papart/data/old/markers/artkp3.svg delete mode 100644 papart/data/old/markers/mini1.cfg delete mode 100755 papart/data/old/markers/mini1.svg delete mode 100644 papart/data/old/markers/mini3.svg delete mode 100755 papart/data/old/markers/my_markerboard tmp.cfg delete mode 100755 papart/data/old/markers/my_markerboard-big.cfg delete mode 100755 papart/data/old/markers/my_markerboard.cfg delete mode 100755 papart/data/old/markers/my_markerboard0.cfg delete mode 100755 papart/data/old/markers/my_markerboard1.cfg delete mode 100755 papart/data/old/markers/my_markerboard3.cfg delete mode 100755 papart/data/old/markers/my_markerboard3v2.cfg delete mode 100755 papart/data/old/markers/my_markerboarda3.cfg delete mode 100644 papart/data/old/markers/my_markerboarda3v1-mini.cfg delete mode 100755 papart/data/old/markers/my_markerboarda3v1.cfg delete mode 100755 papart/data/old/markers/my_markerboarda3v2.cfg delete mode 100755 papart/data/old/markers/my_markerboarda3v3.cfg delete mode 100755 papart/data/old/markers/my_markerboardmini.cfg delete mode 100755 papart/data/old/markers/my_markerboardmini2.cfg delete mode 100644 papart/data/old/markers/nouveaux/2285.cfg delete mode 100644 papart/data/old/markers/nouveaux/2285.svg delete mode 100644 papart/data/old/markers/nouveaux/2290.cfg delete mode 100644 papart/data/old/markers/nouveaux/2290.svg delete mode 100644 papart/data/old/markers/nouveaux/2300.cfg delete mode 100644 papart/data/old/markers/nouveaux/2300.svg delete mode 100644 papart/data/old/markers/nouveaux/2310.cfg delete mode 100644 papart/data/old/markers/nouveaux/2310.svg delete mode 100644 papart/data/old/markers/numPad.svg delete mode 100644 papart/data/old/markers/touches.svg delete mode 100644 papart/data/old/shaders/Filters/alpha.frag delete mode 100644 papart/data/old/shaders/Filters/alpha.xml delete mode 100644 papart/data/old/shaders/Filters/alphaZone.frag delete mode 100644 papart/data/old/shaders/Filters/alphaZone.xml delete mode 100644 papart/data/old/shaders/Filters/blur.frag delete mode 100644 papart/data/old/shaders/Filters/blur.xml delete mode 100644 papart/data/old/shaders/Filters/blurZone.frag delete mode 100644 papart/data/old/shaders/Filters/blurZone.xml delete mode 100644 papart/data/old/shaders/Filters/default1.vert delete mode 100644 papart/data/old/shaders/Filters/oldFilm.frag delete mode 100644 papart/data/old/shaders/Filters/oldFilm.xml delete mode 100644 papart/data/old/shaders/Filters/oldFilmZone.frag delete mode 100644 papart/data/old/shaders/Filters/oldFilmZone.xml delete mode 100755 papart/data/old/shaders/Sobel.xml delete mode 100755 papart/data/old/shaders/SobelFrag.glsl delete mode 100755 papart/data/old/shaders/SobelVert.glsl delete mode 100755 papart/data/old/shaders/Thermal.xml delete mode 100755 papart/data/old/shaders/ThermalFrag.glsl delete mode 100755 papart/data/old/shaders/ThermalVert.glsl delete mode 100755 papart/data/old/shaders/Toon.xml delete mode 100755 papart/data/old/shaders/ToonFrag.glsl delete mode 100755 papart/data/old/shaders/ToonVert.glsl delete mode 100755 papart/data/old/shaders/anaglyph.frag delete mode 100755 papart/data/old/shaders/anaglyph.vert delete mode 100755 papart/data/old/shaders/anaglyph.xml delete mode 100644 papart/data/old/shaders/blur.frag delete mode 100644 papart/data/old/shaders/blur.vert delete mode 100644 papart/data/old/shaders/blur.xml delete mode 100644 papart/data/old/shaders/calib.xml delete mode 100644 papart/data/old/shaders/capSc.frag delete mode 100644 papart/data/old/shaders/capSc.vert delete mode 100644 papart/data/old/shaders/classique/color.frag delete mode 100644 papart/data/old/shaders/classique/color.vert delete mode 100644 papart/data/old/shaders/classique/dirLightAmbDiffSpecPix-tex.xml delete mode 100755 papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.frag delete mode 100755 papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.vert delete mode 100755 papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.xml delete mode 100755 papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.frag delete mode 100755 papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.vert delete mode 100755 papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.xml delete mode 100755 papart/data/old/shaders/classique/kinect1.frag delete mode 100755 papart/data/old/shaders/classique/kinect1.vert delete mode 100644 papart/data/old/shaders/classique/texture/t.frag delete mode 100644 papart/data/old/shaders/classique/texture/t.vert delete mode 100644 papart/data/old/shaders/classique/texture/textureShader.frag delete mode 100644 papart/data/old/shaders/classique/texture/textureShader.vert delete mode 100755 papart/data/old/shaders/distortFrag.glsl delete mode 100755 papart/data/old/shaders/distortVert.glsl delete mode 100755 papart/data/old/shaders/kinect/kinect1.frag delete mode 100755 papart/data/old/shaders/kinect/kinect1.vert delete mode 100755 papart/data/old/shaders/kinect/kinectTri.frag delete mode 100755 papart/data/old/shaders/kinect/kinectTri.vert delete mode 100755 papart/data/old/shaders/litSphere (working).frag delete mode 100755 papart/data/old/shaders/litSphere.frag delete mode 100755 papart/data/old/shaders/litSphere.vert delete mode 100755 papart/data/old/shaders/litSphere.xml delete mode 100755 papart/data/old/shaders/litsphere.frag delete mode 100755 papart/data/old/shaders/litsphere.vert delete mode 100755 papart/data/old/shaders/normal.frag delete mode 100755 papart/data/old/shaders/normal.vert delete mode 100755 papart/data/old/shaders/normal.xml delete mode 100644 papart/data/old/shaders/processing/ToonFrag.glsl delete mode 100644 papart/data/old/shaders/processing/ToonVert.glsl delete mode 100755 papart/data/old/shaders/processing/normal.frag delete mode 100755 papart/data/old/shaders/processing/normal.vert delete mode 100755 papart/data/old/shaders/projDistort.xml delete mode 100644 papart/data/old/shaders/shadowMap-noTex.frag delete mode 100644 papart/data/old/shaders/shadowMap-noTex.frag.backup delete mode 100755 papart/data/old/shaders/shadowMap.frag delete mode 100644 papart/data/old/shaders/shadowMap.frag.backup delete mode 100755 papart/data/old/shaders/shadowMap.vert delete mode 100644 papart/data/old/shaders/shadowMap.vert.backup delete mode 100755 papart/data/old/shaders/shadowMap.xml delete mode 100755 papart/data/old/shaders/sponza.mtl delete mode 100755 papart/data/old/shaders/spotLight.xml delete mode 100644 papart/data/old/shaders/spotlight.frag delete mode 100755 papart/data/old/shaders/spotlight.vert delete mode 100644 papart/data/old/shaders/stereoMatch.frag delete mode 100644 papart/data/old/shaders/stereoMatch.vert delete mode 100644 papart/data/old/shaders/stereoMatch2.frag delete mode 100644 papart/data/old/shaders/stereoMatch2.vert delete mode 100644 papart/data/old/shaders/toon.frag delete mode 100755 papart/data/old/shaders/toon.vert delete mode 100755 papart/data/old/shaders/toon.xml delete mode 100644 papart/data/old/shaders/toonShadow.frag delete mode 100644 papart/data/old/shaders/toonShadow.vert delete mode 100644 papart/data/old/shaders/toonShadow.xml delete mode 100644 papart/data/old/shaders/toonf2 (copie).frag delete mode 100755 papart/data/old/shaders/toonf2 (copie).vert delete mode 100644 papart/data/old/shaders/toonf2.frag delete mode 100755 papart/data/old/shaders/toonf2.vert delete mode 100755 papart/data/old/shaders/toonv2.xml delete mode 100644 papart/data/old/shaders/transparency.frag delete mode 100755 papart/data/old/shaders/transparency.vert delete mode 100755 papart/data/old/shaders/transparency.xml diff --git a/papart/data/old/configs/Homography.txt b/papart/data/old/configs/Homography.txt deleted file mode 100755 index 5111f7bc..00000000 --- a/papart/data/old/configs/Homography.txt +++ /dev/null @@ -1,16 +0,0 @@ -3.4817705154418945 --3.8324077129364014 -0.8412020206451416 -0.0 -3.5817983150482178 -0.40009868144989014 -0.9028071165084839 -0.0 -2.420985221862793 -8.831888198852539 -1.0 -0.0 -0.0 -0.0 -0.0 -1.0 diff --git a/papart/data/old/configs/PlaneParameters.txt b/papart/data/old/configs/PlaneParameters.txt deleted file mode 100644 index aa7cb0c4..00000000 --- a/papart/data/old/configs/PlaneParameters.txt +++ /dev/null @@ -1,6 +0,0 @@ -151 -1142 -0 -589 -0 -477 diff --git a/papart/data/old/configs/kinectHomography.txt b/papart/data/old/configs/kinectHomography.txt deleted file mode 100644 index 13f40388..00000000 --- a/papart/data/old/configs/kinectHomography.txt +++ /dev/null @@ -1,16 +0,0 @@ --1.3911159038543701 -0.07879400253295898 -0.35574108362197876 -0.0 --0.14813756942749023 --2.9834423065185547 -0.5096640586853027 -0.0 -0.06685977429151535 --0.999718189239502 -1.0 -0.0 -0.0 -0.0 -0.0 -1.0 diff --git a/papart/data/old/configs/makerboardNumPad.cfg b/papart/data/old/configs/makerboardNumPad.cfg deleted file mode 100755 index 6c6eb15d..00000000 --- a/papart/data/old/configs/makerboardNumPad.cfg +++ /dev/null @@ -1,113 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -12 - -#### Left - -# marker -103 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -104 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 60,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -100 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 60,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -105 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 60,0 - 0,0000 1,0000 0,0000 60,0 - 0,0000 0,0000 1,0000 0,0 - -###### Right - -# marker -110 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 210,0 - 0,0000 1,0000 0,0000 60,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -111 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 256,0 - 0,0000 1,0000 0,0000 60,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -112 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 210,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -113 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 256,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - - -##### Top - -# marker -120 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 22,0 - 0,0000 1,0000 0,0000 150,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -121 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 98,0 - 0,0000 1,0000 0,0000 150,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -122 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 180,0 - 0,0000 1,0000 0,0000 150,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -123 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 256,0 - 0,0000 1,0000 0,0000 150,0 - 0,0000 0,0000 1,0000 0,0 - - - - - diff --git a/papart/data/old/configs/markerboard_480-499.cfg b/papart/data/old/configs/markerboard_480-499.cfg deleted file mode 100755 index 7a43f7c3..00000000 --- a/papart/data/old/configs/markerboard_480-499.cfg +++ /dev/null @@ -1,53 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -6 - -# marker 0 -0 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 26,5 - 0,0000 1,0000 0,0000 266,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 1 -1 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 81.5 - 0,0000 1,0000 0,0000 266,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 2 -2 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 141,5 - 0,0000 1,0000 0,0000 266,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 3 -3 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 26,5 - 0,0000 1,0000 0,0000 26,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 4 -4 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 81,5 - 0,0000 1,0000 0,0000 26,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 5 -5 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 141,5 - 0,0000 1,0000 0,0000 26,5 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/configs/plane.txt b/papart/data/old/configs/plane.txt deleted file mode 100644 index 214c5d09..00000000 --- a/papart/data/old/configs/plane.txt +++ /dev/null @@ -1,8 +0,0 @@ -0.026787128 -0.008649012 --0.872214 --0.035829786 -0.60323375 --0.7967593 -0.59999996 -0.01 diff --git a/papart/data/old/configs/proj-homography.txt b/papart/data/old/configs/proj-homography.txt deleted file mode 100755 index 41acb856..00000000 --- a/papart/data/old/configs/proj-homography.txt +++ /dev/null @@ -1,16 +0,0 @@ -1.0582029819488525 --0.2413066029548645 -0.0 --5.839362144470215 -0.007576711941510439 -0.9950700402259827 -0.0 --3.140962839126587 -0.0 -0.0 -1.0 -0.0 -0.0 -0.0 -0.0 -1.0 diff --git a/papart/data/old/configs/proj.txt b/papart/data/old/configs/proj.txt deleted file mode 100755 index b5669ddf..00000000 --- a/papart/data/old/configs/proj.txt +++ /dev/null @@ -1,6 +0,0 @@ - -gauche : 61.3 -droite : 61.4 - -haut : 53.5 -bas : 53.8 diff --git a/papart/data/old/configs/projectorDist.txt b/papart/data/old/configs/projectorDist.txt deleted file mode 100755 index a852e2fb..00000000 --- a/papart/data/old/configs/projectorDist.txt +++ /dev/null @@ -1,16 +0,0 @@ -0.8914685249328613 --7.59786123844058E-19 -0.0 -5.340541181474715E-19 --7.666998028013528E-19 -0.8684563636779785 -0.0 -1.5093313898131916E-19 -0.0 -0.0 -1.0 -0.0 -0.0 -0.0 -0.0 -1.0 diff --git a/papart/data/old/configs/settings.pcc b/papart/data/old/configs/settings.pcc deleted file mode 100755 index 0e44d8e5..00000000 --- a/papart/data/old/configs/settings.pcc +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - 0 - - - com.googlecode.javacv.OpenCVFrameGrabber - - - 480 - - - 640 - - - Eye Cam - - - - - com.googlecode.javacv.OpenCVFrameGrabber - - - - - - - 0.2 - - - Samsung - - - - - - - 8 - - - 5 - - - 34.0 - - - 34.0 - - - 51.0 - - - 51.0 - - - - - - 15 - - - - - false - - - /home/jeremy/sketchbook/calib/data/calibration-p1.yaml - diff --git a/papart/data/old/markers/A3v1-a.svg b/papart/data/old/markers/A3v1-a.svg deleted file mode 100755 index 335a3468..00000000 --- a/papart/data/old/markers/A3v1-a.svg +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - - - - - - - - - - - - - - - - - 47 - 55 - 54 - 53 - 52 - 51 - 41 - 42 - 40 - 50 - 49 - 48 - 46 - 45 - 44 - 43 - - diff --git a/papart/data/old/markers/A3v1-l.svg b/papart/data/old/markers/A3v1-l.svg deleted file mode 100755 index cbaf969a..00000000 --- a/papart/data/old/markers/A3v1-l.svg +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - diff --git a/papart/data/old/markers/A3v1-r.svg b/papart/data/old/markers/A3v1-r.svg deleted file mode 100755 index 7ab020f7..00000000 --- a/papart/data/old/markers/A3v1-r.svg +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - diff --git a/papart/data/old/markers/A3v1.svg b/papart/data/old/markers/A3v1.svg deleted file mode 100755 index cbaf969a..00000000 --- a/papart/data/old/markers/A3v1.svg +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - diff --git a/papart/data/old/markers/A3v2.svg b/papart/data/old/markers/A3v2.svg deleted file mode 100755 index acbb65ac..00000000 --- a/papart/data/old/markers/A3v2.svg +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/papart/data/old/markers/a3/A3p1.cfg b/papart/data/old/markers/a3/A3p1.cfg deleted file mode 100755 index ecc191d0..00000000 --- a/papart/data/old/markers/a3/A3p1.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -0 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -4 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -5 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -13 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -12 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -8 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -9 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -10 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -11 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -14 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -15 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/a3/A3p1.svg b/papart/data/old/markers/a3/A3p1.svg deleted file mode 100755 index cbaf969a..00000000 --- a/papart/data/old/markers/a3/A3p1.svg +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - diff --git a/papart/data/old/markers/a3/A3p2.cfg b/papart/data/old/markers/a3/A3p2.cfg deleted file mode 100755 index bb6a44d1..00000000 --- a/papart/data/old/markers/a3/A3p2.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -21 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -36 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -35 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -34 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -33 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -32 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -22 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -23 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -24 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -25 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -26 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -27 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -28 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -29 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -30 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -31 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/a3/A3p2.svg b/papart/data/old/markers/a3/A3p2.svg deleted file mode 100755 index 7ab020f7..00000000 --- a/papart/data/old/markers/a3/A3p2.svg +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - diff --git a/papart/data/old/markers/a3/A3p3.cfg b/papart/data/old/markers/a3/A3p3.cfg deleted file mode 100755 index d467d2a3..00000000 --- a/papart/data/old/markers/a3/A3p3.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -47 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -55 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -54 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -53 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -52 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -51 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -50 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -49 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -48 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -46 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -45 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -44 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -43 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -40 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -42 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -41 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/a3/A3p3.svg b/papart/data/old/markers/a3/A3p3.svg deleted file mode 100755 index 335a3468..00000000 --- a/papart/data/old/markers/a3/A3p3.svg +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - - - - - - - - - - - - - - - - - 47 - 55 - 54 - 53 - 52 - 51 - 41 - 42 - 40 - 50 - 49 - 48 - 46 - 45 - 44 - 43 - - diff --git a/papart/data/old/markers/a3/maquet/A3p1.cfg b/papart/data/old/markers/a3/maquet/A3p1.cfg deleted file mode 100755 index ecc191d0..00000000 --- a/papart/data/old/markers/a3/maquet/A3p1.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -0 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -4 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -5 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -13 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -12 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -8 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -9 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -10 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -11 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -14 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -15 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/a3/maquet/A3p1.svg b/papart/data/old/markers/a3/maquet/A3p1.svg deleted file mode 100755 index cbaf969a..00000000 --- a/papart/data/old/markers/a3/maquet/A3p1.svg +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - diff --git a/papart/data/old/markers/a3/maquet/A3p2.cfg b/papart/data/old/markers/a3/maquet/A3p2.cfg deleted file mode 100755 index bb6a44d1..00000000 --- a/papart/data/old/markers/a3/maquet/A3p2.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -21 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -36 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -35 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -34 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -33 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -32 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -22 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -23 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -24 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -25 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -26 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -27 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -28 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -29 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -30 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -31 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/a3/maquet/A3p2.svg b/papart/data/old/markers/a3/maquet/A3p2.svg deleted file mode 100755 index 7ab020f7..00000000 --- a/papart/data/old/markers/a3/maquet/A3p2.svg +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - diff --git a/papart/data/old/markers/a3/maquet/A3p3.cfg b/papart/data/old/markers/a3/maquet/A3p3.cfg deleted file mode 100755 index d467d2a3..00000000 --- a/papart/data/old/markers/a3/maquet/A3p3.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -47 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -55 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -54 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -53 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -52 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -51 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -50 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -49 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -48 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -46 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -45 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -44 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -43 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -40 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -42 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -41 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/a3/maquet/A3p3.svg b/papart/data/old/markers/a3/maquet/A3p3.svg deleted file mode 100755 index 335a3468..00000000 --- a/papart/data/old/markers/a3/maquet/A3p3.svg +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - - - - - - - - - - - - - - - - - 47 - 55 - 54 - 53 - 52 - 51 - 41 - 42 - 40 - 50 - 49 - 48 - 46 - 45 - 44 - 43 - - diff --git a/papart/data/old/markers/a3/small/A3-small1-mm.svg b/papart/data/old/markers/a3/small/A3-small1-mm.svg deleted file mode 100644 index 9f7d8895..00000000 --- a/papart/data/old/markers/a3/small/A3-small1-mm.svg +++ /dev/null @@ -1,311 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/papart/data/old/markers/a3/small/A3-small1.cfg b/papart/data/old/markers/a3/small/A3-small1.cfg deleted file mode 100644 index ca25d4f4..00000000 --- a/papart/data/old/markers/a3/small/A3-small1.cfg +++ /dev/null @@ -1,72 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -8 - -# marker -0 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 58.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -13 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 110.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -12 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 160.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -3 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 205.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -5 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 58.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -15 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 110.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -14 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 160.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -11 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 205.0 - 0.0000 0.0000 1.0000 0.0 - - diff --git a/papart/data/old/markers/a3/small/A3-small1.svg b/papart/data/old/markers/a3/small/A3-small1.svg deleted file mode 100644 index 0c65bd7b..00000000 --- a/papart/data/old/markers/a3/small/A3-small1.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - diff --git a/papart/data/old/markers/a3/small/A3p1.cfg b/papart/data/old/markers/a3/small/A3p1.cfg deleted file mode 100755 index ff43593a..00000000 --- a/papart/data/old/markers/a3/small/A3p1.cfg +++ /dev/null @@ -1,72 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -8 - -# marker -0 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 58,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -13 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 110,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -12 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 205,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -5 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 58,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -15 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 110,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -14 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -11 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 205,0 - 0,0000 0,0000 1,0000 0,0 - - diff --git a/papart/data/old/markers/a3/small/A3p1.svg b/papart/data/old/markers/a3/small/A3p1.svg deleted file mode 100755 index cbaf969a..00000000 --- a/papart/data/old/markers/a3/small/A3p1.svg +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - diff --git a/papart/data/old/markers/artkp3.svg b/papart/data/old/markers/artkp3.svg deleted file mode 100755 index d9bd1048..00000000 --- a/papart/data/old/markers/artkp3.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/papart/data/old/markers/mini1.cfg b/papart/data/old/markers/mini1.cfg deleted file mode 100644 index ef10e838..00000000 --- a/papart/data/old/markers/mini1.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - -# marker -103 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -104 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 130,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -100 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 110,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -105 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 130,0 - 0,0000 1,0000 0,0000 110,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/mini1.svg b/papart/data/old/markers/mini1.svg deleted file mode 100755 index caad7ab0..00000000 --- a/papart/data/old/markers/mini1.svg +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - 100   105103 104 - diff --git a/papart/data/old/markers/mini3.svg b/papart/data/old/markers/mini3.svg deleted file mode 100644 index 12d3cd94..00000000 --- a/papart/data/old/markers/mini3.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - 100   105103 104 this way up - diff --git a/papart/data/old/markers/my_markerboard tmp.cfg b/papart/data/old/markers/my_markerboard tmp.cfg deleted file mode 100755 index 18686330..00000000 --- a/papart/data/old/markers/my_markerboard tmp.cfg +++ /dev/null @@ -1,62 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -3 - -# marker 5 -5 -60,0 -0,0 0,0 - 1,0000 0,0000 0,0000 40,0 - 0,0000 1,0000 0,0000 337,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 1 -6 -60,0 -0,0 0,0 - 1,0000 0,0000 0,0000 117,0 - 0,0000 1,0000 0,0000 337,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 2 -4 -60,0 -0,0 0,0 - 1,0000 0,0000 0,0000 195,0 - 0,0000 1,0000 0,0000 337,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 3 -3 -45,0 -0,0 0,0 - 1,0000 0,0000 0,0000 255,0 - 0,0000 1,0000 0,0000 40,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 4 -2 -45,0 -0,0 0,0 - 1,0000 0,0000 0,0000 255,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 5 -1 -45,0 -0,0 0,0 - 1,0000 0,0000 0,0000 255,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 6 -0 -45,0 -0,0 0,0 - 1,0000 0,0000 0,0000 255,0 - 0,0000 1,0000 0,0000 220,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/my_markerboard-big.cfg b/papart/data/old/markers/my_markerboard-big.cfg deleted file mode 100755 index e00aa5f8..00000000 --- a/papart/data/old/markers/my_markerboard-big.cfg +++ /dev/null @@ -1,77 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -8 - -# marker -0 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 27,0 - 0,0000 1,0000 0,0000 8,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 53,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 27,0 - 0,0000 1,0000 0,0000 98,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 143,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -4 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 65,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -5 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 110,0 - 0,0000 1,0000 0,0000 140,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 200,0 - 0,0000 1,0000 0,0000 140,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -8 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 245,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/markers/my_markerboard.cfg b/papart/data/old/markers/my_markerboard.cfg deleted file mode 100755 index aee59708..00000000 --- a/papart/data/old/markers/my_markerboard.cfg +++ /dev/null @@ -1,69 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -8 - -# marker -0 -55,0 --67,5 17,5 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 15,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -55,0 --67,5 17,5 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 90,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -55,0 --67,5 17,5 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -55,0 --67,5 17,5 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 230,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -4 -55,0 --67,5 17,5 - 1,0000 0,0000 0,0000 327,0 - 0,0000 1,0000 0,0000 15,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -55,0 --67,5 17,5 - 1,0000 0,0000 0,0000 327,0 - 0,0000 1,0000 0,0000 90,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -55,0 --67,5 17,5 - 1,0000 0,0000 0,0000 327,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -8 -55,0 --67,5 17,5 - 1,0000 0,0000 0,0000 327,0 - 0,0000 1,0000 0,0000 230,0 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/markers/my_markerboard0.cfg b/papart/data/old/markers/my_markerboard0.cfg deleted file mode 100755 index 87a1387f..00000000 --- a/papart/data/old/markers/my_markerboard0.cfg +++ /dev/null @@ -1,78 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -9 - -# marker -0 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 8,0 - 0,0000 1,0000 0,0000 8,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 8,0 - 0,0000 1,0000 0,0000 53,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 8,0 - 0,0000 1,0000 0,0000 98,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 8,0 - 0,0000 1,0000 0,0000 143,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -4 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 55,0 - 0,0000 1,0000 0,0000 169,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -5 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 100,0 - 0,0000 1,0000 0,0000 169,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 145,0 - 0,0000 1,0000 0,0000 169,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 190,0 - 0,0000 1,0000 0,0000 169,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -8 -35,0 -17,5 17,5 - 1,0000 0,0000 0,0000 235,0 - 0,0000 1,0000 0,0000 169,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/my_markerboard1.cfg b/papart/data/old/markers/my_markerboard1.cfg deleted file mode 100755 index 7a43f7c3..00000000 --- a/papart/data/old/markers/my_markerboard1.cfg +++ /dev/null @@ -1,53 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -6 - -# marker 0 -0 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 26,5 - 0,0000 1,0000 0,0000 266,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 1 -1 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 81.5 - 0,0000 1,0000 0,0000 266,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 2 -2 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 141,5 - 0,0000 1,0000 0,0000 266,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 3 -3 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 26,5 - 0,0000 1,0000 0,0000 26,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 4 -4 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 81,5 - 0,0000 1,0000 0,0000 26,5 - 0,0000 0,0000 1,0000 0,0 - -# marker 5 -5 -43,0 -0,0 0,0 - 1,0000 0,0000 0,0000 141,5 - 0,0000 1,0000 0,0000 26,5 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/markers/my_markerboard3.cfg b/papart/data/old/markers/my_markerboard3.cfg deleted file mode 100755 index e00aa5f8..00000000 --- a/papart/data/old/markers/my_markerboard3.cfg +++ /dev/null @@ -1,77 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -8 - -# marker -0 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 27,0 - 0,0000 1,0000 0,0000 8,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 53,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 27,0 - 0,0000 1,0000 0,0000 98,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 143,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -4 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 65,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -5 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 110,0 - 0,0000 1,0000 0,0000 140,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 200,0 - 0,0000 1,0000 0,0000 140,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -8 -35,0 --67,5 97,5 - 1,0000 0,0000 0,0000 245,0 - 0,0000 1,0000 0,0000 160,0 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/markers/my_markerboard3v2.cfg b/papart/data/old/markers/my_markerboard3v2.cfg deleted file mode 100755 index e4ef58df..00000000 --- a/papart/data/old/markers/my_markerboard3v2.cfg +++ /dev/null @@ -1,121 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -14 - -# marker -0 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 12,0 - 0,0000 1,0000 0,0000 8,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 12,0 - 0,0000 1,0000 0,0000 58,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 12,0 - 0,0000 1,0000 0,0000 108,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 12,0 - 0,0000 1,0000 0,0000 158,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -4 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 65,0 - 0,0000 1,0000 0,0000 8,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -5 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 65,0 - 0,0000 1,0000 0,0000 58,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 65,0 - 0,0000 1,0000 0,0000 108,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 65,0 - 0,0000 1,0000 0,0000 158,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -8 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 130,0 - 0,0000 1,0000 0,0000 108,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -11 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 130,0 - 0,0000 1,0000 0,0000 158,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -13 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 190,0 - 0,0000 1,0000 0,0000 108,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -12 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 190,0 - 0,0000 1,0000 0,0000 158,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -14 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 250,0 - 0,0000 1,0000 0,0000 108,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -17 -35,0 --107,5 142,5 - 1,0000 0,0000 0,0000 250,0 - 0,0000 1,0000 0,0000 158,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/my_markerboarda3.cfg b/papart/data/old/markers/my_markerboarda3.cfg deleted file mode 100755 index d9ac90aa..00000000 --- a/papart/data/old/markers/my_markerboarda3.cfg +++ /dev/null @@ -1,101 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -12 - -# marker -0 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 12,0 - 0,0000 1,0000 0,0000 242,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 67,0 - 0,0000 1,0000 0,0000 242,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 122,0 - 0,0000 1,0000 0,0000 242,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 252,0 - 0,0000 1,0000 0,0000 242,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -4 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 307,0 - 0,0000 1,0000 0,0000 242,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -5 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 362,0 - 0,0000 1,0000 0,0000 242,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 12,0 - 0,0000 1,0000 0,0000 12,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 67,0 - 0,0000 1,0000 0,0000 12,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -8 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 122,0 - 0,0000 1,0000 0,0000 12,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -9 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 252,0 - 0,0000 1,0000 0,0000 12,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -10 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 307,0 - 0,0000 1,0000 0,0000 12,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -11 -45,0 --67,5 17,5 - 1,0000 0,0000 0,0000 362,0 - 0,0000 1,0000 0,0000 12,0 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/markers/my_markerboarda3v1-mini.cfg b/papart/data/old/markers/my_markerboarda3v1-mini.cfg deleted file mode 100644 index ecc191d0..00000000 --- a/papart/data/old/markers/my_markerboarda3v1-mini.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -0 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -4 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -5 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -13 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -12 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -8 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -9 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -10 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -11 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -14 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -15 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/my_markerboarda3v1.cfg b/papart/data/old/markers/my_markerboarda3v1.cfg deleted file mode 100755 index ecc191d0..00000000 --- a/papart/data/old/markers/my_markerboarda3v1.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -0 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -1 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -2 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -3 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -4 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -5 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -13 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -12 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -7 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -8 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -9 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -6 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -10 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -11 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -14 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -15 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/my_markerboarda3v2.cfg b/papart/data/old/markers/my_markerboarda3v2.cfg deleted file mode 100755 index bb6a44d1..00000000 --- a/papart/data/old/markers/my_markerboarda3v2.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -21 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -36 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -35 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -34 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -33 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -32 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -22 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -23 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -24 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -25 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -26 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -27 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -28 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -29 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -30 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -31 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/my_markerboarda3v3.cfg b/papart/data/old/markers/my_markerboarda3v3.cfg deleted file mode 100755 index d467d2a3..00000000 --- a/papart/data/old/markers/my_markerboarda3v3.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -47 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -55 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -54 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -53 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -52 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -51 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 5,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -50 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -49 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -48 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 15,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - - - -# marker -46 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 85,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -45 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 155,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -44 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 225,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -43 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 295,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -40 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 257,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -42 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 170,0 - 0,0000 0,0000 1,0000 0,0 - - -# marker -41 -35,0 --43,9 -26,9 - 1,0000 0,0000 0,0000 365,0 - 0,0000 1,0000 0,0000 100,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/my_markerboardmini.cfg b/papart/data/old/markers/my_markerboardmini.cfg deleted file mode 100755 index 4df87f30..00000000 --- a/papart/data/old/markers/my_markerboardmini.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - -# marker -103 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -104 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 90,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -100 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 80,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -105 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 90,0 - 0,0000 1,0000 0,0000 80,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/my_markerboardmini2.cfg b/papart/data/old/markers/my_markerboardmini2.cfg deleted file mode 100755 index ef10e838..00000000 --- a/papart/data/old/markers/my_markerboardmini2.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - -# marker -103 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -104 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 130,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -100 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 110,0 - 0,0000 0,0000 1,0000 0,0 - -# marker -105 -35,0 -17,50 17,50 - 1,0000 0,0000 0,0000 130,0 - 0,0000 1,0000 0,0000 110,0 - 0,0000 0,0000 1,0000 0,0 - diff --git a/papart/data/old/markers/nouveaux/2285.cfg b/papart/data/old/markers/nouveaux/2285.cfg deleted file mode 100644 index 3af66c05..00000000 --- a/papart/data/old/markers/nouveaux/2285.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - - -# marker 0 -2285 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 1 -2286 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 45.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 2 -2287 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 45.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 3 -2288 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 45.0 - 0.0000 1.0000 0.0000 45.0 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/old/markers/nouveaux/2285.svg b/papart/data/old/markers/nouveaux/2285.svg deleted file mode 100644 index cdb6afae..00000000 --- a/papart/data/old/markers/nouveaux/2285.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - 2287 22882285 2286 - diff --git a/papart/data/old/markers/nouveaux/2290.cfg b/papart/data/old/markers/nouveaux/2290.cfg deleted file mode 100644 index 19384b30..00000000 --- a/papart/data/old/markers/nouveaux/2290.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - - -# marker 0 -2290 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 1 -2292 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 45,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 2 -2291 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 45,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 3 -2293 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 45,0 - 0,0000 1,0000 0,0000 45,0 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/markers/nouveaux/2290.svg b/papart/data/old/markers/nouveaux/2290.svg deleted file mode 100644 index e4f3d538..00000000 --- a/papart/data/old/markers/nouveaux/2290.svg +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - 2292 22932290 2291 - - - - - diff --git a/papart/data/old/markers/nouveaux/2300.cfg b/papart/data/old/markers/nouveaux/2300.cfg deleted file mode 100644 index 6006f581..00000000 --- a/papart/data/old/markers/nouveaux/2300.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - - -# marker 0 -2300 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 1 -2301 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 45,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 2 -2302 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 45,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 3 -2303 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 45,0 - 0,0000 1,0000 0,0000 45,0 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/markers/nouveaux/2300.svg b/papart/data/old/markers/nouveaux/2300.svg deleted file mode 100644 index 39430868..00000000 --- a/papart/data/old/markers/nouveaux/2300.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - 2302 23032300 2301 - - - - - diff --git a/papart/data/old/markers/nouveaux/2310.cfg b/papart/data/old/markers/nouveaux/2310.cfg deleted file mode 100644 index 1183828b..00000000 --- a/papart/data/old/markers/nouveaux/2310.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - - -# marker 0 -2310 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 1 -2311 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 45,0 - 0,0000 1,0000 0,0000 10,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 2 -2312 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 10,0 - 0,0000 1,0000 0,0000 45,0 - 0,0000 0,0000 1,0000 0,0 - -# marker 3 -2313 -30,0 -5,0 5,0 - 1,0000 0,0000 0,0000 45,0 - 0,0000 1,0000 0,0000 45,0 - 0,0000 0,0000 1,0000 0,0 diff --git a/papart/data/old/markers/nouveaux/2310.svg b/papart/data/old/markers/nouveaux/2310.svg deleted file mode 100644 index 5baa330d..00000000 --- a/papart/data/old/markers/nouveaux/2310.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - 2312 23132310 2311 - - - - - diff --git a/papart/data/old/markers/numPad.svg b/papart/data/old/markers/numPad.svg deleted file mode 100644 index 5ef2f5e5..00000000 --- a/papart/data/old/markers/numPad.svg +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - 100   105103 104 this way up - - 120 121 122 123 - - 110 111112 113 - - - - - - diff --git a/papart/data/old/markers/touches.svg b/papart/data/old/markers/touches.svg deleted file mode 100644 index 140ee25b..00000000 --- a/papart/data/old/markers/touches.svg +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/papart/data/old/shaders/Filters/alpha.frag b/papart/data/old/shaders/Filters/alpha.frag deleted file mode 100644 index ce87175b..00000000 --- a/papart/data/old/shaders/Filters/alpha.frag +++ /dev/null @@ -1,9 +0,0 @@ -uniform sampler2D sceneTex; - -void main() -{ - - gl_FragColor = vec4(texture2D(sceneTex, gl_TexCoord[0].st).rgb, 0.0); -} - - diff --git a/papart/data/old/shaders/Filters/alpha.xml b/papart/data/old/shaders/Filters/alpha.xml deleted file mode 100644 index 22c2a495..00000000 --- a/papart/data/old/shaders/Filters/alpha.xml +++ /dev/null @@ -1,11 +0,0 @@ - - Blur - default1.vert - alpha.frag - - 0 - - - - - diff --git a/papart/data/old/shaders/Filters/alphaZone.frag b/papart/data/old/shaders/Filters/alphaZone.frag deleted file mode 100644 index 54c04c65..00000000 --- a/papart/data/old/shaders/Filters/alphaZone.frag +++ /dev/null @@ -1,17 +0,0 @@ -uniform sampler2D sceneTex; -uniform sampler2D mask; - - -void main() -{ - - vec4 maskColor = texture2D(mask, gl_TexCoord[0].st); - vec4 texC = texture2D(sceneTex, gl_TexCoord[0].st); - - float a = 1. - maskColor.r; - - gl_FragColor = vec4(texC.rgb * a, a); - -} - - diff --git a/papart/data/old/shaders/Filters/alphaZone.xml b/papart/data/old/shaders/Filters/alphaZone.xml deleted file mode 100644 index 39a3454a..00000000 --- a/papart/data/old/shaders/Filters/alphaZone.xml +++ /dev/null @@ -1,12 +0,0 @@ - - Blur Zone - default1.vert - alphaZone.frag - - 0 - 1 - - - - - diff --git a/papart/data/old/shaders/Filters/blur.frag b/papart/data/old/shaders/Filters/blur.frag deleted file mode 100644 index 93c45bc8..00000000 --- a/papart/data/old/shaders/Filters/blur.frag +++ /dev/null @@ -1,129 +0,0 @@ -uniform sampler2D sceneTex; -uniform vec2 wh; - - -/* vec2 gaussianDeriv(int deriSize){ */ - -/* int neighbor = 2*deriSize + 1; */ -/* float sigma = float(deriSize)/3.0; */ -/* float dem = 2.0*sigma*sigma; */ -/* vec4 sumX1 = vec4(0.0); */ -/* vec4 sumY1 = vec4(0.0); */ -/* for(int yi=0; yi 0.5){ */ - /* vec2 intens = gaussianDeriv(derivSize); */ - - /* /\* gl_FragColor = vec4(intens.r, intens.g, 0, 1); *\/ */ - /* /\* return; *\/ */ - - /* float threshold = intensT; */ - - /* if(intens.r > threshold || intens.g > threshold){ */ - /* // if(intens.r > 0.2 || intens.g > 0.2){ */ - - /* gl_FragColor = texture2D(sceneTex, gl_TexCoord[0].st); */ - /* return; */ - - /* } else { */ - - /* gl_FragColor = vec4(texC.r * 0.3, texC.g * 0.3, texC.b * 0.3, 1.0); */ - /* return; */ - /* } */ - /* } */ - - - /* /// Blue codes for high intensity */ - /* if(maskColor.b > 0.5){ */ - - /* gl_FragColor = vec4(2.0 * texC.rgb, 1.0); */ - /* return; */ - - /* } */ - /* // green codes for Edge enhance */ - /* // No code ? Image */ - - /* gl_FragColor = texture2D(sceneTex, gl_TexCoord[0].st); */ -} - - diff --git a/papart/data/old/shaders/Filters/blur.xml b/papart/data/old/shaders/Filters/blur.xml deleted file mode 100644 index 646a35e6..00000000 --- a/papart/data/old/shaders/Filters/blur.xml +++ /dev/null @@ -1,12 +0,0 @@ - - Blur - default1.vert - blur.frag - - 0 - - 0.2 0.2 - - - - diff --git a/papart/data/old/shaders/Filters/blurZone.frag b/papart/data/old/shaders/Filters/blurZone.frag deleted file mode 100644 index ddbbff8b..00000000 --- a/papart/data/old/shaders/Filters/blurZone.frag +++ /dev/null @@ -1,92 +0,0 @@ -uniform sampler2D sceneTex; -uniform sampler2D mask; - -uniform vec2 wh; -/* uniform int derivSize; */ -/* uniform float intensT; */ - -vec4 computeBlur(){ - - vec2 uv = gl_TexCoord[0].xy; - vec4 c = texture2D(sceneTex, uv); - - c += texture2D(sceneTex, uv+0.001); - c += texture2D(sceneTex, uv+0.003); - c += texture2D(sceneTex, uv+0.005); - c += texture2D(sceneTex, uv+0.007); - c += texture2D(sceneTex, uv+0.009); - c += texture2D(sceneTex, uv+0.011); - - c += texture2D(sceneTex, uv-0.001); - c += texture2D(sceneTex, uv-0.003); - c += texture2D(sceneTex, uv-0.005); - c += texture2D(sceneTex, uv-0.007); - c += texture2D(sceneTex, uv-0.009); - c += texture2D(sceneTex, uv-0.011); - - c.rgb = vec3((c.r+c.g+c.b)/3.0); - // c = c / 9.5; - - c = c / 11.5; - - return c; -} - -vec4 gaussianBlur(){ - - float dx = wh.s; - float dy = wh.t; - vec2 st = gl_TexCoord[0].st; - - // Apply 3x3 gaussian filter - vec4 color = 4.0 * texture2D(sceneTex, st); - color += 2.0 * texture2D(sceneTex, st + vec2(+dx, 0.0)); - color += 2.0 * texture2D(sceneTex, st + vec2(-dx, 0.0)); - color += 2.0 * texture2D(sceneTex, st + vec2(0.0, +dy)); - color += 2.0 * texture2D(sceneTex, st + vec2(0.0, -dy)); - color += texture2D(sceneTex, st + vec2(+dx, +dy)); - color += texture2D(sceneTex, st + vec2(-dx, +dy)); - color += texture2D(sceneTex, st + vec2(-dx, -dy)); - color += texture2D(sceneTex, st + vec2(+dx, -dy)); - - return color/ 16.0; -} - - -void main() -{ - // RECOPIE - // gl_FragColor = vec4(0.4, 0.2, 0.8, 0.3); - - vec4 maskColor = texture2D(mask, gl_TexCoord[0].st); - vec4 texC = texture2D(sceneTex, gl_TexCoord[0].st); - - float dx = wh.s; - float dy = wh.t; - vec2 st = gl_TexCoord[0].st; - - // Apply 3x3 gaussian filter - vec4 color = 4.0 * texture2D(sceneTex, st); - color += 2.0 * texture2D(sceneTex, st + vec2(+dx, 0.0)); - color += 2.0 * texture2D(sceneTex, st + vec2(-dx, 0.0)); - color += 2.0 * texture2D(sceneTex, st + vec2(0.0, +dy)); - color += 2.0 * texture2D(sceneTex, st + vec2(0.0, -dy)); - color += texture2D(sceneTex, st + vec2(+dx, +dy)); - color += texture2D(sceneTex, st + vec2(-dx, +dy)); - color += texture2D(sceneTex, st + vec2(-dx, -dy)); - color += texture2D(sceneTex, st + vec2(+dx, -dy)); - - color = color / 16.0; - vec4 color2 = texture2D(sceneTex, gl_TexCoord[0].st); - - - gl_FragColor = (maskColor.r * color) + (1. - maskColor.r) * color2; - - // gl_FragColor = color; - - - // gl_FragColor = vec4(maskColor.r, color, color, 0.5); - -} - - diff --git a/papart/data/old/shaders/Filters/blurZone.xml b/papart/data/old/shaders/Filters/blurZone.xml deleted file mode 100644 index 30ace7cf..00000000 --- a/papart/data/old/shaders/Filters/blurZone.xml +++ /dev/null @@ -1,15 +0,0 @@ - - Blur Zone - default1.vert - blurZone.frag - - 0 - 1 - - 0.2 0.2 - - - - - - diff --git a/papart/data/old/shaders/Filters/default1.vert b/papart/data/old/shaders/Filters/default1.vert deleted file mode 100644 index ffd109b4..00000000 --- a/papart/data/old/shaders/Filters/default1.vert +++ /dev/null @@ -1,14 +0,0 @@ - - -//vertex shader - -void main() -{ - // gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex; - // gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - // gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_Position = ftransform(); - -} diff --git a/papart/data/old/shaders/Filters/oldFilm.frag b/papart/data/old/shaders/Filters/oldFilm.frag deleted file mode 100644 index bb7f7416..00000000 --- a/papart/data/old/shaders/Filters/oldFilm.frag +++ /dev/null @@ -1,149 +0,0 @@ -/// http://devmaster.net/posts/2989/shader-effects-old-film - - -/// -/// Uniform variables. -/// -uniform vec2 ImageSize; -uniform vec2 TexelSize; -uniform vec4 Colour; -uniform sampler2D Sample0; - -uniform float SepiaValue; -uniform float NoiseValue; -uniform float ScratchValue; -uniform float InnerVignetting; -uniform float OuterVignetting; -uniform float RandomValue; -uniform float TimeLapse; - - -/// -/// Varying variables. -/// -varying vec2 vUv; - - -/// -/// Computes the overlay between the source and destination colours. -/// -vec3 Overlay (vec3 src, vec3 dst) -{ - // if (dst <= Ω) then: 2 * src * dst - // if (dst > Ω) then: 1 - 2 * (1 - dst) * (1 - src) - return vec3((dst.x <= 0.5) ? (2.0 * src.x * dst.x) : (1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)), - (dst.y <= 0.5) ? (2.0 * src.y * dst.y) : (1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)), - (dst.z <= 0.5) ? (2.0 * src.z * dst.z) : (1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z))); -} - - -/// -/// 2D Noise by Ian McEwan, Ashima Arts. -/// -vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } -vec2 mod289(vec2 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } -vec3 permute(vec3 x) { return mod289(((x*34.0)+1.0)*x); } -float snoise (vec2 v) -{ - const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0 - 0.366025403784439, // 0.5*(sqrt(3.0)-1.0) - -0.577350269189626, // -1.0 + 2.0 * C.x - 0.024390243902439); // 1.0 / 41.0 - - // First corner - vec2 i = floor(v + dot(v, C.yy) ); - vec2 x0 = v - i + dot(i, C.xx); - - // Other corners - vec2 i1; - i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); - vec4 x12 = x0.xyxy + C.xxzz; - x12.xy -= i1; - - // Permutations - i = mod289(i); // Avoid truncation effects in permutation - vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 )) - + i.x + vec3(0.0, i1.x, 1.0 )); - - vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0); - m = m*m ; - m = m*m ; - - // Gradients: 41 points uniformly over a line, mapped onto a diamond. - // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) - - vec3 x = 2.0 * fract(p * C.www) - 1.0; - vec3 h = abs(x) - 0.5; - vec3 ox = floor(x + 0.5); - vec3 a0 = x - ox; - - // Normalise gradients implicitly by scaling m - // Approximation of: m *= inversesqrt( a0*a0 + h*h ); - m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h ); - - // Compute final noise value at P - vec3 g; - g.x = a0.x * x0.x + h.x * x0.y; - g.yz = a0.yz * x12.xz + h.yz * x12.yw; - return 130.0 * dot(m, g); -} - - -/// -/// Fragment shader entry. -/// -void main () -{ - // Sepia RGB value - vec3 sepia = vec3(112.0 / 255.0, 66.0 / 255.0, 20.0 / 255.0); - - // Step 1: Convert to grayscale - vec3 colour = texture2D(Sample0, vUv).xyz; - float gray = (colour.x + colour.y + colour.z) / 3.0; - vec3 grayscale = vec3(gray); - - // Step 2: Appy sepia overlay - vec3 finalColour = Overlay(sepia, grayscale); - - // Step 3: Lerp final sepia colour - finalColour = grayscale + SepiaValue * (finalColour - grayscale); - - // Step 4: Add noise - float noise = snoise(vUv * vec2(1024.0 + RandomValue * 512.0, 1024.0 + RandomValue * 512.0)) * 0.5; - finalColour += noise * NoiseValue; - - // Optionally add noise as an overlay, simulating ISO on the camera - //vec3 noiseOverlay = Overlay(finalColour, vec3(noise)); - //finalColour = finalColour + NoiseValue * (finalColour - noiseOverlay); - - // Step 5: Apply scratches - if ( RandomValue < ScratchValue ) - { - // Pick a random spot to show scratches - float dist = 1.0 / ScratchValue; - float d = distance(vUv, vec2(RandomValue * dist, RandomValue * dist)); - if ( d < 0.4 ) - { - // Generate the scratch - float xPeriod = 8.0; - float yPeriod = 1.0; - float pi = 3.141592; - float phase = TimeLapse; - float turbulence = snoise(vUv * 2.5); - float vScratch = 0.5 + (sin(((vUv.x * xPeriod + vUv.y * yPeriod + turbulence)) * pi + phase) * 0.5); - vScratch = clamp((vScratch * 10000.0) + 0.35, 0.0, 1.0); - - finalColour.xyz *= vScratch; - } - } - - // Step 6: Apply vignetting - // Max distance from centre to corner is ~0.7. Scale that to 1.0. - /* float d = distance(vec2(0.5, 0.5), vUv) * 1.414213; */ - /* float vignetting = clamp((OuterVignetting - d) / (OuterVignetting - InnerVignetting), 0.0, 1.0); */ - /* finalColour.xyz *= vignetting; */ - - // Apply colour - gl_FragColor.xyz = finalColour; - gl_FragColor.w = 1.0; -} diff --git a/papart/data/old/shaders/Filters/oldFilm.xml b/papart/data/old/shaders/Filters/oldFilm.xml deleted file mode 100644 index 8c9c14f5..00000000 --- a/papart/data/old/shaders/Filters/oldFilm.xml +++ /dev/null @@ -1,18 +0,0 @@ - - Blur - default1.vert - oldFilm.frag - - 0 - - 0.2 - 0.2 - 0.2 - 0.1 - 0.8 - 0.2 - 0.2 - - - - diff --git a/papart/data/old/shaders/Filters/oldFilmZone.frag b/papart/data/old/shaders/Filters/oldFilmZone.frag deleted file mode 100644 index b0a84a3f..00000000 --- a/papart/data/old/shaders/Filters/oldFilmZone.frag +++ /dev/null @@ -1,152 +0,0 @@ - -/// -/// Uniform variables. -/// -uniform vec2 ImageSize; -uniform vec2 TexelSize; -uniform vec4 Colour; -uniform sampler2D Sample0; -uniform sampler2D mask; - -uniform float SepiaValue; -uniform float NoiseValue; -uniform float ScratchValue; -uniform float InnerVignetting; -uniform float OuterVignetting; -uniform float RandomValue; -uniform float TimeLapse; - - - -/// -/// Computes the overlay between the source and destination colours. -/// -vec3 Overlay (vec3 src, vec3 dst) -{ - // if (dst <= Ω) then: 2 * src * dst - // if (dst > Ω) then: 1 - 2 * (1 - dst) * (1 - src) - return vec3((dst.x <= 0.5) ? (2.0 * src.x * dst.x) : (1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)), - (dst.y <= 0.5) ? (2.0 * src.y * dst.y) : (1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)), - (dst.z <= 0.5) ? (2.0 * src.z * dst.z) : (1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z))); -} - - -/// -/// 2D Noise by Ian McEwan, Ashima Arts. -/// -vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } -vec2 mod289(vec2 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } -vec3 permute(vec3 x) { return mod289(((x*34.0)+1.0)*x); } -float snoise (vec2 v) -{ - const vec4 C = vec4(0.211324865405187, // (3.0-sqrt(3.0))/6.0 - 0.366025403784439, // 0.5*(sqrt(3.0)-1.0) - -0.577350269189626, // -1.0 + 2.0 * C.x - 0.024390243902439); // 1.0 / 41.0 - - // First corner - vec2 i = floor(v + dot(v, C.yy) ); - vec2 x0 = v - i + dot(i, C.xx); - - // Other corners - vec2 i1; - i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); - vec4 x12 = x0.xyxy + C.xxzz; - x12.xy -= i1; - - // Permutations - i = mod289(i); // Avoid truncation effects in permutation - vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 )) - + i.x + vec3(0.0, i1.x, 1.0 )); - - vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0); - m = m*m ; - m = m*m ; - - // Gradients: 41 points uniformly over a line, mapped onto a diamond. - // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) - - vec3 x = 2.0 * fract(p * C.www) - 1.0; - vec3 h = abs(x) - 0.5; - vec3 ox = floor(x + 0.5); - vec3 a0 = x - ox; - - // Normalise gradients implicitly by scaling m - // Approximation of: m *= inversesqrt( a0*a0 + h*h ); - m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h ); - - // Compute final noise value at P - vec3 g; - g.x = a0.x * x0.x + h.x * x0.y; - g.yz = a0.yz * x12.xz + h.yz * x12.yw; - return 130.0 * dot(m, g); -} - - -/// -/// Fragment shader entry. -/// -void main () -{ - - vec2 vUv = gl_TexCoord[0].st; - - // Sepia RGB value - vec3 sepia = vec3(112.0 / 255.0, 66.0 / 255.0, 20.0 / 255.0); - - // Step 1: Convert to grayscale - vec3 colour = texture2D(Sample0, vUv).xyz; - float gray = (colour.x + colour.y + colour.z) / 3.0; - vec3 grayscale = vec3(gray); - - // Step 2: Appy sepia overlay - vec3 finalColour = Overlay(sepia, grayscale); - - // Step 3: Lerp final sepia colour - finalColour = grayscale + SepiaValue * (finalColour - grayscale); - - // Step 4: Add noise - float noise = snoise(vUv * vec2(1024.0 + RandomValue * 512.0, 1024.0 + RandomValue * 512.0)) * 0.5; - finalColour += noise * NoiseValue; - - // Optionally add noise as an overlay, simulating ISO on the camera - //vec3 noiseOverlay = Overlay(finalColour, vec3(noise)); - //finalColour = finalColour + NoiseValue * (finalColour - noiseOverlay); - - // Step 5: Apply scratches - if ( RandomValue < ScratchValue ) - { - // Pick a random spot to show scratches - float dist = 1.0 / ScratchValue; - float d = distance(vUv, vec2(RandomValue * dist, RandomValue * dist)); - if ( d < 0.4 ) - { - // Generate the scratch - float xPeriod = 8.0; - float yPeriod = 1.0; - float pi = 3.141592; - float phase = TimeLapse; - float turbulence = snoise(vUv * 2.5); - float vScratch = 0.5 + (sin(((vUv.x * xPeriod + vUv.y * yPeriod + turbulence)) * pi + phase) * 0.5); - vScratch = clamp((vScratch * 10000.0) + 0.35, 0.0, 1.0); - - finalColour.xyz *= vScratch; - } - } - - // Step 6: Apply vignetting - // Max distance from centre to corner is ~0.7. Scale that to 1.0. - /* float d = distance(vec2(0.5, 0.5), vUv) * 1.414213; */ - /* float vignetting = clamp((OuterVignetting - d) / (OuterVignetting - InnerVignetting), 0.0, 1.0); */ - /* finalColour.xyz *= vignetting; */ - - // Apply colour - - - gl_FragColor.xyz = finalColour; - gl_FragColor.w = texture2D(Sample0, gl_TexCoord[0].st).w; - - - // gl_FragColor = vec4((maskColor.r * finalColour).xyz + ((1. - maskColor.r) * colour).xyz, colour.w); - -} diff --git a/papart/data/old/shaders/Filters/oldFilmZone.xml b/papart/data/old/shaders/Filters/oldFilmZone.xml deleted file mode 100644 index 41884e7e..00000000 --- a/papart/data/old/shaders/Filters/oldFilmZone.xml +++ /dev/null @@ -1,19 +0,0 @@ - - Blur Zone - default1.vert - oldFilmZone.frag - - 0 - 1 - - 0.7 - 0.3 - 0.3 - - - 0.0 - 0.5 - - - - diff --git a/papart/data/old/shaders/Sobel.xml b/papart/data/old/shaders/Sobel.xml deleted file mode 100755 index 9b232b44..00000000 --- a/papart/data/old/shaders/Sobel.xml +++ /dev/null @@ -1,11 +0,0 @@ - - Sobel edge detector (requires OpenGL 3.3) - SobelVert.glsl - SobelFrag.glsl - - 0 - - - - - diff --git a/papart/data/old/shaders/SobelFrag.glsl b/papart/data/old/shaders/SobelFrag.glsl deleted file mode 100755 index f33e73c6..00000000 --- a/papart/data/old/shaders/SobelFrag.glsl +++ /dev/null @@ -1,41 +0,0 @@ -#version 330 compatibility - -uniform sampler2D sceneTex; -uniform vec2 offset; - -uniform mat3 G[2] = mat3[] -( - mat3( 1.0, 2.0, 1.0, 0.0, 0.0, 0.0, -1.0, -2.0, -1.0 ), - mat3( 1.0, 0.0, -1.0, 2.0, 0.0, -2.0, 1.0, 0.0, -1.0 ) -); - -void main() -{ - vec2 uv = gl_TexCoord[0].xy; - vec3 tc = vec3(1.0, 0.0, 0.0); - - mat3 I; - float cnv[2]; - vec3 sample; - - // fetch the 3x3 neighbourhood and use the RGB vector's length as intensity value - for (int i=0; i<3; i++) - { - for (int j=0; j<3; j++) - { - sample = texelFetch(sceneTex, ivec2(uv / offset) + ivec2(i-1,j-1), 0).rgb; - I[i][j] = length(sample); - } - } - - // calculate the convolution values for all the masks - for (int i=0; i<2; i++) - { - float dp3 = dot(G[i][0], I[0]) + dot(G[i][1], I[1]) + dot(G[i][2], I[2]); - cnv[i] = dp3 * dp3; - } - - tc = vec3(0.5 * sqrt(cnv[0]*cnv[0]+cnv[1]*cnv[1])); - - gl_FragColor = vec4(tc, 1.0); -} diff --git a/papart/data/old/shaders/SobelVert.glsl b/papart/data/old/shaders/SobelVert.glsl deleted file mode 100755 index 34f23f45..00000000 --- a/papart/data/old/shaders/SobelVert.glsl +++ /dev/null @@ -1,7 +0,0 @@ -void main(void) -{ - gl_Position = ftransform(); - gl_TexCoord[0] = gl_MultiTexCoord0; -} - - diff --git a/papart/data/old/shaders/Thermal.xml b/papart/data/old/shaders/Thermal.xml deleted file mode 100755 index f8b027d3..00000000 --- a/papart/data/old/shaders/Thermal.xml +++ /dev/null @@ -1,11 +0,0 @@ - - Predator’s Thermal Vision Post Processing Filter - ThermalVert.glsl - ThermalFrag.glsl - - 0 - - - - - diff --git a/papart/data/old/shaders/ThermalFrag.glsl b/papart/data/old/shaders/ThermalFrag.glsl deleted file mode 100755 index 8a61f65e..00000000 --- a/papart/data/old/shaders/ThermalFrag.glsl +++ /dev/null @@ -1,16 +0,0 @@ -uniform sampler2D sceneTex; - -void main() -{ - vec2 uv = gl_TexCoord[0].xy; - vec3 tc = vec3(1.0, 0.0, 0.0); - vec3 pixcol = texture2D(sceneTex, uv).rgb; - vec3 colors[3]; - colors[0] = vec3(0.,0.,1.); - colors[1] = vec3(1.,1.,0.); - colors[2] = vec3(1.,0.,0.); - float lum = (pixcol.r+pixcol.g+pixcol.b)/3.; - int ix = (lum < 0.5)? 0:1; - tc = mix(colors[ix],colors[ix+1],(lum-float(ix)*0.5)/0.5); - gl_FragColor = vec4(tc, 1.0); -} \ No newline at end of file diff --git a/papart/data/old/shaders/ThermalVert.glsl b/papart/data/old/shaders/ThermalVert.glsl deleted file mode 100755 index 34f23f45..00000000 --- a/papart/data/old/shaders/ThermalVert.glsl +++ /dev/null @@ -1,7 +0,0 @@ -void main(void) -{ - gl_Position = ftransform(); - gl_TexCoord[0] = gl_MultiTexCoord0; -} - - diff --git a/papart/data/old/shaders/Toon.xml b/papart/data/old/shaders/Toon.xml deleted file mode 100755 index bc3036b9..00000000 --- a/papart/data/old/shaders/Toon.xml +++ /dev/null @@ -1,18 +0,0 @@ - - Toon shading on images, by Agnius Vasiliauskas (http://coding-experiments.blogspot.com/2011/01/toon-pixel-shader.html) - ToonVert.glsl - ToonFrag.glsl - - 0 - - - - 0.0 80.0 160.0 240.0 320.0 360.0 - - 0.0 0.15 0.3 0.45 0.6 0.8 1.0 - 0.0 0.3 0.6 1.0 - - - - - diff --git a/papart/data/old/shaders/ToonFrag.glsl b/papart/data/old/shaders/ToonFrag.glsl deleted file mode 100755 index 549b0b13..00000000 --- a/papart/data/old/shaders/ToonFrag.glsl +++ /dev/null @@ -1,169 +0,0 @@ -uniform sampler2D Texture0; -uniform vec2 offset; - -#define HueLevCount 6 -#define SatLevCount 7 -#define ValLevCount 4 -uniform float HueLevels[HueLevCount]; -uniform float SatLevels[SatLevCount]; -uniform float ValLevels[ValLevCount]; - -vec3 RGBtoHSV( float r, float g, float b) { - float minv, maxv, delta; - vec3 res; - - minv = min(min(r, g), b); - maxv = max(max(r, g), b); - res.z = maxv; // v - - delta = maxv - minv; - - if( maxv != 0.0 ) - res.y = delta / maxv; // s - else { - // r = g = b = 0 // s = 0, v is undefined - res.y = 0.0; - res.x = -1.0; - return res; - } - - if( r == maxv ) - res.x = ( g - b ) / delta; // between yellow & magenta - else if( g == maxv ) - res.x = 2.0 + ( b - r ) / delta; // between cyan & yellow - else - res.x = 4.0 + ( r - g ) / delta; // between magenta & cyan - - res.x = res.x * 60.0; // degrees - if( res.x < 0.0 ) - res.x = res.x + 360.0; - - return res; -} - -vec3 HSVtoRGB(float h, float s, float v ) { - int i; - float f, p, q, t; - vec3 res; - - if( s == 0.0 ) { - // achromatic (grey) - res.x = v; - res.y = v; - res.z = v; - return res; - } - - h /= 60.0; // sector 0 to 5 - i = int(floor( h )); - f = h - float(i); // factorial part of h - p = v * ( 1.0 - s ); - q = v * ( 1.0 - s * f ); - t = v * ( 1.0 - s * ( 1.0 - f ) ); - - // Default: - res.x = v; - res.y = p; - res.z = q; - if (i == 0) { - res.x = v; - res.y = t; - res.z = p; - } - if (i == 1) { - res.x = q; - res.y = v; - res.z = p; - } - if (i == 2) { - res.x = p; - res.y = v; - res.z = t; - } - if (i == 3) { - res.x = p; - res.y = q; - res.z = v; - } - if (i == 4) { - res.x = t; - res.y = p; - res.z = v; - } - - return res; -} - -float nearestLevel(float col, int mode) { - int levCount; - if (mode==0) levCount = HueLevCount; - if (mode==1) levCount = SatLevCount; - if (mode==2) levCount = ValLevCount; - - for (int i =0; i= HueLevels[i] && col <= HueLevels[i+1]) { - return HueLevels[i+1]; - } - } - if (mode==1) { - if (col >= SatLevels[i] && col <= SatLevels[i+1]) { - return SatLevels[i+1]; - } - } - if (mode==2) { - if (col >= ValLevels[i] && col <= ValLevels[i+1]) { - return ValLevels[i+1]; - } - } - } -} - -// averaged pixel intensity from 3 color channels -float avg_intensity(vec4 pix) { - return (pix.r + pix.g + pix.b)/3.; -} - -vec4 get_pixel(vec2 coords, float dx, float dy) { - return texture2D(Texture0,coords + vec2(dx, dy)); -} - -// returns pixel color -float IsEdge(in vec2 coords){ - float dxtex = offset.x; - float dytex = offset.y; - float pix[9]; - int k = -1; - float delta; - - // read neighboring pixel intensities - for (int i=-1; i<2; i++) { - for(int j=-1; j<2; j++) { - k++; - pix[k] = avg_intensity(get_pixel(coords,float(i)*dxtex, - float(j)*dytex)); - } - } - - // average color differences around neighboring pixels - delta = (abs(pix[1]-pix[7])+ - abs(pix[5]-pix[3]) + - abs(pix[0]-pix[8])+ - abs(pix[2]-pix[6]) - )/4.; - - return clamp(5.5*delta,0.0,1.0); -} - -void main(void) -{ - vec2 texCoord = gl_TexCoord[0].xy; - vec4 colorOrg = texture2D( Texture0, texCoord ); - vec3 vHSV = RGBtoHSV(colorOrg.r,colorOrg.g,colorOrg.b); - vHSV.x = nearestLevel(vHSV.x, 0); - vHSV.y = nearestLevel(vHSV.y, 1); - vHSV.z = nearestLevel(vHSV.z, 2); - float edg = IsEdge(texCoord); - vec3 vRGB = (edg >= 0.3)? vec3(0.0,0.0,0.0):HSVtoRGB(vHSV.x,vHSV.y,vHSV.z); - gl_FragColor = vec4(vRGB.x,vRGB.y,vRGB.z,1.0); -} \ No newline at end of file diff --git a/papart/data/old/shaders/ToonVert.glsl b/papart/data/old/shaders/ToonVert.glsl deleted file mode 100755 index 34f23f45..00000000 --- a/papart/data/old/shaders/ToonVert.glsl +++ /dev/null @@ -1,7 +0,0 @@ -void main(void) -{ - gl_Position = ftransform(); - gl_TexCoord[0] = gl_MultiTexCoord0; -} - - diff --git a/papart/data/old/shaders/anaglyph.frag b/papart/data/old/shaders/anaglyph.frag deleted file mode 100755 index 4594e056..00000000 --- a/papart/data/old/shaders/anaglyph.frag +++ /dev/null @@ -1,15 +0,0 @@ -uniform sampler2D leftTex; -uniform sampler2D rightTex; - -void main() -{ - // RECOPIE - // gl_FragColor = vec4(0.4, 0.2, 0.8, 0.3); - - vec4 leftColor = texture2D(leftTex, gl_TexCoord[0].st); - vec4 rightColor = texture2D(rightTex, gl_TexCoord[0].st); - - gl_FragColor = normalize(leftColor + rightColor); - -} - diff --git a/papart/data/old/shaders/anaglyph.vert b/papart/data/old/shaders/anaglyph.vert deleted file mode 100755 index 2d83590e..00000000 --- a/papart/data/old/shaders/anaglyph.vert +++ /dev/null @@ -1,12 +0,0 @@ -//vertex shader - -void main() -{ - // gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex; - // gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - // gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_Position = ftransform(); - -} diff --git a/papart/data/old/shaders/anaglyph.xml b/papart/data/old/shaders/anaglyph.xml deleted file mode 100755 index 7ecdb9a7..00000000 --- a/papart/data/old/shaders/anaglyph.xml +++ /dev/null @@ -1,10 +0,0 @@ - - Apply the opposite of the projector lens distortion to get a good visualisation. - anaglyph.vert - anaglyph.frag - - 0 - 1 - - - diff --git a/papart/data/old/shaders/blur.frag b/papart/data/old/shaders/blur.frag deleted file mode 100644 index c22d9d25..00000000 --- a/papart/data/old/shaders/blur.frag +++ /dev/null @@ -1,151 +0,0 @@ -uniform sampler2D sceneTex; -uniform sampler2D mask; - -uniform vec2 wh; -uniform int derivSize; -uniform float intensT; - -vec4 computeBlur(){ - - vec2 uv = gl_TexCoord[0].xy; - vec4 c = texture2D(sceneTex, uv); - - c += texture2D(sceneTex, uv+0.001); - c += texture2D(sceneTex, uv+0.003); - c += texture2D(sceneTex, uv+0.005); - c += texture2D(sceneTex, uv+0.007); - c += texture2D(sceneTex, uv+0.009); - c += texture2D(sceneTex, uv+0.011); - - c += texture2D(sceneTex, uv-0.001); - c += texture2D(sceneTex, uv-0.003); - c += texture2D(sceneTex, uv-0.005); - c += texture2D(sceneTex, uv-0.007); - c += texture2D(sceneTex, uv-0.009); - c += texture2D(sceneTex, uv-0.011); - - c.rgb = vec3((c.r+c.g+c.b)/3.0); - // c = c / 9.5; - - c = c / 11.5; - - return c; -} - -vec4 gaussianBlur(){ - - float dx = wh.s; - float dy = wh.t; - vec2 st = gl_TexCoord[0].st; - - // Apply 3x3 gaussian filter - vec4 color = 4.0 * texture2D(sceneTex, st); - color += 2.0 * texture2D(sceneTex, st + vec2(+dx, 0.0)); - color += 2.0 * texture2D(sceneTex, st + vec2(-dx, 0.0)); - color += 2.0 * texture2D(sceneTex, st + vec2(0.0, +dy)); - color += 2.0 * texture2D(sceneTex, st + vec2(0.0, -dy)); - color += texture2D(sceneTex, st + vec2(+dx, +dy)); - color += texture2D(sceneTex, st + vec2(-dx, +dy)); - color += texture2D(sceneTex, st + vec2(-dx, -dy)); - color += texture2D(sceneTex, st + vec2(+dx, -dy)); - - return color/ 16.0; -} - - -vec2 gaussianDeriv(int deriSize){ - - int neighbor = 2*deriSize + 1; - float sigma = float(deriSize)/3.0; - float dem = 2.0*sigma*sigma; - vec4 sumX1 = vec4(0.0); - vec4 sumY1 = vec4(0.0); - for(int yi=0; yi 0.7){ - - gl_FragColor = computeBlur(); - return; - } - - if(maskColor.g > 0.5){ - vec2 intens = gaussianDeriv(derivSize); - - /* gl_FragColor = vec4(intens.r, intens.g, 0, 1); */ - /* return; */ - - float threshold = intensT; - - if(intens.r > threshold || intens.g > threshold){ - // if(intens.r > 0.2 || intens.g > 0.2){ - - gl_FragColor = texture2D(sceneTex, gl_TexCoord[0].st); - return; - - } else { - - gl_FragColor = vec4(texC.r * 0.3, texC.g * 0.3, texC.b * 0.3, 1.0); - return; - } - } - - - /// Blue codes for high intensity - if(maskColor.b > 0.5){ - - gl_FragColor = vec4(2.0 * texC.rgb, 1.0); - return; - - } - // green codes for Edge enhance - // No code ? Image - - gl_FragColor = texture2D(sceneTex, gl_TexCoord[0].st); - - // gl_FragColor = texture2D(sceneTex, gl_TexCoord[0].st); - - /* vec4 c1 = texture2D(sceneTex, gl_TexCoord[0].st); */ - /* vec4 c2 = texture2D(mask, gl_TexCoord[0].st); */ - /* /\* gl_FragColor = texture2D(mask, gl_TexCoord[0].st); *\/ */ - - /* gl_FragColor = c2; */ - - // gl_FragColor = vec4(c1.r,, 0.5, 1.0); - - // gl_FragColor = texture2D(sceneTex, gl_TexCoord[0].st); - -} - diff --git a/papart/data/old/shaders/blur.vert b/papart/data/old/shaders/blur.vert deleted file mode 100644 index ffd109b4..00000000 --- a/papart/data/old/shaders/blur.vert +++ /dev/null @@ -1,14 +0,0 @@ - - -//vertex shader - -void main() -{ - // gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex; - // gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - - // gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; - gl_TexCoord[0] = gl_MultiTexCoord0; - gl_Position = ftransform(); - -} diff --git a/papart/data/old/shaders/blur.xml b/papart/data/old/shaders/blur.xml deleted file mode 100644 index 99416e46..00000000 --- a/papart/data/old/shaders/blur.xml +++ /dev/null @@ -1,15 +0,0 @@ - - Dream Vision Post Processing Filter - blur.vert - blur.frag - - 0 - 1 - - 0.2 0.2 - 5 - 0.3 - - - - diff --git a/papart/data/old/shaders/calib.xml b/papart/data/old/shaders/calib.xml deleted file mode 100644 index a1dde8b2..00000000 --- a/papart/data/old/shaders/calib.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - 400 - 1200 - - - - 0.026787128 - 0.008649012 - -0.872214 - - - -0.035829786 - 0.60323375 - -0.7967593 - - 0.0059999996 - 1 - - - -1.3911159038543701 - 0.07879400253295898 - 0.35574108362197876 - -0.14813756942749023 - -2.9834423065185547 - 0.5096640586853027 - 0.06685977429151535 - -0.999718189239502 - 1.0 - - - - localhost - 3333 - - - 50 - 50 - - diff --git a/papart/data/old/shaders/capSc.frag b/papart/data/old/shaders/capSc.frag deleted file mode 100644 index 537f2189..00000000 --- a/papart/data/old/shaders/capSc.frag +++ /dev/null @@ -1,45 +0,0 @@ -uniform sampler2D tex; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir; - - -void main() -{ - /* vec3 n,halfV,viewV,ldir; */ - /* float NdotL,NdotHV; */ - /* vec4 color = ambient; */ - - /* /\* a fragment shader can't write a verying variable, hence we need */ - /* a new variable to store the normalized interpolated normal *\/ */ - /* n = normalize(normal); */ - - /* /\* compute the dot product between normal and ldir *\/ */ - /* NdotL = max(dot(n,lightDir),0.0); */ - - /* if (NdotL > 0.0) { */ - /* halfV = normalize(halfVector); */ - /* NdotHV = max(dot(n,halfV),0.0); */ - /* color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); */ - /* color += diffuse * NdotL; */ - /* } */ - - - vec3 ct,cf; - vec4 texel; - float intensity,at,af; - intensity = max(dot(lightDir,normalize(normal)),0.0); - - cf = intensity * (gl_FrontMaterial.diffuse).rgb + - gl_FrontMaterial.ambient.rgb * 0.6; - af = gl_FrontMaterial.diffuse.a; - - // texel = texture2D(gl_TextureMatrix[0], gl_TexCoord[0].st); - texel = texture2D(tex, gl_TexCoord[0].st); - // texel = texture2D(tex,gl_TexCoord[0].st); - - ct = texel.rgb; - at = texel.a; - gl_FragColor = vec4(ct * cf, at * af); - -} diff --git a/papart/data/old/shaders/capSc.vert b/papart/data/old/shaders/capSc.vert deleted file mode 100644 index cc6d9c39..00000000 --- a/papart/data/old/shaders/capSc.vert +++ /dev/null @@ -1,26 +0,0 @@ -/* // Used for shadow lookup */ -/* varying vec4 ShadowCoord; */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir; - -void main() -{ - normal = normalize(gl_NormalMatrix * gl_Normal); - - lightDir = normalize(vec3(gl_LightSource[0].position)); - // halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - // Texture handling - gl_TexCoord[0] = gl_MultiTexCoord0; - - /* ShadowCoord= gl_TextureMatrix[7] * gl_Vertex ; */ - - gl_Position = ftransform(); - - // gl_FrontColor = gl_Color; -} diff --git a/papart/data/old/shaders/classique/color.frag b/papart/data/old/shaders/classique/color.frag deleted file mode 100644 index 0e0697ba..00000000 --- a/papart/data/old/shaders/classique/color.frag +++ /dev/null @@ -1,8 +0,0 @@ - -varying float intensity; - - -void main() -{ - gl_FragColor = vec4(gl_Color.rgb * intensity, 1); -} diff --git a/papart/data/old/shaders/classique/color.vert b/papart/data/old/shaders/classique/color.vert deleted file mode 100644 index e620a034..00000000 --- a/papart/data/old/shaders/classique/color.vert +++ /dev/null @@ -1,11 +0,0 @@ - - -varying float intensity; - -void main() -{ - vec3 lightDir = normalize(vec3(gl_LightSource[0].position)); - intensity = dot(lightDir,gl_Normal); - gl_FrontColor = gl_Color; - gl_Position = ftransform(); -} diff --git a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix-tex.xml b/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix-tex.xml deleted file mode 100644 index fecdf1a5..00000000 --- a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix-tex.xml +++ /dev/null @@ -1,9 +0,0 @@ - - normal drawing - dirLightAmbDiffSpecPix.vert - dirLightAmbDiffSpecPix-tex.frag - - 0 - - - diff --git a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.frag b/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.frag deleted file mode 100755 index 30d0209f..00000000 --- a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.frag +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - gl_FragColor = color; -} diff --git a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.vert b/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.vert deleted file mode 100755 index c24379b7..00000000 --- a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.vert +++ /dev/null @@ -1,34 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - /* first transform the normal into eye space and normalize the result */ - normal = normalize(gl_NormalMatrix * gl_Normal); - - /* now normalize the light's direction. Note that according to the - OpenGL specification, the light is stored in eye space. Also since - we're talking about a directional light, the position field is actually - direction */ - lightDir = normalize(vec3(gl_LightSource[0].position)); - - /* Normalize the halfVector to pass it to the fragment shader */ - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - /* Compute the diffuse, ambient and globalAmbient terms */ - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - gl_Position = ftransform(); -} diff --git a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.xml b/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.xml deleted file mode 100755 index e1f655b9..00000000 --- a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPix.xml +++ /dev/null @@ -1,9 +0,0 @@ - - normal drawing - dirLightAmbDiffSpecPix.vert - dirLightAmbDiffSpecPix.frag - - 0 - - - diff --git a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.frag b/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.frag deleted file mode 100755 index abdb06ab..00000000 --- a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.frag +++ /dev/null @@ -1,56 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,diffuse2,ambient; -varying vec3 normal,lightDir,halfVector,lightDir2,halfVector2; - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotL2,NdotHV; - float intensity, intens1, intens2; - // vec4 color = ambient; - vec4 color = vec4(0, 0, 0, 0); - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - NdotL2 = max(dot(n,lightDir2),0.0); - - if (NdotL > 0.0) { - // halfV = normalize(halfVector); - // NdotHV = max(dot(n,halfV),0.0); - // color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - if (NdotL2 > 0.0) { - // halfV = normalize(halfVector2); - // NdotHV = max(dot(n,halfV),0.0); - // color += gl_FrontMaterial.specular * gl_LightSource[1].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse2 * NdotL2; - } - - intensity = (NdotL + NdotL2) * 0.8; - - intens1 = NdotL / intensity; - intens2 = NdotL2 / intensity; - - // if(intensity >= 1.) - color = diffuse * NdotL * intens1 + diffuse2 * NdotL2 * intens2; - /* else */ - /* color = diffuse * NdotL + diffuse2 * NdotL2 ; */ - // color = gl_LightSource[0].diffuse * 0.5 * NdotL + gl_LightSource[1].diffuse * NdotL2 * 0.5; - - gl_FragColor = color; -} diff --git a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.vert b/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.vert deleted file mode 100755 index ce1bb1a6..00000000 --- a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.vert +++ /dev/null @@ -1,37 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,diffuse2,ambient; -varying vec3 normal,lightDir,halfVector,lightDir2,halfVector2; - -void main() -{ - /* first transform the normal into eye space and normalize the result */ - normal = normalize(gl_NormalMatrix * gl_Normal); - - /* now normalize the light's direction. Note that according to the - OpenGL specification, the light is stored in eye space. Also since - we're talking about a directional light, the position field is actually - direction */ - lightDir = normalize(vec3(gl_LightSource[0].position)); - lightDir2 = normalize(vec3(gl_LightSource[1].position)); - - /* Normalize the halfVector to pass it to the fragment shader */ - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - halfVector2 = normalize(gl_LightSource[1].halfVector.xyz); - - /* Compute the diffuse, ambient and globalAmbient terms */ - diffuse = gl_FrontMaterial.diffuse * (gl_LightSource[0].diffuse); //+ gl_LightSource[1].diffuse); - diffuse2 = gl_FrontMaterial.diffuse * (gl_LightSource[1].diffuse); //+ gl_LightSource[1].diffuse); - // ambient = gl_FrontMaterial.ambient * (gl_LightSource[1].ambient);// + gl_LightSource[1].ambient); - // ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - gl_Position = ftransform(); -} diff --git a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.xml b/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.xml deleted file mode 100755 index 83eeb74d..00000000 --- a/papart/data/old/shaders/classique/dirLightAmbDiffSpecPixMult2.xml +++ /dev/null @@ -1,9 +0,0 @@ - - normal drawing - dirLightAmbDiffSpecPixMult2.vert - dirLightAmbDiffSpecPixMult2.frag - - 0 - - - diff --git a/papart/data/old/shaders/classique/kinect1.frag b/papart/data/old/shaders/classique/kinect1.frag deleted file mode 100755 index a0a25c6d..00000000 --- a/papart/data/old/shaders/classique/kinect1.frag +++ /dev/null @@ -1,45 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; -varying vec4 v_color; - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - - //vec4 color = ambient; - // vec4 color = v_color; - vec4 color = vec4(0, 0, 0, 0); - - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.4) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - - /* color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); */ - - // color += gl_LightSource[0].ambient * pow(NdotHV, 10.); - color += gl_LightSource[0].ambient * NdotL * v_color; - // color += diffuse * NdotL; - } - - gl_FragColor = v_color; - -} diff --git a/papart/data/old/shaders/classique/kinect1.vert b/papart/data/old/shaders/classique/kinect1.vert deleted file mode 100755 index 648b624a..00000000 --- a/papart/data/old/shaders/classique/kinect1.vert +++ /dev/null @@ -1,39 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; -varying vec4 v_color; - -void main() -{ - /* first transform the normal into eye space and normalize the result */ - normal = normalize(gl_NormalMatrix * gl_Normal); - - /* now normalize the light's direction. Note that according to the - OpenGL specification, the light is stored in eye space. Also since - we're talking about a directional light, the position field is actually - direction */ - lightDir = normalize(vec3(gl_LightSource[0].position)); - - /* Normalize the halfVector to pass it to the fragment shader */ - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - /* Compute the diffuse, ambient and globalAmbient terms */ - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - - // diffuse = gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - v_color = gl_Color; - - gl_Position = ftransform(); -} diff --git a/papart/data/old/shaders/classique/texture/t.frag b/papart/data/old/shaders/classique/texture/t.frag deleted file mode 100644 index b4ccc81a..00000000 --- a/papart/data/old/shaders/classique/texture/t.frag +++ /dev/null @@ -1,29 +0,0 @@ -uniform sampler2D tex; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir; - - -void main() -{ - - vec3 ct,cf; - vec4 texel; - float intensity,at,af; - intensity = max(dot(lightDir,normalize(normal)),0.0); - - /* cf = intensity * (gl_FrontMaterial.diffuse).rgb + */ - /* gl_FrontMaterial.ambient.rgb * 0.6; */ - - cf = intensity * diffuse + ambient; - // gl_FrontMaterial.ambient.rgb * 0.6; - - af = gl_FrontMaterial.diffuse.a; - texel = texture2D(tex,gl_TexCoord[0].st); - - ct = texel.rgb; - at = texel.a; - gl_FragColor = vec4(ct * cf, at * af); - - // gl_FragColor = vec4(cf, 1); -} diff --git a/papart/data/old/shaders/classique/texture/t.vert b/papart/data/old/shaders/classique/texture/t.vert deleted file mode 100644 index 6f47c881..00000000 --- a/papart/data/old/shaders/classique/texture/t.vert +++ /dev/null @@ -1,21 +0,0 @@ -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir; - -void main() -{ - normal = normalize(gl_NormalMatrix * gl_Normal); - - lightDir = normalize(vec3(gl_LightSource[0].position)); - // halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - // Texture handling - gl_TexCoord[0] = gl_MultiTexCoord0; - - gl_Position = ftransform(); - - // gl_FrontColor = gl_Color; -} diff --git a/papart/data/old/shaders/classique/texture/textureShader.frag b/papart/data/old/shaders/classique/texture/textureShader.frag deleted file mode 100644 index c34f63c4..00000000 --- a/papart/data/old/shaders/classique/texture/textureShader.frag +++ /dev/null @@ -1,42 +0,0 @@ -uniform sampler2D tex; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir; - - -void main() -{ - /* vec3 n,halfV,viewV,ldir; */ - /* float NdotL,NdotHV; */ - /* vec4 color = ambient; */ - - /* /\* a fragment shader can't write a verying variable, hence we need */ - /* a new variable to store the normalized interpolated normal *\/ */ - /* n = normalize(normal); */ - - /* /\* compute the dot product between normal and ldir *\/ */ - /* NdotL = max(dot(n,lightDir),0.0); */ - - /* if (NdotL > 0.0) { */ - /* halfV = normalize(halfVector); */ - /* NdotHV = max(dot(n,halfV),0.0); */ - /* color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); */ - /* color += diffuse * NdotL; */ - /* } */ - - - vec3 ct,cf; - vec4 texel; - float intensity,at,af; - intensity = max(dot(lightDir,normalize(normal)),0.0); - - cf = intensity * (gl_FrontMaterial.diffuse).rgb + - gl_FrontMaterial.ambient.rgb * 0.6; - af = gl_FrontMaterial.diffuse.a; - texel = texture2D(tex,gl_TexCoord[0].st); - - ct = texel.rgb; - at = texel.a; - gl_FragColor = vec4(ct * cf, at * af); - -} diff --git a/papart/data/old/shaders/classique/texture/textureShader.vert b/papart/data/old/shaders/classique/texture/textureShader.vert deleted file mode 100644 index cc4b4146..00000000 --- a/papart/data/old/shaders/classique/texture/textureShader.vert +++ /dev/null @@ -1,26 +0,0 @@ -// Used for shadow lookup -varying vec4 ShadowCoord; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir; - -void main() -{ - normal = normalize(gl_NormalMatrix * gl_Normal); - - lightDir = normalize(vec3(gl_LightSource[0].position)); - // halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - // Texture handling - gl_TexCoord[0] = gl_MultiTexCoord0; - - ShadowCoord= gl_TextureMatrix[7] * gl_Vertex ; - - gl_Position = ftransform(); - - // gl_FrontColor = gl_Color; -} diff --git a/papart/data/old/shaders/distortFrag.glsl b/papart/data/old/shaders/distortFrag.glsl deleted file mode 100755 index 9c053dd6..00000000 --- a/papart/data/old/shaders/distortFrag.glsl +++ /dev/null @@ -1,33 +0,0 @@ -#ifdef GL_ES -precision mediump float; -precision mediump int; -#endif - - -uniform sampler2D texture; - -varying vec4 vertColor; -varying vec4 vertTexCoord; - -void main() { - gl_FragColor = texture2D(texture, vertTexCoord.st) * vertColor; -} - - - - -/* uniform sampler2D texture; */ -/* uniform sampler2D mapTex; */ - -/* void main() */ -/* { */ - -/* vec4 mapCoord = texture2D(mapTex, gl_TexCoord[0].st); */ -/* gl_FragColor = texture2D(srcTex, mapCoord.rg); */ - -/* gl_FragColor = vec4(1, 0, 0, 1); */ - -/* /\* gl_FragColor = texture2D(srcTex, gl_TexCoord[0].st); *\/ */ -/* // gl_FragColor = texture2D(mapTex, gl_TexCoord[0].st); */ -/* } */ - diff --git a/papart/data/old/shaders/distortVert.glsl b/papart/data/old/shaders/distortVert.glsl deleted file mode 100755 index a23997a1..00000000 --- a/papart/data/old/shaders/distortVert.glsl +++ /dev/null @@ -1,27 +0,0 @@ -/* //vertex shader */ - -/* void main() */ -/* { */ -/* gl_TexCoord[0] = gl_MultiTexCoord0; */ -/* gl_Position = ftransform(); */ - -/* } */ - -#define PROCESSING_TEXTURE_SHADER - -uniform mat4 transform; -uniform mat4 texMatrix; - -attribute vec4 vertex; -attribute vec4 color; -attribute vec2 texCoord; - -varying vec4 vertColor; -varying vec4 vertTexCoord; - -void main() { - gl_Position = transform * vertex; - - vertColor = color; - vertTexCoord = texMatrix * vec4(texCoord, 1.0, 1.0); -} diff --git a/papart/data/old/shaders/kinect/kinect1.frag b/papart/data/old/shaders/kinect/kinect1.frag deleted file mode 100755 index fd8d1b80..00000000 --- a/papart/data/old/shaders/kinect/kinect1.frag +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef GL_ES -precision mediump float; -precision mediump int; -#endif - -varying vec4 vertColor; - -void main() { - - // gl_FragColor = vec4(1, 1, 1, 1); - gl_FragColor = vec4(vertColor.rgb, 1); -} diff --git a/papart/data/old/shaders/kinect/kinect1.vert b/papart/data/old/shaders/kinect/kinect1.vert deleted file mode 100755 index 1bcb0476..00000000 --- a/papart/data/old/shaders/kinect/kinect1.vert +++ /dev/null @@ -1,13 +0,0 @@ -#define PROCESSING_POINT_SHADER - -uniform mat4 transform; - -attribute vec4 vertex; -attribute vec4 color; - -varying vec4 vertColor; - -void main() { - gl_Position = transform * vertex; - vertColor = color / 255; -} diff --git a/papart/data/old/shaders/kinect/kinectTri.frag b/papart/data/old/shaders/kinect/kinectTri.frag deleted file mode 100755 index 3e6fbd73..00000000 --- a/papart/data/old/shaders/kinect/kinectTri.frag +++ /dev/null @@ -1,23 +0,0 @@ -#define PROCESSING_LIGHT_SHADER - -uniform mat4 modelview; -uniform mat4 transform; -uniform mat3 normalMatrix; - -uniform vec4 lightPosition; - -attribute vec4 vertex; -attribute vec4 color; -attribute vec3 normal; - -varying vec4 vertColor; - -void main() { - gl_Position = transform * vertex; - vec3 ecVertex = vec3(modelview * vertex); - vec3 ecNormal = normalize(normalMatrix * normal); - - vec3 direction = normalize(lightPosition.xyz - ecVertex); - float intensity = max(0.0, dot(direction, ecNormal)); - vertColor = vec4(intensity, intensity, intensity, 1) * color; -} diff --git a/papart/data/old/shaders/kinect/kinectTri.vert b/papart/data/old/shaders/kinect/kinectTri.vert deleted file mode 100755 index ec69a61d..00000000 --- a/papart/data/old/shaders/kinect/kinectTri.vert +++ /dev/null @@ -1,12 +0,0 @@ -uniform mat4 transform; - -attribute vec4 vertex; -attribute vec4 color; -attribute vec4 normal; - -varying vec4 vertColor; - -void main() { - gl_Position = transform * vertex; - vertColor = color / 255; -} diff --git a/papart/data/old/shaders/litSphere (working).frag b/papart/data/old/shaders/litSphere (working).frag deleted file mode 100755 index edcf791e..00000000 --- a/papart/data/old/shaders/litSphere (working).frag +++ /dev/null @@ -1,26 +0,0 @@ - -uniform sampler2D litTexture; - -varying vec3 normal; - -vec4 litSphereColor(in vec3 n) { - //Normal to camera space - - vec2 pos = normalize(n).xy; - vec2 posInTex = vec2( 0.5 + pos.x * 0.5, 0.5 - pos.y * 0.5 ); - vec4 color = texture2D(litTexture, posInTex); - -// vec2 pos = normalize(normal).xy; - -/// vec2 posInTex = vec2( 0.5 + pos.x * 0.5, 0.5 - pos.y * 0.5 ); -/// vec4 color0 = texture2D( tex0, posInTex ); -/// vec4 color1 = texture2D( tex1, posInTex ); -/// float c = clamp(0.5 + 0.5*tanh(curvature*enhance), 0.0,1.0); -/// gl_FragData[0] = c*color0 + (1.0-c)*color1; - - return color; -} - -void main() { - gl_FragColor = litSphereColor(normal); -} diff --git a/papart/data/old/shaders/litSphere.frag b/papart/data/old/shaders/litSphere.frag deleted file mode 100755 index 911bbb3d..00000000 --- a/papart/data/old/shaders/litSphere.frag +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D tex0; -uniform sampler2D tex1; -uniform float enhance; -varying vec3 normal, lightDir; -varying float curvature; - -void main () { - vec2 pos = normalize(normal + lightDir).xy; - vec2 posInTex = vec2( 0.5 + pos.x * 0.5, 0.5 - pos.y * 0.5 ); - - vec4 color0 = texture2D( tex0, posInTex ); - vec4 color1 = texture2D( tex1, posInTex ); - gl_FragData[0] = color0; -} diff --git a/papart/data/old/shaders/litSphere.vert b/papart/data/old/shaders/litSphere.vert deleted file mode 100755 index 4ff760ea..00000000 --- a/papart/data/old/shaders/litSphere.vert +++ /dev/null @@ -1,25 +0,0 @@ -varying vec3 normal,lightDir; -varying vec4 diffuse,ambient; -varying vec3 halfVector; - -void main(void) { - - /* first transform the normal into eye space and normalize the result */ - normal = normalize(gl_NormalMatrix * gl_Normal); - - /* now normalize the light's direction. Note that according to the - OpenGL specification, the light is stored in eye space. Also since - we're talking about a directional light, the position field is actually - direction */ - lightDir = normalize(vec3(gl_LightSource[0].position)); - - /* Normalize the halfVector to pass it to the fragment shader */ - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - /* Compute the diffuse, ambient and globalAmbient terms */ - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - gl_Position = ftransform(); -} diff --git a/papart/data/old/shaders/litSphere.xml b/papart/data/old/shaders/litSphere.xml deleted file mode 100755 index 6a2b3459..00000000 --- a/papart/data/old/shaders/litSphere.xml +++ /dev/null @@ -1,9 +0,0 @@ - - Lit Sphere - litSphere.vert - litSphere.frag - - 0 - - - diff --git a/papart/data/old/shaders/litsphere.frag b/papart/data/old/shaders/litsphere.frag deleted file mode 100755 index 911bbb3d..00000000 --- a/papart/data/old/shaders/litsphere.frag +++ /dev/null @@ -1,14 +0,0 @@ -uniform sampler2D tex0; -uniform sampler2D tex1; -uniform float enhance; -varying vec3 normal, lightDir; -varying float curvature; - -void main () { - vec2 pos = normalize(normal + lightDir).xy; - vec2 posInTex = vec2( 0.5 + pos.x * 0.5, 0.5 - pos.y * 0.5 ); - - vec4 color0 = texture2D( tex0, posInTex ); - vec4 color1 = texture2D( tex1, posInTex ); - gl_FragData[0] = color0; -} diff --git a/papart/data/old/shaders/litsphere.vert b/papart/data/old/shaders/litsphere.vert deleted file mode 100755 index 4ff760ea..00000000 --- a/papart/data/old/shaders/litsphere.vert +++ /dev/null @@ -1,25 +0,0 @@ -varying vec3 normal,lightDir; -varying vec4 diffuse,ambient; -varying vec3 halfVector; - -void main(void) { - - /* first transform the normal into eye space and normalize the result */ - normal = normalize(gl_NormalMatrix * gl_Normal); - - /* now normalize the light's direction. Note that according to the - OpenGL specification, the light is stored in eye space. Also since - we're talking about a directional light, the position field is actually - direction */ - lightDir = normalize(vec3(gl_LightSource[0].position)); - - /* Normalize the halfVector to pass it to the fragment shader */ - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - /* Compute the diffuse, ambient and globalAmbient terms */ - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - gl_Position = ftransform(); -} diff --git a/papart/data/old/shaders/normal.frag b/papart/data/old/shaders/normal.frag deleted file mode 100755 index d3967fc9..00000000 --- a/papart/data/old/shaders/normal.frag +++ /dev/null @@ -1,16 +0,0 @@ -// -// Fragment shader for cartoon-style shading -// -// Author: Philip Rideout -// -// Copyright (c) 2004 3Dlabs Inc. Ltd. -// -// See 3Dlabs-License.txt for license information -// - -varying vec3 Normal; - -void main (void) -{ - gl_FragColor = vec4(Normal / 2.0 + vec3(0.5, 0.5, 0.5), 1.0); -} diff --git a/papart/data/old/shaders/normal.vert b/papart/data/old/shaders/normal.vert deleted file mode 100755 index 3ca74d39..00000000 --- a/papart/data/old/shaders/normal.vert +++ /dev/null @@ -1,18 +0,0 @@ -// -// Vertex shader for cartoon-style shading -// -// Author: Philip Rideout -// -// Copyright (c) 2004 3Dlabs Inc. Ltd. -// -// See 3Dlabs-License.txt for license information -// - -varying vec3 Normal; - -void main(void) -{ - Normal = normalize(gl_NormalMatrix * gl_Normal); - // Normal = vec3(0, 1, 0); - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -} diff --git a/papart/data/old/shaders/normal.xml b/papart/data/old/shaders/normal.xml deleted file mode 100755 index 842f2a02..00000000 --- a/papart/data/old/shaders/normal.xml +++ /dev/null @@ -1,9 +0,0 @@ - - normal drawing - normal.vert - normal.frag - - 0 - - - diff --git a/papart/data/old/shaders/processing/ToonFrag.glsl b/papart/data/old/shaders/processing/ToonFrag.glsl deleted file mode 100644 index 054bb0df..00000000 --- a/papart/data/old/shaders/processing/ToonFrag.glsl +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef GL_ES -precision mediump float; -precision mediump int; -#endif - -varying vec3 vertNormal; -varying vec3 vertLightDir; - -void main() { - float intensity; - vec4 color; - intensity = max(0.0, dot(vertLightDir, vertNormal)); - - if (intensity > 0.95) { - color = vec4(1.0, 0.5, 0.5, 1.0); - } else if (intensity > 0.5) { - color = vec4(0.6, 0.3, 0.3, 1.0); - } else if (intensity > 0.25) { - color = vec4(0.4, 0.2, 0.2, 1.0); - } else { - color = vec4(0.2, 0.1, 0.1, 1.0); - } - - gl_FragColor = color; -} \ No newline at end of file diff --git a/papart/data/old/shaders/processing/ToonVert.glsl b/papart/data/old/shaders/processing/ToonVert.glsl deleted file mode 100644 index 01b77b2c..00000000 --- a/papart/data/old/shaders/processing/ToonVert.glsl +++ /dev/null @@ -1,31 +0,0 @@ -// Toon shader using per-pixel lighting. Based on the glsl -// tutorial from lighthouse 3D: -// http://www.lighthouse3d.com/tutorials/glsl-tutorial/toon-shader-version-ii/ - -#define PROCESSING_LIGHT_SHADER - -uniform mat4 modelview; -uniform mat4 transform; -uniform mat3 normalMatrix; - -uniform vec3 lightNormal[8]; - -attribute vec4 vertex; -attribute vec3 normal; - -varying vec3 vertNormal; -varying vec3 vertLightDir; - -void main() { - // Vertex in clip coordinates - gl_Position = transform * vertex; - - // Normal vector in eye coordinates is passed - // to the fragment shader - vertNormal = normalize(normalMatrix * normal); - - // Assuming that there is only one directional light. - // Its normal vector is passed to the fragment shader - // in order to perform per-pixel lighting calculation. - vertLightDir = -lightNormal[0]; -} \ No newline at end of file diff --git a/papart/data/old/shaders/processing/normal.frag b/papart/data/old/shaders/processing/normal.frag deleted file mode 100755 index 0be2bc86..00000000 --- a/papart/data/old/shaders/processing/normal.frag +++ /dev/null @@ -1,20 +0,0 @@ -#ifdef GL_ES -precision mediump float; -precision mediump int; -#endif - -varying vec4 vertColor; -varying vec3 ecNormal; -varying vec3 lightDir; - -void main() { - vec3 direction = normalize(lightDir); - vec3 normal = normalize(ecNormal); - float intensity = max(0.0, dot(direction, normal)); - gl_FragColor = vec4(intensity, intensity, intensity, 1) * vertColor; - - gl_FragColor = vec4(ecNormal, 1); - -} - - diff --git a/papart/data/old/shaders/processing/normal.vert b/papart/data/old/shaders/processing/normal.vert deleted file mode 100755 index f0ab9810..00000000 --- a/papart/data/old/shaders/processing/normal.vert +++ /dev/null @@ -1,25 +0,0 @@ -#define PROCESSING_LIGHT_SHADER - -uniform mat4 modelview; -uniform mat4 transform; -uniform mat3 normalMatrix; - -uniform vec4 lightPosition; -uniform vec3 lightNormal; - -attribute vec4 vertex; -attribute vec4 color; -attribute vec3 normal; - -varying vec4 vertColor; -varying vec3 ecNormal; -varying vec3 lightDir; - -void main() { - gl_Position = transform * vertex; - vec3 ecVertex = vec3(modelview * vertex); - - ecNormal = normalize(normalMatrix * normal); - lightDir = normalize(lightPosition.xyz - ecVertex); - vertColor = color; -} diff --git a/papart/data/old/shaders/projDistort.xml b/papart/data/old/shaders/projDistort.xml deleted file mode 100755 index c49d1849..00000000 --- a/papart/data/old/shaders/projDistort.xml +++ /dev/null @@ -1,10 +0,0 @@ - - Apply the opposite of the projector lens distortion to get a good visualisation. - distortVert.glsl - distortFrag.glsl - - 0 - 1 - - - diff --git a/papart/data/old/shaders/shadowMap-noTex.frag b/papart/data/old/shaders/shadowMap-noTex.frag deleted file mode 100644 index f17d3a18..00000000 --- a/papart/data/old/shaders/shadowMap-noTex.frag +++ /dev/null @@ -1,69 +0,0 @@ -uniform sampler2D tex; -uniform sampler2D ShadowMap; - -varying vec4 ShadowCoord; -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - // vec4 TexColor = texture2D(tex,gl_TexCoord[0].st); - - - vec4 shadowCoordinateWdivide = ShadowCoord / ShadowCoord.w ; - - // Used to lower moiré pattern and self-shadowing - shadowCoordinateWdivide.z += 0.0005; - - float distanceFromLight = texture2D(ShadowMap, shadowCoordinateWdivide.st).z; - - float shadow = 1.0; - if (ShadowCoord.w > 0.0) - shadow = distanceFromLight < shadowCoordinateWdivide.z ? 0.5 : 1.0 ; - - - /* vec3 ct,cf; */ - /* vec4 texel; */ - /* float intensity,at,af; */ - /* intensity = max(dot(lightDir,normalize(normal)),0.0); */ - /* cf = intensity * (gl_FrontMaterial.diffuse).rgb + gl_FrontMaterial.ambient.rgb * 0.6; */ - /* af = gl_FrontMaterial.diffuse.a; */ - - gl_FragColor = vec4(color.rgb * shadow, color.a); - - - // gl_FragColor = color * 0.5 + 0.5 * vec4(texture2D(ShadowMap, shadowCoordinateWdivide.st).rgb, 2); - - - gl_FragColor = vec4(texture2D(ShadowMap, shadowCoordinateWdivide.st).rgb, 1); - - - - - - - // gl_FragColor = texture2D(ShadowMap, gl_TexCoord[0].st); - - // gl_FragColor = vec4(texture2D(ShadowMap, shadowCoordinateWdivide.st).rgb, 1); - // gl_FragColor = vec4(1. - shadowCoordinateWdivide.z); - -} - diff --git a/papart/data/old/shaders/shadowMap-noTex.frag.backup b/papart/data/old/shaders/shadowMap-noTex.frag.backup deleted file mode 100644 index c25e5d2d..00000000 --- a/papart/data/old/shaders/shadowMap-noTex.frag.backup +++ /dev/null @@ -1,75 +0,0 @@ -uniform sampler2D tex; -uniform sampler2D ShadowMap; - -varying vec4 ShadowCoord; -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - // vec4 TexColor = texture2D(tex,gl_TexCoord[0].st); - - - vec4 shadowCoordinateWdivide = ShadowCoord / ShadowCoord.w ; - - // Used to lower moiré pattern and self-shadowing - shadowCoordinateWdivide.z += 0.0005; - - float distanceFromLight = texture2D(ShadowMap, shadowCoordinateWdivide.st).z; - - vec4 _color; - float shadow = 1.0; - if (ShadowCoord.w > 0.0){ - shadow = distanceFromLight < shadowCoordinateWdivide.z ? 0.5 : 1.0 ; - - - if( distanceFromLight < shadowCoordinateWdivide.z ){ - - gl_FragColor = vec4(0.0,0.0,0.0,1.0); - return; - } - - /* return; */ - } - - /* vec3 ct,cf; */ - /* vec4 texel; */ - /* float intensity,at,af; */ - /* intensity = max(dot(lightDir,normalize(normal)),0.0); */ - /* cf = intensity * (gl_FrontMaterial.diffuse).rgb + gl_FrontMaterial.ambient.rgb * 0.6; */ - /* af = gl_FrontMaterial.diffuse.a; */ - - - _color = vec4(color.rgb * shadow, color.a); - - // Toon shader... - - if (color.r > 0.5) - _color = vec4(0.8,0.8,0.8,1.0); - else if (color.r > 0.35) - _color = vec4(0.4,0.4,0.4,1.0); - else - _color = vec4(0.2,0.2,0.2,1.0); - - gl_FragColor = _color; - -} - diff --git a/papart/data/old/shaders/shadowMap.frag b/papart/data/old/shaders/shadowMap.frag deleted file mode 100755 index fa799760..00000000 --- a/papart/data/old/shaders/shadowMap.frag +++ /dev/null @@ -1,161 +0,0 @@ -uniform sampler2D tex; -uniform sampler2D ShadowMap; -uniform float usingTex; - -varying vec4 ShadowCoord; -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - - -/* float lookup(float x, float y) */ -/* { */ -/* /\* float depth = shadow2DProj(ShadowMap, *\/ */ -/* /\* ShadowCoord + vec3(x, y, 0) * 0.0005).x; *\/ */ - -/* vec4 p = ShadowCoord + vec4(vec3(x * ShadowCoord.w , y * ShadowCoord.w, 0) * 0.0005, 1.); */ - -/* float depth = shadow2DProj(ShadowMap, p).w; */ - -/* // ShadowCoord + vec4(vec3(x, y, 0) * 0.0005,0) ).x; */ - -/* return depth != 1.0 ? 0.75 : 1.0; */ -/* } */ - - -/* float lookup( vec2 offSet) */ -/* { */ -/* // Values are multiplied by ShadowCoord.w because shadow2DProj does a W division for us. */ -/* return shadow2DProj(ShadowMap, ShadowCoord + */ -/* vec4(offSet.x * xPixelOffset * ShadowCoord.w, offSet.y * yPixelOffset * ShadowCoord.w, 0.05, 0.0) ).w; */ -/* } */ - - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - // vec4 TexColor = texture2D(tex,gl_TexCoord[0].st); - - - /////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////// - - - /* float shadeFactor = lookup(0.0, 0.0); */ - /* gl_FragColor = vec4(shadeFactor * color.rgb * TexColor.rgb, color.a * TexColor.a); */ - - - /////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////// - - - vec4 TexColor = texture2D(tex,gl_TexCoord[0].st); - - vec4 shadowCoordinateWdivide = ShadowCoord / ShadowCoord.w ; - - // Used to lower moiré pattern and self-shadowing - shadowCoordinateWdivide.z += 0.0005; - - // vec2 ind = vec2(1.-shadowCoordinateWdivide.s, 1.-shadowCoordinateWdivide.t ); - - // float distanceFromLight = texture2D(ShadowMap,shadowCoordinateWdivide.st).z; - float distanceFromLight = texture2D(ShadowMap, shadowCoordinateWdivide.st).z; - - float shadow = 1.0; - if (ShadowCoord.w > 0.0) - shadow = distanceFromLight < shadowCoordinateWdivide.z ? 0.5 : 1.0 ; - - /* if(shadowCoordinateWdivide.z > 0.5){ */ - /* // shadow = 1.0; */ - /* gl_FragColor = vec4(color.xyz * shadow, color[3]); */ - /* }else */ - /* gl_FragColor = vec4(0., 0., 1., 1.); */ - - // gl_FragColor = vec4(distanceFromLight, shadowCoordinateWdivide.z, 0., 1.); - - // gl_FragColor = vec4(color.xyz * shadow, color[3]); - - - // gl_FragColor = TexColor * color; - // gl_FragColor = shadow * color * TexColor; - - - - vec3 ct,cf; - vec4 texel; - float intensity,at,af; - intensity = max(dot(lightDir,normalize(normal)),0.0); - - cf = intensity * (gl_FrontMaterial.diffuse).rgb + - gl_FrontMaterial.ambient.rgb * 0.6; - af = gl_FrontMaterial.diffuse.a; - texel = texture2D(tex,gl_TexCoord[0].st); - - ct = texel.rgb; - at = texel.a; - gl_FragColor = vec4(ct * cf * shadow, at * af); - - // NO TEXTURE - // gl_FragColor = color * shadow; - // gl_FragColor = color; - - /* if(usingTex == 1) */ - /* gl_FragColor = vec4(ct * cf * shadow, at * af); */ - /* else{ */ - // - // gl_FragColor = vec4(cf * shadow, af); - // } - - - // gl_FragColor = vec4(TexColor.rgb * color.rgb , color.a); - // gl_FragColor = vec4(color.rgb * shadow, color.a); - - - /* vec2 coord = gl_FragCoord.xy / 512.; */ - /* gl_FragColor = vec4(texture2D(ShadowMap, coord).rgb, 1.); */ - /* gl_FragColor = vec4(texture2D(tex, coord).rgba); */ - - - - /* if(shadowCoordinateWdivide.xyz == clamp(shadowCoordinateWdivide.xyz, 0., 1.)){ */ - /* gl_FragColor = vec4(color.xyz * shadow, color[3]); */ - /* } else{ */ - /* gl_FragColor = vec4(0., 0., 1., 1.); */ - /* } */ - - - - /* gl_FragColor = vec4(TexColor.xyz * color.xyz * shadow, color[3]); */ - - - - - - // gl_FragColor = vec4((shadowCoordinateWdivide.xyz) ,1); - - /* gl_FragColor = texture2D(ShadowMap, coord) + TexColor * 0.00; */ - - - // gl_FragColor = vec4(vec3(texture2D(ShadowMap, coord)) ,1); - - - - -} - diff --git a/papart/data/old/shaders/shadowMap.frag.backup b/papart/data/old/shaders/shadowMap.frag.backup deleted file mode 100644 index fa799760..00000000 --- a/papart/data/old/shaders/shadowMap.frag.backup +++ /dev/null @@ -1,161 +0,0 @@ -uniform sampler2D tex; -uniform sampler2D ShadowMap; -uniform float usingTex; - -varying vec4 ShadowCoord; -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - - -/* float lookup(float x, float y) */ -/* { */ -/* /\* float depth = shadow2DProj(ShadowMap, *\/ */ -/* /\* ShadowCoord + vec3(x, y, 0) * 0.0005).x; *\/ */ - -/* vec4 p = ShadowCoord + vec4(vec3(x * ShadowCoord.w , y * ShadowCoord.w, 0) * 0.0005, 1.); */ - -/* float depth = shadow2DProj(ShadowMap, p).w; */ - -/* // ShadowCoord + vec4(vec3(x, y, 0) * 0.0005,0) ).x; */ - -/* return depth != 1.0 ? 0.75 : 1.0; */ -/* } */ - - -/* float lookup( vec2 offSet) */ -/* { */ -/* // Values are multiplied by ShadowCoord.w because shadow2DProj does a W division for us. */ -/* return shadow2DProj(ShadowMap, ShadowCoord + */ -/* vec4(offSet.x * xPixelOffset * ShadowCoord.w, offSet.y * yPixelOffset * ShadowCoord.w, 0.05, 0.0) ).w; */ -/* } */ - - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - // vec4 TexColor = texture2D(tex,gl_TexCoord[0].st); - - - /////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////// - - - /* float shadeFactor = lookup(0.0, 0.0); */ - /* gl_FragColor = vec4(shadeFactor * color.rgb * TexColor.rgb, color.a * TexColor.a); */ - - - /////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////// - - - vec4 TexColor = texture2D(tex,gl_TexCoord[0].st); - - vec4 shadowCoordinateWdivide = ShadowCoord / ShadowCoord.w ; - - // Used to lower moiré pattern and self-shadowing - shadowCoordinateWdivide.z += 0.0005; - - // vec2 ind = vec2(1.-shadowCoordinateWdivide.s, 1.-shadowCoordinateWdivide.t ); - - // float distanceFromLight = texture2D(ShadowMap,shadowCoordinateWdivide.st).z; - float distanceFromLight = texture2D(ShadowMap, shadowCoordinateWdivide.st).z; - - float shadow = 1.0; - if (ShadowCoord.w > 0.0) - shadow = distanceFromLight < shadowCoordinateWdivide.z ? 0.5 : 1.0 ; - - /* if(shadowCoordinateWdivide.z > 0.5){ */ - /* // shadow = 1.0; */ - /* gl_FragColor = vec4(color.xyz * shadow, color[3]); */ - /* }else */ - /* gl_FragColor = vec4(0., 0., 1., 1.); */ - - // gl_FragColor = vec4(distanceFromLight, shadowCoordinateWdivide.z, 0., 1.); - - // gl_FragColor = vec4(color.xyz * shadow, color[3]); - - - // gl_FragColor = TexColor * color; - // gl_FragColor = shadow * color * TexColor; - - - - vec3 ct,cf; - vec4 texel; - float intensity,at,af; - intensity = max(dot(lightDir,normalize(normal)),0.0); - - cf = intensity * (gl_FrontMaterial.diffuse).rgb + - gl_FrontMaterial.ambient.rgb * 0.6; - af = gl_FrontMaterial.diffuse.a; - texel = texture2D(tex,gl_TexCoord[0].st); - - ct = texel.rgb; - at = texel.a; - gl_FragColor = vec4(ct * cf * shadow, at * af); - - // NO TEXTURE - // gl_FragColor = color * shadow; - // gl_FragColor = color; - - /* if(usingTex == 1) */ - /* gl_FragColor = vec4(ct * cf * shadow, at * af); */ - /* else{ */ - // - // gl_FragColor = vec4(cf * shadow, af); - // } - - - // gl_FragColor = vec4(TexColor.rgb * color.rgb , color.a); - // gl_FragColor = vec4(color.rgb * shadow, color.a); - - - /* vec2 coord = gl_FragCoord.xy / 512.; */ - /* gl_FragColor = vec4(texture2D(ShadowMap, coord).rgb, 1.); */ - /* gl_FragColor = vec4(texture2D(tex, coord).rgba); */ - - - - /* if(shadowCoordinateWdivide.xyz == clamp(shadowCoordinateWdivide.xyz, 0., 1.)){ */ - /* gl_FragColor = vec4(color.xyz * shadow, color[3]); */ - /* } else{ */ - /* gl_FragColor = vec4(0., 0., 1., 1.); */ - /* } */ - - - - /* gl_FragColor = vec4(TexColor.xyz * color.xyz * shadow, color[3]); */ - - - - - - // gl_FragColor = vec4((shadowCoordinateWdivide.xyz) ,1); - - /* gl_FragColor = texture2D(ShadowMap, coord) + TexColor * 0.00; */ - - - // gl_FragColor = vec4(vec3(texture2D(ShadowMap, coord)) ,1); - - - - -} - diff --git a/papart/data/old/shaders/shadowMap.vert b/papart/data/old/shaders/shadowMap.vert deleted file mode 100755 index aa6f1aec..00000000 --- a/papart/data/old/shaders/shadowMap.vert +++ /dev/null @@ -1,26 +0,0 @@ -// Used for shadow lookup -varying vec4 ShadowCoord; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - normal = normalize(gl_NormalMatrix * gl_Normal); - - lightDir = normalize(vec3(gl_LightSource[0].position)); - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - // Texture handling - gl_TexCoord[0] = gl_MultiTexCoord0; - - ShadowCoord= gl_TextureMatrix[7] * gl_Vertex ; - - gl_Position = ftransform(); - - // gl_FrontColor = gl_Color; -} diff --git a/papart/data/old/shaders/shadowMap.vert.backup b/papart/data/old/shaders/shadowMap.vert.backup deleted file mode 100644 index aa6f1aec..00000000 --- a/papart/data/old/shaders/shadowMap.vert.backup +++ /dev/null @@ -1,26 +0,0 @@ -// Used for shadow lookup -varying vec4 ShadowCoord; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - normal = normalize(gl_NormalMatrix * gl_Normal); - - lightDir = normalize(vec3(gl_LightSource[0].position)); - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - // Texture handling - gl_TexCoord[0] = gl_MultiTexCoord0; - - ShadowCoord= gl_TextureMatrix[7] * gl_Vertex ; - - gl_Position = ftransform(); - - // gl_FrontColor = gl_Color; -} diff --git a/papart/data/old/shaders/shadowMap.xml b/papart/data/old/shaders/shadowMap.xml deleted file mode 100755 index 0a6f5154..00000000 --- a/papart/data/old/shaders/shadowMap.xml +++ /dev/null @@ -1,9 +0,0 @@ - - Maybe a shadow map - shadowMap.vert - shadowMap.frag - - 0 - - - diff --git a/papart/data/old/shaders/sponza.mtl b/papart/data/old/shaders/sponza.mtl deleted file mode 100755 index 29ffca7e..00000000 --- a/papart/data/old/shaders/sponza.mtl +++ /dev/null @@ -1,312 +0,0 @@ -# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware -# File Created: 25.08.2009 16:17:12 - -newmtl sp_00_luk_mali - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7451 0.7098 0.6745 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka SP_LUK.JPG - map_Kd SP_LUK.JPG - map_bump SP_LUK.JPG - bump SP_LUK.JPG - -newmtl sp_svod_kapitel - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7137 0.7059 0.6588 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka 00_SKAP.JPG - map_Kd 00_SKAP.JPG - map_bump 00_SKAP.JPG - bump 00_SKAP.JPG - -newmtl sp_01_stub_baza_ - Ns 20.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7843 0.7843 0.7843 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - -newmtl sp_01_stub_kut - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7373 0.7098 0.6706 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka 01_STUB.JPG - map_Kd 01_STUB.JPG - map_bump 01_STUB.JPG - bump 01_STUB.JPG - -newmtl sp_00_stup - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7373 0.7098 0.6706 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka 01_STUB.JPG - map_Kd 01_STUB.JPG - map_bump 01_STUB.JPG - bump 01_STUB.JPG - -newmtl sp_01_stub_baza - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.8000 0.7843 0.7490 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka 01_S_BA.JPG - map_Kd 01_S_BA.JPG - map_bump 01_S_BA.JPG - bump 01_S_BA.JPG - -newmtl sp_00_luk_mal1 - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7451 0.7098 0.6745 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka 01_ST_KP.JPG - map_Kd 01_ST_KP.JPG - map_bump SP_LUK.JPG - bump SP_LUK.JPG - -newmtl sp_01_stub - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7373 0.7098 0.6706 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka 01_STUB.JPG - map_Kd 01_STUB.JPG - map_bump 01_STUB.JPG - bump 01_STUB.JPG - -newmtl sp_01_stup - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.8275 0.8000 0.7686 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka X01_ST.JPG - map_Kd X01_ST.JPG - -newmtl sp_vijenac - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7137 0.7059 0.6588 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka 00_SKAP.JPG - map_Kd 00_SKAP.JPG - map_bump 00_SKAP.JPG - bump 00_SKAP.JPG - -newmtl sp_00_pod - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.6275 0.5725 0.5608 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka KAMEN.JPG - map_Kd KAMEN.JPG - map_bump KAMEN.JPG - bump KAMEN.JPG - -newmtl sp_00_svod - Ns 1.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.1451 0.1451 0.1451 - Kd 0.9412 0.8667 0.7373 - Ks 0.0340 0.0323 0.0293 - Ke 0.0000 0.0000 0.0000 - -newmtl sp_02_reljef - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.5294 0.4980 0.4902 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka RELJEF.JPG - map_Kd RELJEF.JPG - map_bump RELJEF.JPG - bump RELJEF.JPG - -newmtl sp_01_luk_a - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7451 0.7098 0.6745 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka SP_LUK.JPG - map_Kd SP_LUK.JPG - map_bump SP_LUK.JPG - bump SP_LUK.JPG - -newmtl sp_zid_vani - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.6275 0.5725 0.5608 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka KAMEN.JPG - map_Kd KAMEN.JPG - map_bump KAMEN.JPG - bump KAMEN.JPG - -newmtl sp_00_zid - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.6275 0.5725 0.5608 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka KAMEN.JPG - map_Kd KAMEN.JPG - map_bump KAMEN.JPG - bump KAMEN.JPG - -newmtl sp_01_stup_baza - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.8000 0.7843 0.7490 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka 01_S_BA.JPG - map_Kd 01_S_BA.JPG - map_bump 01_S_BA.JPG - bump 01_S_BA.JPG - -newmtl sp_00_prozor - Ns 50.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 1.0000 1.0000 1.0000 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka PROZOR1.JPG - map_Kd PROZOR1.JPG - map_bump PROZOR1.JPG - bump PROZOR1.JPG - -newmtl sp_00_vrata_krug - Ns 20.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7843 0.7843 0.7843 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka VRATA_KR.JPG - map_Kd VRATA_KR.JPG - map_bump VRATA_KR.JPG - bump VRATA_KR.JPG - -newmtl sp_00_vrata_kock - Ns 20.0000 - Ni 1.5000 - d 1.0000 - Tr 0.0000 - Tf 1.0000 1.0000 1.0000 - illum 2 - Ka 0.0000 0.0000 0.0000 - Kd 0.7843 0.7843 0.7843 - Ks 0.0000 0.0000 0.0000 - Ke 0.0000 0.0000 0.0000 - map_Ka VRATA_KO.JPG - map_Kd VRATA_KO.JPG - map_bump VRATA_KO.JPG - bump VRATA_KO.JPG diff --git a/papart/data/old/shaders/spotLight.xml b/papart/data/old/shaders/spotLight.xml deleted file mode 100755 index 082b9599..00000000 --- a/papart/data/old/shaders/spotLight.xml +++ /dev/null @@ -1,9 +0,0 @@ - - normal drawing - spotlight.vert - spotlight.frag - - 0 - - - diff --git a/papart/data/old/shaders/spotlight.frag b/papart/data/old/shaders/spotlight.frag deleted file mode 100644 index 6e87704c..00000000 --- a/papart/data/old/shaders/spotlight.frag +++ /dev/null @@ -1,49 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a spotlight per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -Antonio Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambientGlobal, ambient; -varying vec3 normal,lightDir,halfVector; -varying float dist; - - -void main() -{ - vec3 n,halfV; - float NdotL,NdotHV; - vec4 color = ambientGlobal; - float att,spotEffect; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,normalize(lightDir)),0.0); - - if (NdotL > 0.0) { - - spotEffect = dot(normalize(gl_LightSource[0].spotDirection), normalize(-lightDir)); - if (spotEffect > gl_LightSource[0].spotCosCutoff) { - spotEffect = pow(spotEffect, gl_LightSource[0].spotExponent); - att = spotEffect / (gl_LightSource[0].constantAttenuation + - gl_LightSource[0].linearAttenuation * dist + - gl_LightSource[0].quadraticAttenuation * dist * dist); - - color += att * (diffuse * NdotL + ambient); - - - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += att * gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - } - } - - gl_FragColor = color; -} diff --git a/papart/data/old/shaders/spotlight.vert b/papart/data/old/shaders/spotlight.vert deleted file mode 100755 index e3d09fb5..00000000 --- a/papart/data/old/shaders/spotlight.vert +++ /dev/null @@ -1,47 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a spotlight per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -Antonio Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambientGlobal, ambient; -varying vec3 normal,lightDir,halfVector; -varying float dist; - -void main() -{ - vec4 ecPos; - vec3 aux; - - /* first transform the normal into eye space and normalize the result */ - normal = normalize(gl_NormalMatrix * gl_Normal); - - /* now normalize the light's direction. Note that according to the - OpenGL specification, the light is stored in eye space.*/ - ecPos = gl_ModelViewMatrix * gl_Vertex; - aux = vec3(gl_LightSource[0].position-ecPos); - lightDir = normalize(aux); - - /* compute the distance to the light source to a varying variable*/ - dist = length(aux); - - /* Normalize the halfVector to pass it to the fragment shader */ - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - /* Compute the diffuse, ambient and globalAmbient terms */ - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambientGlobal = gl_LightModel.ambient * gl_FrontMaterial.ambient; - - - gl_Position = ftransform(); - - - - - -} diff --git a/papart/data/old/shaders/stereoMatch.frag b/papart/data/old/shaders/stereoMatch.frag deleted file mode 100644 index c75ff012..00000000 --- a/papart/data/old/shaders/stereoMatch.frag +++ /dev/null @@ -1,70 +0,0 @@ -uniform sampler2D tex; -uniform sampler2D ShadowMap; -uniform float usingTex; - -varying vec4 ShadowCoord; -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; -varying vec4 pos; - -void main() -{ - - vec4 shadowCoordinateWdivide = ShadowCoord / ShadowCoord.w ; - // shadowCoordinateWdivide.z += 0.0005; - vec4 viewFromOther = texture2D(ShadowMap, shadowCoordinateWdivide.st); - - // If depth is the same (approx) - // we take the other color, - // else we compute the right color - - float d = distance(pos, viewFromOther) / 1000.; - - if(d < 0.3){ - gl_FragColor = vec4(viewFromOther.rg, 0, 1); - - // TODO: compute the distance, shift to match the depth - - }else { - - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - gl_FragColor = color; - // gl_FragColor = vec4(1.0, 0, 0, 1); - } - - - // The main difference is in Z ! - - d = 0.005 * abs(pos.z - viewFromOther.z); - /* gl_FragColor = vec4(0.005 *abs(pos.x - viewFromOther.x), */ - /* 0.005 *abs(pos.y - viewFromOther.y), */ - /* 0.005 *abs(pos.z - viewFromOther.z), 1); */ - - - /* float d = 0.01 * sqrt(distance(pos, viewFromOther)); */ - gl_FragColor = vec4(d, d, d, 1); - - // gl_FragColor = vec4(0, viewFromOther.x, 0, 1.0); - - /* // display the texture */ - /* vec2 screenCoord = vec2(gl_FragCoord.s / 800., 1.- (gl_FragCoord.t / 600.)); */ - /* gl_FragColor = vec4(texture2D(tex, screenCoord).rgb, 1.); */ - - -} - diff --git a/papart/data/old/shaders/stereoMatch.vert b/papart/data/old/shaders/stereoMatch.vert deleted file mode 100644 index 38918fd9..00000000 --- a/papart/data/old/shaders/stereoMatch.vert +++ /dev/null @@ -1,29 +0,0 @@ -// Used for shadow lookup -varying vec4 ShadowCoord; -varying vec4 pos; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - normal = normalize(gl_NormalMatrix * gl_Normal); - - lightDir = normalize(vec3(gl_LightSource[0].position)); - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - // Texture handling - gl_TexCoord[0] = gl_MultiTexCoord0; - - ShadowCoord = gl_TextureMatrix[6] * gl_Vertex ; - - pos = gl_Vertex * gl_ModelViewProjectionMatrix; - - gl_Position = ftransform(); - - // gl_FrontColor = gl_Color; -} diff --git a/papart/data/old/shaders/stereoMatch2.frag b/papart/data/old/shaders/stereoMatch2.frag deleted file mode 100644 index 8341c9f6..00000000 --- a/papart/data/old/shaders/stereoMatch2.frag +++ /dev/null @@ -1,197 +0,0 @@ -uniform sampler2D leftTex, rightTex; -uniform sampler2D ShadowMap; -uniform float usingTex; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; -varying vec4 coord, leftCoord, rightCoord; -varying vec4 leftShift, rightShift, pos1, diff; - -uniform float shift, scale; - -void main() -{ - - vec2 screenCoord = vec2(gl_FragCoord.s / (297. * 6.), - gl_FragCoord.t / (210. * 6.)); - - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - vec4 centerView = color; - - - - - - // Todo : linear depth ? - // Todo : tran - // TODO: hand calibration ?? - // TODO: calcul de min et max, en pixels - - /* gl_FragColor = vec4(texture2D(rightTex, screenCoord).r, */ - /* texture2D(leftTex, screenCoord).gb, */ - /* 1.); */ - - // ce pixel, vu par la camera gauche - /* vec4 leftCoordWdivide = leftCoord / leftCoord.w ; */ - /* vec4 leftView = texture2D(leftTex, leftCoordWdivide.st); */ - - float depth2 = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far) / (gl_DepthRange.far - gl_DepthRange.near); - - // float depth2 = gl_FragCoord.z; - - depth2 = 1. - depth2; - - // depth2 *= scale; - depth2 -= shift; - // depth2 = depth2 * scale ; - - - float c = depth2 * 297. * 6. / 100.; - gl_FragColor = vec4(c, c, c, 1); - - // return ; - - // return; - /* float diff2 = 1. - gl_FragCoord.z; */ - /* diff2 -= shift; */ - /* diff2 *= scale; */ - /* float c = diff2 * 297. * 6. / 10.; */ - /* gl_FragColor = vec4(c, c, c, 1); */ - - // gl_FragColor = vec4(depth2, depth2, depth2, 1); - - gl_FragColor = vec4(leftShift.x, leftShift.y, 0, 1); - return; - - /* vec4 leftView = texture2D(leftTex, screenCoord.rg); */ - /* vec4 rightView = texture2D(rightTex, screenCoord.rg); */ - vec4 leftView = texture2D(leftTex, vec2(screenCoord.r + leftShift.r, screenCoord.g)); - vec4 rightView = texture2D(rightTex, vec2(screenCoord.r - leftShift.g, screenCoord.g)); - - /* if(diff2 *297. * 6. < 4 ){ */ - /* gl_FragColor = vec4(leftView.rgb, 1); */ - /* return; */ - /* } */ - - gl_FragColor = vec4(rightView.r, leftView.gb, 1); - return; - - float dist = distance(leftView.rgb, centerView.rgb); - if(dist < 0.4){ - - leftView.r = leftView.r + 4.0 * (leftView.r - centerView.r); - leftView.g = leftView.g + 4.0 * (leftView.g - centerView.g); - leftView.b = leftView.b + 4.0 * (leftView.b - centerView.b); - - // leftView = vec4(0, 0, 0, 1); - } else - if(dist > 0.8){ - - leftView.r = leftView.r - 4.0 * (leftView.r - centerView.r); - leftView.g = leftView.g - 4.0 * (leftView.g - centerView.g); - leftView.b = leftView.b - 4.0 * (leftView.b - centerView.b); - - //leftView = centerView; - } - - dist = distance(rightView.rgb, centerView.rgb); - if(dist < 0.4){ - - rightView.r = rightView.r + 4.0 * (rightView.r - centerView.r); - rightView.g = rightView.g + 4.0 * (rightView.g - centerView.g); - rightView.b = rightView.b + 4.0 * (rightView.b - centerView.b); - - // rightView = vec4(0, 0, 0, 1); - } else - if(dist > 0.8){ - - rightView.r = rightView.r - 4.0 * (rightView.r - centerView.r); - rightView.g = rightView.g - 4.0 * (rightView.g - centerView.g); - rightView.b = rightView.b - 4.0 * (rightView.b - centerView.b); - - // rightView = centerView; - } - - - - - /* float di = distance(vec4(rightView.r, leftView.gb, 1), */ - /* vec4(texture2D(rightTex, screenCoord).r, */ - /* texture2D(leftTex, screenCoord).gb, */ - /* 1.)); */ - /* gl_FragColor = vec4(di, di, di, 1); */ - - gl_FragColor = vec4(rightView.r, leftView.gb, 1); - /* gl_FragColor = vec4(texture2D(rightTex, screenCoord).r, */ - /* texture2D(leftTex, screenCoord).gb, */ - /* 1.); */ - - -} - - - - - /////////////////////////////////////////////// - - - // The main difference is in Z ! - - // d = 0.005 * abs(coord.z - leftView.z); - /* gl_FragColor = vec4(0.005 *abs(pos.x - viewFromOther.x), */ - /* 0.005 *abs(pos.y - viewFromOther.y), */ - /* 0.005 *abs(pos.z - viewFromOther.z), 1); */ - - - /* float d = 0.01 * sqrt(distance(pos, viewFromOther)); */ - // gl_FragColor = vec4(d , d, d, 1); - - - - - /********* Stereo *********/ - /* // display the texture */ - - /* gl_FragColor = vec4(texture2D(rightTex, screenCoord).r, */ - /* texture2D(leftTex, screenCoord).gb, */ - /* 1.); */ - - - - - ///////////////////// Non fonctionnel //////// - - /* // Idee : fragCoord, reprojeté dans la vue gauche, pour récup sa couleur. */ - /* vec4 screenCoord = vec4(gl_FragCoord.s / (297 * 6), */ - /* gl_FragCoord.t / (210 * 6), gl_FragDepth, 1); */ - /* // calcul de la position de vertex courant, vu par la camara frontale. */ - /* vec4 leftPix = gl_TextureMatrix[5] * screenCoord; */ - - /* // récupération de la couleur de ce vertex. */ - /* vec4 leftPixWd = leftPix / leftPix.w; */ - /* vec4 leftCol = texture2D(leftTex, leftPix.st); */ - - - /* // Test de reprojection... non concluant. */ - /* vec4 vue = screenCoord * gl_ModelViewProjectionMatrix; */ - /* vue = vue / vue.w; */ - /* vec4 screenCoord2 = vec4(vue.x / (297 * 6), */ - /* vue.y / (210 * 6), vue.z, 1); */ - - - diff --git a/papart/data/old/shaders/stereoMatch2.vert b/papart/data/old/shaders/stereoMatch2.vert deleted file mode 100644 index 7ee6bb8a..00000000 --- a/papart/data/old/shaders/stereoMatch2.vert +++ /dev/null @@ -1,51 +0,0 @@ -// Used for shadow lookup -varying vec4 coord, leftCoord, rightCoord; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -varying vec4 leftShift, rightShift, pos1, diff; - -void main() -{ - normal = normalize(gl_NormalMatrix * gl_Normal); - lightDir = normalize(vec3(gl_LightSource[0].position)); - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - // Texture handling - gl_TexCoord[0] = gl_MultiTexCoord0; - - leftCoord = gl_TextureMatrix[5] * gl_Vertex ; - // rightCoord = gl_TextureMatrix[6] * gl_Vertex ; - coord = gl_Vertex * gl_ModelViewProjectionMatrix; - - - leftShift = gl_TextureMatrix[4] * gl_Vertex; - leftShift.x /= (297. * 6.); - leftShift.y /= (210. * 6.); - leftShift.z = leftShift.z / leftShift.w; - - rightShift = gl_TextureMatrix[6] * gl_Vertex ; - rightShift.x /= (297. * 6.); - rightShift.y /= (210. * 6.); - rightShift.z = rightShift.z / rightShift.w; - - pos1 = coord; - pos1.x /= (297. * 6.); - pos1.y /= (210. * 6.); - pos1.z = pos1.z / pos1.w; - // pos1 = pos1 / pos1.z; - - leftShift.x = leftShift.x - pos1.x; - leftShift.y = leftShift.y - pos1.y; - - - diff = leftShift - rightShift; - /* diff = diff / diff.b; */ - - gl_Position = ftransform(); -} diff --git a/papart/data/old/shaders/toon.frag b/papart/data/old/shaders/toon.frag deleted file mode 100644 index 09e7c72b..00000000 --- a/papart/data/old/shaders/toon.frag +++ /dev/null @@ -1,35 +0,0 @@ -// -// Fragment shader for cartoon-style shading -// -// Author: Philip Rideout -// -// Copyright (c) 2004 3Dlabs Inc. Ltd. -// -// See 3Dlabs-License.txt for license information -// - -uniform vec3 DiffuseColor; -uniform vec3 PhongColor; -uniform float Edge; -uniform float Phong; -varying vec3 Normal; - -void main (void) -{ - vec3 color = DiffuseColor; - float f = dot(vec3(0,0,1),Normal); - if (abs(f) < Edge) - color = vec3(0.2); - if (f > Phong) - color = PhongColor; - - gl_FragColor = vec4(color, 1); - // gl_FragColor = vec4(Normal / 2 + vec3(0.5, 0.5, 0.5), 1.0); - // gl_FragColor = vec4(DiffuseColor, 1.0); - - - /* if(Phong > 0.2) */ - /* gl_FragColor = vec4(Edge, 0.0, 0.0, 1.0); */ - /* else */ - /* gl_FragColor = vec4(0.0, Edge, 0.0, 1.0); */ -} diff --git a/papart/data/old/shaders/toon.vert b/papart/data/old/shaders/toon.vert deleted file mode 100755 index 3ca74d39..00000000 --- a/papart/data/old/shaders/toon.vert +++ /dev/null @@ -1,18 +0,0 @@ -// -// Vertex shader for cartoon-style shading -// -// Author: Philip Rideout -// -// Copyright (c) 2004 3Dlabs Inc. Ltd. -// -// See 3Dlabs-License.txt for license information -// - -varying vec3 Normal; - -void main(void) -{ - Normal = normalize(gl_NormalMatrix * gl_Normal); - // Normal = vec3(0, 1, 0); - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -} diff --git a/papart/data/old/shaders/toon.xml b/papart/data/old/shaders/toon.xml deleted file mode 100755 index bc3036b9..00000000 --- a/papart/data/old/shaders/toon.xml +++ /dev/null @@ -1,18 +0,0 @@ - - Toon shading on images, by Agnius Vasiliauskas (http://coding-experiments.blogspot.com/2011/01/toon-pixel-shader.html) - ToonVert.glsl - ToonFrag.glsl - - 0 - - - - 0.0 80.0 160.0 240.0 320.0 360.0 - - 0.0 0.15 0.3 0.45 0.6 0.8 1.0 - 0.0 0.3 0.6 1.0 - - - - - diff --git a/papart/data/old/shaders/toonShadow.frag b/papart/data/old/shaders/toonShadow.frag deleted file mode 100644 index 992584ca..00000000 --- a/papart/data/old/shaders/toonShadow.frag +++ /dev/null @@ -1,65 +0,0 @@ -uniform sampler2D tex; -uniform sampler2D ShadowMap; - -varying vec4 ShadowCoord; -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - // vec4 TexColor = texture2D(tex,gl_TexCoord[0].st); - - - vec4 shadowCoordinateWdivide = ShadowCoord / ShadowCoord.w ; - - // Used to lower moiré pattern and self-shadowing - shadowCoordinateWdivide.z += 0.0005; - - float distanceFromLight = texture2D(ShadowMap, shadowCoordinateWdivide.st).z; - - float shadow = 1.0; - if (ShadowCoord.w > 0.0) - shadow = distanceFromLight < shadowCoordinateWdivide.z ? 0.5 : 1.0 ; - - - /* vec3 ct,cf; */ - /* vec4 texel; */ - /* float intensity,at,af; */ - /* intensity = max(dot(lightDir,normalize(normal)),0.0); */ - /* cf = intensity * (gl_FrontMaterial.diffuse).rgb + gl_FrontMaterial.ambient.rgb * 0.6; */ - /* af = gl_FrontMaterial.diffuse.a; */ - - gl_FragColor = vec4(color.rgb * shadow, color.a); - - - // gl_FragColor = color * 0.5 + 0.5 * vec4(texture2D(ShadowMap, shadowCoordinateWdivide.st).rgb, 2); - - - gl_FragColor = vec4(texture2D(ShadowMap, shadowCoordinateWdivide.st).rgb, 1); - - - // gl_FragColor = texture2D(ShadowMap, gl_TexCoord[0].st); - - // gl_FragColor = vec4(texture2D(ShadowMap, shadowCoordinateWdivide.st).rgb, 1); - // gl_FragColor = vec4(1. - shadowCoordinateWdivide.z); - -} - diff --git a/papart/data/old/shaders/toonShadow.vert b/papart/data/old/shaders/toonShadow.vert deleted file mode 100644 index aa6f1aec..00000000 --- a/papart/data/old/shaders/toonShadow.vert +++ /dev/null @@ -1,26 +0,0 @@ -// Used for shadow lookup -varying vec4 ShadowCoord; - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - normal = normalize(gl_NormalMatrix * gl_Normal); - - lightDir = normalize(vec3(gl_LightSource[0].position)); - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - // Texture handling - gl_TexCoord[0] = gl_MultiTexCoord0; - - ShadowCoord= gl_TextureMatrix[7] * gl_Vertex ; - - gl_Position = ftransform(); - - // gl_FrontColor = gl_Color; -} diff --git a/papart/data/old/shaders/toonShadow.xml b/papart/data/old/shaders/toonShadow.xml deleted file mode 100644 index f676befd..00000000 --- a/papart/data/old/shaders/toonShadow.xml +++ /dev/null @@ -1,9 +0,0 @@ - - toon effect - toonShadow.vert - toonShadow.frag - - 0 - - - diff --git a/papart/data/old/shaders/toonf2 (copie).frag b/papart/data/old/shaders/toonf2 (copie).frag deleted file mode 100644 index 1f6f5bdb..00000000 --- a/papart/data/old/shaders/toonf2 (copie).frag +++ /dev/null @@ -1,28 +0,0 @@ -varying vec3 lightDir,normal; - -void main() -{ - - float intensity; - vec4 color; - - // normalizing the lights position to be on the safe side - vec3 l = normalize(vec3(gl_LightSource[0].position)); - - vec3 n = normalize(normal); - - intensity = dot(l,n); - - if (intensity > 0.95) - color = vec4(0.6,0.6,0.6,1.0); - else if (intensity > 0.7) - color = vec4(0.4,0.4,0.4,1.0); - else if (intensity > 0.5) - color = vec4(0.3,0.3,0.3,1.0); - else if (intensity > 0.25) - color = vec4(0.2,0.2,0.2,1.0); - else - color = vec4(0.1,0.1,0.1,1.0); - - gl_FragColor = color; -} diff --git a/papart/data/old/shaders/toonf2 (copie).vert b/papart/data/old/shaders/toonf2 (copie).vert deleted file mode 100755 index 51fb4e63..00000000 --- a/papart/data/old/shaders/toonf2 (copie).vert +++ /dev/null @@ -1,11 +0,0 @@ - - -varying vec3 lightDir,normal; - -void main() -{ - lightDir = normalize(vec3(gl_LightSource[0].position)); - normal = gl_NormalMatrix * gl_Normal; - - gl_Position = ftransform(); -} diff --git a/papart/data/old/shaders/toonf2.frag b/papart/data/old/shaders/toonf2.frag deleted file mode 100644 index 4ce4329e..00000000 --- a/papart/data/old/shaders/toonf2.frag +++ /dev/null @@ -1,84 +0,0 @@ - -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - vec4 _color; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - - /* if (intensity > 0.98) */ - /* _color = vec4(1.0,1.0,1.0,1.0); */ - /* else */ - - if (color.r > 0.5) - _color = vec4(0.8,0.8,0.8,1.0); - else if (color.r > 0.35) - _color = vec4(0.4,0.4,0.4,1.0); - else - _color = vec4(0.0,0.0,0.0,1.0); - - gl_FragColor = _color; - - // gl_FragColor = color; -} - - - - - - - -/* varying vec3 normal, lightDir; */ -/* varying vec2 texCoord; */ -/* //uniform sampler2D texture; */ - -/* void main() */ -/* { */ -/* float intensity; */ -/* vec3 n; */ -/* vec4 _color; */ - -/* n = normalize(normal); */ -/* intensity = dot(lightDir, n); */ - -/* /\* if (intensity > 0.98) *\/ */ -/* /\* _color = vec4(1.0,1.0,1.0,1.0); *\/ */ -/* /\* else *\/ */ -/* if (intensity > 0.5) */ -/* _color = vec4(0.8,0.8,0.8,1.0); */ -/* else if (intensity > 0.35) */ -/* _color = vec4(0.4,0.4,0.4,1.0); */ -/* else */ -/* _color = vec4(0.0,0.0,0.0,1.0); */ -/* // gl_FragColor = _color * texture2D(texture, texCoord); */ -/* gl_FragColor = _color; */ -/* } */ diff --git a/papart/data/old/shaders/toonf2.vert b/papart/data/old/shaders/toonf2.vert deleted file mode 100755 index 301143ea..00000000 --- a/papart/data/old/shaders/toonf2.vert +++ /dev/null @@ -1,51 +0,0 @@ - - -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - /* first transform the normal into eye space and normalize the result */ - normal = normalize(gl_NormalMatrix * gl_Normal); - - /* now normalize the light's direction. Note that according to the - OpenGL specification, the light is stored in eye space. Also since - we're talking about a directional light, the position field is actually - direction */ - lightDir = normalize(vec3(gl_LightSource[0].position)); - - /* Normalize the halfVector to pass it to the fragment shader */ - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - /* Compute the diffuse, ambient and globalAmbient terms */ - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - gl_Position = ftransform(); -} - - -/* varying vec3 normal, lightDir; */ -/* // varying vec2 texCoord; */ - -/* void main() */ -/* { */ -/* vec4 ecPos; */ -/* ecPos = vec4(gl_ModelViewMatrix * gl_Vertex); */ -/* lightDir = normalize(vec3(gl_LightSource[0].position) - ecPos.xyz); */ -/* normal = normalize(gl_NormalMatrix * gl_Normal); */ - -/* // texCoord = vec2(gl_MultiTexCoord0); */ -/* gl_Position = ftransform(); */ -/* } */ diff --git a/papart/data/old/shaders/toonv2.xml b/papart/data/old/shaders/toonv2.xml deleted file mode 100755 index 85807ae2..00000000 --- a/papart/data/old/shaders/toonv2.xml +++ /dev/null @@ -1,9 +0,0 @@ - - toon effect - toonf2.vert - toonf2.frag - - 0 - - - diff --git a/papart/data/old/shaders/transparency.frag b/papart/data/old/shaders/transparency.frag deleted file mode 100644 index 4991bc82..00000000 --- a/papart/data/old/shaders/transparency.frag +++ /dev/null @@ -1,36 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - - -void main() -{ - vec3 n,halfV,viewV,ldir; - float NdotL,NdotHV; - vec4 color = ambient; - - /* a fragment shader can't write a verying variable, hence we need - a new variable to store the normalized interpolated normal */ - n = normalize(normal); - - /* compute the dot product between normal and ldir */ - NdotL = max(dot(n,lightDir),0.0); - - if (NdotL > 0.0) { - halfV = normalize(halfVector); - NdotHV = max(dot(n,halfV),0.0); - color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess); - color += diffuse * NdotL; - } - - gl_FragColor = vec4(color.rgb, 1.0); -} diff --git a/papart/data/old/shaders/transparency.vert b/papart/data/old/shaders/transparency.vert deleted file mode 100755 index abbe5d8a..00000000 --- a/papart/data/old/shaders/transparency.vert +++ /dev/null @@ -1,40 +0,0 @@ -/* ------------------------------------------------------- - -This shader implements a directional light per pixel using the -diffuse, specular, and ambient terms acoording to "Mathematics of Lighthing" -as found in the book "OpenGL Programming Guide" (aka the Red Book) - -António Ramires Fernandes - ---------------------------------------------------------- */ - -varying vec4 diffuse,ambient; -varying vec3 normal,lightDir,halfVector; - -void main() -{ - /* first transform the normal into eye space and normalize the result */ - normal = normalize(gl_NormalMatrix * gl_Normal); - - /* now normalize the light's direction. Note that according to the - OpenGL specification, the light is stored in eye space. Also since - we're talking about a directional light, the position field is actually - direction */ - lightDir = normalize(vec3(gl_LightSource[0].position)); - - /* Normalize the halfVector to pass it to the fragment shader */ - halfVector = normalize(gl_LightSource[0].halfVector.xyz); - - /* Compute the diffuse, ambient and globalAmbient terms */ - diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; - ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; - ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; - - - gl_Position = ftransform(); - - - - - -} diff --git a/papart/data/old/shaders/transparency.xml b/papart/data/old/shaders/transparency.xml deleted file mode 100755 index eaaa7be3..00000000 --- a/papart/data/old/shaders/transparency.xml +++ /dev/null @@ -1,6 +0,0 @@ - - transparency - transparency.vert - transparency.frag - - From b6b7249a4996556309473f11679c53767ed0e56b Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 13 Dec 2016 17:11:58 +0100 Subject: [PATCH 47/99] cleaning of markers. --- papart/data/markers/ExtractedView.bmp | Bin 614454 -> 0 bytes papart/data/markers/big-calib.cfg | 70 -- papart/data/markers/big.cfg | 106 --- papart/data/markers/big.svg | 156 ---- papart/data/markers/blocks.cfg | 54 -- papart/data/markers/blocks.svg | 137 ---- papart/data/markers/corners.svg | 231 ------ papart/data/markers/debug.cfg | 38 - papart/data/markers/debug.svg | 805 -------------------- papart/data/markers/drawing.cfg | 113 --- papart/data/markers/drawing.svg | 441 ----------- papart/data/markers/earth.cfg | 21 - papart/data/markers/earth.svg | 119 --- papart/data/markers/eclairage.cfg | 139 ---- papart/data/markers/eclairage.svg | 235 ------ papart/data/markers/game.cfg | 38 - papart/data/markers/game.svg | 290 -------- papart/data/markers/instructions.svg | 860 ---------------------- papart/data/markers/lapin.cfg | 72 -- papart/data/markers/lapin.svg | 191 ----- papart/data/markers/lapinInterface.cfg | 63 -- papart/data/markers/lapinInterface.svg | 189 ----- papart/data/markers/mega-calib.cfg | 21 - papart/data/markers/moon.cfg | 21 - papart/data/markers/moon.svg | 119 --- papart/data/markers/player1.cfg | 38 - papart/data/markers/player1.svg | 548 -------------- papart/data/markers/player2.cfg | 38 - papart/data/markers/player2.svg | 145 ---- papart/data/markers/radio.cfg | 139 ---- papart/data/markers/radio.svg | 783 -------------------- papart/data/markers/renne.cfg | 139 ---- papart/data/markers/renne.svg | 783 -------------------- papart/data/markers/rocks.jpg | Bin 175927 -> 0 bytes papart/data/markers/sun.cfg | 21 - papart/data/markers/sun.svg | 97 --- papart/data/markers/tableauInterieur.jpg | Bin 27945 -> 0 bytes papart/data/markers/tableauInterieurI.jpg | Bin 56759 -> 0 bytes papart/data/markers/tableauLarge.jpg | Bin 124572 -> 0 bytes papart/data/markers/tablet.svg | 580 --------------- papart/data/markers/test.cfg | 46 -- 41 files changed, 7886 deletions(-) delete mode 100644 papart/data/markers/ExtractedView.bmp delete mode 100644 papart/data/markers/big-calib.cfg delete mode 100755 papart/data/markers/big.cfg delete mode 100755 papart/data/markers/big.svg delete mode 100644 papart/data/markers/blocks.cfg delete mode 100644 papart/data/markers/blocks.svg delete mode 100644 papart/data/markers/corners.svg delete mode 100644 papart/data/markers/debug.cfg delete mode 100644 papart/data/markers/debug.svg delete mode 100755 papart/data/markers/drawing.cfg delete mode 100755 papart/data/markers/drawing.svg delete mode 100755 papart/data/markers/earth.cfg delete mode 100644 papart/data/markers/earth.svg delete mode 100755 papart/data/markers/eclairage.cfg delete mode 100755 papart/data/markers/eclairage.svg delete mode 100644 papart/data/markers/game.cfg delete mode 100644 papart/data/markers/game.svg delete mode 100644 papart/data/markers/instructions.svg delete mode 100644 papart/data/markers/lapin.cfg delete mode 100644 papart/data/markers/lapin.svg delete mode 100644 papart/data/markers/lapinInterface.cfg delete mode 100644 papart/data/markers/lapinInterface.svg delete mode 100644 papart/data/markers/mega-calib.cfg delete mode 100755 papart/data/markers/moon.cfg delete mode 100644 papart/data/markers/moon.svg delete mode 100644 papart/data/markers/player1.cfg delete mode 100644 papart/data/markers/player1.svg delete mode 100644 papart/data/markers/player2.cfg delete mode 100644 papart/data/markers/player2.svg delete mode 100755 papart/data/markers/radio.cfg delete mode 100755 papart/data/markers/radio.svg delete mode 100755 papart/data/markers/renne.cfg delete mode 100755 papart/data/markers/renne.svg delete mode 100644 papart/data/markers/rocks.jpg delete mode 100755 papart/data/markers/sun.cfg delete mode 100755 papart/data/markers/sun.svg delete mode 100644 papart/data/markers/tableauInterieur.jpg delete mode 100644 papart/data/markers/tableauInterieurI.jpg delete mode 100644 papart/data/markers/tableauLarge.jpg delete mode 100644 papart/data/markers/tablet.svg delete mode 100644 papart/data/markers/test.cfg diff --git a/papart/data/markers/ExtractedView.bmp b/papart/data/markers/ExtractedView.bmp deleted file mode 100644 index 264ae961f71086f678796f83120a287d741f3fef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614454 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

`&VbBarQG0 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

6Wtecbn;}H^!RGg}fvKRaXc11faq^sC!hkYEx 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

@}oZc$5PF34cj@pItqno5(S{%;o84@=fY2 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%0AIGtL|P{~eDz|sa0YS?4w z;k&fF1N9BHNF@Bjm`ZsOR`Alw?)Kh=p613H$je9kz1OJ9<7xok_jvae^;E!xJN#sY z{Ql*WV|a<^^;7;YWo7@>7a3po!%Nbj{2v;>Pw-bM#!5X_+M~Lvhksu`18j|F`%w`! zG|~r0u|A;nUE?Fhp!HpSbMzh1H$hGR2WS41cR7GP`rwD#)q=nLar}ww*M}LmT_103 zjs3>Jc#DDlxE{!ppzJdJgy=C_{n7wCV_4z@PsYaO zf&R)t^i=_Pa-@DqQH;Jz#`eiQG+wqIz*r-%&STMVtWsGd*Ob4k^a%6RZ@KxR_HfP0>emsj2c6{G-z6(8jxzD&=)lnQ}6_R9xOIt?cJ28`<)D9y&+36sU|Q z+loL5&J(~_{LdJ_pD$(m=?VTGoZaAarUOX6xRRpYGgV9^7rBU%rjQMNqF;*>c2(&n#e+Z61r_OfZX>VP485_^P z9&rDSJqndn-i6AX(fIqr^Z$=K`HTN^%U4fK<9G%c6#Gk5(sxNetHxIDo9MR>>WbvFDd!jpkGjlWBWcmlp0@I%0TveP&Z`~Uyqul_IiI|PE+N&>T- z%e&T$-p><{l?fBv@SC2G-AgLo}5QMuJSxvZ;o-hj2oy21`z9k@xK^%)fjL* z$9#WI4!8ng)y-F1i3_NcbFc`OvP81(K9V8x_Wd7}x*H - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - 7 8 9 6 11 13 150 1 2 3 5 - diff --git a/papart/data/markers/blocks.cfg b/papart/data/markers/blocks.cfg deleted file mode 100644 index 47bf0371..00000000 --- a/papart/data/markers/blocks.cfg +++ /dev/null @@ -1,54 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# 40 is an approxmimation. They are all on a line... so it is not important. - -# number of markers -6 - - -# marker 0 -110 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 40.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 1 -111 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 55.0 - 0.0000 1.0000 0.0000 40.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 2 -112 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 100.0 - 0.0000 1.0000 0.0000 40.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 3 -113 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 145.0 - 0.0000 1.0000 0.0000 40.0 - 0.0000 0.0000 1.0000 0.0 - -114 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 190.0 - 0.0000 1.0000 0.0000 40.0 - 0.0000 0.0000 1.0000 0.0 - -115 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 235.0 - 0.0000 1.0000 0.0000 40.0 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/blocks.svg b/papart/data/markers/blocks.svg deleted file mode 100644 index c6c079d9..00000000 --- a/papart/data/markers/blocks.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - 110 111 112 113 114 115 - Crée à partir du sketch de Asher Salomon: http://openprocessing.org/sketch/20818 - Touchez pour créer des carrés. Passez la main au-dessus pour les déplacer. - - diff --git a/papart/data/markers/corners.svg b/papart/data/markers/corners.svg deleted file mode 100644 index ea73ac4d..00000000 --- a/papart/data/markers/corners.svg +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - x - - - - - - y - 350 - 250 - - diff --git a/papart/data/markers/debug.cfg b/papart/data/markers/debug.cfg deleted file mode 100644 index e5f42299..00000000 --- a/papart/data/markers/debug.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - - -# marker 0 -2290 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 1 -2292 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 45.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 2 -2291 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 45.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 3 -2293 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 45.0 - 0.0000 1.0000 0.0000 45.0 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/debug.svg b/papart/data/markers/debug.svg deleted file mode 100644 index 8aad566d..00000000 --- a/papart/data/markers/debug.svg +++ /dev/null @@ -1,805 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - 2292 22932290 2291 - - - - Détection de marqueurs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Jérémy Laviole et l'équipe Inria Potioc. - - diff --git a/papart/data/markers/drawing.cfg b/papart/data/markers/drawing.cfg deleted file mode 100755 index 170dc942..00000000 --- a/papart/data/markers/drawing.cfg +++ /dev/null @@ -1,113 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -13 - -# marker -21 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -36 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 85.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -35 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 155.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -34 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 225.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -33 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 295.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -32 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -22 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -23 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 170.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -24 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -28 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 295.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -29 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -30 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 170.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -31 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - diff --git a/papart/data/markers/drawing.svg b/papart/data/markers/drawing.svg deleted file mode 100755 index a45652cf..00000000 --- a/papart/data/markers/drawing.svg +++ /dev/null @@ -1,441 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - diff --git a/papart/data/markers/earth.cfg b/papart/data/markers/earth.cfg deleted file mode 100755 index 1dbb3338..00000000 --- a/papart/data/markers/earth.cfg +++ /dev/null @@ -1,21 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -2 - -# marker -5 -70 -35.0 35.0 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 15.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -15 -70 -35.0 35.0 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/earth.svg b/papart/data/markers/earth.svg deleted file mode 100644 index 866439f9..00000000 --- a/papart/data/markers/earth.svg +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - 7 8 9 6 1113 150 1 2 3 5 - La terre - - - - diff --git a/papart/data/markers/eclairage.cfg b/papart/data/markers/eclairage.cfg deleted file mode 100755 index 7eb6e9d0..00000000 --- a/papart/data/markers/eclairage.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -0 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -1 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 85.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -2 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 155.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -3 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 225.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -4 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 295.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -5 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -13 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -12 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 170.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -7 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - - - -# marker -8 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 85.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -9 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 155.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -6 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 225.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -10 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 295.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -11 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -14 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 170.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -15 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - diff --git a/papart/data/markers/eclairage.svg b/papart/data/markers/eclairage.svg deleted file mode 100755 index cbaf969a..00000000 --- a/papart/data/markers/eclairage.svg +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - diff --git a/papart/data/markers/game.cfg b/papart/data/markers/game.cfg deleted file mode 100644 index 3271aea8..00000000 --- a/papart/data/markers/game.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - - -# marker 0 -218 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 1 -219 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 53.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 2 -220 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 255.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 3 -221 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 255.0 - 0.0000 1.0000 0.0000 53.0 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/game.svg b/papart/data/markers/game.svg deleted file mode 100644 index de82b787..00000000 --- a/papart/data/markers/game.svg +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - 218 - 219 - 220 - 221 - 222 - 223 - - - - - - 218 - - 219 - - - 220 - 221 - - diff --git a/papart/data/markers/instructions.svg b/papart/data/markers/instructions.svg deleted file mode 100644 index 17591074..00000000 --- a/papart/data/markers/instructions.svg +++ /dev/null @@ -1,860 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - 2292 22932290 2291 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Jérémy Laviole, Inria Potioc team. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/papart/data/markers/lapin.cfg b/papart/data/markers/lapin.cfg deleted file mode 100644 index ca25d4f4..00000000 --- a/papart/data/markers/lapin.cfg +++ /dev/null @@ -1,72 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -8 - -# marker -0 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 58.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -13 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 110.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -12 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 160.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -3 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 205.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -5 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 58.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -15 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 110.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -14 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 160.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -11 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 205.0 - 0.0000 0.0000 1.0000 0.0 - - diff --git a/papart/data/markers/lapin.svg b/papart/data/markers/lapin.svg deleted file mode 100644 index 3f536594..00000000 --- a/papart/data/markers/lapin.svg +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 1. Mettez vos lunettes 3D.2. Placez la feuille devant vous. - 3. Pressez le bouton "Pos". 4. Déplacez la lumière avec votre main et la feuille. - Le bouton "Pos" place le point de vue à 50 cmde hauteur et 50cm de distance de la feuille (debout face à celle-ci). - - diff --git a/papart/data/markers/lapinInterface.cfg b/papart/data/markers/lapinInterface.cfg deleted file mode 100644 index 8aeb0c52..00000000 --- a/papart/data/markers/lapinInterface.cfg +++ /dev/null @@ -1,63 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -5 - - -# marker 0 -2285 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 1 -2286 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 45.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 2 -2287 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 135.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 3 -2288 -30.0 -5.0 5.0 - 1.0000 0.0000 0.0000 45.0 - 0.0000 1.0000 0.0000 135.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 336 -336 -35.0 -7.5 7.5 - 1.0000 0.0000 0.0000 170.0 - 0.0000 1.0000 0.0000 25.0 - 0.0000 0.0000 1.0000 0.0 - -# -10 + 30/2 -# ## xOffset = -xInkscape + patWidth/2 -# 10 + 30/2 -# 30.0 -# 0.0 0.0 -# 1.0000 0.0000 0.0000 45.0 -# 0.0000 1.0000 0.0000 135.0 -# 0.0000 0.0000 1.0000 0.0 - -# # marker 336 -# # 336 -# # 35.0 -# # 0.0 0.0 -# # 1.0000 0.0000 0.0000 170.0 -# # 0.0000 1.0000 0.0000 25.0 -# # 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/lapinInterface.svg b/papart/data/markers/lapinInterface.svg deleted file mode 100644 index 19dfd419..00000000 --- a/papart/data/markers/lapinInterface.svg +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - 2287 22882285 2286 - - - Light - Rotate - Lock - - 336 - - diff --git a/papart/data/markers/mega-calib.cfg b/papart/data/markers/mega-calib.cfg deleted file mode 100644 index 301ba493..00000000 --- a/papart/data/markers/mega-calib.cfg +++ /dev/null @@ -1,21 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -2 - -# marker -0 -150.0 -13.5 32.0 - 1.0000 0.0000 0.0000 61.500 - 0.0000 1.0000 0.0000 43.5000 - 0.0000 0.0000 1.0000 0.0 - -# marker -1 -150.0 -16.5 32.0 - 1.0000 0.0000 0.0000 245.0 - 0.0000 1.0000 0.0000 43.50 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/moon.cfg b/papart/data/markers/moon.cfg deleted file mode 100755 index 644216bc..00000000 --- a/papart/data/markers/moon.cfg +++ /dev/null @@ -1,21 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -2 - -# marker -1 -70 -35.0 35.0 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 15.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -8 -70 -35.0 35.0 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/moon.svg b/papart/data/markers/moon.svg deleted file mode 100644 index a1f9e047..00000000 --- a/papart/data/markers/moon.svg +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - 7 8 9 6 1113 150 1 2 3 5 La lune - - - - diff --git a/papart/data/markers/player1.cfg b/papart/data/markers/player1.cfg deleted file mode 100644 index 29c331cc..00000000 --- a/papart/data/markers/player1.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - - -# marker 0 -210 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 1 -211 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 165.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 2 -213 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 255.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 3 -212 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 255.0 - 0.0000 1.0000 0.0000 165.0 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/player1.svg b/papart/data/markers/player1.svg deleted file mode 100644 index 67da8877..00000000 --- a/papart/data/markers/player1.svg +++ /dev/null @@ -1,548 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - 210 - - - - - - - - - 211 - 212 - 213 - 214 - 215 - 216 - 217 - 210 - - - 211 - - 212 - - 213 - - - - diff --git a/papart/data/markers/player2.cfg b/papart/data/markers/player2.cfg deleted file mode 100644 index 5df81ccf..00000000 --- a/papart/data/markers/player2.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers -4 - - -# marker 0 -214 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 1 -215 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 10.0 - 0.0000 1.0000 0.0000 165.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 2 -217 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 255.0 - 0.0000 1.0000 0.0000 10.0 - 0.0000 0.0000 1.0000 0.0 - -# marker 3 -216 -35.0 -0.0 0.0 - 1.0000 0.0000 0.0000 255.0 - 0.0000 1.0000 0.0000 165.0 - 0.0000 0.0000 1.0000 0.0 diff --git a/papart/data/markers/player2.svg b/papart/data/markers/player2.svg deleted file mode 100644 index c8973024..00000000 --- a/papart/data/markers/player2.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - 214 - 215 - 216 - 217 - - - - diff --git a/papart/data/markers/radio.cfg b/papart/data/markers/radio.cfg deleted file mode 100755 index 84c97b46..00000000 --- a/papart/data/markers/radio.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -47 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -55 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 85.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -54 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 155.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -53 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 225.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -52 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 295.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -51 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -50 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -49 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 170.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -48 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - - - -# marker -46 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 85.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -45 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 155.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -44 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 225.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -43 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 295.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -40 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -42 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 170.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -41 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - diff --git a/papart/data/markers/radio.svg b/papart/data/markers/radio.svg deleted file mode 100755 index 335a3468..00000000 --- a/papart/data/markers/radio.svg +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - - - - - - - - - - - - - - - - - 47 - 55 - 54 - 53 - 52 - 51 - 41 - 42 - 40 - 50 - 49 - 48 - 46 - 45 - 44 - 43 - - diff --git a/papart/data/markers/renne.cfg b/papart/data/markers/renne.cfg deleted file mode 100755 index 84c97b46..00000000 --- a/papart/data/markers/renne.cfg +++ /dev/null @@ -1,139 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# dataset for test Painting application - -# number of markers 85 - 130 -16 - -# marker -47 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -55 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 85.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -54 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 155.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -53 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 225.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -52 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 295.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -51 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 5.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -50 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -49 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 170.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -48 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 15.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - - - -# marker -46 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 85.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -45 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 155.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -44 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 225.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -43 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 295.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -40 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 257.0 - 0.0000 0.0000 1.0000 0.0 - -# marker -42 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 170.0 - 0.0000 0.0000 1.0000 0.0 - - -# marker -41 -35.0 --43.9 -26.9 - 1.0000 0.0000 0.0000 365.0 - 0.0000 1.0000 0.0000 100.0 - 0.0000 0.0000 1.0000 0.0 - diff --git a/papart/data/markers/renne.svg b/papart/data/markers/renne.svg deleted file mode 100755 index 335a3468..00000000 --- a/papart/data/markers/renne.svg +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - 7 8 9 6 10 1112 1413 150 1 2 3 4 5 - - - - - - - - - - - - - - - - 21 - 22 23 24 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - - - - - - - - - - - - - - - - - - 47 - 55 - 54 - 53 - 52 - 51 - 41 - 42 - 40 - 50 - 49 - 48 - 46 - 45 - 44 - 43 - - diff --git a/papart/data/markers/rocks.jpg b/papart/data/markers/rocks.jpg deleted file mode 100644 index e52f4543a6facfe9ab751aedc59c27e357bab568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175927 zcmeFadpuiN+drIE%k=1;>A8wdJ3UZ`q9{scYEV_QlprP5h|q{22^CE;Go98wMKh%+ zN~U!PB2t1BB|TE-W8y4rsYBw>l0=0hzfGsTXYS|zJ*LPovZpE9U7i_Ks`h!4@jv#Fi2=o&*zhqnUZ z*62Xc8sNN?cNjSB0pwcxTfg`d2z2NlpU*$|VJ;!|o(;g@FxUW0$X;t#rPf&N(i`Fg7l{-N|a zyrlKAQ(mR?r_9QK)oaz|f9bU-GLw-YMX`q}%dY(XE&SZCus` zX6*=Ct(XFBUXFqMep=#F^nrc_ZT#x1uhxCFaoxI&UvF5y;p=Ux8#k(M+qq@Swk=zB ze!X$o{dxKn`FDTSrVSf5ZQk^c&71$Rb@S%UTbI1eTR&y_`u|D+iYK72zXFAT{!m)A z548I0RZ3s4QVak}u2;NR1qP&CyK3110xvlwptr19tE}?Xy7e1Y{d?jn&}ya6iT?nt zTC+-N^_tadRg}M4tF+MwNc>u9&9~neto`Af@0NX`KN~7~*I@4yeu+8(--b-g6=6%5xzC}W(^=g z=)Ns$4S&A9bxDG!E^Y6PzPt1$?3Z|J*KKg@u@487mjqBbX#A`l5F&GjpN*Rd4)OMj z2>*Kt4*g36MK5Th((*OG27y6+$GxEzCKH8J1l~d~HT`#?%&U7LPItk?Cg_Fi2#h5T zsv(q0HSbrXS;E|t+r~WOz7_+n{ZcJ-gttsXuuB2@ zCEr_LNFqBu85gx(BO!V!dnj0{z`QSFdvKxhz#ugnL%S{C(5?WjojxzmdrQ1X%fp`_ zrHw}>$A|IXc z0L+zFcikh?%b+M09si*Jr?%1(NTp!`3&EG<$yo+fy8H(m5s%g59e&_A3_@?((cs z%?_z^JSB(RvY_H5gE&5(dI=4Cb3`5?3aE;pi!x$5-_u{c!Z_E^w@EG{TH8PPTNf-? z-sy9*LkV)ynd~k(evWMEeMeheKUX}JnJh5XDDa{qd!67qg^#1U*D;ug!CTUTx=R1) zHaT(}Y$rW-M<}{Q>tKwZe>2=UQQ-A_9Nu7a4Xz;_%c-##oa=}i?~qVNb%^1*KGZHk zFvPWfJkhgy;$%%-=Qk2UMuPnuA(6P@a>Oj^pHha;fvsjKJs6hO(7usNLsj=nIK*2b zwWJzP)O2{4g@|lDyTeAZXCsFG$Q!mjhf6+HL+sq1^h+ShJ6>uC)65d*%Z^MbK;@hQ z1?bnR1Lj1mCatey#?U-lqwL^*@AxwgX=C!+Em;fR98~y%Pm==FL_SvTei7nhH#zuQ zT3QFHIifqHNRXfG<{ER|-Q8ejask}K|GmZ=(lem|onnd$^9gM3iN+*fKMSRU@j;QR z(=7kN_u$9aR8KISMHv1>W~&(HopkuMsB4($^!&NFFD`s%POFsdcid->Mq5PyicbFM zm0!$9=GITz+ZVp7+zE-})~TOz!wLkT>2j_MA8Oct4wUhGh;tEPH;9@~B?*`%>CDY-0j93vWtu0;3Arug#cc}mBT0lWO+ew&>c z8ITJ#2-BfA7+>*j8Kbl-*(%@L$My(c3LfndxM66>BE+ag4r_g^1}knsDX)6^LWgTw zaXmuLf^{0Cmv>`=r%PIe)m=W0KD60DElUpaRsOW=L7qsu;mEF8`?3lH1<0ACUI^C_ zO^Sm=lSDp(qn!gkC&jcAbIh8g?K}I5rp8C|wS%qG0(vj!k5G7FRvqO9aG52gM*#}u zJlzZHl3M$8ft7!557myOA0wy`c@4-{;m#So6dW&ZU1*A%v_{O-q; z9XG1D8-mnyW!p{L>FcVK1>H&H2QvL}_v9Z1J3p#J8OYILN*Ql-!+Vg!C4#JXZ|ET~4>y}m2cek+0WD>qW$}HxzeMid} z_f*G9(##pL*j;UV+U^-T{aj{NMvT9i7bw%!g~Q|tB65}j^kbDu-q0nn&iV?ut~@>Q zXj*ZoI#hOAZR#Q6SBr>Db{Boo2y74e=oq6$6JIbO5!2y@H{SZ+^!$ATQN8?IO5St@ z(U$A)WNd-zBPJS6lyQscM9Ys75j50rrsBqdBu}wxuFdp#H*YuFWu$1bQumhZz|KfD zHi;stzD_M5rX*$26s=vgPdPNPOT9sDkHNU<8x@ruuK28>fw=Fx#8>Z`%hLElIN1~; zsJ>ZBX*X~R_p$c#_CE6O$JThICezIeFo46uE8V*)5xh8REjS)C+z$pw5HVvwM`ln0o^b0&qs#CF{A+|8bT7L)DR9V7! zm)nCf(#?il!ipFubh>yjsX=ob=moi!;M~_@JM8g(=E%@7#q}u-CJqTlor* zHGC#dN~Vd>(3AnSgUz?c@Eh44eY@O<4i|NlZ)_)U5R6+^8M2I|1@M#V3Cge@`~mJl z6w3%EhSI_7D;TOQ+Hi-^;Rj5?%z`(vIDIfCSTw;Ak%3w5RD2qq=*`L{BFgXhm`53m zZyJMja$dg9qHE2{5C7e_Z_DdJ(0tf-^d}j zOLtDt+Qmhjr_Ti(wt zxVW|r;};1b=(^%wojOLLE}9ZlMEM%YbQ+Q0zJ<(@g72M|=ZdE2FbCESi>=p#SA%pPdz15>X`J0XR;Wjd4CkIE!8u=yR#V`w~rcXQhrO!_Vk%6O7;{9 z6d)Ctj13oJc&X+QHfE1f@Jd18-A^LaPW53jZ`CM3*-6BlmXQ=23Uj{m&b4+{mf;+7 z=d04WzH14tZ0W}dXIMoo9XRP@S>b8@K zKVFhrk?aiTcj(s^iMwo%M}?c`-&26zbBS~brPne-0peAup3_Qpcq)9@F7+wurd@7z>R4}+3((3v3{}*UJLK2%<*<}3_vui zK|APyh0$#80+`|CnDox0o|Dywny?dEf|WAG8};rdr>FM%w4CmP!ihV+aV&+UxvGsx zgGyU~LdT+j0ctHhT}5UP>8tyLX$XAh>%P#i{M*4+)_XSV*%}E=JQqhF>`-n#d1YUC|)3aPsciNO7s{ zT-b%`mkQYia`w2XJQp4#|_+>dH70eUj2X+=Gvr$Y1bQfC58{ zt(qvX*$mppt+cpt^4rEtE!6Nz^WDpauqfsAD|DfKgVD;GO6~!$WCl zimGaDAs^CJ92D-_-Pk9O)Y%fiIWG6HE&=4WSCjN*hm^|g55AvF zxlJOep3Ut_NkHA5$gj$v7F#Mqp?L$6i1r#{vZ$Jt=h7lgqqfs?Xu~pC>B2qwvLr; zUiOc-YOc)=mM7vEafQSl<=8%-NqJ(4CuVWq>7cf2X&pxd$>oR&47KmbPa(AtY>wh|S zPU>v8LtZ}aSsEv1@^T&*Y)*-nNF7UWnYej>{}^*~lEs^wMAE`}I@NjNDB+fn+-ITB zO8lT>H?0fNZZR>_TgJ%j^W^M>2P_E#DZhvRKrFciSqL4*J->#N@$lIzz{k9uQJD= z=c|kGg{=06ml-`(U>f9hKrQ|Zs;N4Lm;|M`DM0x}3}%n)>sSTo#(Cj$>0@)JaO;ph zG$Xr^>mm)}z|RNnlukbb0) z=Iu&_F(~1qe!6o-Q5{x0$bdoAS4vTdadSJ&F>UMwNW7NXkqZ)!< z;a5{!Vm#EHa~e{hb8q}S@zu$*rR3u*a~_#@$YU_C%cmDxfoGK6ia(Mn$X)15qa?dA zgB_bhRdzkdu__a92;CbHxLg5(9@QNy$Hh`g`3biUXDSWAC#t)1l3cpy7N`QA^cz=I zdiu#}I*;F`Q9IK2%Nw`Bdyje?q6KB{-xkU=$F<}%+I$Q|XnLM?NFZ@PxYiwxw-6xQ zh}n#P^hcY}Q-!I*Ky=xVG_7hu=KQW;Dp^dXZ@JDRRJ&cVbl9TVT35K)F2CkRMe-;c zPxdG3`QawUQ%$~T!_{M@L$uUvy;UbmcOJT#zPUeXcXd>VkxeWz{G+ReYMtw)|Qv(}FBBC zFbM@Z2}X*nS|YNg+b|j#*MDve8C)LE%>ezz{PvMFUtSpnSkAt>-|2^`?w#ZVvyD`B^qX`_f%kzbV>S|patI5#Y?kPK zQ3e0qG%IHSwY#A(yR?gBV^ZBx(zRGiUr4Z25kk&BEvz{5@|nN!bHmihf$GUV@();4 zxRaH7cxk09$&WlL67$>5%dA`pj_w4rHI*g{aY;N6wH>J&s@sAUpyIAEshdZO^Wyqi z_93P(ej_Qpm2f?U^7zCX_z-8n4Lvkj;=^Z6Fz2i0^~El(94?}_}sE8g@=<3#a_?QnUnrd!o!Tr1K0u<>@^}PXk zOlV4{2G3~nSdoZ)O^$6XtRFZcJoND?hkj4(=napj8ab|pfjg(>D2}B@+Dx}Nu>y3j zrYKHkx_G)Zc6uiCRNptz7^CTQAfh9<>XupMu!x;+P2i zWf~%CETsUfu-PQ-D&!xpalOjG5-cps{IPb?aQ720O<@&9wssS?Tc{~ARe+Air^&X^ zJK8D`JBg=TcF33NS6>*UG;Ne&g0tmo94RWtU2$UJG>!T*LcDO$KzA=mL}8An!CpkuLCBMTx2if zdQfACt;1G=D)ZtavfXZd*E?;x(<3FKilPCD?{99g%6#X+u6N>1w=g{sQ*@2T1R=c> zIj(E(1o06_hDTzrUL~YclLYj^w%pC3=&jumo|9NURAyo6V3}B$S-=sDY(EHgpn_haFdoP)q~2fkhJ1=%gJXQgbv%u%p;4D4p^_MLsfImFG+@4ak7*j`G#oVj1CQl>7? zaULrWaqck=94nHSR%YVBJq+}GOHNmDY-+bOyUdKo(%j!U2OpL)*<%C+=)OEq{$Sjy zP+XnZUg5xO5gcO~PlpPeRt1N^w~QY!zYV-9>1+&vvDW!b(PgN5iBJf+-GV8e4Xk z1P_c^%#SKSU|6QqLLVWuJTXLs3nO*wEDxs97vP6Q8T^updxQ+>W&C8sM|aY71xP}h zr;NIXyYFy+CYXLME&ugt#|BUIT=A1vuR`Vs?gMUdPf91$! zoM+DFT`f5AIEXONkte3t(EB$v6Ll)T?E+)QdmQ=Q3XpAlnu^fa5|$;l6OEKV8r?nT znSvs2|9ZTya$vU((TUY;e(_5tmwF${ZO^8IH)kzvd8211Vn}V0a3eAG zbVD$3uiX9zzR2ya2hPtR4&B9?;I3z2Q%b9uG+R?=R580RPHBDb5I#q}cB+c+?j!tJ;qCuf0~2)8EwHcUKTb#HZ0}K||iAJ#{tVrs!U};xygXr}X?7 zchVh?4diUe=1oHn$EfLNirx8e?>MQgu>@GlA7M^vzDYhO&dhFW3*mDg(gQ1swHx!Y zOcsAmfNO^qDpTeDx5TIIqZf)i^k*1>~U6k9uOTAM9LQPd3s#!fz zV_|x7nH`0XVGhJCXn#s7OZGjEE2tE_%*^BUpV$ykgLjv@Ti#{E`S1ev=CboG zwk^(EfQ2`Vwy;~stfS>zBowk+$GgQvg{8yMpeI^r-5k?$i2`(O4!D<@kBM%2Mn3!0 z)KoRX@p(jVsKL4|cOBhj51u=!N?;U+eAc!!0ZSAP2l_v9Oeoe%>oj0sTr!O`_h%0i zlw%Arm2k&6jl11M*r>+zdmR??Bb1bS8ue~Od~d4MA9kK8@=POY$Hf*`SS1vNHsQ

xjxq9E)6Da@$Ep3l;0^OJK@bd3d6VSVq{m!3!`lLt&pjRcCkkNWtJ!=x#_7; z-9dP00!rL-`oqMqZaou)=XUo4$0x{<8xTl#Ys ziMor5L|f>w|YhsZ9Y2C_B(a$gy=k)v$}Wrtf>i9TBR!CJ?{v2D+9^ z!%~YYWX+lFvZe*_)BR$rB!Y*f>vvteVzu%TKH?055weM?wnqUnc6Z2QcSJCt^d{go z_lNn3?b{D{s+*_51QrZSs(;Dw@FVuVE){rrVO$sC(O~wx2N>uUYp3PdHhX95R)YTN z@d2InAC5d+Pe&)2G0GY=*7!`fTk+(H6DKwFk ztaa3rHP2^5Z0KYq3DT3f#UeY&us&b8atw}Ryc2u=bNU=*z?mhwV^-bL2Ai;VI&|iV z@VFVKR4P`>U1M!eNx{FCX?>0_~_6Md=6MszyLCPbryU!@Xbn^au zx;56L5Bx)NVvNuGxvKIVW<0~`ld1W@IuSOaH6r_Qd+If$RwV4m|W`TX&z;%@X1zGS;;(jelT3LG>l1s;f1=L;4NIF*pE6}DK*-^vvro!$?mhZo<$OWqE- z{yOruxHcK$hF;s0xtVQNh-bU-s$0C65SeZ@H9y}}6`Uo`ktHyQ(W*v=-D}l0boUNS zii@w8y43c|2D70;5&3Bk{2N!^us6~>7S+tnVx%ZV2@&tOo||6<2jCx-wAs2@ z5N+j2Eu);Y(u??Mm2`0r&cevYW;ES5RRoh{UM8D3lD-E_0PymI80@ zyoio6i>%SdK0N$49)`hqd4kNs;aUUrcWM8$EwC_kUThhw(sw4$YJ=Sf(LRFG?w!Cb zZ1!N#&I#11&_ELv3yo0=anO2GDW20VB{va#QcpVp9m}eLBEDJcUup2du<_;(wcCqg zNnMwCL|gM3zLb$n7;F(aP=%Uq1ZAY>gT<>2Jsmo=6)m9;395ha_%3Y!;)d#4B2Nl? zRb0ujpO9&cx=2&n4Ev|3u->B35CQs;GrHxW3#_UTb>x*ka2M=a+0G#|y*7*fjh5q@^~SzL>spR+j2w!Dc*+!)yh5yb?eEUCBt2|w%gpkaa6rhQTPYn zd5kmBvvH1#nbjeWfz!PciPr0qJX%WHyl)lop7g0qJ-0Mj7ts#3M<9q^vcjQs2d!7d zKLya#4n^hCua@^5>!Rqvr(~KR!A{IkEyjTpFLx42g(cHHbHf%ECyMS?ot9p|({E|G zr`D`V6Nxy+5?N?V&I!7JXT2t+sF(F)mZQ%5;qnf7+52n)fM;) z?l=bnqk_#X^*TGR#aJbHOJa8O|LDDEnM~%jyDB@l)2EH7gA@)hw2Zs8V^ zcR|Hpbk(asrljWGhYm08xgFrLWZr+V!E=qL z+m613gy4D;M9;*WYmEELOr8{N5}aR9Ja|vgYzuKLsL;ucN>7yJyd)zSlLI6Z@W<0t znDzrP+{0tuk&o7tWu&E@F;$%P z!BY1>XcBdSUt-8ex}bCl|EPQix4NDhHJ;CJllE-$lP-MYdRrWSjr-8kro3lUNZHSb z?;aXV5}&0{JvPkg!#lEhqM5-t*1UvlahXtEaB;}LBdu-v)mTk5DZZkvJWHumLP`~A z)CK`tAt?FN@2`wkP`+;-zuRdj86Jr481&JY$C+aO&_wGDK;_L{q+bL*QWNmv?&R|V z?|n@S5)p|dnz}kP^v_I|x!1tCQW%66LF0(-M1A9Wzg22$K``;xjinvh*WVapq{Dq} zUP(Miq|T2il1Q0QuP_) z2}CK0GA|4#n?VJoW~Q%4yxUFPI zhXigozJL(O+Ue3eSQFnmat*x$ZamT$6(A2|ldma2Ur7jgT9vNmQJVMa3o0Z-!`-$f zx;Jj>mI19mVchLB?;7fxDoirkvR}lMX^wH8_6XArt7F;-wGV12C8?GK0k%o}P?;bm zq#T$co*yQq$L9BeZN`CDo)b=+k*@VGggaYaJSlM)Gt-OQ@fZ`()T6SmKJQ_<2=@E5 zLno33%R4zJ<;27rv4rGvmFAL)+mN#dqC3P|{*IN0vEf5*w{MGf)HD|cs$lbKLwft9r^kPr} zMbqRW;B8Y(5?#>jJ>aw$t5TdZj4qB=bvcDnsglP9W3|L;^JQT2>~C7Z*}O0*+h-i# zs(IZ_a&ypmcJSIBv>MyCwltBD#6_|uHQ#G9yEgxJJv#lD=2TeR?@IEvWGofVI24G| z*8{4yM}8|+Ak)vf_OoNU5z|N|&!|IicTUaL_I*IOMH(wuZ$wIFxGO-A$?Z~dmTZ&! zX0NpNS8S0^%hT%n+-c(RyT+~w(C73}EdOQ@sSyIKq6h`y5}173f#asc^TMqn8vX>k zv(dd|%lPqctR*+qf7rH=Uco1l9%OceT0P9jmRQ`f)+%L~mE%aQh;xXvQ758v^CLCbTp_4pjF-%j~848AEP$z96Q z+E)X0jEW#-l=b#bX6o-6OrGVB3D51SI-*-jY8y8m=GB;FCOT$}c3WNVF*6+T7$pOn zqd4#B1wwBJl_NQid`Ar%`b>R?-QeH#nogil1HePUh7X3?3XrPfVEm9S9oV=;hhNA0 z?#|0k@J=jkZndf@llJax&}Yv#Q~{N12JBfw*AG;Io@TJfK#?7JkA8Kq5?k9}=K+BQh-AtweIIjOR3d$wLsF!t- z^v9|&(k48CXZt~n$rUw}c`OtZKAgR6labhWjRPsHH{4)}&d4O{`%p$?&Ldr5_>2MJ zuKKZ!1zj#WbtT6txxTtZO#GQXXJ`5*ajUdCnugs)X5yXgotV5mCvwavc`Z3fy{HB> z+e6?r)1^}Ns6e*ep#*p_(8b~^K&8Oar@23m)GTFTz9-H{Lc@x6vBFm&=p@xsWd%X* z=OB3klYyiPL0%chdU7jAG?>~l-fhB9@NLZPf;eohs8^q&!HAoVhWilk4n&s1o6((y@n(Mz4)uAV7*AQjj;^$d6!G8#xCId;!mdd_ijy0GIl z#a%xm8E55)`wPHRd;0tYaQ7<@-QIZbp2f_rfA%s(eD7+>?y2}L_Czds494y#tDWds zoR&JcHK#6ijk5D954$EcyfoYOGowh<4RqfGTivHzsI6lZ(LqAsTZ>};$bEwlUqFuB zu8xbK!*=IcAESc_EsYBWhHD7z3I#{6+>t0*S}3 z{iU{||MCE5ZjK0kkN5lbVx_(YznG(MRY-weFqB@~Ip^M|wpm2#rjC;Zsy&7wT?zqb0pM%686Yq|Ddw8x6s!Yd% z2J&oQ5J{LXs@fn}e$_6uhjL+URu7@qqt6PrdT1?JC>0cyRMZfXAswl66%;2vZ3;6c zlLRWD5@@3&F}ILLWEm%qPiP)0*{};uP=+pws%Iv8kHT=S?w3i<=y2U zi$i8-N}{Z*rZSHmCsBdb)ay4d;0jy-5s~~Jcmxm-1`rmof{r1s?Ly-f3Sg#0ozhV?HSnoVcen> zJ=iih*e$}(H6g+GYH;pE)yG>%mPX@^9+3jn$Xwhv9!4rNNb0)X!5sJ_N?T{{`1kt* zdif3t(8lHU0(}J6e7C&|(KQxppObW9XbkFh4y9Aih=zN|3k}u1$$@-F5_QadyFRpT zyvJHoX@A>`SC8DLnOE}J;65zsRZrQ(Wd-O7xJSNYzT{5t7}2RYIW3`MCOqcDRMhUd z^Bul{10^<8CkFY)TCz!LoEu(`cAI1pS<{T)mppKzt!U2uf&g~+S!*BoB;S$umK4uf zT%dCE#%|QJHeGMVHkp}pH=xRDy5|Ul{hXW~LK#DIY2%wz>!hrxCx9lUADb}Dfz!^XxeA3in=~AnT0q>7nbqFr_vw(mCm%_e8T##7DFA?joVC#QHf^q+foVgT){gUE@#D#x}*r0=c z{1O4`=wC&jgrktomoCGB>#tf80t9lgJ82D^0C)!w_S?JH4}-t-J?8aNblKU31^*Y? z$)NwrcQVZHyjw8NcE3x|QoDU|CxiU<{wKN%HVC&&KYJzUdzUZl>%$Rn9472XU!3of z2FpU81zw_lZt#Av#ts_fr5j1Gvr0{;~)D>CZObv>aXPq#DbdyZ#()afVQi1>!2ir+yiC#k7iCEv zrH?=y1b{q1ivQ@8#+H)*W0K{e=drN*dtgogjz8;7V=44$a4+-jUWzK6 z1H4cAEJZ;}Xq_d@5>WF9&=p`Hq5(~UfG`YX4AKRLCJvy5Eio=}|C{>@Z5j6jl=XM_ z7ltnh{~EZUV0_Th+_5x|DPO|igZ;4oHg4cJ10ZdAep>2mL6~6V=W>=hV|}zm%pw9sQI=Bd(a62P z>Hlf{mGEIfe@@GPHp)`v|DEE9MSh;TKk+F02I0>8BLBv<8IAz*A+F%;v8T>Ep7}h1 zeD#_9H|BK#m@vW*L4nB6HKqDV`BR_CfaWTG2!CJv@`Sc791({55A5!r$$w|xa0zLR z3BrW^rEvkP{|&sjk=IFd@K?9v1P}jh%r01jXt zS@jwOY6pS<@@*%8WLrVHtsvc2kZvnTw-uz@3es%_>9&G&TS2<5Al+7wZYxN)6{On= z(rpFlwt{q9LAtFV-ByrpD@eB$q}vM8Z3XGJf^=I!x~(AHR*-Iz6{On=(rpFlwt{q9 zLAtFV-ByrpD@eB$q}vM8Z3XGJf^=I!x~(AHR*-HhNVgTF+X~Wc1?l$xCDLtq2mH6d zMt2YZ2LrafFKvNW1^oc>17Sdy00_zwA}jz1?i22Krg?69 z&Ufz>bWkwX{EFqi<-*N@@Df>n-`-^w9LjRvvZb269*$@CT4TZxdyVyu>cWqj9NlYT zpl4uo%+%CWXD?ui=cxWsLwy57T?12dBfuul(Y=4VeZbYi{QS*bezg7bT0qQl-=9iF zL`3LC80lfckopE@W@bxe7#ivV9J<)ZV4Uw2-C*qg&n5hbz{0}1(*59H_(A|!%d)C|aD7A&0*wg9ElFaqRN0?e0UhG#_=Wv%N_;LBjsC)o#o2@d z`u}&`1G|Ja(RV>$G59bz!X_NJ;{JVmftoV^At(&t>lgV$NJvm10_ZL0!|;fGd%x&v zz6?om#P}gB_ZcmT7h-M=WWXT+93DVgGQFgGbm{**V0!7OnYpp)k)sActAAnz@&)=w z{u`^&66>;+roXWQoy`xx_Wh5{esFVtOc>f1&^Qq7i$v&O4nZK7FX!lJZXb-r`3A!g z_CH$g17y_;4D>TUYH<9RfvK_aQJZ5nHUKQ6*I4DkaJsGrXh z!P(El<*&xLJ_`j8@C`;T^(Xy(`v1pT{Ld}-|E?DLOS8?VX3_um7F$mH%gh8Qy-Wh8 zyQScldDiOle7JI6sezRmSgC=P8d#};l^Xc}Q4Rd-P7M(ZERZ6A`>?;*0sVgI7I4`P z=;|*{2?!~z0erx2<(eh8R(b8RQ&v_{`AS7adEL78>j8VAe|M{tl$6%4S-VbIdEKV< z>(*~lU9tnJ3Rn{b+@Gh7pJIQ{_a(M$2XxiXs}Cxz0t{#V%MPdwUs)9K#!mD2)OdkySa~Eb&q}2GPCy#jQlMn zue`2jd|uo9wAW?A&D8vg`d)$blig6IwLo<$ulY(z3B8PLUNT+!!`gFz#LA&R-!{Bo z^nUBpwm17vZgaU5_QB}8W7fZHk9R%r0ABn|1>0`?_Qz{G&L;p?Qg`k;XkxSbkRQ&? zbS9Ja{IFKX(Cn{wvP%9gvh81NnEus->EC4jZ$$pPsZl9yz9~2(d}jOo(06Gb!T3`J z?6Xr}SE^93`N{Ev+KV>;D+$(%FBYp7Z_TPK4%;SNCKm);N^27x zj0d0ApMxwmzVtDePn&-;e?3yu@NSfV7V)T&wz$w6YfAz2SsdS3b z;lLM5lbuRB_ue>yaS_xU&PmnEzBX5U;rUi)>{fCmrQ@pG`{;Mmqt5Z1QC0A<#rGM= zlE=w*i^Go|@=AqO#xfXP@H-JT2bPE z4G5`~4|4{>p6V|M0duW*1t{|7gJ90+zLGd2`&qs05kGc&(6Iq4n3vjbCSs!gRJI0% zt^ge}fV|aT9FAUGRGn36j9_ax%p8b|P8Q|Cr6pePDjalJ6iqMkGASYE{Y>Nly3QUR}Xr90)?Q}z7UIf#41?UC%^#=$I_)^zya`RV#R-vsp zz*MMn3&VUd($!OxH3Lb=B^`(!zo8*Er1&9b##_(Ha@#8L_Nm;k& z9Pi#1{pklWJlTYcwR~JYqkrA>4h;)l>+onLXo{}P}Gf}+myS6t`Oga(kASU-mWWwf}nCtvSoXQdE2OsUc5&ijEY72S(rRsOhM_(nc62$-g*oiSi zyi3>XbvE2UPgiNQg57}S_S>u}BJhgHRa@-Gqz@IKs6_>6s%6>$@|rWMIZ~K7A2ZKp zJfBDYA^2@rW({H9K2iC?9w#r)dft8`(a51CM|)v?tvs|=9+uxRbFEI=5`Tg%jc6o! z&wfY3RLS($JU#1@9H02LvBV-m$WW@+mF91Yjm+0@rEROjdwq#6mV3&Y&r^p$Yi#UUX+vJEQ0|@YGzxc(M%m67RakLdj zrh7%+I?k!-@a~rudD$#53vE;vrcRN-gAOa*P2HyawYF`s(zeyBdC%$`ZfiqQTNuCo~u`?I$xl!h|QJtNB zZQ}0$tA|NLas#5P{K{MANWIW{*7Wz_p^SwFY2j~3-C-B&hzPU}xu1;H0nZ%SMgrQd zSwoJT*U;4NnLl!lrqVqs!(A4OuDi~nssp_^hP=`|f2X}3WGcW>i1Fq+0ynYCu zv${B2_3p;CoCYNYh(;RXK2C)>$oj^5dz%(saRw-xwd=qquBOa80yW2(M~_krY9u`V zT@CciVnuL@KG;E!@z{sL%Ta(xb%K`y(%f9UeTzIYe|}mX+R{8{g`P1@T>S9B8{*aq zk8zrHPdJplwQTOJ&6o@&lkH&0Mi=2%-6WfCWM}uCp5uF_3M5*V-lm<`+HZpABIa7( z7Ff@^^nJhBwb(QRre?CEU0M~Oy(N~eUbBbt&;saX61#=R}%M?T9<^bf3+^WQ=&=wALFjIqC#wfatm~zJEb;y5(cT&1~}Q?>-pHOzn*8 z`D>0D>JH5sS6LP9xb8okom)$(GTo&YSUfB7lElX6TCG)fd!{k~oVW)(;C?slE z_0LvJairhlR8s}$>Lun=%6to~5ehStU#xwH)|?}N<1IbjeN=#kn6mG&UWonSLKkz~2-#=VpwzV`4fUUWU z@x3N=!#F*;ssj&PB%i-Se))UDGiP88_F>d+akSKN_ghsLb4r@^r5nOQ^0)2iTSt84%qxlM`u87 zzN1X{48B5eQ!Y%nnq5wyO@> z0X{k6Cg%iM=R{q>yq>dX-c)M;$6!b3v*oPi~0!W1N{WMBXb`n%h8p&K*{YJ>eW@@>iOk^i78 zTE%m}BWIlw<|7ZK;h{T9OOj@e=(k49-L~7YAl*e`9|I4PD>ywl+VlHo`({SOcva~x zOr581^z4>bzlr(B=gE#&3NLj|fCu>HzzDgNr;^MWJv_WPI5W`b<1ph>N{=iX0T-Z@ zpA8Bj+chhsR5~s2y^WxU&_=F!E92)a^t&AZs^v;o33$Ga**Fe;9K((AuuO%r17hq};5mStU5FkJbR1qnrh=@Uw*|t_{5KzzrK}eOG z7$72-2qc-cHX;Uy+$)fz1(HA_L~=1qG8y0F?|J`#het!m%sJ=#{oKwOy4N`4)YO6Y z+M?S7w=YK7T1&Fe*w*G+1Bzvyu-+D5v)S+}N&ivIqwmIkzBLy6N|_S=LNPEB{$78O z=l$Ok&3^&>MiWi3#a~WDFSqS4_L?plm+GUh7saQOalDjnNGb!htcmhFR1y$rlu!Gs zII2VWFX1mRt0ph{v***7Xq0`X{c8o4mV-$1l;%u;R@UDQxIF&j&wfm&2R-8#)ukX`Dufy+m`}IKljTOw+PeW z4Eu}QWy3avPqg!`ML7f!7~9SNgSFcs?Q&5*8vb4$=$lX_{*_fA5ix$8|2;X7ZZ)*meD^ zx@E1cqTiqcA&K=ndfT;R@WjJ&s`;LXX*?M#!)^{)Qsq5#Z`8FrJMC^kXkh&CPNL_G zD!%ix?B>wBI+v?*_uARuzdq$HoY-tskWDT|m$;@*OgM-&-Jvq#^tzM!+6=L3jnt!PGz)kHVeiG5lsf3HgBAojYv#si1k&P&9w z#kG^~e`x*_Sk1GBfSK{p0%Zojp&@Q$)U7WXAs-I;)*N{C)h>!q({8G6G~sCg`WkO=Z(8C$J~r&BE|3qE zdZ@sKbsR4pw63jZ39uwE%O3KL8BYOzGyKw!^MWxAmhj2!+7j%=r$rNSWzAj%H`84j z$P_CiW`0wXxCsCJ_?(DGOw+y)sJkap&$3GXm20bdG}Awdf%G;>*jYS2x>h~5F-n9L7!d+ z6;J1+9@P@n%-S2(gJ;RlWc1Hw&b;^|M6>(s_0~46UgqezZ-aEfxZFA0rwQdvi^D-( z_(Z?Dk)KMhq>kxg{Ht()0zCmK&Iuj9*i_ zAX_0{KU5u;YT7Q__k10P{(0&i%h0uxKKDtP-lIq3USzvuZL@_vws#8VA9mYcKv}c* z9*HVJK}8>z`Dag(1n3jFhm(hbI%eB*(U6%z#NuX|=Zuq^!06{eS>Q?*DE%WU(-oR2 z@6D2uJ?{x%G@|MxerV{<+Upca+@)QDZ=i+m0)*8W1Ou#SN)+@UeLKKB*{PQAnuUv4 z*`}ZSen8=R-O7%1Zs;X1A8Myl64G!Z6VJea|kMJLh(Lll`KiZN(|uKxxdvan4{r zZne_p5p=hXHFu1xA!uBR5s$Ot@aP{c#GDt^6ER(t=;3$S8ftzx?l)Q1UuLC=|I%k8 zib=s*tiq*PETpUzgAZ%zGH(Q}T1bsr35qq3uvPVftH7MPb zL@J>2+)-iZ1=>J{0%p#}^*Y%HKUFQzt?+zZIz@(Dub>VZMB}w%tkl_Vt-a90)-kG{ zQ%sCT#z;l+*TX|+dXMi!hE6Bg`gq__a%8uS)@fciR&2Up^feaaXHt8zok|7Zg8lR; zQ*&9%c_xzuq+D2&8ra79SGLbPIvS<3jYF@uRa8l;cy#CEtZeMY5aI>q_U6=%we7VG zUsGUMbL(Jo=YL)EKj=Y@w$%3r(hTrv^5KJ(4}rSE(u2yaCHDw=5wx4;rYp@YTBf>@ z*0^q9a-kjiw=iLFBs&9P)-NCu=(B zgXj4c0uFvKmh}vtte|1NrpSjC=N!v640D=nhf?TwTEHlP)f$v*Rn4e6+RdOMg1M&Z zJvaOXwlGAj9E2z0ewGfmjAdTj-fg+?&kYu2$`{L*#+y(&n2ssag6=ZLPHKo|#6q&~ zs;?RNhD@>-TImgJac8_qt`%yKq8vm+_l-l;U@evy3FvK^$f^N^abp6&5jQ&nO=;@=X77?c~)~hX&t4jz|AF&p02($ zMq6x*jj+E{9sNa~bJwkJe(>u~hwsrQW;@QlPvjE}$4d$K0=)qZu@3$phAh;MmRt4` zpQ$_;g~!UwZtoeX`Pr-fs&C`0^bv-i+OBwv+b?ZII;FIWE0r<**kg^WyqBIo==11!8pGZjsu6!9V^+TK7r!hW7=OI=>MwJZw@Cll<~dPus7UnHy`Hab z(BAZ01k=z>3jxBv?oO>|p0Vmy;?)(ra~1Uuve(vwY9bF2AG3T5I+Jq(e6=Ees8zn} zq)8W(cCmsoFlU%+C7S7EYe!4i3rFNCWRi#af;+N68DoX@V?y<^eTRTHJ1hjNw+= z>t&Re@!;VY9=Dot{xa}j8qvkZlL_hO_b-Ck=k#=Ae(g_~XdTHEx6o%%(7=C)~9ySbmHIVCW zjo-(50K7g+mxZRd$i`x0(j@;q{b$4QliTmrebiZORf@*DT4)Mep zQSu%Myoiak;z&D9Nc9@zLxObrpKV`ZR211%P)s#C- zaJc9x${W1u+E7PNSfI18mIzdAHvm!dDGJutSP#~UJsmKM316D1msRpm}hm_+H;Og-F-ep6vn&`*7Kx5oodnsV#C;VlePrj z=x6#zE2mu@op?p{2U3@snUel~=?9%52k=`9&)fvopOD(kA?#-OSw7I0T}(^6+amV_ zb6V-X4EJYvgQSe#DgD%Ey+iTgcKJs3!7i*=8n3N>D>2}yXn}0>$Eke}iahe7Y6crE zI`Bq=!xKU`dGP} z`SL%dRz)^-tweREupv$THjtJCT{ ztMA98^be0lOIH*DpTxz*H$B%wvZxhbfn!c!GIC@kRGm@F%P|Yt; z>Y2$AMvge$wm0@dDnuS?=31L<3uL=t0`&NF%7c@^z?=PK;q5ua z4WODows*d7dH+On9=^Fy_h3@+hiX0g+W*8z?=)y&2XTS#@W- z^WXZcsU?%~9odL#Qt)3$yA9d1llV;DLwLF@v8yLrz?rkmU|q)raWjM2l8g6Qg_rth z2k89A8J|M&rDWx#;2om@o2F}X)mqImoL9%N$C=JmY)KrP#}Gm62fT)^T~$zc*@$CE zQs)@Dmd&bt#6}KS%E&$C&@-+J9%pQ9d#^LuWi)dY(ckOvz@|xDw^5v$hlH(yvu33( zbGY7_mCeYdV$XBq3m{L{i3#9}h-}=&J#+q4JtLWG7c_vfcLujQ>^eZjfMGR}f(F&< zf!W8&1JKu7!5Eci-}r~7k-J>#e7ngu;jTMZ!L5SDrBFS|F5@jqXKjZ>lw(-!D74<< zfO-Kc>>E^*42P6y!Tsi{`+0c$WUd_nQi?AVkkVEi`! z+cm1&5tjBKJ1PO6pK@r5?W#p9*?O#^VzbrY!!R7e09C&AvynGiZfL;9?~?RD+UoqK z)#04!Yp=Dd%#8%4jh6;Y5O$dR~Q3#-L=`A#mrEeHS# z5s=3ci=A`qb#UKzN*dZYC6gRkeVXrfR1u7Ga#|_(yqp)qso%dtvcceAZrn$DtrP%_Crn#xtCZJp7Ei ztQ46MCmE5Rb;^;0l@-zE7suOxML1y_B-=|6G1-t#8RcU2Sb__2M!C_H^Nr-7U0<=>t=qZ#T+t8ZlN|a3g(QvTY zB)-z5+Y=zOevjA7 z+?}jFM;`0518xOy?fRibl@;LgyAD@V)}fY;`zFHGEt;X6sTJw0eD*+}-g?G{NZu@A zAGh3bs8Ae$4VW7PmE{;TuJ9g|f2eIR^8Uf#O&Hj2ca|nfvj~n8XgfA@RGP|@sm1$atiCm?Wmc^Uy*ibb=<24is_kE7x!14sP| zwS+w8 zQQh0dt)9tR=)HTeqPq7$PY4&4!&R zlsy|NZr=@Bqpka}3D*HLdmgXU5w=kOoAdL^Ie+6R`nd$ z&=iNRfv151^KH6lC+$|umdf{jLKT`16iKn?r#qg{H&mC-6Aq1#z=P#GV650N2q51# z3zXSh^-hcGCN`|TFpG87DAB+Jh5CS&%d>I8nYazNJM3?5zXV8>H&hT5=7cV4_!*6? z7!)$*J{yy^u)f9Q!|MibmriO2&E5~8!JV#k)wzyQdsP9=s^znh_cIAHxj&1Bo_Vt* zHa|SlI1%&TL3m)&>y1=EY>I7AU+E&`kui{$hx$jBg&!L8f=*RBQ5APU-jfHBTsF zRl)GmYVYl`EPb}Bn=NU>a!tY;@DA^%a|5MQ?OkTm|Lq$tY>ROTZYmy{XHUtHqdptJhRRT38I37wc`UoeLBxKCDJxC zI%QBv8_kqo`esRa<_E5{p3ctlz^Bm7m1n*Zc3di~jtykqP2mpzvUh@-GV@u;&*w#X z{!UPkGyG=2u=Wu4yOB_2o-vo~%qu4yV=Fhlob&Q(6mJ3=$XTgA(5X@ftglt+ltD?v zV6X7{%lSXgvzol5L(M6#Sg)hi7Fab1OMw8a<$W0OvXm)q&~K=^xxy(jfuxo0CuW4PH zt4ugHz31K1igxFgfP`W@pBzt9%HAy55bhXfBP>|EI;R-$R`(>-)%`|2q+Mrb#)Pg7 z`A*c}X@h3zhaV5*_2=o~SRscPJcYmBw2cC)5BBGVa@DN7hloDq^_6FjDK`Z)*QI_R zEuAInWjJ1@{}{diawCI_3zYv6${HUw!2r!$>;1v15!0qP$$X0No&3;W)! z9L_bL-EJFQoBPN;qKAv`No<$Y7U z3U5gF#h6|8r}M1cu-M`s6zy^oas#f&6M3%ytf(HZjH3gMnIG`wqAjmzF+K;{eX#vy#49oevI0|u*AcBp4!2tW%jGKk zG~?g98g38&YQED^^mv$^(qc!b_CJ7bZVbfjph8S`ufKMz5>FQx4Sg#K*R2v-lkv*- znYU?=L2;I?wdLG>xHG{b5mUGNL7nmHQc)my=vaU?rDtR2^V9>^dA!t{*i8JOg@Yl-!g1MS!=$v_U6mMwXZ z4Bn}Ka5ARg=YLpwpd%ursWd8cRhs`vIFrsuosrJU?A?$G5n0?K^jg!79_yK|fcAT{ z9S45i!mU>J&i1BeSV)T-EUm6Is)I0GIN%tqTS4pmOJ{q?pN8bTFVMqj!Fc3h-m=zF zF4i?0k5+Z-bVp}9sxJzUD1*GWhR)dF*-eC6K${sZR$ixLOdyBQ-{Anf%m|*yertAR zoy$#wWzC^a041?EM7@8T^9iD22^!cE2kb}fU0HE8C2|z$HtIPqs#R>z=SpA*43 zxu+`2NBDj~ak5)_uqTp)Bd|1zulb;GH=`3jQ)a4pYhxQZt~??duuCn(22IC*0wnXb z4B7aIAR?9Ymg0!_1hE?74(PD{C% z>2mE~m%TK=Dg6a0vr2gLj-Ys8tnIR*#hLfeAC=d@LghhsQ)f84c)t&;qfi@3kkx|(fVsvmC@*qDx{AS4wW~Cxl z7dDRYXI1(KQoFzw)Y`@c=2t6#(S1I3>pTCFh^+&fS zS^tZ8RZTr4Dq0Pnhd?u9gR&uwnkY(%r-;luKM9p8Z@k+yJ9g!L*!{L%3IuUg_I6x% z4BYc5{uJmY$aa)u@*oWX%#4kzsk@2LwpRHjDuYhF&tNszNi7WlCc6Qssg@M6$1e!O zayp$g9|b_0D~k^Itwe)Eo3EMY{;mxLwDoK@7ZSf&a!)m1AEAM+Nxm{Iz1G?r_>>dB ze+08yqBn>KGkaG))+5L6^Q_7nDtpbQ06+nN+_+fPXu<=&>jaFXy zGfm??N2oXK5Nj+cl*6fvzlg-w`#=78+0 z7k&VZQN>_`qZO${ce(o77D3(Yo^K~IoB*g6D$X!T<)PH$Ko5kpFAy%GIrg z;v4~78(5_f#n@#O+l^+0^;sD-xPX!~6a_yw0oYTI{2< z5Lnl%m^7hdezW6iqgF$!@P@jR{vo)PnMdX`xQ$UdI-b@pP_Hi(m2x0(Rn7*w1?-yv1xyLg zSJ+1~g7r*@!(e3rRmap0K~!C4UktR?K8%B-z)sqB~sy*Q$-Viv{5f@R2NYf!Smy584a)k zo|nLiL;(b}$^ld1&D))bF^+rlrKqbW*kyL(*%J79l4G<|*PDeGuAqS~(s>;Ck4)h- z06p*?{LCqwiv2MPZ7=TOW`D?e5UQTri8o}_z?lpugCGGn(hdG0i4LvPViy}oC%0Z; zmy7g9d$cK8t+uq45w5rF&RmoA?2KO+6CTa$7Y%)0hHqj=BUyN$ji$^#&sQQ^l`_PL z|BUXV*VAGir`0nGCOt}yUxOarH;dQoAubC0*~Dgix8=>bK4#ApL>sxIXEH-@X%=!|YI%raaKQRe)&$IIj05RKQ$7z`4lRF=+ml zG+dwywS*vju@R^j3VQVJ%hSkC(2nCkT#|9=iE*hhSnXMn5}Ha`wuf3@k@&z?m0ouF zpV|d1E^-6Gx${t27%*OEtEO>MTW9@Z%)4J>f3s(Q;=*ARleJ59}Y-3@Y3 zd7oRtwD@)q%sOENtmEODWHaYpY3Qx7i%qrxsCotGV<`@6zu5fxA=W!R_j#JdbwnxaF_O>FA*~Clq zm?(HsnU3qR%kZQqVi9hPibJ6u?tfASMdx5cC=ZKXx!LjM|8E6<@{GBIt=OcoQJhwZ z7LsgjWm=E@Tq_5ezsX$nHdA|rCz8^rjAGMLqs+A4sOotI=h1q7*8&z6(mbMV?%k=YlM!8YbFpV%Ci=2M!!jw93Al+M&o{E{M|q`8!R%~7QHgTb}J@m z=$vpA_|TqP0U@|`b<6~M4p@E2!7ad>%;BQDZ19boTy#?sW}fXslN2 z=ys4<02E2`!1QlXMZD2p%d^C-GAj;yLHMp~B4GdzJCSP_gnb&Z7y(8#0{x*Ltvz6L zDQ%5kerh$XWP>>GxnsEg+CE~#hw+7W6DZ?}f^oabX97h+2eEOK&Yvx($ae2fZqNu9e=i=EP*o3sHaY zhN^IoU9%w83E;w7zvaC%S$Cj(dM*P`cOtzFx&Llr=$~d$K8n{X;|J5K+uHk2BZ|>T zp5)Dv!-WI54Kgx8gmZM=-BdFAG%wV7irnKt?Ik@+R7PP!^yeA?N7J_B#7J75?fHwq z^bf-VR~!Mlj?4TstemV5mm?)x^Mdt>OBDa^4c-AnS*UE6>o=AU93br^W!0~UYa zE;>}T?(@iGPlP-GMwJ%L6HJ&XB!?c#-F1=Nzv_cdh$#m_IqPSSg;&Y zCN|)i%TB0_sirN(hQyZRr3zYOV^aE|&$YRj4D+W_O3UUW2;hu@=^0(^V&q{{xJ}CtusWleyv+QfJ!NPe&yyVF~v!-BQ$olUh&`5Yw4zLe) zEoc>#p4F#s_>`dpEi-ViERZ+AvG42P4V3oj`!A&y9vUC!>iSt$0Ipb*f=)u zZTTCnpW2~hUCz^;vAq^C51#=sCE%yg9pGcEb3hs&d0Dl)sT z&XZU58NB$)F|-x@!p36fY$5iiTpeGg;pc&#d8jw(i+l?;jW7rUd?Uu~co3+IH%Ex! z=FIZ^*Ui4Rchf^WCjuJYxZL`_Zh8|^^jVHDZ z(JUnAPy?dfAo>B!D_Jk}^v#lZ#OSEWcLP1{vL??yjxtlK9cJZ~rpKNFdpnbCeMu8L zrcYJbB0F!RK02jcR*`P`ZptjCZB@leS0HaOUy9w%KsvZqP%NCpPjS~P9?YU893L?~| zE;WEPcn@AEc4jrPg7G705}scBEQWQfVt+2p1SHe?R8{G#l%qK=l(pOj=jw^)4!UmS zDBQWhJXJi!9mGw85x+3T9P^oT;ZddtCEu1vg~`Ee|3lRB?Ne_h$$Qz5GSo5gAjlI= zdKnQkvSsb)jU{XAtht7h|S_%jxZb&!?Dpapjf zHU3o?)hV>ehusl}0XtqcQZ|5-t&y9rp~Rt)9Kqcb8fUi{I4P87srPmObhn%ZfK#znpCN>PlyRP%#pHob zigOvKMpRXThIJLuC(Pp1KTbngIJ}TgsRvUjfc)%&!87Vq#WyEKO)SmW$@T${Dp z_o`=WDB@zS(dpw%4(Tu6ql6%x?GAeiS0DjSW8BQMc zUUs2xtbm)bBHOR&@rpBlq-aozi%HP0T*D8Esd?y%10^ z(I=`N#QoGt2@NT*ng~4-DranL-s6{sgi9U=6KubSb$iFoNt$#(W*I;*%Iv)-FyvRK zHT00dui?>*jPBKqKhOoIK8ilMT`?<+92ua=U2MmP6{n0^Yv%vB15LG$A|1Z(P^823@@sQM7v=Mo?kfT#4VQD#MTmT zs=#ynz*&1CKR#t3P&XdSOtL;#gnmR&G9Q9QX_pIe3~V@rOt(PrEr5poh7DmY*l!Zk z#(ux{d+|ZP;>m7V0k>G(YA<#5DE6(bo=(8t12Z}IS%(kr&b}lx4P-wygESNGfUTkJ znz~GAo-Y~!VNCrI$2s~uD0{3R0NlZbNknmv!?<9A0K!FYZZ#e=;N{#uoqD|Fs-vN|m`a0^RIsc5;b^r}bnqs>BY3==r z(f-n?6Qy*jy^cw=etYdLcy|UmJp~ly&#-w@gHot=`mFlrRyns?xblduADOSRU4a&| zutX_Mz)CUVH?#y|_nLduV9&NUOQMEa4zI13TnAS}aSXF1F(&S`3wP-ai_>O>$S0<@ zWXj^LItpD#x2vpYRe+Cbczv%&mBCn#X+uHo`f>54+n(P`K`@lC9?dgdFu5NQV$DXp zlCef2b{}fp_zfcwxEh@!AYBoR<5F5}421pZ!T}lQb)xag&M_M6n^Uhxo_L)}>WLCj zzJHc*Np&mdor@cT-0miBMoxme{AOq&w;0*(XF#LT*;>X=PfKH!X#t=?w5m28sHhzY zXqpYx2m0Dgz&@?R$-s1##t)*^s7!-w)t45OX&r0Kq~6sKKU6*Ah?3N;06ZDj5hiSJ zW5=(?3+1a??mbdF4wymOXpQg^T_cPeiH z1RU&jHMuyL1QH|xB$x@;A?>Hg`kXgQs%J*_@NQHaM>T}&)s8h8=udAqp6pjd>AsH% z^0i-Wv4~gsY6-Su0kv4P&Q`+z>z|0P2t~p4-Mus&P1PcGI{X_(|h_JUNMJt$~bLey;cpC4tV26-9M`>4X}LZ?K&!n4>t;K zwg8;>=q}D4NJ4~2aj1E&A~R-N(w;Du<*lxZ2z8V78k1mY|5)34V@@{7Sq?{WzhKb z_v*$bQnEwqJANO7u_TdAI1KtS8!RFf5M9rumQfob_r7oT?kE_54!O2_RTk~Sllud1 zoxewhD+72LX<3ys{Uk>G8L4YH^@MD&)e#h(cFRuTbsE3o!o&kkP?3aDnAI@S)=%dPI50op$S_g!$lhT0TFxblV4$L z7qD^lurwCZD>qwceTBOeaUc>p)Ub2ow}X=owYCeN1Dx$Pfb?XxDA-s!6>ADE?<=>h z?$h)Q1|mZ(`dUEmQeb{|Oxi6(g3m*WSTG1!3Ey0MbVqDT(VkZifBy9f@m~kY4N*0? z-IlH?fhy0W_3*d>-*gzCRA)JchZPMM2VOiTVz13bWHLzGzy5b2s#ZTu6jtb??z4@* zLE)g#G44DxLrjo6vTY0T?RrZ{@I;hv$}LqLXwmp&}*Gj4*Vh z*)Dhcy{{u|@+zE)CLgI7phIXQxyS4DL3Kgjc%&H)s=a-5YxCf3o3v47w0Qk~?f;rn z0Fb(z8@XydjW`j!vLWrBdo}+9dE~*W)-_49c9kICTt2;?t-Yn7~~ zuh(&23!6`JF0VK@w!azhjPyXT9V5{KDbl-iwxcYaUxZaYEx@LnuqpENb(`y>+b_`Z z-ij((_=o`+WbTF~mV_2u=NaLQ=7Hi>Xe0D?G?rC|q#XwZlkcGJ8?GgX?adQd&)x^0 z6E+?ugH7Tn(nl~|+tZ^Y4|zjAPpwU;araq4|6oGH52xbaQuQ$-H*0O&v1PNJj+ZH!no#1Ae$cjpLuvDPYvzYE;Ff`50!7s< zrr&nlpo`sjf{Ojjw30huMC@Ou8ql z{y(-bTeEcLF_6}iD~TB0rP?kJcRs*4q>bv|FiLD0H<%e|c=Lw?Zee3xMC*?19dN%K zRH$#I(bB%kEEg`3Kr>SHZ+6_;5`?S$0mPw9We*~;R{CaV=fKaz0jI{t7ljU2> zwqx$tbS+PWpcl~3>mO-;IiW=DC{OV7YY`)0O|u-KIb zMDq06r~Fq?&`Ty>Lmh*BOvKiPSpdk9+3%isv*cPopbH9^OvjbYjnov$H=|YHT8CRbN*eAU++j-%n@+WE zW9hA6%aS7_{3qjh&jVfjmtq8%akL&nWV7jbl~N$cOt?!*2D!vu`#6!}u)EZ`VrGhJ+cn?Fq?4=_ zJSWh;nc-jy+3)Z!)xJBr%W8Yt>9}=|2UeDbVp(C#$p2+;9ockSXn`^x1AXr62rXio zD@4QAp1`EobJIT>ZzN=(mw%mz8D|8{{~6>y?496phi*1d?MP!BDMKIPVi#Pbfw}3McZ{F37hO6o1Ypi+I!)ySrv}Qh@-@aDt3X=s=$+D zQf!s_(yS8i@v_TIug%86e#hMJ_u-mA3t0tsBm!j}tYZmC`-&oVwP24rE;yF&GKac< zDIQtRnF=RVHL%3~^&iE>+d9rRGimw}6X~(_8p)1CfRi?4pO)}7DzuNbSCtYFW^5}p z_}p|av5@|0X6~8)qza_J`a#&X1Gn3s9_J9y8*F69PBA&!^bf-f&m-z_-Ko_zbt|$n z%d3U_%r!%J{njzZX^;$8S%*sax=zFmC$S=D_xz(K7fnmhmVfn|YRE*n1+unDjt!Yh zt%EU4a@dcqCmr!;;3ol}+yhcB2~QskXP$Q2#-i4$TPTrmST5Cw+}v4W*?Yd09d+74 zk4gOnQAl`(L>vaB`8q2W-v|7dUEPhSN8j2w(-mbB)?#|E&a16llWGs7Gk;Z(bvB=l z{Hh(^;d3S2YFt0Rt!AZ&{8m=_~dxW8t%<~)7&XEq?H*$+Hsr%?z!T{x3Fr4L5?RXgp^1-$}<~K{G zBR6-6n$?TYI(U0d|Fq#%BVSG28U-X3Cf_eimW9t=nqP%<0M^a}ac}at<7Ekd;yc7Q z=Y?~DfS%zed_VJFW3$#1i4E`SUd6ipcmITI!e=UUf%0bfRqgbepI^6YpoN0!cYaU% zmNR}ZFSl+5>*CwIU_}YvAdm~Xm+dvV8%g^yMN2`7-|VmB3aWnjBgae5eUkm=+mjyH ziJ%mL)`s}+b^{qSUNOy7h@ZfWnEbwx$lV#z@KRf>FP(2Vx8Y>H=en_!YFF^uuw9kl zjvSmN%uNbL4cmV72fnhNOMEdYLG4>~-bevnjsI!HZ98a9ap8oead8$28M* zLUDFlA=jJkGc&^Vp>XzG49kAY&;UM`IQll*YH{YcHf?uKH~4H@0`63N+mE4|59;VU zPiicQmb5wllgyLw)Cw}e?k%O&`>w7iNXxu9e72JQ@1N5@k2lyXDUV+;r+=@9+O9j%r!_X8oY~IGe7_ zR*B3!YuMWz+J8f|el16VwXmCkj>TyP-H4T>8tK#S(V+W~l4n?NKhK{7`^S;K60CcA zS@^RUC4W}8yxa0Zyt~?xgqT4b1v1q6$1hL3D?a^~UsWlgw9z6oZTOuQ(>~e~;_p#* zQf;oz)kgwxq@&6)5b_~B{kFN$%E3_(${3M}qFIIvXAv@wttg zWncqRgvxHfvnK^rem|g3avr1C(1av(xO&!>tiI*Ts}yxFtJ-G3^E}(W2j%W)Z|3Uk zeknk*^Qs-J5C)~^>f6oKMZlBKqsh>nH+d&vV$(cEh z?sn(E9?%A?d3H9WW+E_o3!jm)F36?U%W6voS@yh(@XKwK9~dT6qv2@3#jZH8w0)o< zO)WNq6QLAvPfrBeFiq<#&k8jbVtjeOsxoug(j!RwP{U`SBsFAisdk!&XS9H`R7CN2 z_4^Ip%~Lh>@s6@}kP7a(6=6velmP{KE10*LPFq6Vd}A*CLzaCm-&tBd5NtcJQDYMhrJeRzv0dtNC#e{mp`%ErOo3CHRCs#i6M6s|Y?6K5 zMoM#~4tsj@dNx&lnVRPJ8zIVUal6Pe;M-n-GC5g4Xv~%Sj!CbS((4#$8-DJ>&b#wh zz!rlub8z|tM}k&Z7$#}A-J*OHVmYV+A#y9l~I8#kjLo8Ac?_VgQ8`wlcJwdSA2SaIlH0K}*IL3DKxTjW27HW%D+Cxz^cmNeZv z#d+}fPMo+Nq`!uTp!PC6Tf_s0BJk#0qn*k`?I7F}x*=a#{%@fsj|vTJRgA?--A7*f zgO`7N_yHh9Rkn))_qy5O*;gjyi zwMrzmi-dOD=K8}=+9xYORIXdsnB=x%3V8hv&Qm z{uGu-`auQ$!UlkP)ffPeE`h!V5KK1IM*tP`MwWbfjud5VYp;fC;bcqUA$)v*y&KNd z15oO?D5bp%_k9hl0tOKMV+z#?D5y0zT)@*C`>6iGvDf?rjQTD-cR}i2=P*>x^nxm4@yhf8OAovegTV0Z9p*@&~qKCS94dlr@P zzIGwF4!~cZY%GGv1Nhu>&xpV;VPClK%TwoIYSDDGuC!}dOthwf~B;IE@#*DT>F5QGp@ z;ambRbuX-HC2pFSV8+X12TnLPRN4@u47?*V4G>Hw6b>}aTAJzSJ?{ctE#Umn&hm_B zF;?uJ|9g|vKN{RiY4;TR9e^&KYlab!-S39~00(areH~%9BxJlZvnS_j@G^Ndp*A_i zE;s~PdvN(i^+V2HSqLOHBkcf2d_O7Bj^Y^~JlzAb4@69T4E#wj ze|$}|K6qAzHhy6JM*m%3ESK7XNn7(J0^PGB=_f$A=m>fn$w$~Lne z&v?(;Taibkb+IaG-MGz&+xtsDIqgq{t;tqe=c0oa4&(^i=eO|;#$Ka#p9LG&jQ?}G zx zr;!FRsNk8FyEV8*vn%n&)SD$qxTDbdDE0&P=*MUJULHr1Idppjs})eeRJb;Q>j6EO zumSJ_02B-EmW6i|YoL}oESL?#)}wGR}ZSMC6t-toCCg(iQ9@buK?R%{wZml*qg${i!4b{Km=utGoIMlgJ&;mXK zdJDx!2aN_>j87r*ZaE2uZ;MY)@?zx3Rwn3Yp0GJ%H_El0SnabO19IRiPOS0G?-K`r zIY$5{(*r-w*HYguJy`BUGxDBI`vQ3 zp|O3*qNg6GUpZVg`~u{@M(~vT=NPvQt1H~YRFcXpnzChxmNuM4A0hUQoTv4P*Ro1_f|lGoKGIfeYA7NywbQlziOQg; zoG$YX&g!C!LB25uNm`&Jrq}UI51}6LGLdAoT`bTqrQ z|CblAD1U*RhKPH>y%D~6vok4P;%QtnNfjxd_}Y# z;#Qc2IJ{->D^!R~4=JW@bbw<2NLm(}Yo;j_ipP=gf#JQh32J_r3jrzPflBi`Zoyi? zf|lx8m?&F(DW;H;}x>Mt(l|M$zz(ErzA^ z^eJujv&X0Ozr_D>+VX6j@qth&+DUkWbK(D|}k)sI{98LeQJ@)Q6 zjG%$cDQL?u_w3l4-T_36o9=kc7{xxNqDCwiIdU)S_O)YVOZWc5s>ZB6%TP@SMJ<|q z34w#G-LTmxoN(=1K2B6dEZpmwz9@3{*{=4=kYpa4vh)QMHW_OdiOgy!*~AC^Q$wKE zs%0JDeswnZ>yzm_PQNl&x+78~0V=^T+FLh&7^L33q9p?kf^4VQtKr=5Na-mdE{#w; zRZA->t;@!Q$6YnW1;(x2%5%J7{&3gf7O9LmEx7T|I~z+c^#n0^jsnL@gM;e;BRF+S zbODUCT`$!6e6pRm_IuX=?GV`*4t4+X&GYCwWWbSoBD;HA5B$#6h7(CKv*Y+N}i2NuU2W_yT;}M-93Sm+wTj zxJdS{9#M>)PIWb`&1Pz9>4or-zhlMfwh#$kx}||y*;pP3vZT30NZoIyarMLZlD3V% zWZ&zAVTCxN_#%whR)mRWmOLi*;UfI1HdJt}jd$Dgq_bEbS@x5=_etnbo(U!OTV|;f z`*zbeS$BzywQ!UY!>Sya4wEWo9&JPM{VF~^$@k&TnT1B;ng`$LX&JG>ufttWFP9d! zSmmZDOia08qp5IgSkl%VY1s6$FN#|F!z#@8*Pw6W=&xe&*P~@}t6rqPKUOR1uLD+= z&yvH~^=VW)XoIsV!*F<|3R5RDEJkBoj^v*N4mkZ&zEh?>PbvUTz{)Hhb{2SIM84yvKWo76lI8e ztcG&oa(a8k58IR-`y_@4XNn|XJhXi{sqn(RMyzS3e?{^g(FRaj{5d*S$2qkwl|r|y zv?wjpM|xC1`q;%Xdg2ws_@GSGDZw2j4nimmXXYjK1uu^x5cKNYD*o$-~gbS zo}CaxY&1>*d*eViyF!KVg(dwJfh@1yT~%=_efBul#a1f$=MJ-dd&3EST%1`%pZ$_u zD0pao?!JGXo@Yw%(UGp>ttBX5+AaB&Em%k9+3`M=mA5jO>6WdCThWK{)hgRI$HAKcxqa1eAFf!bDXtsr_J4 zfxVRofOe`aRX7((hjM<65Y3Nf6iJxH-j`G$aAyI!AFmh}=H!PV&=|-gf%$=LA-rz1=cw zuW@XTHO7`4=X@e)wbavO?tO?$fxck@?bcV-A%CW8q zUiG5aNQSZ}!SGvHdLaCF)n?0TEx7>PePVk>4$r{mHpp#_@9;N#{qkEy&#{1SnBKEK zs?PUFt(k~%8l40N-$XX}^U0lt&|Rnlt~9YqLN|z5ate8N*O^_3xRbZFWo+27C_T9O zcIsZ&KY{q4>#FlL+7qR$hW z2JweFB&UYsv%4oC2PzE<(VS#%4u`CB7~Wn<*Wr#3kC?O{Nc2(7+PW5tVq{IMFWIy- zy>#fl4>-W1Ovg>+i zmz@?{YB-kcl~2377_^Jo%r>~YjU+Fq6+i;n>Qp=yYY?rEZu#>_1h(Gr zC*SGVOH06}n(h);@Ygcf!nm1$t|fh*{=8}HE$0uvp}`q^WguB|!x3>0-hVvYv}L-T zJ?ryeq=8EE2vi3B*hHJ`G0X;IT>vmmJOUFd;?QRNS(-L^U{`-ln)?|4mA1`>schj_ zxK>tnFZ<^mjj}z~YZ!*=h^`m(;dysCLS$g8$=~^E*w~RlNpMEsRQBrchm6@+M^#4? zp54U^g4EFt1ceg37R86h{>onMg?p9FNN=CDe0>7c2T)c8k)@u51#$H;>Ed$N58u`?Y9m~}aPcp0*XB04Q!i8uJJJ6c zTOfq1M{nFYMog`|<#CMS#R%H9SJh*fDNc=CbnOPo(=x>QOdHT)-q}$A?`w~|+DcpV z$1%5(${tc)J#TY&aDnZ;LZ+G*`!aOjJaP|u*pG^$NK=|8!4#Ls$5}5~neODE;f{|u zfwB%sae)fex>}w?mjIH7cE8^3^vSc@Pp|-}%U1i?jAZzvdKujJql(PUZ&4;XoFZ6~ z@9u@wU-)7IDfYGu3tIkp2U+C#W2>vMe1AD##v_lfzg~DLHX1Cb7cLX3dl^P2Hsx>9 z-(Lv_T-w)kGa}~Poqk>)N2xdw9oE|!<1t#$PLos*ec5I_d|F)R{&ascM|(w2mF(lw5{6A zXwjw(O@O=iIjji{X6WAIIrR5^5x93Yv{%&$64}4_mX$*pLk8Pd%R0(88+qS7BLWGU zlC3B}HlTLrpQ+tMu?~Hc@n~vrK>=-IuQTN+rqPsS#{#d)Mz=WC?_%s;WDJ{1+%0MH z53b)48*ZIA)@E^Vo~&nx%G?+{+>lM85-i<8f5UqIO+|svkUc{M=OIv*xf14{#yYNo zU~zTeD!Mr}=0wm_wY~EliqGtdQi0laOb=DrUcxL{1n|I2Xav-Ef1#5^1pKSW9*%ZgAWc}RTm+&mug!Ya{ zTTWB=qs^)RyrZXKluGk+#zr)Gu_3Up#j?87I~4eRyc7RJmn6F?lKV7hu8C4)is-Ap z3({U!Mo{|r?v=qSh1I*rcYmWu)JXC&kE-l`b4Q?1yqH2AC@v}WZm;f|3VN_lxJ*eq zm9u@&;VfteByW&}Ws~g+W5QmsS!7z7UK_gdXwE_HAKb7P&t61Q@|Xp_p;3$z`JFx) zBlS;zEUPR}6c2|}!Xf64-k<%xaP;-;Xl26cj>=f#^(jMHvwrH*2$+m@ zSfl_({0Bif2mO_j=v^H=(;kJ_P}T9~%uo;TXFmkvsFDne*?AjRVRSmM=-B_-_JMFd zTx+9E7!cedkTk8K4wD#RI6t{Dn+lTCkGw z^WL0wq`=g`c^!32!+B;q9?@ z`0b&-cviOL<73Fd$XXh?#7dKt%6!{Mn*dl-LVw8Xmc%DL zZpxo)J2LyZiVjh{ge?2{7>8tRnq3-~GvEI@Y?1I@smV=D8#E-doFhHjmEI~gqrRgmi(QKV_}EdP zW8SQ1Zi)PIc12aDyPe^i#->17?v$Tp_$WoA0iR=?QP-{8;;Z|hF5D1$p(D5Kl6>nsVLYIqIioBP_M|ho@8Rtrt1FD=Bd{ zIMhCrw<-P_M0Z)Ltwm`OY|-y-WpbahI;ur6Gw15l(wx4(f^VE`DzPeAhQwNP|Bt00 z;+JYgJy^f2rVixXySniBZc)@ycxE9lz)5s4i2W2B^j38N0SCBflpaw(+9xtSj&%YW zIH>v_45kQVyFWUa!NA9KKWqi`ygXK2r00qZHNHC9~C#<;u1PlZq z1J1-L_{E0EU75`$YI2f-*~4?D>mOCSF>1<6G3Zfqt7raLtCwff7H9phm;G0Jek>NB zN|Ns#Z8uTl)_1giD!%F5dihL)!^K@>3GGS_Z!r;rgnH8v>P7nhRPVumak%trxHUJg=Lz;u#5>otv{dX<}WYw!{3aY z(K9zQSxY_B0x(NkBjcp@Op$rO#R=OhdftC^Kz3klh{_GbBWHJ=# zcwm{9f~SmGWS!E(im9}dqqm$R9MPBVcwE$w&wCzKa6BKt8(BEa+R%_0; z(_-2l$;liQd0Cvd%G2Q0(hT3jtbw-Y5!1-n+?O(V8&XKevEh3669=htRs${Wqt`{x zTQ9HG*R0i_Zp@E}goPXYA-I8r542o};xp6*u}62h4Vg|=u)_Vv&d+U*v*V{cTwRsz zl~guB8*vnV0;#=2rtdbUzlFK<6U5Z@AwGhwc6%*%r+YtW8D2Y7p0W4o*@lQJN}@$w zV!ti8GlnojJIP5iaNPX!2^Qhavg%#IETE8aVM(7GkYiVmmPE=WSzg4q{E_spi?Pxn zHbh=_R+o}$r#AJH7p25mrrpH3ipN%oAAlnNk)n@#u7H-l;1KlaSWJCJGMvg&dO(w? zIfLNBW@KuX5_|9dq*LHiBjQ|pmyd-cm#D_ENl-R3{HCK_+lUMW1NMROXCHa9{kHDU>_i_rFd8OmmMq-!h& zGpS8q3Wq75@Skm(^v0(^OR`t5Oo+osd)l>!1nVq8qg1Ow;)(~)ys+aGcpZS3D#xX~ zBdz)wl3qF}^%-+GyZ-)g3}7*dy-V=p;4|x6n&nL}HvdsE`eR!E7p*-p%i?>MG5F@! zV?e5?^`~uPb^m+V0VTVHw-2RWEn*SL7teZ*1j$2}_zqdNPCR(|B!;-@|IbrwSz+LC zjd#6Qb93fKK#4Aaz1?fq5|Ah}4ZxJ*D6D#Kod||Ue0ew}qd2fr7)`|CEfNrPhD!Sl z0%6ztgb<8W37yvhCCMUvNLacU&!?|?a7fyc$6(Z3f9FJ7?m%F}bKMp87vdjlyHxBisG#E&TC+5`++UFEr)@e~uf;!q zW*X{8{Rhv#pwiyH%_YF@!ZA-1GWcN=uZ~4t3h7o-Eth;x^*Q62PzQJVU{AA9Sy-g4e zBMF@;Qmz>k8GCIJl2FwRg0nUean6f~x6%&vvNZ+xExG$1TtwkJz(C&1a33m}wQx`cEc zNJ1?iv`@EEHQSVQg3deI*3y^?n8@Tx)Kdb4{&teu!r=1FnoC`avhAvjJ#cuke0C2| zF{{VQN*04mSFtlQTt?>fg}*TBw_*%lwM{h{kAw_9RY}Q*N@zuj5z3|onHJa>dq)5Fj60Q#JV^-c>0shz6?jC*xNnEXwzFElpZ(w$k30W{uaf z$A9Ul2OAEf1mw}im)?X5QYV&!+>I1hL=wN)xH>U=tWja-kRHCod2A?5MAlh@3kNQ% zP^}3V37S;UhS%l3IP&wwABv^~Mh||q^W-%YTJ8T*)ST!FJHW~nYteNSGV0Ve2#Qn7 zf&cm@zvoT-mDv07N3mh883B^&SbG^^9yNTMev}6dFSyEYvh4~WPIDto;X0kK7GJ^4 zSI4H@vMGzP$|*@D+z)Atr~w2lJb^kJJi>5)nBMlxou`@Tr2H0{zR({kX5jVU-DNXl z+u4)V#el|~Dg*t=@&eYfu>{Z9PnepmA>cpXv%ZTN(v=`v{pAk4JFzl&@9JvQxD{#Z z5S0-?4&opJVLGU;n-1vCX59&#SR2gMG6$RDIt_r6p~nqqiv@lAiT~ex`7J#=wCmAz zJIwh)Ee05yxhEX(9;sRi(tGq?o^S=&?f!KN9>(xEa?@ampM4_byME_sfIup=obVkk za_3flL8#r)$;-$!cH9oBHD|))0{QG$_|ciZO{eONIRhp z-f{X~8a%Tr0fNRn;q2o%=W55v$xkt)V z`~Cnx7PjCKRpqbyMVgI$AP6_jR&jkz7ycOYhe3gJzh^(CghM4s)}&z@N^I^@5@3;6 zk@3-a{eJHhtDe>aghV@q&p1Q&rSHU`)rgUvIC-!tY}rWL3T7W*Vx$ z)r-`W*Pl?}Yqki?Qa^B{ekA3?rGYrUGs&crllnB{^hCnUx5OY?SK8h^=9FC=M!mLeR^=Sy%7MNaF(d z(D-anlYAfTuP_|Ps-E^+6zT`;Ns(?!^eg%us`%(UVhYLqoBIQce^~oLEmBIAI~;&| zVRGfi?~+Sgs$X{0uPIHSu3W6Ehu>1bjm$quF2!FB2u-(S77qyI-MFjVXQhPSdrsMM zrlsKu($WIi0`(4IAL)lrr53AU@ZJHB`DPUS#E!Y8nY!XMnczLC zbb_Yz1mUPmu;^2*sQAPm8!{a+iEPJKq~4n01c4cALbwg(&=}zex1^8<5X4OTxPPoP;98BPcOk`Ng!ytfx<2EaGRHj*GG=KtBdY> zl})PX?0U*E=n`M1K;xM};QC@Pf4{@q44CZ@XZ2d2ExMJDKiW`h0|8`zB&EGpKy34L z9@XsyVYgF2?6k;a`t{fDyz_6#>Y6!y^I6-bG|zi=zX2X|WY&i@Lj@WO^b>{m!>a5S z2aH}?W1mz&%3456t3g#Ly32~CX7mT75M`>p9>T;K%=H`?LQKW-Mj&3{Byje|qRWoW zEQ}tRA@O-J%lXHZ!Q4wfD@OPSb3ZIj6_0}XrSgX?44K}rxiG3ll+&=oL617Iz;q*f zT%l@eL2k^2InfN4Po+s3_5#~BhSH8;V)gBG ztG5+{gl?{zcsNi0jX1kdEH*vF?EZqd-24N z6(#l`ZU~Oquv;|gW1qv06<_qPpTI4Sv>~1cP1Jr-IT03tb>aC|Renf7 zZ4SRb1!1MPbuy`2c8hIU7p&}Dvwzq^_X4v zQ#uM}^zQ@HM`o1Cx*pvsW*vGI`yH$9n7+Dx^@jHh>mNWWKaaUn6!iji$5+rN_L4XB zL^Sc)!yi?ex(BvPUb4`>nv}!pCfRrHu!lLSHe2=4 z9HYkdqlHyjUe=jHYXyEqU);s40spIU?UjHd?V}~1RU6(~cGmpWoH4>10~hnti^M50 znPz>UVV}3fJ%C!@Jfwl{$08o(!cA`fsvO{)7mIVEqvipG54%|@xyHgHqYVxxJcrx{ zk0;oS>Z4nulV{#D=N08Id=2$6Z4ya@G}*1`XFe7}W81Z*pY(&aP?V%t{lCGqDpgQw znKIIK*C|o8{dc|2Ll503&3bh5H#En52a3ScX(k9~{hmGCB%Q6M(ih1eD>Ui>go56M-0=ea3!cPmwxXZR340JeuD;g57N#-^e= z&kJiDbJ_itGQsRf8*I!ZX(-7yZz$>#*p;cJf)sX>iEnb9R<1*NibjWiqd7Bc4r^t%+OPiNgk6|tZ=-z@0Cj320od^kik1rWc7ds@ zWRjTLFB#vDCYkHunVWW}cYF@~j$H1^J*??aO7ALA7i;hxXB;NX0r>Kki%{?0YI@&hr zqfZ*yRfT1WO4mwzM3V=JYXUI5lp&L$d`4QpjmA;DRMJ2nF4eX#4k%rM_L!x{Sal2> zv@6p23j72N`B=ewhf><|lgA^2&i-Wh7^!5Pl~^4ZADi{Vm@Rq)Dr%YuOD|iZBlRGkqK-M$ zN-S)-7zV~W_E5pzjfH5r^J|mT#J|I#YonjU+Asg0<@(FdyH;Nbw-~mUB%1~FxgPkc zK%kM6ZtOyFdD8W&MAXI9**m8o_4aT5L*vUz;d0B=TOX$Zm-6u#WHc|g2>}>+DOKLVQ)Y8Z9 zL9kr`Kg|BJ?&xA}B#Y7uD{H1&sUMv^1trx`f80OsY^bGQBA`tia6|_7N|6D7Q|x1k zpy>i}QhR|PNzTW69hJe>_dLa>1{*U>OTtUC*ls9*iJlTUKK z-}ZZtMe!^H>Z1t?Ip@e&#mL#jSce0(fzS5Ex;&_HHhC1CfK6US1+%|%{EXWNOXGrj zl^8PFOIE)IBWjpv@};_*RP~Dxyh!_5ok2vNV6Y2Mj#Mv|qyuuMFG}5rOh|%>S%5t& zRNiJO@RP$ta0UhE2$sp~iN_CkKVCWN_NQB|oU|<}D{9<&Xrh2wy;teEY!J)=YW8!h zRY=#(wsqWpp@&@rTgP9T=$?gE+ZfSU%622O+)=GQmCFo3)L{jd3CkE|;-7aa7w01z z;KlDFB15>rM1X2dOv|v}e%-!0;_CF<6PA&_HK@=^xQq#4Ya$u^r8;2SA7vAw*o3ab z+hw7jJ?a)G<&Lg!OpA^QFMUx_Q64=0tjn-_KMeE-(`m3YTvNFKFb~8+EKRG1=IO~` z$rwW}?(GQHt;%A|VCTyol!>v1eZZqBac@8nM9H08uw%py3GH`X!Sb*6HG^gh_ zm1g+FTAH?-h-WgjBwV(n&;?BXlTlMZQXyT7cX-u3eH$8LVUVl2+1R3`QY$C&qW3bv zL=Q;=6R*UnDzokqk?`V4$H~~INY;uqWu_Z7K|Mfr`b$z%nofBuB;4hEYi=y;^2yL` z=__Q9x+(9DyEn8kYOYsB6!I!8e|9vLIa4&^rgYRB&oC9pg0F5EFz?%R>JD{POJU&Jh zowKhj#)<`7z<^&akaRaZf=0e+1+08)$|a2ZgmxhG5cR__So%dc(Ok>y)DMtkFr!Fs zr}PR6q&Y$HR8v-@qE|pxazh(ibj!)@k}liZ z6h5taVt)M1$a(4Z*?i}upoYR`VCx4uR#7-sur=hq&wMw$Xs4qv5Auvy5ae^27hR58 zY~&LjsuzpTD3}wF48F3&R!lmHbb(~OaZ^3=4J%4>WX$o(_r#On#KU(k@vOFpOMBkd@V-#`>IcCnSEN*#@aNgH|8jAB_vO;;i_e;~BkjWe?MW*32eWt?N%zzE zXFM6~K?4y8s3skys^2^k`08; zAlco1+Suz3$94R?_1PQoo-HqbtMC0Ei?Ph6#MKB4IgJr9_|WBuJoko7EWS#ALY$YJ zmmbg^%T`GlTEivF=|DBwQJ+hCTN7)tOKG>Z^N58Fj0?6B5!zq}hUt^-~~wd0Y{+P+-N( z>B(btBe4eLuIY6T#H!)7yx~DZB;_?P2|VFPevbYv>;cqqiwF4;6SQN{8|*O1Ki#M6 zC;adSYp#mKpRdco)mZAkqTIfChVtcU*psNXt?gUl0a6;_N z;Ez^-)XaV{1iFX#&uehmg)I4Qhvdh`70yXctV??Lk;Z}>YKS$_N{zfSG-vv)5*ReRW60bcQ##dQB16{aCqWsg03QQMSU{0LqmmU`A9R1_?;kF`$604C4YekBd~*icO}>ZnyqVc8sk~ux#TW-%Ref3(qc=Y zYvq;8@~!eNQVjypv))-xGAPNoRZO*1>qLK!S zx!(Q5#hvsch+-XVv_#3_Pmw=i-o~Xh4K;**kUMU?Ztok3c#nVj>o7&FsX`X_JS=V} z)mU>6vzoLQdVNOE=&MhERNOQQ|0k~Fcs(s3aJ?Q)fRziz+I|9G^t`wzzUF2y6-=W} z6G{qSnzuq-P<|`~|L(=)uW@S?d3w{IfJ-_ZiWU`TC%1Ql)R`9UE|&ct5vPA<8l%`A*J?3@gzNmV|0yzY#l0)mS6r|E zm>OgC?|YV!azRAl&4?v|zXP9}s-FX;1p8_& zJ#Q8h=l+OyO5S{lebx2~d-t$DVxCT z3AXpx_b{fEJ3DIN(EM=TTUa-1L`>ZR(_`?$^V%=bD>X5tV`Tkk?HR)rYmuR zV043y_J$0-KZJJPTPf{Z*}q}@NP^vMZj-}EMF~Y+W{wBPPCa3zp#T*bhYNG_68!uG z+3AJ?B8(ksTi^Tfx5%oXGn2<#5g|1x+AK2GM3!4d(7Q{`QtjgGbp#hdoLgsFX+q+r z+v&P>M~3k(#no_XQ|nl@OY{lWNxqTPE|Aox24Ad%3Ci=6`nTBqF2d}uOTuwKA`Wzp zS$r;CXOxXpKjN3MCZ_=U-*oLt;CQH?d3M_pV_ZMH=OluzZU+h~>~n-Hnn}v%h7UT- zIl9T@$*VnH>~9#}cgs#)T?%+s*QYO~fdIfIcM>FvF}*#Rh+hIl8(0Z{+`B7uWTEV? z$xgRTj||r%JEO+(%SENki9HbNidB^62dR&CqS7oXuEl)WfI?b9a5X)QZWX)2CT{6X zruyAOc+uEeNs$&FR+&QsQD?41;Ym&S2D5!T;qa?DM?otonA6aSfF0C%f0ck{3A5!)6#7A{cgaWVgtZ& z@;T+zkTv%LBK{Lu_a^0)kVO*bUed?j@Tgs$A!1vpEV0zWEuzX^d+9uFcoAR_1QJFI z$@;WZcS)N4Im_w^rpQzLOd9&KTiL0s(8RzR8K@Puv+e^@_u_DyE-kMObuawgajstD z^5GnsbasO^WPaoHIqKSAp`Fc;eC70)8Su!J3>?2iO*SsBqkxINcsp!LrhTeNa@ze3PlqB zTE!w0ap+^TuqEL72S3T{k~jP+_ni4SQdGY>fVpqrSlI0PKV6S>D!suvfN%;Eoq>bx z3qNf5x$<<~kej$#e0*B4MOFJO>Z#JGbm-S-KLmGX^k^EKg*JWj3n~m*hOSS6j}$B= zkQ_rD@vAjT_MiEgr3=1Yq>8Gj(ZXx=@7UU2BE#TwXytFv7r|=9TWv6p-7z=~|1f0) zkBM(Ike$lRQ|)@-JK%hpg|osf)bl6Kg1N zKRaYmXEG-->HI<9B{BW1Q})~?LWp=GlsFMZx|ZMge;85e$j73@ecJ`Cjje;IOlXu& zAc=5M9?>Sk?!>qbu>1R~3cW^C?&hCO6NLmRC(jLs7mTFuwyNIiqA2-fTQJtqWNxI< z%^h(_s}sEq3P7kmKF2(~NAcIDb(PX*EJ4qEA<>}i6{#?G!>?T;CAm8Cb8#{_@qAh( zvaN-jyn|Ar*>zaMpubpSgOG}|sUbc2_McrDM@POZE_ zc}=cJzsEE^itY0u9T>U|!U>VcEyt80gO9au<#g^i^X@~N5~U~b_CCkssH;%OK+pxK zcmq~qACObekspt-r=l1?8rJiS8sd5!S#vxMpsg#ERRS=L=o+WUC~xV#%yO57*6wV2A&4&%&^J~b!C=&ud&bOly@4=f)k)BW6&}TC#H*=ySZ8+Lbp~gT zOGkjImO&hv5$MVYtXeL6I|nLVZ8@bPA?aQ znHod@l35tR>G8jiZ-_|Z467I$J3Ll(UcAv~6@y`!>-#;3c2_yY+()8Y_G5&4yMe+| zVyD1$G7nX3qfpvk-9J+h{( zz(O+Suo)GVi|($M*C4RNwYvc7fV)iAYu$>Nb=sO)%j4&&71#Tk?swY*TQ7f<6cl}t zv!6ruTTC72`H~!C)+6CeD4mG=*h}lYe4Yqq2?xf{)+SbTC4W{_85Pjd!BdIJ=9aI{ zyrCp5tTU`_Z89V3KL1ZE;VpP@Pji1Xr9J-L)cY7)KZoYqVNEyOG(}Oq*x|@?NcTQf zU@TYUjI=0b7Ktfd{~a?(l9OXL{~@t*WCc80ZAZ=BUjo31zBoH@EvyxzsPl?xUe@6` z4@>*YUYh)TexH$~2TY=7#h}HA(KLukgrD%2F|$14@l^cpVS{)V_ms)wF_m!UAJU3)6W>b@ zX3}A5R$%;o6Ot?jsu6fwKA5M&zY4gXTGtzH4bdgg%Kr0?42D8BH(Ew+-?r$t z?XkgJA=OW0A&(!=)B7j=@vK3x*TswEy)--4yS{jT9Xh;rv`AZO%x&CtGu}cUOx;*s zpqdYXwO{IZS6J*tZ%ZaCl`)%6#kkUk5DE~nFG zCjurUKr!-V)1URV?i~POPcTT=NX>q8y6{KxssXtw3)rj2iapyYs$p1iR%#a zkoQhR3{7va!rk?N_EBAIiHYpbN_kG`7(qeoj_WAyzkRa>GNj-ngC+IUQEuTyad$nM zDrOrmtQgCWao}tU8*&62?wGX&ghTt=X+3=0#6JsbHd`)&?V6sqA<`){>Q&hYxevXq zFG#~gqv{Cc{Dun5IWfoF154`j`2{HeN-L6g`vj=OeJeaFS207h@wP`^1O+`*VT0UE zn5*XpS{!XWO3}##Jqn8|Uc>$(%Jf(v;#%YK&pS@zFQVxApLVn-%fR`$$9mvKQlbI% znx$XJ;mQ?e(IJw-vdFB(TK7F&CpiJ>@48Rv9vO3+sxTxi^k)?{qUyXmWB28<&&T_h z->@nHksq-@WvWf3_c7QtTPzyzgI7l@gLF3#%w^6NhIKS+E%Hk>R2jw9bb2bH1iM*> zwYUxXz)|lX0SiQ7I?AjHz*Jv(e;5)MWjkjrm4n; zFl{evMx#Nk17+;hdAb;?YdB*4D_2_V`fNOYeDHzp2|p(?KsGd#F6r#cS@|FgM7DZ? z@`#T`qki4RY(lSloM{%&>g&f!QiJ6W_^SM0D~!Hfgz}o1%~Xp)*A1Q)3E{R`16kg- z=hMS!zRu9eDPzE!=HppRemyRZQ?(~NVHMh%sxE;$?QM|EL9ShKL_i zaz9|t?0&h`%i&(7Re*Q#D?5A%+<9qw1(#Fbq8$~KN9C?q-B`B1x?6MQcZ^TbXy_0G zxa?ZnJfRL{;BR%V*HEWYZx`D}-mx}=i^G@H*s3mD7!zq|z*|ECXa{Vw$%{|a%7Z07 zfDhnJ@QvRh$5OX&$cG!Ub+oH%B{4PYVIN^fJ)C!a2~;=tp-E;M$E!Z>*W4{LfRWga z^BEUAgfq&gjG*4=RdrCtolYBkkUvg=4e`VJQr=$%4w-81VywOsnZ(xQuNwmtiF@_l zz2Wsd#!$6GJ9&Z@J%iP8<&$5Z#Kypz%do@tfzWZR%~WE_c|yt}n8R%kKPv+sIkuSvt3^og*&nkhxp?jLhi5cxgYt~tPv706HNd6z zrE=^c%vxqrA>>SnjZDCkjZ?rnLAHj%z9KC3Iu;z<{NQOU<$D!9-fjey+~zN0VhM51 zjQaa+SzhKIk8Wrex{gT!to)uEN(4``=!aU-`y*~I?1szh3!{Udhl8E3eE~Fqs5Todoro{ddlfcN)&|Y6WAmI%)r*#>rQI>AF8ASi&Y|dFD$N*P{Wn)l z*4QEk?ENwSa+6g*^F|Wpftt`eFG7?HD}D*$T}SNer3a|NR3Hf%s`o`8?b%-gNYZ6_ zd2_u1CYMJeTl}zqzimIVnQ6UPU6h)XE8hr_kBdDM+UN?KB8#bOuD_qo1k|)Eq0(m+ zMME)m02#$B*1Rs*qX&jQT5x#1_UL#f>(R$F+qEL1}z9fqb`gtIz5tA$g`* z){q9Jj7O9CZsgh=Vza>dV(jmfwa$oB6!wb^;{-OqKYoWp^&Ndf8ioZPz}-We4U{SI zB=^x~%hvl(-KuXtQ*k4P%IYO=3y(;dm z1tu0Z*W+c{r0FyngIA(F9E|)%o||gdZKz(sT~HH<22Cc+kl&CF2q}em!Z+Tc*Nw5v zrx$A+(bqO$StxVG6;gcaAXqf5;8vQ3Oo_#uaPf*y(b1Hi;y^p>P{pz@kYp>kO(ej` zdiD=VEYr2!u%8cRB0VO$Oyd9y5-{Q5mdIHra~D>7^;;o!l{4&)D~u~ry5Ynks@UrB zN0=zTO=c3xMQ(?=I zTbBvOCbG*{4jt`|8SzVm_AQyWW?r(h*dZ2>DWj}aj4D`{+vbl^OrCcIuB@MReapX# z44SO9xu$QOpbqRhNC_Ast3~Zh^>IVZ2L7O4KrFRB?Qsqt9;7(F(VPkIs2_HF`AzqHdXrdHHA(qy@0nO@{zTniu-CP@p?0^;BJ@7m!0greD&vMNCVj$J)CfqTAVg)C zB_d1Mk~`KSVpxQ*C<>`S5|Rk1S&Z3ke~12_r}U3LeIU8Zd7tw-ujSNzeQY~+|0hc1 zQO=kiOJ6%x)?;U0@Hhy}o(F-(gkIB%vN9U=;P5He_6@CH&@%kmXm?w}e*Zkg*>lBD z$zcM*1;e>Vw%G+nSh4QrrOOFBlaZpBC=I>zMbJi5m%|INs$_=&jFRc@ z@9Yw9ojr3mv(Xe*tKIb^Cb>qW7W|r z#bbKsGLBVTG2si&5jH(*F^JH)CDo^fR!vwB46M}mJh&JTO9@q;`6E}g)y~RbIt6bE zOThMJn?4$CSrYk6x$d~Gj7^TANHQfr)*okfg=#yWn65Uw6J}{LiZ?&=Qc0u1`J^@B$dDjR zCN6Jczf|VqD)Zb4tD(jQ#+9jQo}1;imae~8QZ^CcpO!|L%lhQYW`38>3VwPtSM1fR zOiWNX%SH@Pjym3kE+klHc(PNgc?IaN!jzKvGB6NYb(|a+CM^xCvl2-lP5}Z4G<0pX ziVBD17^6-Fb}g2{1^Rgb@6+0rQTk1R9eQi}X> z?uU=t?~*Hx!fiy7pXKp=a%doE&`Cqg1?oaW9B^XzMi2tO4FwNokJ$)DG$W37m+a}y zEjpW3Z@-P}sGQhlIvPD8i6*I{_t}_hhnO#BiX_8UNi9=&btHYzgSKKOcnooFu`UZ7 z-_X`_^(3zV>Mg~v%h$;VGRjO*@I4nr>A7*;G5>%Qhi{CW`O7Xdfszh_@zHoNmI(@+) z3Fat|ynF=7(DEupEbkfjsoL2Xa{TJT$F7sq@7TLBvM(|k&wlib8OCS<|7<_1Su)iN z5*RjdvPW^xxw=_)?`BghdGp_oak;4hN7!Fc4=k+G}=q5PaOyKztN?43Pxy$`a zU4#EP8y(b3x!I^%Z9%7K1%11q+_di{)f(x9d;1b`mRldU1AMV9aALgJ5dwZN#wR?7 zq^Xc$OQF#p$b5tNDJ`{@njqy8_c;$VB0RGiJlxixWUEn0vc5tW_e5X}ui1s4(Q06~ z<@eNd*(VJ=FMSQ1Y^-`x6fY&kW30%=;pwXSrB#ZL9k_;zh+#pKjjB7=*8zUZ4PqVA zrVnylptDYu6s`6hEc|UaWo_myO}Bfo3mEc$ao{-ok)CbSycfhLKun+&i%eJefa{fP zXwN+|w6GrDgsn0?Si6#35y3?;_8r=fvy5;wM`Sk*Xhmax^kyi*tmX$%4+z#tvG)|I zZgtyT_>O+A#tz zJ$vi${WMjyhFg59$n-b*)|P``ARz~5PNKAF+{*+r({3o1})+}qviLR6Jrwm z{Gxz%5={G{MMvI4q|dpL^l>d$Rxg7%;i8xOhZkI$OFoKXnQMQ!-N9ZNUu=~_T$?{| z)FFsssUZ*9)YUi(a{j?;B_+`Eet2O~W_FREUQ6=gPt|!|4*g+}mTFU_|0M7r{VxNv z2jKDyL(WsmRx;05*6T#YzKMM9Z#z)o3eeIM0U(sBMNY>~7}T&SKW0~)_M<@`KW&xl zGp@8B?aROeG^L!>6(wb=%oKjDX~nOf#9t&FAVh-cQCEJive!W!LjfnF6id5>Z@CFK z&>vm_tkn7J-a#-E>#(med4!ny_&yaQnr=w-2Gr6NxX%tTgwDeY%f!Bc?}EvpfpkXQ z+y?)Ub6o35`$t{MIYUJYEAO@xJj(?ihYJ?#;gz+|^y>aSx_-}JMIva~$2J#Odr6>8 zth2||f(mwhO=g#Ws<#-0@iD{V8Qpy^cy8D+kM~o3C@NK3k`C^sTVK&P2ht zB|F2Yk|TY9@w@rSN$~PF(hf&vMWzrUhXS3!!&cB$JZ9pIZO$DsiF(YE+3rAZ4?HdB zux9PMcO4!aePl`6fhIPo--oojtOMdeCNcF~nXY}B7iM9Obj=uBks@>AiYMZS^rRaGC0tL-@IQaMHwGOPNH0kA>`tG^Ra?Xb~_E=k?t4a~@zN z{GFk+fz5_ZnfXQ;h@%*snztAz*_i?^p88U|jjXluZs^W?uX*m(UcG-0Vo2-#poJOs zEwtU5q!h7)R5WEV+q_r@u)ba@pHa$W`!UbJFrNM117?T?wA}YVSqQFddcy-NbPg}%zpzbaJY1U7(${L zGAc4YbtiN!0zV-eW|2PbBCj_I9A@ng{iL=a3G%GLx0Gv^#+m^0OIkwi(8$^MbgH4R zabqdh+%!sq!>@#(y(THPPqI7|j9Y4r{&!R`f6BT{>RT?lWQj*+{8{om$9ek{doJhN$UF-5;xC z3P_q)8G$%^Eak4QC7I`kN62#E=GBvMrEZ4xlkf7F>mYPD!Zq4saf|*(-_#Myv~^9T zqUd4^VUFOI=zh)ANS@1V3ZDdhZ?Dh)fBcrOtR2JTlM%Mv3m1%+j8~E?yZEd7yK@Si zUhmfl8;pL_E%{v~MpU;>X4UT3H?S(Dr;V<@4?J609PaC5Mfe4vv=8Fq#v%8HijTulX_9WciTr9uhvI^bq+W#4D z(9CGp_!kiktB8hYa~*PXYvk67*Mu6UnDRixa$Ii#*_phf z+vG8Fkw^kc)2nU}@0~1PR0sog1X>jBk6?b$v9z+P9v$$bRgO{@78c6IsEey#@i2g{ zUt9Yo>Llvk5AMt`8yO4xX_=-o2WoXDY4daHsqZ`Uhh=|sI~6Uh=rom9@G6$?qEp9k z4bsT0Xrl2Cw07wnxZ=_ESGR6%W*NZG6Jjr*x!%aNC4V7Tsn+Icb4S6-1Q2aVZmozg za0oGN;+ExkE`bxs;g65&unZNnS|IUxK-EJ2`1u4m3TZyq5Kl`}HH|!Ie>5j_+y&0p zR~a|!f|L^_|BbnR|B;jDA_zcV6|eW+Lq7UlKl)2Yk50+hXLpVumX$?nC!Y#X*1q^l&NOle(dRZ*8TGNnFRj#X)bU$nHZD~XH@=WiWi(WVPPr_-7kuXyqbK>?XdP#s2C>HRBP{e z$ubG)C76Tdjze)ecbB3uyqho=P4GAItCr^vDl$DN?EvzkT}8+gV;*#MSn1%Pjj`9J zpVi0p@{_Og2p4J|v&y_D`PX#YLUnhW8{0n5Y$TD@8;e1M3^x>m<-P&IQww~HUTRPc ztH1QP=E`l$BQ17)K0P`kbolqH)0BIIpYn^&Vv3*63!4-qm@mw|blCQ*ZL=_$4YzAj zTHTzr(&?0R)SDa>$bRU(yF3@B*L}>BC#<@dW{LzAzDM9B6{d`}SpU)IQTlx+p!$5a zr8m|5;>2j#{apW!{B5h~gixJ;qs9cUaf=y!8+GHJO+R{#Qa~x1`mSr}c1x~Ce)N}a zz4tduPm`X@>v{FALB3fkku5S~XUPRQy!>$|jLddG^tzWxiLry9xs{2kFK1L);(_38K#VSF!pYV|;atZ>lj5JlP*_b!{VB6Cs4s zMv}?kELf3HTRI)C1$mbB6eB83Ygc#%58m`9RlmXa#4&#zqoL2ND~}Z$7?-0q0Ckor z{0LkzX4Ti{F;`2KOg(g8wMb*6M1i~XR3^?dn^lk)$Wvru12Aq*^G3ojO z`q>BJBJ=YKzJ3~Di1VUBTSha3tl|)EPEf8}M)hH*)BA(SOnD!hgV&{geeYyo_Z%+A z!v!&CNCYDah@y3urB!>bBrEk;WmM)nk8|UiC$u6zbM8S*u)#o?jH-emL6FtYwqsRA zCwY1!0o`i@zuIhHPM%wBis4x79qTJzJgj;CQn?I_2E~z?@fa;-BV&jfhCzPb|BbrV zq?5k8n7n3R>TyO(RrF*HdmHWh<<>dtZx7J(R(M**E%H!#PXXcxUb{QID$=t#KIg}~ zTI>s|61`@29B>nrC1$Kc1bQD(Kdy(y!a`UOp09n&f66T`4b-|{T6aZX)|>Tjrhla$ zyn@J^6^`a&;OnP3;K6SwM+^3irl3DaLm9{EWZ3m}m6+dQ870I&l1OG5M#& zcp?673mw+!b(w)^-=NVBNc~;)@V>C%M_gZdvx-(LVsnlv&z<9YdfakdbMrXUp9<)g zjk@kN*g8!j>P`9$tQo-T3jpDKf#iow#f`btXV28p3idHc)w1E^BlU6Z_hE2hhYQvq zdKdxHP3T7p<=ru>po)6K-&u1H4^VhurIPEyliYsvcX4{Ps&xN&{?^lnxpPlX%bJS_ zYVVcpy^0%HCmDQnBw)^U#?l7Qqx?(M^DO#|P&jq8_^BzXv3uiqTKNM|GvCPI&<_HxoNSa(k)|C)K*fx@V$r%~e`71qYln!x2Z%B4EKpNUT z(vYoMVq|>KK}X5=uM%q%?>IhHV^-8)D0BM_nOyAG(YG;<){hpw+-`-z&(9h*r^+}Z zBF>gj!&-jY_9VL|u6{BzpY#EuCf4hbdzoDAxEP%0yJL!Ba0m+5JiZ_c2-QB)jQ1g& zb0$|tWks!jf^$Es7B}S_ePHUY0{!`E$F~%bdJhO{dW={fYgVu~tbJIQj0UdhTumbP3w-K(%+Tb6wDvbtzQ&?WtjCYeWuB|e zP$b(2^6!hAC&NM08c3Xaq#)Uq;joqc1v1C|ESI${4UH91Vb;t+|?(rKgQCQ!yd*I^LaNebX?R4TE@oySz+Ip z@nI`p24yr<#~SelJER)|O2j&!;gyU=eEyPmBnt%Ee)@P&PpwT7yo}T^O5kl-I_n)| z$(WTtbF;4YKUK-zuis?tu>=8VfM&p1)PZ{izh7l6nI-SS57A`mfaVT=r}+fE>&rI6 zNNd3&oo-5Ed<4K?hlBK8qfa9;Du|@JOeD9t(6^M2{-=Yj(NNwSib&_|1TY} zKgX09@W=_*DD3=KwBr7lDC;MwPI>+&&w!Bd^_?86Sr19fuO2WI$RzZIqrQ~gEaL#O z$H>*Ld5UtT4qKYWHg;-T?<7~zsQX6Ln>4~=hjFRy7<*yOmV_c1(rE6D$5A-uhHQ2$ zuAZRRk7&q|Vg0$GumjngOI3t}Pgi%@1mj(JrKzH-KGmZNZcSkCyP!q1w9IUYd! zyVkO1R`Acq6T`^ib%<4_gU4~Z$>*}2eO+l?4R{7Y7LMT>)R@g~ToG&VN~WmK?hA#G zZ26z|)1oUS!;HBKBdjI_1YQuGcRbD* zAVYTG0mlC9lJe&?l_(Q6=ZovTD)IXM|Fh1^Ycs0QthJ?eJo6LCINXBGM$~EXA9nSH zcp~{;H>H#<6E9;RSL=Rmh?eK7o4x$CBK%k9O-RSp=~br#XK<(YZ-eP+Ptcno_D8fo z*I&6Jf6v&89Gvpii^8nr7~(5y&`{B|dZZ}E{yKL7ki1E(i!~Cg+03#pzGEyVkDj8| z*SB2x=k$0;S56>#IHp_(z(8>uDnX`DsQEPTOPDRN4d^P7T>*2XKKsL5tCa;%YA<@xy1oyw*vWz+L2#TBA;W>i3! z%#5kS=9&WFe~Qlzc7UT}SG|)&teMT=c>Y{>rq|>{qUyqtbbO(+h+uSMb~Pd%$aZ^C z)JQ{f?H(6bDrv0wrh#1myb7F-4o-i&dDDchDgv8Xgq-H|DloE zN8wJzYCmN}iW_wGG1I?JJMRq~adti5{1VE02W}#OLlpWrtTFT+4paHS3PvpBWRj;m z&muP7muQ-F$+UE$gTmt+KV;%W)xo<()B{woO0tgdpw07p3-=KgJ;u4xfKey6NY+!H z>&az_l$)7e`QiO{{f|0ve)#0u&={Wi!45mM_qV~;m5i`(6(iO1i=|B?Yq!5bm(?y^ zLLN?k;rynLeYF3hh1gtW3!h_dIFnh*TPTMbhpX~}QN-0gesp&1KjKRMxHnn1`}Aww z-2y}7zE6YTve?n%X8@pu9Xsr7VCVXjw=qe`;pqDhDV&=-tEbzGhKCl)nA60metj6D z(?*?ghjS|rwznSuuiF7wt;?cEo0lHlAMyYEdB^$8cjw=n(ADQ}owoK%YUkir@(yoB z#&N9y2pt!+c3Ou)RC^6)XdPz#X1Ou5@jHIR@#cpU$({ap_4Q?D zw2K+O!OW;@oUTTU|64?d`j9@B8||T`)_btf!aGJ?&N!}plL*<*_S{4pbE^zQr3ygv z46n{Onsc;EaC+mhx^O?!Hp-apC2Ptw&bS;Z(VK0vDaJhDP@1&~(il!^139sVl9=kJ z45;=0G|(3uJnq6Sy{%RcYDoTo{h`G!Y8~RF^FB1Z?$F=?%@pUhG9m*)i%I3(D~dhp zZGigG`n-0I>zF*Tx#C1=aECY_aY}ZF@$}9`@?^IHO>?Daf;V(iZc(%xg7&J%xX*d5 z4-lKTq)dzrP~801wcT7eemQzS(L3x|4jzL7O0)srRv-@6@+>n6vctI*G<@dic8X6i zp=g8N?aCJ!97AUL=V;$t8~VRkUW4mkU-G<7-_Uc(*Pj*FMf55I5*-%s#$!s;b`c~s zBa^rR|JBhX?nO!`4r6gObNJbgrcbg^;w_X9{vf_L-W0 z3g|z$l6UND@UM794>N%?GCSWynapgfb!*q2C|u&Fc=ZS`bg0}U2M!{h3fE}9lx&jA zkK?t*^P-lEp=PV;IWrsFf1-=u;oEEu}4 zJI<1Dnod84e&BN%iR|Rn zJJbWM()0l(q##F42R~__sM{_ zG0Y0{@%>`-e?@hdq{vQ4-U|si$A+i6m8~{_jrRR+P}-WSfL$<4!p+@BVWRRVC5f{O zWjDNLZZp_J`T%=e9;Tln9y-`u;-l11Uk!qHSgUvuaehq%8mY0-xYy`sq#1*x-f>@z zZ63+C%2XUWHrgRltnjQKw6)*5ccgF%(n;38DW3V+HZ$rk4?l96x{jz7 z=;Zb8nE4uzNn!DBCDICE#W6b7x%5uO7)*{F=#Unt$UXNG83~q=5vms-lB>Ce z&3iVR-V_DoSl~wZ<-$pOnKG5Vvi6B9j|c>|RJHaCvLk+c4zx-6#1K(HXXnMRy7b+c z@^vCu>S?wapnfjW-yvI3uO1S{YAo+|39gikb{#cEc_WhyB~=oDvjFwq?5L#}-w(=r z*x6TrP6UPRxny6OjNHHUo3VgH!$?SYiY{d{r2*QPV7$<_8GW0ehWX}vt#r`XgASIs zfS2w??=KAB*v?#GSK$F4oCW#=6-P=Rt8F1^t zr2m{RFiT*=gTSq^#TSqZwhX8+j6k?iq#r=DL(^(H`zg0;lrho0$DI2@-rZ-I5>FHn z7BJXrgQSpBPl0*;cXT%+K#{rbUHh>t8LM_e^{o3`UXNF9hM>OdcQbVZPFJJ>kd2`g`f@QHqpV5-4hpC z4l7RN$^M1?Ij;BO-ULs`r+ESNI$Eal7c&1iT^Vc@mBVA1Ajk6kbXlb7Oh6Kxh?F2P zItc=<)!NXK?7|u&!$y=#*czQQF~9~L7u&PtmEmYE>KX}3pUj_2M&F2Yq0nTQ=d9ry zz!!F*^xI&aWHv$G&6UXub=KhWtTn%su}Pxv;V{S+!cAMT=_m2lk;O0bqh-O;bKzT! z$1S&;E^nm#mZ1ggKsN#z=M)3-s$Y)+Kud$@J4!!Kb|8;_?|&LHVG&_)DgJ|@K@0>-| z$38(pyBdiu#OG~XtT=DsU(lL4>T)dHiyFfbtq12{G`m4GjD0X&bdc`7E0hBbac0X& zIyEHn5+=P%JWRf14L=UpceYwCDpr}diO9Q+>tVf$pVe?GvMLor{Yu}O?sDKLjqwmcz^CNAfoTfw7CQJ`?XdeP?wVbFck1y*PJgCr)(sXRqwEfjvT9q z^ntrJlN-!jwZ2VPW~Sm6mN@v2K`E~!`*n)((!FGM<~ooluIEtNN2thw7uJN4BJhLq z;VopRhE8sWhc}tV(yX4Cl8F9@jG5Dz`25oEFd98Ft43Bd`cAN6>^`ej(5(eaOvh>HG$EB(WZ=or@UssP|B#!4;O zh%BU2THc0rl&&ehgbr_J(ga%?L#0)6mfXEi#v7=QwRzgPGNom3=p9@tP&pq`J_>Kt z)03-DT%@Xf?m!}D0uY&Jz?e-9ED@}aw^zZ9;@lKrikv|X-KRA|MFI&RbwRpRK=@gW-BOn7* z2{9b-BE{dlRxk{P^Y>10wR!xQ;0vVDv$d*{W&QTtk(NvJlMS&22H|A{U>-WOGN^j+ zsKhoafsM#LcqKffTNs=};g2F2H6((1eH%P)eL)Pfq3s^`=AVDtYXL>FG}-<~X|MR{ z6v=d}Q5mth!0lo&h^7y1IVQFeBF8v}E@ZlG27TWEi3yD~`2gjH@Zbot&62yhLXPcB zJVT1FNg8@df@no}FJu?2%SLj*&7Bxz_=O8d0*q(3XqM7u%XO+t;!fI$Wa@6(G^w^f zb0MoZ^7;IxMket9QAd2ww~i}N1n5)qnnDq+R74rh7A1UE=Cwc3^h>%tJ~i1jSSNr> zILWeie7_plKTi?ue+@oo;RJu2lM-KLWF6u3;gLmtY)YLk>Lk2UCx+R^i4u}Ug*!F8 zDjvvE-~=d=XxWtFi7CN{4L@%5Nd@~Vu{aw$mZFU6RdwU0iv$DNyl4WY;@-5UTNF7@ z`2VKOXt3Y{)jN0~n}<$G+pTcwE%07FN>%iN#o*h}St=0nB}JH{m%1Twg2$$A(D(@M zk+Nus8J`N-1t?-}O~fW)Ed#*mlUKo}3$qf>IYu1DAN4A^*Ol76sqWfDbpP_B{!SXx zR2`yy3T8N(SRPN$+K~voUa9Yxj_$4r^BRgvbnfA}Eje^>!^rQ~t%rjWK9#7S50j@D z>Uk*DOpFVPY1Z~7JTJcNzy;}?SEmehO4^aM$*Fd&M+6+X8HA8372$1y;mjF8*zh+% zu;j#`eXJoJBUwtITcm?^w8v z?J*xz!_I*i?FuRS_7tP8G*Dx$=gb|HsC+6c8tWNN*a@(rS0Bq=j0Xz4S9;wP%C>;q zx!`H*RA?L4W@;_YIF?{H+OWQq@=CN+V)8SqtS=XdezuvC_a_vV*Jbz>VNSnCY22`M zwE0Cs5#^BgKR=1p-z_2>kQlC+fCm6?*i_EqmwX$Vj}DOWWX4&VW>~9nz*8Srib#AN zwjJALuN}@E}OC;zZ8Mb7yb#iGH7dUIDW>7?N@a&Rs&OC_;)A-3Lgl$ILnCx%JOHU=#rhn=&LqW+~SL zSBtOi9*y$={~osRxaH}v1)H7!Ok?ijc*a~YW%Uic=uTNz-Zasz7qx@IH4&Uqk9HFc zCrhul)o!v(SSrUCHxaH}H)Dq1n4Ypx!N_X6Z{1W)KOB8X>T@S~u3zD+f|f5j7cRf3WcP3OvAT|0naAAcVDSrX$z}3La6~gIs z%dyGy-2uhidYYA2|w6-UTPB;3r$d-7= zX4#2P=}UrCt&Gm@G(4AXo;!`n`S&zvcQ$;U0Oa%dJfB*=M$TW|QZm$^4 z9yE%j-XTat0P(5Gd$eEr3YyW*1ONiBW>2xqO~bD@JJ!ok2Vf*S7{yOY<3{cXN4$p0 ztcO;%i-=X$H_t@Cy@U;^&3hXXcmQCoh-dYdT1sWIX}6NM7JvivGV_e(tg>YlHVSC_C(7JeYM zdLHeKIjlX9TXPc30S5BwjSS=QXwt!vy6K`Zz}7nNa14QHhQv0Tmu38av+Fiz{i34> z^~FRFJNsWsbC`S|o{{bEN;9^0;p zAGM6Sl@D7J{9CN!rtj`QTG|x|t>q?fzk?XfI-7*~gRAZ*Qr1(oVruovVeu+-f-8Ts5XYysqDWVQhPNe97D6xvZ~-S2-r=gm;z|4It9d6 zrX38`B3=N1H?{+g7%(J*`fv;Gn45Qyw)V+~mL4OL_QPqfdFf$-!t>kEsq4FvR&d*a z#fZJ7EPjve6RH?^T7tEnw5x8<9DZ7(NZx)TKJeq)dh$AjIqp5krJt#afGM^lAoM%U zDf=j3P{;L!q(&J}6C(|wI97q@n&;@N=+vLchsVM<b*2 z?((8&lDW-IeTW!AF&MxsXGmmzGAmauCf6;(^B?j~8YCS4>d%T3Q?h8NQ^>Ra4+m?B zi#t36vY-ydzXT8>JVR=jMQ0PFn|e4FOg6a+fmYWw`(>4>h;@THf44pNTQ+J4F86`= z9kK=hs6{~AB8OJIR8oYnxg`mjtUg9uSMJl{nCO!}N5-A#+lqPj@N4Xq^zaifsZ%=j zNCxq_KE9h$jb7)nV*)iOTaE65OdHi1Bi7%FD)N;PzfD|koES87?*Wixq8Q}rc-9*S zGc4KuyIL;u<1}~f9$tg)o(rjz`tTwAE7$z~zeBz@Y7B)(wG;b&8DtFg1$%250%=Od z*L;n2{6-6Ly)q*tPwCNkG6{B(mAY7VB%-EM{TEYpy3F=1ds>}=|Emkc?91H*y{2OEFAg8X+Qc70?EIa-tDq*+{CM0CvSKgW#YaCX9MW} ztweb@WtVY@=CDBsmUJ%PDO+F2-6%aB zbez7k994s7;r(_F?ice2O6n%ay={@vzqFJ|BVEPyK>=-cD}z0!J#$2!iq6C}K`YNU=Je_!OaZ*`zT7ZzD zu6D^q2q=Z~(VO{Gh_rci_W;YeN8OUlXYZwi(9lU_L2(=?F87>*)h4p#H5X2NnKTDM z@MNWsasg(YZ%q~a5rNHnk%|F;^NzGx1h&na@XUVNY(SDoTP$K97<;cOz1+GZ=_uM+ z{eif5`8CnnArpA?_CB({P{N2mitR+@yEkh;YoyB8#c2v6TD0XMvVr7weI%vY`km=M zBty(eLdCiY_=dw1DXs0`>hie61?=}$Oi*PX$c`=*y{CHSC;7@d;mtpyud0Tix_N-J@5~&9wz|} zEbXBwLfhXVt4T{ZSwLEj1vhqZ0(62f2+Ejm0{rD8CKl`kNAYg4(eCzh#tp3p`|Jy% zPnEueq%y!13wrS>K8V)VA`qQTcQ6K}df$zTNR0XFzJ{MapE6zGH`@FhJO_Ig?pnv^ z)M{v4889>5s2y{2-X-c$775Fe^|I#k(&m!Qz_huf|8JS0`6aAgmZmn$nKq`rqD(xh zSaWnE=ktT_rYg#V&VP(broi#@bLbAVmT|6jM!SLBXlWpeGbyvJIq6w4Qky*`bab?# zo=*L%@%>q`PlXDNU6h6P9ig@8ps>YHBPqyM7>ldnpxEn+*VwULX<%dW`~61dR^BEk zLBpU?G3Inr?ztmHi7QI%6nkQ|A9m&ZclE^^rByYq%Sg)`GrtKpfwh697*L7ndl?f3 zDYYorb!oyuQ%h?TRq=2M{CC9MIcyzVr~q1!lX-V-Pc|TpyOWIwQmB8)`VY{S3O%tZ zXFcbJu6Nt94={O+tk`f=^4xTP3iL*43R9z3X;m%rK4$FW68&iM{-eLQSU080yg!S4p8oN?U@QGE zIyJmQ=YV#AUv)GV;6LPQJqHHA(-LPrZZtF;<99AgviD_ArLJu?#DU^zS%F>6r$$z(U)^COy{l$I>gNYaR9bEc^(cuH1);t&h6g*ubfc4`LP zfk`J98a7=`ZWCKqAO^Bw*FGF75wuf6>V<*K);o9b!;f*aptrF*g-6Q?@JIK(gku#O zwo-N6DQ$t68IDZ903+eR0He+9@y=&@0f?W=TXG=@#9y?Y6u&&!;f5Vjn|r?%R#kN`R@j(~MB`B@Ve_0Pr69X08DghOJ84d6L8~ijdqSp?VsD9QL z?~vaic=bFZ3F`g^8tkL2dUQL@^H+Hvdfl)=ceSGYN8;Go7b#HbY%EP8XY8-IFZEl1 zs0IFU!9S}o7+7v~d|=wdVxKOsK1H8;5XaY#R9sNK^;P-0J_|6{_(;s7%0-8R*KA>| z_Hb=l-6A33`;iu^D@ditx>p>$UXSsJ^{)3H!Qwzc@~9;&%$Qf!&POjBz;4)6E|6IV zw1<*nPHNYc{5)`B_KG`Us3ZPWlSuFF7d%?;bm#uXmqW~rtdS0;|3(0^>0vWEAcz~I zjbzgo__R5=Q;c@opBdRSlD@U>OXi-0#giT=3Fhk8xj=C-H~6fqokCo_%vFrTMi=>4 z&)iluvvyPb?B;sgyOrfJb;4#$XzH;vp+c+D*-viubca8Bvmhq+$<$-6%?f!}+#wo2!O?9$e(Xr3FKL`Qo zQ!{g5Ypd?feC)w@V3WKcfr4&Ci=VX_klC8i>OTd|`p#R*rUKYOXpp^tOVc1>2q}Da>*sHhjHs}n(EM4@FVpeFZ(nQ zj+Ir%b#K2r(Mhds{c%_LBq{M;WVCCC_itZtF1_aeg3A`d=r%u{Y`2->PWJw0D&09>rfH4uHgXAiDi^xAm; zvLDg@WWQgG>;-tM{6SL@#hI29jfwUB8&f`wQ-<35Y zxGC2>Utt=^>b7)wn|jr_X02fo`1lb8g$diw@PO9}ka z7x4452F;TXW6sTz9WRsc?;EYMvT_B{w*N}bxL|7~dx2_@FGviibei|iMb04g+M8z8 z*^!3fgVL*%h_J;#Ht5Tq--~QO2Lc)4E^KG#v$O3Z-sD%4&^^P9*&TKdW`x};<6G$( z)_`C&-SLBG-rh(!#A(k@>jab`1A}D^0wEWtBl_8$#Q3xexA~D<zt35$ zKzFrKhPp;|(^VowjZOLAY0JTP`Gfup68;4Q;bt}W z!0);C&v>}%Fe}8e*xejw4KhTPwn0gB9q;2eI_jO4FN|9kvI^Xlg z9p}|A_lM*@cxbk2tvN;LrY`QRx4UvB&#SnORFymtYI9imu^^oKB|H(5x1m}g5Y+qL zaWWX+YX4byM-p&H`FZ4I^I>%P9+dIMk+j@s^6Q*&$1NLZz@Q zt$r@mPfvG0{W)V{%mzMzs0${5bn9$eEp)x!Fot9o8bfVmS1KG7*!GAXbMe8=x_Nli zE{oAV47NM3$?_bFlrNXaOKVf5gT(&2Fh!^)^M|>jFG$Y)zlFR7E#f}2BF=m!wl?LM z*26MWQ3uPZLdwB0wa$osr79{c8EuXM#qtn*xL)%Jgf#utd(xP~MoXh*G=D(!^xcY` z0Sd5g9}av7Y$CHHg7Uui9V}_zhR%%_xGmlMQWSySSkM#e6zB4A(<;KSsmfeQP-75l z_nvRu@!jF#n#8ejw&{ob6nBjZ+`_Jz^8D>8=B7wCJg{xVW(d#8h7d>nI>4FYo@M`d z51CuyedyQmBlla!?{s$Q>dT)cu(zbI;Ys#^F1?0gKsBMZ=uYAH7Fi2iF8P-T6p!uA zNCd^%*fg+upyf6RpT9Z=rs;RABa*k@)hrrC%-p3FfV1KmvL?BqHZC}jBJ`im@Z zHQM`q>pORljyb`UnV;;h_9niEM|?R{uRs5`X8NA{gjyOuTPm!Pt)aLk;>Y2&*bsr~ z0O-j?vQy3~_?^~4O93kfK$+u-M!GR8MKP&}=qmEa7O+Wg*RMX$pL?C|5jV!ApcdCK?v z_S)BH^Iw{{bD7y`XoVk+1OCtm)40?9A^Fd7EkCItA)F~6V_6-bH!OW#t4YSwF5o|a z;QwnH2RtEDbu5>dlPk_Bh1nY4GE>O-*nOLrWUGT!?}RM8Jdb5K0JwbyU+|@{?PD|q zu4SZ%QF~62qVm@lO+@;>6wfL9TS4TmBZy4OmNT4NX(1ZMDOKW43mLuC_z4ag|qM1?0c4rIgK(4h5 zr9*v#vw~-5Zn9;3&p4)vsEttC$7$_r)6(jachX6!GqC5PfelLV|8>{Xh(NvS<)BdVQ<*=ZbPkxOG_>dHIp42$4sbS<=8T zAqIIRNOpMOM2VB}*tra!DAq0ZQ07qpRa4Cpt(EoOD_9j5Jk)Y=MCXkjxESs8=idxz z5r^|A5t42MWLDfoi}s*?qyYa)Ll<0UkcM>fSyT-90dvj@a_T6 zg$Fx*(JE9#DfN6;A)Vj*6b}}+TyfvV+VLtn{Nx|KN|B!Qu`^0f_qgLxuXsWF0)6bi z>0kwCku812*ra*a(~lMG6aC?*P!`#YqF;&rP9m5>&F>O<=w#`23J~1>r9`GD?PUWt zUWvT4JI|By{3^T8X?l{q?vu=Fzad;nelN1XyEkYXpJ-FSlLG72KK%X=m@$uCu_A#K z=wY^-8W&3gtmf5y9wynP)Qzh{Z)|?hG(4;SlKs%7tQDR|NH4kxjmE&&c;cLA)R~j` z*{*ie2!p#Yf0wOHR=Pb0Jy*U<3nwD@_19sE9v%71OBFfRuWrCmUyDm~D&%z~v zoJL9uQwVR~EqCAnT$qEm>sPGAG&`iq9B6bYv$;8I9RUmH7*+)kcVSdZjpf0X#~2Mb zMJ5%HK$1g=bHiC9s)$p8DG1nB`pI}c=)lgoyr^gi_tl&|T4k$Lz)+xluKg zqtv3@MJMEGJOTddBlwBcOkGJxp7lQS>$WQ{%$`^S=q4i4%5ebdD|se1PnI}V)CZzxv&p80s6@~wort_`sAVVN@^ftbvB z=gbj}ME32!Uny5d&$fhxII%Y5PKHgDli`RjMBvhc%-lLOZSAnH!rI&&_O8G<4_9-U z@lv(_52bNA2MeGkvX;7!$&?7i%sr5Jr>%(czK2=mlc2GK)N<+IE;u_t`Vhf+Px+dq z>Udo8VgCqlX)~v;KLfrj1X73MJFJ(3bwGTD9JbeDr0^_A_>G;St;eblrKGR(Ah(gC z56MXXnCsWq)O)XC9U_x(?`f<2AyZf=9BR(3kMzxr9_4ktEt?2`ndB3!`Tt1z^021P zt>1p%>3Cbqu@!Mn>x3c@Q4j|pwGV-+&_4pJ}T+X-tT_jwSMb2j9-_&tH1YM3#JcF z6#oMEhiE(l?25iP5dMA&7Z0~?XTzNL_P&@%>%cSXZ9GVqdqeXYN_1kFqPR5SiYQ}I zRcqVn$*g~yxeA}Epsd4vHi`s$42~=?n*ED9X9tRGgty) zMolC28L6~_Z0$m=6}k^3WjUPRlx7x(?lR!|rr|^$kj`d-&d&d{;Zt90y_P1AFEJ3l zQiyIVV1>-oj<_tA=I>P3bZ}J25x|CeEw#vB@R2dm1{vBqT+`WQ=Bg{3a=Fz@U|eMo z5Z~P;fwJDcC%pT|yP}ka#H`{nCX$v~-RCgjItQUydh8R>D*!jkwkb22^5xCQ_W772 zI-k2bW^5#KP@C{lFD(GqGNiY+nlOc{OyF(T6=IUe38ua!)(5~O(`##_syl5A=PX*~ zlBJSp_9s82M}AD-P=<{xu}zvD{5Mx>Alaj8_v-RHm(nY)H>Z9YK%T9qg$hP1X~VnM z|68m|^(T(M7Sq}sEH+EL|JxJvq=mmtfs@Bu%1^1Mg2vn*s`($>r|1(KzPfk^-t(@N zo|=!a?4B5EoQVw2S!c>kLQ7US6zTaJRpx=NOLYvckPh_wRh4|j|9r5vy?8lEdUvxo z>?yEJ|9S6P7Fwh>@cRR|(4vuVm_D0Y6jjAL??Dx?oH8y0VAM9>(?(?3Dx(ZQ0o_9E zgm3!bQj=RFxOy1Mdh2V zFJ*zjv}aypbEG{1F1-!g{v zyZPFI+^5bW(Rgo~%O{C@fVgJ8Hbe}5!pi*Tz0VWdLHtkwfpT|;o;NLK%xRqA@2eQCvlD)0*hZlG&@}hp z{8O(qDyzp2ye7#g|1Q+Ie5ePi3WlS3&&?PzaKr1d+esip` z={}U98-5~yJ;?MUc9$J~W=rs}Rb={7CM3_5%EZb*qLS6&hZ`uheg+aucF2E_AZkhH zI7rg{dUDUQHyJ#aZzuXof7^ZUXOFIJJ@yx_{8F7aY`6t)P|+AzW)@-+faqV6`iVPC zoq@WujZ&hA*Z8FD=Tt-T0Et_zFvAEc7iSDCfeBo1k?wz9!xek?K%TdQHCpKhzT(g|1+C)DD?B9T;{wrQAtPfA<#ZwjeT54e<$U z4c>kXaF1L_y6%E(=7ydQ+o4J*9H_;rexv}x3A(^ihBsRYTvvnOd z{hSBT$S%}P|0F$;v=Mb_i7a=dwCJlQPK=y1H@Ch;wZhMyfy-?XuqG^aMtU8)d)>wG za*w<)F);7NX3sN$fWwg_uuZImRvD@fkzY)P>4YmN^#^ziuj_XQs-{e5DANP0o2i}= z+*|ltX0Yo1wBM47Ym`+%2)dfo1v+2*lLXy07O((rX2JFBAi*Z|r}&_`xTgBWOcZ{a zEN#mR%nN2SVoR5w)FT2t6S|d{n_PksNEG(5q#KCtN1s4lKKHJTg`GX-#=y^Ncv&)C0H!U2`hV#^k)?Wc|BH%h5RqmpZUg+Zqk-f)%Yr;bDst_Xq z+}EtqeY`ur)8lIU?8aS?OhY$80Dn! zW%i*%B>7h@bT0|cE(&QKc7KNsXAolup){jNeJt0wEo*|dP+*@$xK7$^EtdsG4wPDy zyY;N}Vf@y{MrY2BHlOkf3(Pcq&Q|Q8c$w|cO+`9a!xG)k8SRP5_j+TZ?cm;G5Dtuc zwGqw74-X`65Y@OyKx7OdW(CSVcbaYlgM$Q{tp7;&5uQ5XtJ^jH7q&fqO@Rw)$sJLT zK&6rK|D7uxN$}rb8aT_5_guVg$}r_toAzksB956eO3IY&KMLUhpTP7T-ov}+csrjV zE-+4*`asqmC#CJek0+i5#B{jq04iwJqwSb}{E!Vt(`G^buW>IDh+WCk>Q-b`5^ zM7H7_V3IJ_vun85N_*#sQpxqNbkj>$q`bbGv^cRlp!26ks%^c*Y6nOofM{c|0qR3K zFMAV1Nx)I2-{=BnJ1fl;@q`t_7}vi2D?lMmI7z9ancIeicGYgV&+hnIczp|LKgAl>Ru=z)J@J`O43wNB}sdQk3`_Fq?z3HUpDSG{xZ(S0X+EFmxd@(%M z5DzW5yJT7jQ!d@e_tyKmAJ!at*xb@l7C5Y~(qqXN^s@%!)ea{!il5d|cEp?!SnIjt z!^nX|ZC_o)UcAU&!gr}B!8XFo8vZ*ED|W)bh{Vd%o-E7G-cdwX_$SA^meoZ>4}8`b zpo0B<&9!0%Oip1LAJEUe!-!PKN^tFj6WpswI`+&RxC^gA4%jNEM7#cTsNwEGj_+24R+Ir~1bpH7+= zfAiC;esl4|((jO9JqT1p3V$V%fnNunO^;8}EWh7QQ~)%jL89r&B9E>b(}}su{vfft zc74p+v%2f5q5z*~Z*KVnO<#w}83MjbWV9;KkLUkO1VcN|S4LS#QPk2@=|EJ^Hd~P*>ue%7zHOX8pgzugFFPJc`H{!@qY07{Rn$>V4poVO9SM5AHl| zTf~06s!8(PZ+^g{KsyTQKLOKc>idwlpBKozS1MB_{%ieGGce;V0N&w|ElUku4aM#D zd5-yD)BNwB6;H@V$JDRRRbGOp#KO(=eU#^z90*u{h>z;77jRm(T+l|}t9HDufnMRv zA(7|!i9!`-`D_GqOMD%amzD76Bp4cXrwqeV&beP&e-=-9$k7*9Zn)V-qQW1xm#T)! zjBft8Di7{IoXsOz|G8^fc2}Bd>lET6jauS$YXhDuMV%*;+Nj&6{lEh#;=+9<4O^Rt zFtFELuzbrZocEl}Sv*NgoOF)Zl{Zql^VF%^+sL>Xn7^+8PtKa<{|{_}zgjt3j!b;j zW%xik(aUu9e=8z&i5FNJByy;;+MAr%f%G7RY9OW2Zun$3j=OvB5be`lHnf)2CY}X> z(P;CHFGtOw_MupeL%)E=YL$NDg;Svp?C~X3dW9OU0GVxp>4zJ^C^j-_k=Ha)2sXB$WVAQTT%w-;^Oe zxHxQV!2EG{6C*uP9hQmlUub=&JlE_6T6Gc=D1Ih zuN4!SyML&N(|y<01k}y>;l65x4@Z3m2KD%L=WWRSo*2xOBByUp3iSy(AM%}`P`L{j zv7L-lv4!Jy>Wq(>^m>*K*3YF`elOo76g{E2C?&e9NJ;7VrTRsrzQdBKaAwkM+>*mH zj}n(Og@q4qmKE+H{Y0Aav!Ln%uu1s?mc)nf^S!l0d#?$MN8$#lSx7}jz&CkX@y27R zafy5P)@DJPBa=4M16u>&r(%DwJH66$|MFJ`NByZd*q~+#fCB%tCnnA$F!@Of1`F0E zcYmjQKh=N3^cVP#W0k(j=QQ(?i^}DQ*(bXZuJDK#~kWVNBM<&(n5sj@D4T!f8Hz!Z7#KIR$+cGS5LY=sOTR z^w286#S+o6i;{5LTejO;e7CK`<7t4L?)t4ZE3>#Ly2pL;a`~OVr(%4U&{sV`I@d9( zaHFLs?4z5=?pG6DW$|&Qz3aF6Bdc1UnJ(_Soge0Hr|GVyGz{tYRsoqsgDfwgT$FYrTGvpA2q~M!0_wu zjZW65x?I_vcGJ&*GcnGG_~(=PGcO*Az`6%o(`a`0J9vIns|Dak=Zx~zdcZ%Yed-{` zDsdZ2qgs<|jfSBHgZ-euG*B=gS!a?z#ktpWc=1vf-~KaxwI*HEk89bHosk6U5ZlJO zaerXTngYR~?+XQW{EObYFpRE>_uF-5CGvxkoZ0NFMVL%ZWmy}TUkg_%#nxM zdO}I)=_f^sWS*YGDO{fHcwG^6e#PrOl@#5xX(*&M6k+ueVK6v!bZlWA7ahpKW@aY zkCi{e7JTY2Io8k)9$a%1?SMn^F~Rh>;EAM9ve8dQ@?xbtSI|m*(zTKjpN3lzqBQ4@ z6=8dq1T#;q+<)w!_YM})Lx32UVL?qQHoEr>DtGdNX@lZzDM`vIONmc`c-kFhDaXK| zlVusg24H|n)mG|ItxETyZvTV)S`DK1@#KWJil&3|wk-gg9B6*4#3do6vPykIjczDFw9 z<{h@OxMTe5D_1x0=PyYkUsQcotoo|t7t_)#>mt?XUT)NXMvWTTB98P*$4|Wjt!8T3 z4^_om5@H**Mg^0mI^?Sg%*?Dcljcb?1CDBx@wa0&D0*wy=vN>{Ypi5NL?{$e>?CM$ zNY{;22P!BVgei3jH(E3<+kzTjr{yd*S8&vG{_HRTG^*!#o2(ty=K}4@*O{6$&-Q$?JC+mBQ8ufVaQSJCcX>E!r)6 zP;I#I09U&Btn9-ZpsWB+SE`x97C4diOizcq6pZQl&i>h}r}3lF;qRwL`@jF~<`XSt z*c?0JG^mQ_kW<9aT}KPOLQGs!yIdqho=Dup49&oJVp@$!hngl`UVYmt81`zYRHbVjrEe}gh(6tcc65}Dl^G8) zPrfpOYq0{!gxtO!HhK`MiIvD&WZPGQkpeka=6@rjb83ErAXnS@wA9-AY|`(&FF!t| z#%KouPWsfSXG?d!dZolpQq-?PUYAxh&bc@_jMkG}<0hKPOFFO*8dP6CrzwpVEbTD1 zdPhsGNZGrHZ>RsIC7g5)or&yG2v_h+!9RqPQQ*v|4AJ$LxbxjrrHjzI56fkjs$1Fk zc(&6=7(556vGyr*@KCdM&d3lvla8b`eSU5!pN-D_=`i`12FDVP^<4zPPG%f@{@Z za-%Bq6x0b$%+ZmIu$1b8eGgl(m6(Q?xdbW9iM zX}1N?;5DgH+%+d3)Y(5DO?mSJzfe3Lpdjmuzlr^c=x+?dXCVT4o4KOK&PcN~gl>@S zxxDBe@e8#QH*F{kGq~&?@@aC0ECOsP2s^DOV8e*5Yb~$(J^q;4^B}fiV}XPEHIBMJ zm1%TQ4OSm=0Z!ta zgtHZ}LEjA3F$XIn`5vZy-YW+}GcTnmdg;W8*^Bf8Xa{Vir{LdIoZ|r>?j`~FtxrKZ zA#xEb4|%sXnJy_Al`(n7M&T;zf}gvaFRnIx-SQIT%(Junx{O6xfm;raia#FTBiMFM zkSv@>GDw=(Tw@S`W|-zsY;VH@z;|z#pa^qVTdRx`H0r zSvp=}X71l5cat)v8g>NwjDPHMkJUn7!tKn(9HGV}*?K!G6tvu8{DdTdTf)7D=W+mc zPJG*%RaNTKkZE~Xg&JbbbKuNa=`dDh`=2-W&^}>g;%9pCGe1p50rk3)(cm7qF1%~; zUeSU30{vRe{3CZyf|@VRLcj{}jpySxd%k zmSSD$5+}3xz>uEg%1rwPbBK2-F7UX`JQ7>c zv1P)YvO}>DfQ?Q2fOQ3JA+v!kuzL#BMnb8kZt8bA;j3^(NAxH+w5u$zJZ%HFk*img}CfG$MOWl62@`H=?rbw(cBx;BO+S0Qkd^qA4G7^_{q0#FFdmHe z_MxS;8>MS<*YDVo^--zEn>~TexO$WGR~;R>!!RizTO@A*SY6)}40P?O{;b|&(Ef2Z zC$+BlsLZNi*cTTht{~gD)L6_)^)h7UENy{J5wGVR8Wv6Vto{tO2`-ZhTcvjjL~^`eLqX=_(mY9(Wfuo&S~{BVB+ zqc|zYub5-1?js%dFoGto4A$>l4n}(i)Q@F}EczJY)Pim|{Y&>LnIo)7&}LX$Gp}^8 z-tMX0pa*o5<8Y7--4Tk70KuSXlw5xEKE%%x-0Wp0~ z*pRilF6MclJka&)Mb+hF{h`GKL8)#`e+;xF9C#}vNSuw|6l|h{LfLnYE2I$dz{Hpw zt)5x|7n+Fam#gXB+iWB@b)omBUP|4xGG=lmzaG~6&j}hH#mv#NDXF;Wv|wp}w#^}i-=KVi zzcG+z5ZxC0oWt-g+2$^cj5#`NQ&0I?FK8-sn)27uyu&xVX`zqE57}W%+Pk{}Fj9); z_lSgqtx4RfmPMZ{#QW9v*0!6g5CQNNe(Ir}n3_>cmfz#n&M#mmcUBrawgh~w7wm#x z9)Koz$1p#G=$bqk(_WdiW1@IPE^q#EMg0RmU;z>(7!4Z(Bi)BA3M)+^KBXNm$ha$L z$-i}%rCzyTW;jtudv|A5h}tu&_*&DHh{^oy>;g+S1WRM)A@2`ELB9ntg|iOb`0Zv` z!{yP1%1lG-^<08U{wZ@A@1HRPR|a3PwB?~kAVK@q6G#(`e9E-yN|bOl#0(RR>Ed6} zHj9XCyjo*?kj1*0)V)YB?g71MQV{3>CRgXm*3=z~HxPG5B#kiRM-8*NFU=VgvZAyk^yd=+2uY=!r(;$*Vt{7zr4bN5KH`oK)_7 z7=Tw3ELs1zb3L?Dc1?R-!5HiTQ`p3t5Ko%CxzHA&whiQ(&EAwV~i!U||_fVj}32ypec&WZxUG zmCBIYdG^X?zQsTBxr+p>{$hgqOV8?wF=P1_5#|Rg>V5a=zAyc- z?IdZlevxNTLBIKDyg}wo3hFYqjlK4!?OT4VbmdN;hE>~ONQl}Jre;f>R*>m zo+@xHFz-uok_>lupeXjW^D|+lr`d1%LEw_^8V!=U%7$d-8G`~gI+;*WOy-b&YEjT* zR_2P69D2r`d7rAGq|ojLL)F%SC0j+<=;^xEH~5p*)s~KC>We)WC?M51GHM&kupzH%E*>b5Ib)TqeK;Mi+M8i{Dk)_}X=AFh^W=7!g)i~@5?ao>S$->!d{MbGx&?L1X`+9~lLL*2h=uOFNB5~iTngYD zQcpkf=n~gh`1tQ;$k(!1XP|_uHp|M*c739>4P1+CmOc}ObVCG;#Zg1E{}wJ_HS35; zq+6-mBjlD=oDj6NXeWxT6V;#g@ec{pYRS+(;|+z z*N7<9Vd49sl3UKyF?^ODkqFrl@@f&j4S|^OWfWn-_7_tLsUlhQ?zgj>FmLkcefBP& z78rAZdU?hTdHj7y!|9lBT6Y&;LaLSK%DoEJgQUbX!o>0WOAKHCLdGv+b1=~-!VW-y zONBJ`L|PVPMtY=FoL-u;5{~m=yTs z@Z|ovo*0u2D=mW`sqCC4X9zKEPH7N(rT)i#X4gOO?VDcy_4@sGm6>r%%6Uqm5O1Q|D8kkhVfgKex1a1zkaAq-%z@4=ibIGsbYRNC8ZjiDI&X ztmqSA6X5-_wg5k~QPp4Eaq&kJEwgb2={1<`s33Ez zZ>a*#g`JXWR?2jga$KvbNEz#Txv0ATuq29%&!W>g+o8@`PQwFP8v6t2c2xd(T$!+f zrjyUbmsY$Tr0L5E0b@nO9X~1UG!4MKSer11DUodUeeVxt*~hiCLhGx_r0z)F$;+|< z;^84ZxibMxJqD4dibDhL5)FwL%T+AS;&%DxK~U~pEWlcm`^`i{%RlcqCNE6+(U)9} zQnaO_#xKmYZZ_c^<(+3wIIGd*XfPP`;J+~rrl+KsK_U>2=qBkOB&hwD>G;Ke0d|kq z$@n{zXf3y}$~` z-4Q*1ZCO=u(4X3@cnhi_f&E&DvYV-^DfBvj#{9v3e~z&GXx@Qm{<}_epyTo8`iabl zUnOGUy!lWsRPdizp2M{0GF3#~;Sj7FdzG64D;b)>{LgQ>6|YN7z^l@fr^(JfS0?Rda0ToS z7fHJEj;M;`AXRA6N#<2$o4Tf?=+GfDkENq>^{cuI#tn(_P{W>LZn*{~l&$H+#55*qKgnEeeE*n?R&yge2j&yeF!Ac+^z*{F-yaw}#yF zRKkWW-)bvvFqX77LTgW}Q+)9VOg^Bn3wosNBi3x_FHoA{$z`&ufk&kK6)mKdrcJ$I zJWS}IS4a({N30*(O2>u4h27V-_MG)jM(TS((`QDcxH3#yWX}pCTK|&B(5qdRT9K(t z{xF@pVSWNK&I~gfbxKK910uPPTgKS?k(nV_9{gbAnOHv4Iy#29BE+0q<}@uj*iqko zw56*>Fl1Q1k)sNhh+t?Y71JdV(^af0RKtJQWY2_VYA0r*++uvWcLaN%Ne)8`qy76! z<)nj~4P;dv-4&*2vx-wRoB@F=3h_u{IL@q?FsvUTVCF!0H<}=Ff3Adrq7VTqyYWg zQuHM2^4q4GD4+7Ai&}he6W^Ppu4*yFmf;8gEa83CHKCt!z*aLeaOv87l`_@4ADy8n zkUmN%@m)?x-tQ(0-?Y(q1i3rlypYxSNQJ5ew9s(09haLHLQhCh)053!!ul!In$u%m zk6iwoD1Pvw#~{)#^R}Z78E)wjd5yX{pK{(dToaX`B(KU7(C}s75i%0As;m%frpevw z*Vy65=_ex(toiVpxu0dbmSh-M{|ETv<4VF+N%;!8j8s@}eJL#`?R%Dk-d1vA!kWy6 z{?>^dSHsB8#HPR$uAbMnpJ+3IpLMrf^CW~Dx|=JmfpFK+7{-%JNO*#cmow$Jhov2hq zlpkng9i2e_=sz?-QlDrqdj+mB$VXOP5ABwOW4617u6ymV$Sy!@neT||$gN>yZ0Ha2 zdmo)1AU2T3Nh44mgJg#R6zCp61D9H#j31jwvCbslUTINu4X|j!(g(hZsrApu%9$Qo z1PW+UYL>4tM*Pna;dT~!(CirJ4|nVCH9~qy)#)iFOC9+!kmAEBXRa8kRk%-Z-xq5 zQdU^|kLyRIV{6+-8ysnT_M!KV{a=q{2vsCr_~bWu z)dM6O>z6DP!#V0?QfUny0$1H(9sMS&1us~_y?xxkjJ$Ld)4K(FTAEHUwO9C2G;x$F{cm#68tj&($y3IWh*mj5HNl_Uo#>`trH!&>SdDyFm)lj>IT_9~OU zUH0AuKZD2^#k!VE+aFs;vCgutlgbhKI+W}tSa^<9HHX)t1o2-ZoT*UTEv(#=VCWI!U?VNEokvhTwK%m0_tbo0J{7Hp4 z0^5``lzcl}u@LoJYiF~;Wj&h_r-y(h2*9|OL+E7FK)^!E2Uh*~km7IE?(X)aw@B5A zq7lJZB_t``JI)3#vo9h81PlQQh80Gjq5?F{iSA?8GE=`w*Bbz;Xy!&@3pOAk9f~ax z#iq|0g!kUW=Nb?pUud_MasKI=*sf=QKc&eEh9Zi~zr@wAzOVQr937s8c|pKut$p@`#B+&%X0(4TDi7!{|NAyy%&2B`7b81wEi7{h*$14Sn7VT z4PuxC;1Qx?Gl1E&uaLpxcx=K74!D3xX@##w8>*VLrwTH7ftl;ftq-D;AHZ)Quk6_Y zxX7Lf)5@JMWi?|S7p&dcntRV_Q!`QG#04OWwGn1mZ;3SHP?RsQmFHglw{w8Gg6MZ^ zS>-(bz1CQfju4sO>a=KoX-rGJEWtbcRLyhQL2XnD$mvo-w+I4FVT}!E*3TK=rH|43W?!#{e3o*S!D^i*vBZ6mtTvEDJ24Bx7 z1jwJ;V`6&v;gU$jSv!UyW!oNX%Wx@OkKT=nKr$V8kV(u^V4LG?`pUhGSecSeOw=ZA zi<*jw4)0k%UQ`3K@~*=yB^}DH*wQl_dd8;A_HIdq*!KX*7H-BiqusDr%p`*KBdZ>$ zPuE70z=pgf^H_bN!(?bvowBXN|2J)bqed+S7~!Z7mnSlE;a;*)kmXVEGwVc$aH^?O z`*`i|VNp+N{PvkLmjZ*fi9E#zNar=r2Tf4ZRt2@S;eVDq+Q#R#JywyPGnWH+VES zO;C%;w9v3)Y`8iDIM&kCeA7xc>fHt1`7Zihj83+;Ye`a?LJ$<~J2H}P`Q%>ps774_ z&PMPm^f^`o=&*#FV#_d!<&Umjr_I#qbROw0^Z`;iL3>*t=(>kO?wedPlq5cSb8qqz zH*&4gc>CkqoZ(BP4)%V08Ws1k1yg&W<#R07%oT-L2gj{__p;9P#`743vT>Oir;#ns znJf1&j^`7o*ciJTK&hKzKq{t&-Q#tqemn&pjER*!tBp5Y8(h_zQz^4cE5|#^C}qhB zFU=3K9{9m7Yy<;vw&Vt(d_}P!?beF~o#XtQ54GcZFhneb-6;cXKo_X`L{qfvx!0rA zyA0hv-Jg>X%%`CPa`kgg%_^U35y#QWH^<6=SklWgykPXcmf8x++huo8+%uI0K6`E0^M?F0I=0TRv9oAQ|0)l> zPWwrnaD`v9(G?)7^@_J@1QRw@Mf(hkt{k4q&4b1ocA` zu7Y+p`L_gM9&)dGT`~K$TrarhdLiNzA3V4eC;wpl*3nU_j_jke&?OH7lbwB9{%nk5 z^#b4kr_EP7n+C^UcD9;9xZ;w6I(mrQ#N-t7Mo&XdllLg}u8+mZgm-;QVz|G<<>~Ah zMrpmLgyZuA{GBstTk}+bi-}8agQz8Pi~beL7KbyJ$8vBV1dNgMAiiFp(X+0n8nTxR zzZB#vArEmh93L{d5>)2ng6vy?7T{S zL@{;Vj>gZ_$UYF4%Af8I{1XWH?Xc&(GzFczc^m&dto+X6Oy^g?k)JTVG0|mMyp~9A z(vd}JM2>+=)^}f835E7NlIBcWIPSv(g70koRD^CYSI)~r+)SaS*%4{sCjN%b0AvVu zj`T^WLJASC^?1ll(?^4}zj%BvM_J9a42f_cc%ZT8gp{(~)a2LE$_^yrTL(T{1E?(& zms+WUjO@?a)&uwnn$2$9QueV+L)^&Gmua;KLkZLWgGA$m zI+YreuwV)}u3I_7^!J78jp-t(CTgH(MV`D!J>p-OgUS#uhItQ0%>@vmK0-XOq==>b zG|Zd0ZxeG>$XoiHNLFMzi2O|`dDWHY%NZ^tNXRLc=Oi$kVbXCkOsTmuvGu)~h|`+8bRY7GH(X*zn#u2XjNWS@0d?sSe0*nB(ePDLCT@jU7;uO$;xRadb(BF9 zl_DIN(;dF6=%(q`a1b+@(n+Z!lSaL_h{(88eq!u?sR5ZerJdzBzG)`&iOJ)y4r8Ch z%@u4^Eq!3(1&o|x?op`uf=wrFiB|N?G+Xnm2x&MQ3DcHGQe`OCy?x zlq;&x=+Tyylmm~$-Y|)htl%uqFOfS!XP;}S$QB_{4KqDcV*?(qDjlq2Y`hNjGVP(k zgA|Bu0s-$aJt$|~{6C|qAEKGK8StWO;X;|+4%7H-HXn*VzWQY;C6sc|Ipj@fOlbD; zPcre#sY|$;^_LW6aKV6GYzzEkH(Djunb9wUD)7gWr*F@QUnF%Tn}a6F7Cw--(^4Uh zW<)Oq!(ss|ZOWw4_V#<0(q*}vHIyy$LF5zhrs^v5gPv8vJt|-Gz7cF~G9BDelzjvn z$@70%Cs@qWBR-YYj3U)UVIL?HikR_ud{ivIfh7M3k*{hY4Dek{uXLXMM*8|veQIQa zPgg40`6}$RbB69l2g}$G+)iw|@H7Q32DLxeEAuQwyr4o^vVH}Aomn?8uBYC|4ifA8 zoEK+FrU&dG+-Rc4Mh}KK2{PdKP$sYF%B=y*6`H9OTweyorze`vwWP!i>RwAeWL)3&$Vw_>*`H+Q?>+*yh%}a*Ccxl3+;PBB_>Eb z384n?yB#R>%D|ws&Ly^Xhl7#T+O8MX3?!sgpq;tbn6a^-_CMO`9t+qBh%83SM4ml! zrK!A9Ai8nSv5*u*I=D%uA2G&U1BWo;G`zxLJlG?)Ki|u!?TwR81yqlEkP9gOBkycf znr<)?aw!@EJ30m#PyNxuCHN_Rc;XG|+ZaZ^L@EB2#UDSl;U{85G7mMK1gkn=6Y(u| zNcI{h!=gAyC=;zXRY@n*9ZRd}p+ly7&3~@4X2UU>|F|BRu_cFHE#dujipjw|AkSFA)gT>(VB5n_W<_`E4kVa4#p}8X#+tBol|qu){#ODt z{nXQDF~80NT#$l*^8~f3UbRC3W+N1$Z8w~s#FMW=4h98XH!<$?HmxeX%-d$k+ z&i3@ih`?sHdl@mxV=yrGV$6l|b*zUlfWjG&VxA(`kkG=8Ovm8mY%(M6|q6TbwTnp`? zL1AVA3qRe0-RocSD6;Y_dQN#_;)5lHz?x4ACu99@;+oC0ZIE+iGl{OKx ztIp9n_Z>-BFdlIc0)(+P&g*sTDdA~RnnA@Y@EtQ$H)8`Rba4zjYp5c_`2jNyTTOjT zxDIFNWmXQn;*WJp1yD`xGPTK{TYrY*VwdX6)&J*N1a?-boH~&A%<$Q>ymJi=FZG2I z6+s-Z7KNF_ObO4>sU3N;Cdw)pY5=c>`^hY>`NO>V-{bM}L?UmA7>x8idU=jhdI7kd zyn5tdZ0uv#Af=@TSSc(TG*(Y1^Le$Vh(%{bM~0C7zt;#Ak6kxlD-FDdx5|bEFkt5` zK{^Y42x4dmmKpZY2JHIi9{wiZI>t$z$hi2$q*5HB`@E#EHwCGrI8?@GSTsCgiX~OJ z3RU;~H+JAHoKsS`Id4$uk%}ZOzepbdp3Gg;wu<2UqxaB&88{U?knSdPbw6Z*Lfyb5 zJ6am4as-U|b7h1I*c&#X&hE&7e1*&9{H6`pB0l(&M$KPz=(}TiW4SH8<8k@ky=oJZ zIc1LoWL5lB5v%<HTK>*q_~2;Tm9+qXgC zU|j597hyL;K87pIR+5?Ac&7y+BgGH0t|&I! z)hPYE9)MA@l?_TKxQ*al%LNcC(X{7@m^zWuODJ&$2*r@1pV}`OVUtZ#_Tb=VRMP$H zgQ_Cru_MR+U^8)$=6L5);-UsQM>>q{tm*YPkzS6{qzi?AU{Cme5c3y+#4dp&q$xj_fgSUL#8P-E1o3QnEn;R1CqYhtcO z21%h8FH1>oiEUJ%GoaVFB`bdZ`Pz<(rEr&~&3zEw=3yu_EMx_&Y zSHI&;qK>4^UG30~+LX-foSBuT30>1b8=;Etvi{sXCK(`lF$9Q>LdK#3VGyjxq5AVB zmRoyd4H1FgIZm`(qOWBSCVGQ_BGsYN!j&Ks58+W(z+e=Wpmf zHT#=a6As=FICbJ73TZJ1Hlf{x6e`TR05#6WQ*-guvS90VZOsj2d(Mkn&m&nWrXv6L zrf0bg_Wh+N>fz~}J=w5czI~I|)<;=(j?4q;{nwuGUQ=-jL z%t%$5`GGJqnPg3?E`uCLU=C7%Gdb(XBU&E#1(hM280S@4Ki_)TH9m(Hj5Iah-!C9i zE!EeZy%y!zj!M?qGumU_d{`izTb2v$ z=>*qxn%ssfc80vO`wfqvn83d{R`X5c{>uAp=E3U3J2f>9JmBE;Ifob>=j3HMMw4Hq zKg3Ax11>GoRf7FTm6?@dZ6$@^GD74~E;gbdRpNJ?ZZf!d+9T1L$kB9ckC0TI(--f2 z75qJ!Nt0XJ<1x_~bLDepV(JlSyMWKjm3@B01-%K=`{r6#R-=qWykPF)1c1lU8teF@En4`6X|tUrb&!7o4>fR|izf(*R)X zmOy(G92nc9pNSa!R71Q|DGelID-W{Y2hSqQ3js~y3q<_QmhN*r5jZ6hp_CVrKSf3e zRn3xZ(E)}T!jlMkHK8u~pZAgp5y=I-Eb(1PTo%#D_Bnoc;k^p8YIGlRne}~(uFEdR zFD;iw?)Ro082$rtf0mH69*|lJL@ix!ktSuNKfwsZpobZWq|6Kj(j$SWP(>--I@ely zWq*-!>-034FxK6c=}zke5~GInm)jBUAnArU)jFu1krcbDc%~fmuD?r*ta5c*O-81J zQOvQ%{qx>^8iXO-<~vbLj|cYAoJ6whz(m=z6mK_Pf_mZ8U+xt9vpp^+3!;w@l4ik_ zeJ&H#sVM^*ue~Xxo20D`dLcOsBL{xbd+^$yTx}$@+Ay1c-`Z@w-3_lnF#NE!8>?lI zF-X1t&wG@%5&rsCi-U3L7mpIbzf9-^aE(2{(KY^fDwk~i&$Bny0aIPQ5-Ncb4;3kh z?#N_?y*>)t6H^fgUJHFVj%h&PS3l&RA91Fu1E~^{Jt5rk}x?(QL(at!4C_ z9E0@XtJWziY5hddciMNtOei=Q(1O`y$LrieKe$CxqMWu+@!@gz>@xc9ghuRuE})rG zkDa2CF`b>o4$K#lM)hYN^fEul=iLT32O&1+a}z-I?gDWBweY8GZ%Q2OW3fDB-D{9J z*Rf7VKQ|30r;wgxc}095(K6G2c*_57(ol3@X2xfzn!j%g-Q;k3!FFFs;G04%A%N#O z9%3CBV}`qTX4hJIvP3cQ?hJ%jF%*HGpin~Q#n)&sdmxdahU76SgS7Qi*`ve1E`FGN-RPhXDfyrCOf90wDf-9P|UCcK4K1gCd&MsJkvI@wgOM zJjclTs5q>$7?D62S&gB(=nXJ+F}YWWe&RaR#;AN{PHslcWjkO~L12f{w|0L;4R(#C z0i$AmqF^GYvg%K>PkC}m6-4FsRi7Vb(~MLNa~bGFjlgSsiIno^C_A1{C&na=-0E%{ z`$1ZSxe~;`g9Voqbh<>qbn=C7YMxH6-+sp+A#dwymgqp?-efy?&a zt15WYqW~8WcGFIDt5^Fi6HWMx0lr_>aued3TbU$|WUJ-M;VH#wKZEyf81~tl9b&3^)XGbxRzKN`}0!OYpoI7cz^HLR^&x|wD#4|HWM9`j32$14NllNvM zlYPrZA=;fYRnH1itqHf@d#0Z`HRuu-Gn~`rSrQXA+syuy#~%{6RpK~149;lzl#NZ~ zN2^$qZEb;9xYqg~t7HV2=lqO%zgi#)>b)Z<;`xP1b9aFy|DxSA7`&r1xSCP`StNDP z@{qQm@>S^9qzx{53Xya*U9_FSJ=ES(5UmSsS0ovUE`K)q&OZu%KXe!n)G-GgZXE6j zCzc=^!4UF^`Abw6iNu_Wwxw^021v zwC%n#?Kqv*^0pOeUC2~HRK%!7Q3NtADk5SOgs`WA3y7E^A|{ZWX>DbMY6O%ZTdEKc zSt7E@67niiga9!ti2_Ngkc1?Xlq`m9r{9zL{>bGYYOa%We&^Zl`?+tN`8W0`78<%; z=H**~zci;$d-e#xNKr8}N)*5aJAmnt0L?~P^YRgXy$4IRABCd_2H@|yb&TgIGMOl_ zsTKUqrFuEnJct{SKF16?@sxga0P)-<2?O%INWIcEysM>H z?z!|U!z5K^fHWG&LU?H1mbl`=H|*zF9?ATCghmZIu4~Vgr{cUM#2E_Zld3xESvmFr zKg&4CA(>MOzeL1^{ceRB##2WBV7Go^1TBFpQ^*poG>~UO6uMJr6R=a6thRj42KlD* zO&|fm0k9?r_@q%BAgdyabW_2b21l*LEFhoZRmME-5Hz*T8&?xG=Z&>_!DkqD?JFR!yYfN-uuR0>%Je;ETqxPvDl9JC=JaFYuopE7b0L1cT

rcIdc_KR7>6b_ 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 ZT?gH%Xc$q0Yd2I4AHkFX$MKhs{} - - - - - - - - - image/svg+xml - - - - - - - - 7 8 9 6 1113 150 1 2 3 5 Le soleil - - - diff --git a/papart/data/markers/tableauInterieur.jpg b/papart/data/markers/tableauInterieur.jpg deleted file mode 100644 index 22eca173cb1ff33554fec42430466ff98fb0f3e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27945 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 diff --git a/papart/data/markers/tableauLarge.jpg b/papart/data/markers/tableauLarge.jpg deleted file mode 100644 index d979156adb6e0065af6a147c5ceeca1d787de86c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124572 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

  • BMCy%Onxb1W2no?EE;;~< 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 diff --git a/papart/data/markers/tablet.svg b/papart/data/markers/tablet.svg deleted file mode 100644 index a1c14e67..00000000 --- a/papart/data/markers/tablet.svg +++ /dev/null @@ -1,580 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/papart/data/markers/test.cfg b/papart/data/markers/test.cfg deleted file mode 100644 index ef2ab6ff..00000000 --- a/papart/data/markers/test.cfg +++ /dev/null @@ -1,46 +0,0 @@ -# multimarker definition file for ARToolKit (format defined by ARToolKit) -# Papart MarkerBoard please fill the marker IDs. -# size: 1488.189x1052.3622 - -#Number of Markers -5 - -# marker -100 -38.179 -19.0895 19.0895 --0.7129644751548767 0.7012001276016235 0.0 54.4370002746582 -0.7012001276016235 0.7129644751548767 0.0 34.40700149536133 -0.0 -0.0 1.0 0.0 - -# marker -101 -66.688 -33.344 33.344 -0.9768182039260864 0.21407058835029602 0.0 251.36599731445312 -0.21407058835029602 -0.9768182039260864 0.0 202.9810028076172 -0.0 -0.0 1.0 0.0 - -# marker -102 -46.204 -23.102 23.102 -0.9701638221740723 -0.24245022237300873 0.0 171.9600067138672 --0.24245022237300873 -0.9701638221740723 0.0 261.0369873046875 -0.0 -0.0 1.0 0.0 - -# marker -103 -91.775 -45.8875 45.8875 -0.8660396933555603 0.4999752342700958 0.0 18.636999130249023 -0.4999752342700958 -0.8660396933555603 0.0 209.8769989013672 -0.0 -0.0 1.0 0.0 - -# marker -104 -36.468 -18.234 18.234 -0.8621888756752014 0.5065869092941284 0.0 150.39300537109375 -0.5065869092941284 -0.8621888756752014 0.0 109.20099639892578 -0.0 -0.0 1.0 0.0 From 444b0218cab283082be96df1b467a78e9b01911c Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 13 Dec 2016 17:16:09 +0100 Subject: [PATCH 48/99] Cleaning useless code. --- .../fr/inria/papart/graph/Displayable.java | 37 ----- papart/src/fr/inria/papart/graph/Node.java | 100 ------------ .../fr/inria/papart/graph/NodeTransform.java | 31 ---- .../panel/PGraphicsOpenGLExtension.java | 44 ----- papart/src/fr/inria/papart/panel/Panel.java | 153 ------------------ .../src/fr/inria/papart/panel/SketchTest.java | 48 ------ .../fr/inria/papart/procam/camera/Camera.java | 3 +- 7 files changed, 1 insertion(+), 415 deletions(-) delete mode 100755 papart/src/fr/inria/papart/graph/Displayable.java delete mode 100755 papart/src/fr/inria/papart/graph/Node.java delete mode 100755 papart/src/fr/inria/papart/graph/NodeTransform.java delete mode 100755 papart/src/fr/inria/papart/panel/PGraphicsOpenGLExtension.java delete mode 100755 papart/src/fr/inria/papart/panel/Panel.java delete mode 100755 papart/src/fr/inria/papart/panel/SketchTest.java diff --git a/papart/src/fr/inria/papart/graph/Displayable.java b/papart/src/fr/inria/papart/graph/Displayable.java deleted file mode 100755 index 9be300f8..00000000 --- a/papart/src/fr/inria/papart/graph/Displayable.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.graph; - -import processing.core.PApplet; -import processing.core.PImage; - -/** - * - * @author Jeremy Laviole - */ -public interface Displayable { - - public abstract void prepareToDisplayOn(PApplet display); - - public abstract boolean canBeDisplayedOn(PApplet display); - - public abstract PImage getDisplayedOn(PApplet display); - -} diff --git a/papart/src/fr/inria/papart/graph/Node.java b/papart/src/fr/inria/papart/graph/Node.java deleted file mode 100755 index 3cc9fe76..00000000 --- a/papart/src/fr/inria/papart/graph/Node.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.graph; - -import java.util.ArrayList; -import java.util.Collection; -import processing.core.PMatrix3D; - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -/** - * - * @author Jeremy Laviole - */ -public abstract class Node { - - private Node root; - private final ArrayList children = new ArrayList(); - private Node parent; - private final PMatrix3D transform = new PMatrix3D(); - - public Node getRoot() { - return root; - } - - public Node getParent() { - return this.parent; - } - - public boolean isRoot() { - return this == root; - } - - protected void updateRootOf(Node n) { - n.root = this.root; - } - - public void setRoot(){ - this.root = this; - } - - /** - * - * @return all the children - */ - public Collection getChildren() { - return children; - } - - /** - * - * @param child to add - */ - public void addChild(Node child) { - children.add(child); - updateRootOf(child); - } - - public void setTransform(PMatrix3D mat) { - this.transform.set(mat); - } - - public PMatrix3D getTransform() { - return this.transform.get(); - } - - public PMatrix3D getAbsoluteTrasform() { - Node currentNode = this; - PMatrix3D currentMat = new PMatrix3D(); - currentMat.set(this.transform); - - while (!currentNode.isRoot()) { - currentNode = currentNode.getParent(); - currentMat.apply(currentNode.transform); - } - - return currentMat; - } - -} diff --git a/papart/src/fr/inria/papart/graph/NodeTransform.java b/papart/src/fr/inria/papart/graph/NodeTransform.java deleted file mode 100755 index 2474ff3e..00000000 --- a/papart/src/fr/inria/papart/graph/NodeTransform.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.graph; - -import processing.core.PMatrix3D; - -/** - * - * @author Jeremy Laviole - */ -public class NodeTransform extends Node{ - - -} diff --git a/papart/src/fr/inria/papart/panel/PGraphicsOpenGLExtension.java b/papart/src/fr/inria/papart/panel/PGraphicsOpenGLExtension.java deleted file mode 100755 index cfcbb351..00000000 --- a/papart/src/fr/inria/papart/panel/PGraphicsOpenGLExtension.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.panel; - -import processing.opengl.PGL; -import processing.opengl.PGraphicsOpenGL; - -/** - * - * @author Jeremy Laviole - */ -public class PGraphicsOpenGLExtension extends PGraphicsOpenGL { - - public static PGraphicsOpenGL mainContext; - - public PGraphicsOpenGLExtension() { - super(); - this.pgl = mainContext.pgl; - -// inGeo = newInGeometry(this, IMMEDIATE); -// tessGeo = newTessGeometry(this, IMMEDIATE); -// texCache = newTexCache(this); -// -// initialized = false; - } - -} diff --git a/papart/src/fr/inria/papart/panel/Panel.java b/papart/src/fr/inria/papart/panel/Panel.java deleted file mode 100755 index 373c96ee..00000000 --- a/papart/src/fr/inria/papart/panel/Panel.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.panel; - -import fr.inria.papart.depthcam.analysis.DepthAnalysis; -import fr.inria.papart.procam.Papart; -import fr.inria.papart.procam.camera.Camera; -import fr.inria.papart.procam.camera.CameraOpenKinect; -import javax.swing.JFrame; -import processing.core.PApplet; -import processing.core.PImage; -import processing.opengl.PGraphicsOpenGL; - -/** - * TEST CODE. - * @author Jeremy Laviole - */ -public class Panel { - - SecondApplet secondApplet; - int w, h; - - PGraphicsOpenGL mainGL; - - public Panel(PApplet parent) { - - this.w = 800; - this.h = 600; - PFrame f = new PFrame(800, 600); - -// parent.frame.setTitle("first window"); -// f.setTitle("second window"); - } - - /** - * Broken WITH PROCESSING 3 - */ - public class PFrame extends JFrame { - - public PFrame(int width, int height) { - setBounds(100, 100, width, height); - secondApplet = new SecondApplet(); -// add(secondApplet); -// secondApplet.init(); - this.setVisible(true); - } - } - - public class SecondApplet extends PApplet { - - PImage localImage, localImage2; - - public void setup() { -// size(800, 600, "fr.inria.papart.panel.PGraphicsOpenGLExtension"); - size(800, 600, OPENGL); - } - - public void drawKinectRGB() { - try { - if (Papart.getPapart() != null - && Papart.getPapart().getKinectCamera() != null) { - - Camera kinectRGB = Papart.getPapart().getKinectCamera(); -// if (!kinectRGB.canBeDisplayedOn(this)) { -// kinectRGB.prepareToDisplayOn(this); -// } -// -// PImage img = kinectRGB.getDisplayedOn(this); -// image(img, 0, 0, 320, 240); - } - } catch (Exception e) { - } - } - - public void draw() { - background(100, random(50) + 50, 100); - println("draw in second.."); - -// DepthAnalysis kinect = Papart.getPapart().getKinect(); - - // Camera OK ! -// try { -// if (Papart.getPapart() != null -// && Papart.getPapart().getCameraTracking() != null -// && Papart.getPapart().getCameraTracking().getImage() != null) { -// -// println("Image ready.."); -// -// if (localImage == null) { -// localImage = Papart.getPapart().getCameraTracking().getPImageCopy(this); -// } else { -// Papart.getPapart().getCameraTracking().getPImageCopyTo(localImage); -// } -// image(localImage, 0, 0, 200, 200); -// } -// } catch (Exception e) { -// System.out.println("Exception " + e); -// e.printStackTrace(); -// } - // Base Display OK ! -// try { -// if (Papart.getPapart() != null -// && Papart.getPapart().getDisplay() != null -// && Papart.getPapart().getDisplay().getGraphics() != null) { -// -// println("Image ready.."); -// -// PImage sourceImage = Papart.getPapart().getDisplay().graphics; -// if (localImage2 == null) { -// println("create local image.."); -// localImage2 = createImage(sourceImage.width, sourceImage.height, sourceImage.format); -// } -// println("Get px copy.."); -//// int[] pxCopy = Papart.getPapart().getDisplay().getPixelsCopy(); -// int[] pxCopy = Papart.getPapart().getDisplay().pxCopy; -// if(pxCopy == null) -// return; -// -// // get a copy before ? -//// sourceImage = sourceImage.get(); -//// sourceImage.loadPixels(); -// localImage2.loadPixels(); -// println("Copy pixels.."); -// System.arraycopy(pxCopy, 0, localImage2.pixels, 0, pxCopy.length); -// println("Draw pixels.."); -// image(localImage2, 0, 200, 200, 200); -// } -// } catch (Exception e) { -// System.out.println("Exception " + e); -// e.printStackTrace(); -// } - } - - } - -} diff --git a/papart/src/fr/inria/papart/panel/SketchTest.java b/papart/src/fr/inria/papart/panel/SketchTest.java deleted file mode 100755 index bfc0f929..00000000 --- a/papart/src/fr/inria/papart/panel/SketchTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.panel; - -import processing.core.PApplet; -import processing.opengl.*; - -/** - * TEST CODE - * @author Jeremy Laviole - */ -public class SketchTest extends PApplet { - - @Override - public void setup() { - size(200, 200); - stroke(155, 0, 0); - } - - @Override - public void draw() { - background(0); - line(mouseX, mouseY, width / 2, height / 2); - } - - public static void main(String args[]) { -// PApplet.main(new String[]{"--present", "fr.inria.papart.panel.SketchTest"}); - PApplet.main(new String[]{"fr.inria.papart.panel.SketchTest"}); - } - -} diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 1ee04897..98213dd1 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -23,7 +23,6 @@ * * @author jeremylaviole */ -import fr.inria.papart.graph.Node; import fr.inria.papart.procam.HasExtrinsics; import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.ProjectiveDeviceP; @@ -45,7 +44,7 @@ import processing.core.PMatrix3D; import processing.core.PVector; -public abstract class Camera extends Node implements PConstants, HasExtrinsics { +public abstract class Camera implements PConstants, HasExtrinsics { public static Camera INVALID_CAMERA = new CameraOpenCV(-1); From 88a54957ca7d985c0bb4ea4f2c100c338e257b2e Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 13 Dec 2016 17:17:43 +0100 Subject: [PATCH 49/99] Deleted test classes for camera with special depth. --- .../procam/camera/CameraOpenCVDepth.java | 139 -------- .../camera/OpenCV16BitFrameGrabber.java | 318 ------------------ 2 files changed, 457 deletions(-) delete mode 100644 papart/src/fr/inria/papart/procam/camera/CameraOpenCVDepth.java delete mode 100644 papart/src/fr/inria/papart/procam/camera/OpenCV16BitFrameGrabber.java diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenCVDepth.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenCVDepth.java deleted file mode 100644 index 5eadd353..00000000 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenCVDepth.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.procam.camera; - -import fr.inria.papart.multitouch.KinectTouchInput; -import org.bytedeco.javacpp.opencv_core; -import org.bytedeco.javacpp.opencv_core.IplImage; -import org.bytedeco.javacv.FrameGrabber; -import org.bytedeco.javacv.OpenCVFrameConverter; -import org.bytedeco.javacv.OpenCVFrameGrabber; -import processing.core.PImage; - -/** - * WARNING, THIS IS NOT USED, AND MAYBE NOT WORKING AT ALL. - * @author Jeremy Laviole - */ -public class CameraOpenCVDepth extends Camera { - - private OpenCV16BitFrameGrabber grabber; - private final OpenCVFrameConverter.ToIplImage converter; - private KinectTouchInput touchInput; - public Camera colorCamera; - - protected CameraOpenCVDepth(int cameraNo) { - this.systemNumber = cameraNo; -// this.setPixelFormat(PixelFormat.RGB); - converter = new OpenCVFrameConverter.ToIplImage(); - } - - @Override - public void start() { - OpenCV16BitFrameGrabber grabberCV = new OpenCV16BitFrameGrabber(this.systemNumber); - System.out.println("Starting the grabber with " + width() + " " + height()); - grabberCV.setImageWidth(width()); - grabberCV.setImageHeight(height()); - grabberCV.setImageMode(FrameGrabber.ImageMode.RAW); - - try { - grabberCV.start(); - - System.out.println("Format : " + grabberCV.getFormat()); - - this.grabber = grabberCV; - this.isConnected = true; - } catch (Exception e) { - System.err.println("Could not start frameGrabber... " + e); - - System.err.println("Could not camera start frameGrabber... " + e); - System.err.println("Camera ID " + this.systemNumber + " could not start."); - System.err.println("Check cable connection, ID and resolution asked."); - - this.grabber = null; - } - } - - @Override - public void grab() { - - if (this.isClosing()) { - return; - } - try { - IplImage img = converter.convertToIplImage(grabber.grab()); - if (img != null) { - this.updateCurrentImage(img); - } - -// System.out.println("Grabbing Depth Kinect2..."); - this.currentImage = img; - if (touchInput != null) { - touchInput.lock(); - System.out.println("Touch input update..."); - touchInput.update(); - - touchInput.getTouch2DColors(colorCamera.getIplImage()); - touchInput.unlock(); - } else { - if (touchInput != null) { - System.err.println("Error, the TouchInput is set, but no DepthImg is grabbed."); - } - } - - } catch (Exception e) { - System.err.println("Camera: OpenCV Grab() Error ! " + e); - } - } - - @Override - public PImage getPImage() { - - if (currentImage != null) { - this.checkCamImage(); - camImage.update(currentImage); - return camImage; - } - // TODO: exceptions !!! - return null; - } - - @Override - public void close() { - this.setClosing(); - if (grabber != null) { - try { - grabber.stop(); - System.out.println("Stopping grabber (OpenCV depth)"); - - } catch (Exception e) { - System.out.println("Impossible to close " + e); - } - } - } - - public void setTouchInput(KinectTouchInput kinectTouchInput) { - this.touchInput = kinectTouchInput; - } - - public void setColorCamera(Camera camera) { - this.colorCamera = camera; - } - -} diff --git a/papart/src/fr/inria/papart/procam/camera/OpenCV16BitFrameGrabber.java b/papart/src/fr/inria/papart/procam/camera/OpenCV16BitFrameGrabber.java deleted file mode 100644 index c89b44e9..00000000 --- a/papart/src/fr/inria/papart/procam/camera/OpenCV16BitFrameGrabber.java +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.procam.camera; - -import java.io.File; -import org.bytedeco.javacpp.Loader; -import org.bytedeco.javacpp.opencv_core; -import static org.bytedeco.javacpp.opencv_core.CV_16UC1; -import static org.bytedeco.javacpp.opencv_imgproc.CV_BGR2GRAY; -import static org.bytedeco.javacpp.opencv_imgproc.CV_GRAY2BGR; -import static org.bytedeco.javacpp.opencv_imgproc.cvCvtColor; -import org.bytedeco.javacpp.opencv_videoio; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_CONVERT_RGB; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_FORMAT; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_FOURCC; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_FPS; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_FRAME_COUNT; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_FRAME_HEIGHT; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_FRAME_WIDTH; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_MODE; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_POS_FRAMES; -import static org.bytedeco.javacpp.opencv_videoio.CV_CAP_PROP_POS_MSEC; -import static org.bytedeco.javacpp.opencv_videoio.cvCreateCameraCapture; -import static org.bytedeco.javacpp.opencv_videoio.cvCreateFileCapture; -import static org.bytedeco.javacpp.opencv_videoio.cvGetCaptureProperty; -import static org.bytedeco.javacpp.opencv_videoio.cvGrabFrame; -import static org.bytedeco.javacpp.opencv_videoio.cvQueryFrame; -import static org.bytedeco.javacpp.opencv_videoio.cvReleaseCapture; -import static org.bytedeco.javacpp.opencv_videoio.cvRetrieveFrame; -import static org.bytedeco.javacpp.opencv_videoio.cvSetCaptureProperty; -import org.bytedeco.javacv.Frame; -import org.bytedeco.javacv.FrameConverter; -import org.bytedeco.javacv.FrameGrabber; -import org.bytedeco.javacv.OpenCVFrameConverter; - -/** - * - * @author Samuel Audet - * @author Jérémy Laviole - jeremy.laviole@inria.fr - */ -public class OpenCV16BitFrameGrabber extends FrameGrabber { - - public static String[] getDeviceDescriptions() throws FrameGrabber.Exception { - tryLoad(); - throw new UnsupportedOperationException("Device enumeration not support by OpenCV."); - } - - public static OpenCV16BitFrameGrabber createDefault(File deviceFile) throws FrameGrabber.Exception { - return new OpenCV16BitFrameGrabber(deviceFile); - } - - public static OpenCV16BitFrameGrabber createDefault(String devicePath) throws FrameGrabber.Exception { - return new OpenCV16BitFrameGrabber(devicePath); - } - - public static OpenCV16BitFrameGrabber createDefault(int deviceNumber) throws FrameGrabber.Exception { - return new OpenCV16BitFrameGrabber(deviceNumber); - } - - private static FrameGrabber.Exception loadingException = null; - - public static void tryLoad() throws FrameGrabber.Exception { - if (loadingException != null) { - throw loadingException; - } else { - try { - Loader.load(org.bytedeco.javacpp.opencv_highgui.class); - } catch (Throwable t) { - throw loadingException = new FrameGrabber.Exception("Failed to load " + OpenCV16BitFrameGrabber.class, t); - } - } - } - - public OpenCV16BitFrameGrabber(int deviceNumber) { - this.deviceNumber = deviceNumber; - } - - public OpenCV16BitFrameGrabber(File file) { - this(file.getAbsolutePath()); - } - - public OpenCV16BitFrameGrabber(String filename) { - this.filename = filename; - } - - public void release() throws FrameGrabber.Exception { - stop(); - } - - @Override - protected void finalize() throws Throwable { - super.finalize(); - release(); - } - - private int deviceNumber = 0; - private String filename = null; - private opencv_videoio.CvCapture capture = null; - private opencv_core.IplImage return_image = null; - private FrameConverter converter = new OpenCVFrameConverter.ToIplImage(); - - @Override - public double getGamma() { - // default to a gamma of 2.2 for cheap Webcams, DV cameras, etc. - if (gamma == 0.0) { - return 2.2; - } else { - return gamma; - } - } - - @Override - public String getFormat() { - if (capture == null) { - return super.getFormat(); - } else { - int fourcc = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FOURCC); - return "" + (char) (fourcc & 0xFF) - + (char) ((fourcc >> 8) & 0xFF) - + (char) ((fourcc >> 16) & 0xFF) - + (char) ((fourcc >> 24) & 0xFF); - } - } - - @Override - public int getImageWidth() { - if (return_image != null) { - return return_image.width(); - } else { - return capture == null ? super.getImageWidth() : (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH); - } - } - - @Override - public int getImageHeight() { - if (return_image != null) { - return return_image.height(); - } else { - return capture == null ? super.getImageHeight() : (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT); - } - } - - @Override - public int getPixelFormat() { - return capture == null ? super.getPixelFormat() : (int) cvGetCaptureProperty(capture, CV_CAP_PROP_CONVERT_RGB); - } - - @Override - public double getFrameRate() { - return capture == null ? super.getFrameRate() : (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); - } - - @Override - public void setImageMode(FrameGrabber.ImageMode imageMode) { - if (imageMode != this.imageMode) { - return_image = null; - } - super.setImageMode(imageMode); - } - - @Override - public int getFrameNumber() { - return capture == null ? super.getFrameNumber() - : (int) cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES); - } - - @Override - public void setFrameNumber(int frameNumber) throws FrameGrabber.Exception { - if (capture == null) { - super.setFrameNumber(frameNumber); - } else { - if (cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, frameNumber) == 0) { - throw new FrameGrabber.Exception("cvSetCaptureProperty() Error: Could not set CV_CAP_PROP_POS_FRAMES to " + frameNumber + "."); - } - } - } - - @Override - public long getTimestamp() { - return capture == null ? super.getTimestamp() - : Math.round(cvGetCaptureProperty(capture, CV_CAP_PROP_POS_MSEC) * 1000); - } - - @Override - public void setTimestamp(long timestamp) throws FrameGrabber.Exception { - if (capture == null) { - super.setTimestamp(timestamp); - } else { - if (cvSetCaptureProperty(capture, CV_CAP_PROP_POS_MSEC, timestamp / 1000.0) == 0) { - throw new FrameGrabber.Exception("cvSetCaptureProperty() Error: Could not set CV_CAP_PROP_POS_MSEC to " + timestamp / 1000.0 + "."); - } - } - } - - @Override - public int getLengthInFrames() { - return capture == null ? super.getLengthInFrames() - : (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT); - } - - @Override - public long getLengthInTime() { - return Math.round(getLengthInFrames() * 1000000L / getFrameRate()); - } - - public void start() throws FrameGrabber.Exception { - if (filename != null && filename.length() > 0) { - capture = cvCreateFileCapture(filename); - if (capture == null) { - throw new FrameGrabber.Exception("cvCreateFileCapture() Error: Could not create camera capture."); - } - } else { - capture = cvCreateCameraCapture(deviceNumber); - if (capture == null) { - throw new FrameGrabber.Exception("cvCreateCameraCapture() Error: Could not create camera capture."); - } - } - if (imageWidth > 0) { - if (cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, imageWidth) == 0) { - cvSetCaptureProperty(capture, CV_CAP_PROP_MODE, imageWidth); // ?? - } - } - if (imageHeight > 0) { - if (cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, imageHeight) == 0) { - cvSetCaptureProperty(capture, CV_CAP_PROP_MODE, imageHeight); // ?? - } - } - if (frameRate > 0) { - cvSetCaptureProperty(capture, CV_CAP_PROP_FPS, frameRate); - } - - // set the fourCC to Y16 -> V4L2_PIX_FMT_Y16; - cvSetCaptureProperty(capture, CV_CAP_PROP_FOURCC, new FourCC("Y16 ").toInt()); - cvSetCaptureProperty(capture, CV_CAP_PROP_FORMAT, CV_16UC1); - - // Take the gray images... -// cvSetCaptureProperty(capture, CV_CAP_PROP_CONVERT_RGB, imageMode == FrameGrabber.ImageMode.COLOR ? 1 : 0); - cvSetCaptureProperty(capture, CV_CAP_PROP_CONVERT_RGB, -1); -// cvSetCaptureProperty(capture, CV_CAP_PROP_CONVERT_RGB, 0); - - // Before cvRetrieveFrame() starts returning something else then null - // QTKit sometimes requires some "warm-up" time for some reason... - // The first frame on Linux is sometimes null as well, - // so it's probably a good idea to run this for all platforms... ? - int count = 0; - while (count++ < 100 && cvGrabFrame(capture) != 0 && cvRetrieveFrame(capture) == null) { - try { - Thread.sleep(100); - } catch (InterruptedException ex) { - } - } - - if (!triggerMode) { - int err = cvGrabFrame(capture); - if (err == 0) { - throw new FrameGrabber.Exception("cvGrabFrame() Error: Could not grab frame. (Has start() been called?)"); - } - } - } - - public void stop() throws FrameGrabber.Exception { - if (capture != null) { - cvReleaseCapture(capture); - capture = null; - } - } - - public void trigger() throws FrameGrabber.Exception { - for (int i = 0; i < numBuffers + 1; i++) { - cvQueryFrame(capture); - } - int err = cvGrabFrame(capture); - if (err == 0) { - throw new FrameGrabber.Exception("cvGrabFrame() Error: Could not grab frame. (Has start() been called?)"); - } - } - - public Frame grab() throws FrameGrabber.Exception { - opencv_core.IplImage image = cvRetrieveFrame(capture); - -// System.out.println("Image data size: " + image.getByteBuffer().capacity()); - - if (image == null) { - throw new FrameGrabber.Exception("cvRetrieveFrame() Error: Could not retrieve frame. (Has start() been called?)"); - } - if (!triggerMode) { - int err = cvGrabFrame(capture); - if (err == 0) { - throw new FrameGrabber.Exception("cvGrabFrame() Error: Could not grab frame. (Has start() been called?)"); - } - } - - if (return_image == null) { - System.out.println("Creating in image with w, h: " + image.width() + " " + image.height()); - System.out.println("Creating in image with depth: " + image.depth()); - return_image = opencv_core.IplImage.create(image.width(), image.height(), image.depth(), 3); - } - return_image = image; - return converter.convert(return_image); - } -} From 75b60a3dc042eaccf0cd07e5ec6bb54a64306c68 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 13 Dec 2016 17:18:01 +0100 Subject: [PATCH 50/99] UtilsTest now for Processing 3. --- papart/test/fr/inria/papart/UtilsTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/papart/test/fr/inria/papart/UtilsTest.java b/papart/test/fr/inria/papart/UtilsTest.java index 7ee6d7a3..e908039b 100644 --- a/papart/test/fr/inria/papart/UtilsTest.java +++ b/papart/test/fr/inria/papart/UtilsTest.java @@ -30,8 +30,12 @@ public class UtilsTest extends PApplet { @Override - public void setup() { + public void settings() { size(200, 200); + } + + @Override + public void setup() { stroke(155, 0, 0); } From df7db70ec003055f6c24118c4834f934d7155502 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 13 Dec 2016 17:20:35 +0100 Subject: [PATCH 51/99] cleaning. --- papart/data/markers/tableauLarge.xcf | Bin 436700 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 papart/data/markers/tableauLarge.xcf diff --git a/papart/data/markers/tableauLarge.xcf b/papart/data/markers/tableauLarge.xcf deleted file mode 100644 index dc7dc1b47105e3ba15a24bba4649b479c07df40b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436700 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 Y3#39^TV9{rvF_#b}fw|?Wdzxj=C{?2cH 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

    F-h*C8d@^%uDRiC0bC4yfKc!-V? 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ⅆzYWB;8)- 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%0D)C+dfVoEvvhpqLY3HtFN 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 Date: Tue, 13 Dec 2016 17:28:54 +0100 Subject: [PATCH 52/99] Moved markers to legacy folder. Now the default will be the ... "default". --- papart/data/markers/A4-calib-print.pdf | Bin 0 -> 247932 bytes papart/data/markers/A4-calib.svg | 4403 +++++++++++++++-- papart/data/markers/A4-default.pdf | Bin 0 -> 40198 bytes papart/data/markers/A4-default.svg | 557 ++- .../markers/{ => legacy}/A3-small1-legacy.cfg | 0 .../data/markers/{ => legacy}/A3-small1.svg | 0 .../data/markers/{ => legacy}/A3-small2.svg | 0 .../data/markers/{ => legacy}/big-calib.svg | 0 .../data/markers/{ => legacy}/mega-calib.svg | 0 papart/data/markers/{ => legacy}/test.svg | 0 10 files changed, 4645 insertions(+), 315 deletions(-) create mode 100644 papart/data/markers/A4-calib-print.pdf create mode 100644 papart/data/markers/A4-default.pdf rename papart/data/markers/{ => legacy}/A3-small1-legacy.cfg (100%) rename papart/data/markers/{ => legacy}/A3-small1.svg (100%) rename papart/data/markers/{ => legacy}/A3-small2.svg (100%) rename papart/data/markers/{ => legacy}/big-calib.svg (100%) mode change 100755 => 100644 rename papart/data/markers/{ => legacy}/mega-calib.svg (100%) mode change 100755 => 100644 rename papart/data/markers/{ => legacy}/test.svg (100%) diff --git a/papart/data/markers/A4-calib-print.pdf b/papart/data/markers/A4-calib-print.pdf new file mode 100644 index 0000000000000000000000000000000000000000..31a8f8ed99088daaa667491dda729fca442cd059 GIT binary patch literal 247932 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

    ;n1maGYko;)Ry=J|Vme+tido-w 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 RR - - - - - - - - - @@ -318,7 +279,7 @@ width="70.866142" inkscape:label="#image4473" /> - - - - Reality Over Technology - - - - - - - - - - - - - - - - - - - - - - - - - - - PapARt Calibration board + http://rea.lity.tech + http://project.inria.fr/papart + + + + diff --git a/papart/data/markers/A4-default.pdf b/papart/data/markers/A4-default.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b3c072f0ec13b6784d70b3b6f6decc7653acec75 GIT binary patch literal 40198 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 ZqOQ0kv8V)` + id="defs4"> + + @@ -45,7 +61,7 @@ image/svg+xml - + @@ -58,9 +74,7 @@ y="341.05307" x="40.970253" id="marker80" - xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAFUlE -QVR42mNgYHBhCGDgYpAAQiAAAAhuAM89pEB0AAAAAElFTkSuQmCC -" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAFUlE QVR42mNgYHBhCGDgYpAAQiAAAAhuAM89pEB0AAAAAElFTkSuQmCC " style="image-rendering:optimizeSpeed" preserveAspectRatio="none" height="106.29921" @@ -70,9 +84,7 @@ QVR42mNgYHBhCGDgYpAAQiAAAAhuAM89pEB0AAAAAElFTkSuQmCC y="936.99658" x="40.970253" id="marker81" - xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAGElE -QVR42mNgYHBhCGJIY6hhUGLIY2AAAA/4AglN6z+6AAAAAElFTkSuQmCC -" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAGElE QVR42mNgYHBhCGJIY6hhUGLIY2AAAA/4AglN6z+6AAAAAElFTkSuQmCC " style="image-rendering:optimizeSpeed" preserveAspectRatio="none" height="106.29921" @@ -82,9 +94,7 @@ QVR42mNgYHBhCGJIY6hhUGLIY2AAAA/4AglN6z+6AAAAAElFTkSuQmCC y="341.05307" x="928.23932" id="marker82" - xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAFklE -QVR42mNgYHBhCGGwYTABkkYMDAAM4gGP6VV9lQAAAABJRU5ErkJggg== -" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAFklE QVR42mNgYHBhCGGwYTABkkYMDAAM4gGP6VV9lQAAAABJRU5ErkJggg== " style="image-rendering:optimizeSpeed" preserveAspectRatio="none" height="106.29921" @@ -94,9 +104,7 @@ QVR42mNgYHBhCGGwYTABkkYMDAAM4gGP6VV9lQAAAABJRU5ErkJggg== y="936.99658" x="928.23932" id="marker83" - xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAFklE -QVR42mNgYHBhCGMIAMI8hhgGBgAPcAIFdHchAwAAAABJRU5ErkJggg== -" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAFklE QVR42mNgYHBhCGMIAMI8hhgGBgAPcAIFdHchAwAAAABJRU5ErkJggg== " style="image-rendering:optimizeSpeed" preserveAspectRatio="none" height="106.29921" @@ -106,9 +114,7 @@ QVR42mNgYHBhCGMIAMI8hhgGBgAPcAIFdHchAwAAAABJRU5ErkJggg== y="936.99658" x="484.6048" id="marker84" - xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAGElE -QVR42mNgYHBhiGBIY3BiYGBIYWAAAA3cAamU44hFAAAAAElFTkSuQmCC -" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAGElE QVR42mNgYHBhiGBIY3BiYGBIYWAAAA3cAamU44hFAAAAAElFTkSuQmCC " style="image-rendering:optimizeSpeed" preserveAspectRatio="none" height="106.29921" @@ -118,13 +124,510 @@ QVR42mNgYHBhiGBIY3BiYGBIYWAAAA3cAamU44hFAAAAAElFTkSuQmCC y="341.05307" x="484.6048" id="marker85" - xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAFklE -QVR42mNgYHBhiGLgYlBjsAKSDAAKBgET7H+cnQAAAABJRU5ErkJggg== -" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEUAAAD///+l2Z/dAAAAFklE QVR42mNgYHBhiGLgYlBjsAKSDAAKBgET7H+cnQAAAABJRU5ErkJggg== " style="image-rendering:optimizeSpeed" preserveAspectRatio="none" height="106.29921" width="106.29921" inkscape:label="#image4212" /> + + http://rea.lity.tech + http://project.inria.fr/papart + PapARt + diff --git a/papart/data/markers/A3-small1-legacy.cfg b/papart/data/markers/legacy/A3-small1-legacy.cfg similarity index 100% rename from papart/data/markers/A3-small1-legacy.cfg rename to papart/data/markers/legacy/A3-small1-legacy.cfg diff --git a/papart/data/markers/A3-small1.svg b/papart/data/markers/legacy/A3-small1.svg similarity index 100% rename from papart/data/markers/A3-small1.svg rename to papart/data/markers/legacy/A3-small1.svg diff --git a/papart/data/markers/A3-small2.svg b/papart/data/markers/legacy/A3-small2.svg similarity index 100% rename from papart/data/markers/A3-small2.svg rename to papart/data/markers/legacy/A3-small2.svg diff --git a/papart/data/markers/big-calib.svg b/papart/data/markers/legacy/big-calib.svg old mode 100755 new mode 100644 similarity index 100% rename from papart/data/markers/big-calib.svg rename to papart/data/markers/legacy/big-calib.svg diff --git a/papart/data/markers/mega-calib.svg b/papart/data/markers/legacy/mega-calib.svg old mode 100755 new mode 100644 similarity index 100% rename from papart/data/markers/mega-calib.svg rename to papart/data/markers/legacy/mega-calib.svg diff --git a/papart/data/markers/test.svg b/papart/data/markers/legacy/test.svg similarity index 100% rename from papart/data/markers/test.svg rename to papart/data/markers/legacy/test.svg From f47631e2c8ca4fa519f5892bd7097416178763f3 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 13 Dec 2016 18:11:56 +0100 Subject: [PATCH 53/99] cameraOpenKinect fix. --- papart/src/fr/inria/papart/procam/Papart.java | 2 +- papart/src/fr/inria/papart/procam/camera/Camera.java | 2 +- .../src/fr/inria/papart/procam/camera/CameraOpenKinect.java | 5 ++++- .../src/fr/inria/papart/procam/camera/CameraOpenKinect2.java | 2 ++ .../src/fr/inria/papart/procam/camera/CameraRealSense.java | 1 + 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index e9bb9c2e..397c9645 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -68,7 +68,7 @@ public class Papart { public final static String calibrationFolder = folder + "calibration/"; public final static String markerFolder = folder + "markers/"; - public static String calibrationFileName = "big-calib.svg"; + public static String calibrationFileName = "A4-calib.svg"; public static String cameraCalibName = "camera.yaml"; public static String projectorCalibName = "projector.yaml"; diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 98213dd1..591d9589 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -80,7 +80,7 @@ public enum PixelFormat { protected int width, height; protected int frameRate; protected boolean trackSheets = false; - private boolean isClosing = false; + protected boolean isClosing = false; protected boolean isConnected = false; protected boolean undistort = false; diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java index ae953f44..de87e30b 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect.java @@ -37,7 +37,6 @@ public class CameraOpenKinect extends CameraRGBIRDepth { protected CameraOpenKinect(int cameraNo) { this.systemNumber = cameraNo; grabber = new OpenKinectFrameGrabber(this.systemNumber); - } @Override @@ -97,6 +96,7 @@ public void setUseDepth(boolean use) { depthCamera.setSize(640, 480); grabber.setDepthFormat(freenect.FREENECT_DEPTH_MM); } + this.useDepth = use; } @Override @@ -105,7 +105,9 @@ public void setUseIR(boolean use) { IRCamera.setPixelFormat(PixelFormat.GRAY); IRCamera.type = SubCamera.Type.IR; IRCamera.setSize(640, 480); + // grabber.setvideoformat ? } + this.useIR = use; } @Override @@ -120,6 +122,7 @@ public void setUseColor(boolean use) { kinectVideoFormat = freenect.FREENECT_VIDEO_RGB; grabber.setVideoFormat(kinectVideoFormat); } + this.useColor = use; } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java index 7092208b..a9d77da9 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraOpenKinect2.java @@ -100,6 +100,7 @@ public void setUseDepth(boolean use) { depthCamera.setSize(512, 424); grabber.enableDepthStream(); } + this.useDepth = use; } @Override @@ -110,6 +111,7 @@ public void setUseColor(boolean use) { colorCamera.setSize(1920, 1080); grabber.enableColorStream(); } + this.useColor = use; } @Override diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index c915b6ca..9743188d 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -189,6 +189,7 @@ public void setUseDepth(boolean use) { this.useDepth = use; } + @Override public void setUseColor(boolean use) { // todo: boolean or not ? if (!use) { From 2ce527a75098bd5858bc79aa554fbbe82330a07f Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 17:38:12 +0100 Subject: [PATCH 54/99] ROI bug causing native errors fixed. --- .../fr/inria/papart/tracking/ObjectFinder.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/papart/src/fr/inria/papart/tracking/ObjectFinder.java b/papart/src/fr/inria/papart/tracking/ObjectFinder.java index 8410f86c..8747c86c 100644 --- a/papart/src/fr/inria/papart/tracking/ObjectFinder.java +++ b/papart/src/fr/inria/papart/tracking/ObjectFinder.java @@ -72,15 +72,11 @@ public static class Settings extends BaseChildSettings { // Marche très bien // ORB detector = ORB.create(1200/*=500*/, 1.6f /*=1.2f*/, 8 /*=8*/, 31/*=31*/, // 0/*=0*/, 2/*=2*/, ORB.HARRIS_SCORE/*=cv::ORB::HARRIS_SCORE*/, 31 /*=31*/, 20/*=20*/); - - // default--> quite awesome + // default--> quite awesome BRISK detector = BRISK.create(50, 2, 1); - - + // Tests // BRISK detector = BRISK.create(briskParam1, briskParam2, briskParam3); - - // AKAZE detector = AKAZE.create(); // -> CRAZY memory leaks ?! // AKAZE detector = AKAZE.create(AKAZE.DESCRIPTOR_KAZE, // 0, 3, 0.001f, @@ -90,8 +86,6 @@ public static class Settings extends BaseChildSettings { // int descriptor_size/*=0*/, int descriptor_channels/*=3*/, // float threshold/*=0.001f*/, int nOctaves/*=4*/, // int nOctaveLayers/*=4*/, int diffusivity/*=cv::KAZE::DIFF_PM_G2*/); - - // MSER detector = MSER.create(); // -> Not implemented. // FastFeatureDetector detector = FastFeatureDetector.create(); // -> Not implemented. // AgastFeatureDetector detector = AgastFeatureDetector.create(); // -> not implemented @@ -200,7 +194,7 @@ public double[] find(IplImage image) { roi = cvRect(0, 0, image.width(), image.height()); defaultRoi = cvRect(0, 0, image.width(), image.height()); } - + cvSetImageROI(image, roi); // System.out.println("retreived roi: " + roi.x() + " " + roi.y() + " " + roi.width() + " " + roi.height()); @@ -215,6 +209,7 @@ public double[] find(IplImage image) { roi.y(0); roi.width(image.width()); roi.height(image.height()); + cvSetImageROI(image, defaultRoi); return null; } @@ -235,13 +230,14 @@ public double[] find(IplImage image) { roi.y(0); roi.width(image.width()); roi.height(image.height()); + cvSetImageROI(image, defaultRoi); return null; } - + adjustROI(image, dstCorners); // update mask from dstCorners... -// cvSetImageROI(image, defaultRoi); + cvSetImageROI(image, defaultRoi); // System.out.println("Updated roi: " + roi.x() + " " + roi.y()); return dstCorners; } From 66515c51e33df12ff82b7d6e49be07b47995996c Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 17:38:32 +0100 Subject: [PATCH 55/99] markerboard now handles better RGBIRDepth cameras. --- .../fr/inria/papart/tracking/MarkerBoard.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoard.java b/papart/src/fr/inria/papart/tracking/MarkerBoard.java index 9f714d68..32387eb2 100755 --- a/papart/src/fr/inria/papart/tracking/MarkerBoard.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoard.java @@ -23,6 +23,7 @@ import fr.inria.papart.procam.display.ProjectorDisplay; import fr.inria.papart.procam.display.ARDisplay; import fr.inria.papart.multitouch.OneEuroFilter; +import fr.inria.papart.procam.camera.CameraRGBIRDepth; import fr.inria.papart.tracking.ObjectFinder; import org.bytedeco.javacpp.ARToolKitPlus; import org.bytedeco.javacpp.opencv_core.IplImage; @@ -111,17 +112,17 @@ public void addTracker(PApplet applet, Camera camera) { } private int getId(Camera camera) { - return cameras.indexOf(camera); + return cameras.indexOf(Camera.checkActingCamera(camera)); } public void setFiltering(Camera camera, double freq, double minCutOff) { - int id = cameras.indexOf(camera); + int id = getId(camera); OneEuroFilter[] filter = createFilter(freq, minCutOff); filters.set(id, filter); } public void removeFiltering(Camera camera) { - int id = cameras.indexOf(camera); + int id = getId(camera); filters.set(id, null); } @@ -137,7 +138,7 @@ public void setDrawingMode(Camera camera, boolean dm, float dist) { } public void setFakeLocation(Camera camera, PMatrix3D location) { - int id = cameras.indexOf(camera); + int id = getId(camera); PMatrix3D transfo = (PMatrix3D) transfos.get(id); transfo.set(location); } @@ -203,7 +204,7 @@ private PVector getPositionVector(int id) { // We suppose that the ARDisplay is the one of the camera... public PVector getBoardLocation(Camera camera, ARDisplay display) { - int id = cameras.indexOf(camera); + int id = getId(camera); PVector v = getPositionVector(id); // Apply extrinsics if required. @@ -227,7 +228,7 @@ public boolean isSeenBy(Camera camera, ProjectorDisplay projector, float error) public synchronized void updateLocation(Camera camera, IplImage img, Object globalTracking) { - int id = cameras.indexOf(camera); + int id = getId(camera); if (id == -1) { throw new RuntimeException("The board " + this.fileName + " is" + " not registered with the camera you asked"); @@ -249,7 +250,7 @@ public synchronized void updateLocation(Camera camera, IplImage img, Object glob protected abstract void updatePositionImpl(int id, int currentTime, int endTime, int mode, Camera camera, IplImage img, Object globalTracking); public PMatrix3D getTransfoMat(Camera camera) { - return transfos.get(cameras.indexOf(camera)); + return transfos.get(getId(camera)); } public PMatrix3D getTransfoRelativeTo(Camera camera, MarkerBoard board2) { @@ -272,7 +273,7 @@ public ARToolKitPlus.TrackerMultiMarker getARToolkitTracking(Camera camera) { } private Object getTracking(Camera camera) { - return trackers.get(cameras.indexOf(camera)); + return trackers.get(getId(camera)); } public boolean useJavaCVFinder() { From 58f8ec2b944a008c74f4228b6f86f2c801584fac Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 19:13:52 +0100 Subject: [PATCH 56/99] Better offset handling for Z error. --- .../calibration/CalibrationExtrinsic.java | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index b724e6b2..a142805e 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -119,20 +119,28 @@ protected void calibrateProjectorDepthCam(ArrayList snapsho return; } - // move the plane up a little. - // Value for Kinect 360. + // TODO: not sure here... ? + movePlaneAlongOffset(planeCalibCam); + + saveKinectPlaneCalibration(planeCalibCam, homography); + saveKinectCameraExtrinsics(kinectCameraExtrinsics); + } + + private static final float OPEN_KINECT_Z_OFFSET = -12; + private static final float REALSENSE_Z_OFFSET = -42f; + + private void movePlaneAlongOffset(PlaneCalibration planeCalib){ + if (depthCameraDevice.type() == Camera.Type.OPEN_KINECT) { - planeCalibCam.moveAlongNormal(-7f); + System.out.println("Moving the plane along Z... " + OPEN_KINECT_Z_OFFSET); + planeCalib.moveAlongNormal(OPEN_KINECT_Z_OFFSET); } - // Value for RealSense. if (depthCameraDevice.type() == Camera.Type.REALSENSE) { - planeCalibCam.moveAlongNormal(-42f); + planeCalib.moveAlongNormal(REALSENSE_Z_OFFSET); } - saveKinectPlaneCalibration(planeCalibCam, homography); - saveKinectCameraExtrinsics(kinectCameraExtrinsics); } - + protected void calibrateDepthAndExternalCam(ArrayList snapshots) { calibrateDepthToExternalExtr(snapshots); calibrateDepthCamPlane(snapshots); @@ -179,16 +187,13 @@ public boolean calibrateDepthCamPlane(ArrayList snapshots) // move the plane up a little. planeCalibKinect.flipNormal(); - planeCalibKinect.moveAlongNormal(-20f); - - if (depthCameraDevice.type() == Camera.Type.REALSENSE) { - planeCalibKinect.moveAlongNormal(-20f); - } + movePlaneAlongOffset(planeCalibKinect); saveKinectPlaneCalibration(planeCalibKinect, homography); return true; } + public boolean calibrateDepthCamPlaneOnly(ArrayList snapshots) { // Depth -> color extrinsics PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); @@ -213,7 +218,7 @@ public boolean calibrateDepthCamPlaneOnly(ArrayList snapsho // move the plane up a little. planeCalibKinect.flipNormal(); - planeCalibKinect.moveAlongNormal(-20f); + movePlaneAlongOffset(planeCalibKinect); saveKinectPlaneCalibration(planeCalibKinect, homography); return true; From 57185e10f41c7773f9b5f82ba6a12adf0dccdf0f Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 19:14:15 +0100 Subject: [PATCH 57/99] small explanations, not perfect yet. --- .../inria/papart/multitouch/KinectTouchInput.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java index 02c21f0f..d1cdb881 100755 --- a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java @@ -359,9 +359,20 @@ private PVector projectPointToScreen(Screen screen, // paperScreenCoord = project(screen, display, // p.x / (float) pdp.getWidth(), // p.y / (float) pdp.getHeight()); + + // This works well in the best of worlds, where the depth information is + // reliable. + paperScreenCoord = new PVector(); PVector pKinectP = new PVector(pKinect.x, pKinect.y, pKinect.z); + // maybe not here... + // TODO: maybe a better way to this, or to tweak the magic numbers. +// // yOffset difference ? 1cm -> surface view. +// // zOffset difference ? 1cm -> surface view. + pKinectP.y -= 10; + pKinectP.z += 10; + // TODO: Here change the display.getCamera() to // another way to get the screen location... PMatrix3D transfo = screen.getLocation(display.getCamera()); @@ -370,6 +381,10 @@ private PVector projectPointToScreen(Screen screen, // TODO: check bounds too ?! } else { + // This is not working with raw Depth, because the coordinates + // of pNorm is not in display Space, but in a custom space + // defined for the touch surface... + paperScreenCoord = project(screen, display, pNorm.x, pNorm.y); From 5f41cab5517c54bafe6e1bc14a2f7abe1bc82a97 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 19:14:36 +0100 Subject: [PATCH 58/99] more comment, less log. --- papart/src/fr/inria/papart/procam/Papart.java | 10 ++++------ papart/src/fr/inria/papart/procam/PaperScreen.java | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 397c9645..1566ce97 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -668,16 +668,17 @@ private void updateDepthCameraDeviceExtrinsics(){ depthCameraDevice.getDepthCamera().setExtrinsics(depthCameraDevice.getStereoCalibration()); // Specific + // Important to use it for now ! Used in KinectTouchInput.projectPointToScreen ((KinectTouchInput) this.touchInput).useRawDepth(); - - System.out.println("Papart: Using Touchextrinsics from the device."); + +// System.out.println("Papart: Using Touchextrinsics from the device."); } else { // Two different cameras // setExtrinsics must after the kinect stereo calibration is loaded PMatrix3D extr = (Papart.getPapart()).loadCalibration(Papart.kinectTrackingCalib); extr.invert(); depthCameraDevice.getDepthCamera().setExtrinsics(extr); - System.out.println("Papart: Using Touchextrinsics from the calibrated File."); +// System.out.println("Papart: Using Touchextrinsics from the calibrated File."); } } @@ -688,9 +689,6 @@ public void useKinectOne(boolean kinectOne) { } /** - * WORK IN PROGRESS - * - * @return */ public DepthCameraDevice loadDefaultDepthCamera() { diff --git a/papart/src/fr/inria/papart/procam/PaperScreen.java b/papart/src/fr/inria/papart/procam/PaperScreen.java index 6bb6e340..330ab538 100755 --- a/papart/src/fr/inria/papart/procam/PaperScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperScreen.java @@ -268,8 +268,8 @@ private void trackCurrentMarkerBoard() { } if (!cameraTracking.tracks(markerBoard)) { - System.out.println("Camera. " + cameraTracking + " now tracks " + markerBoard); cameraTracking.trackMarkerBoard(markerBoard); +// System.out.println("Camera. " + cameraTracking + " now tracks " + markerBoard); } } From 1c683481082d4e23c8a534944a0fbd27451ce5fb Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 19:15:38 +0100 Subject: [PATCH 59/99] Tracked view got better, now working also with 1 channel IplImage. --- papart/src/fr/inria/papart/procam/Utils.java | 39 ++++++++++++------- .../fr/inria/papart/procam/camera/Camera.java | 10 +++++ .../papart/procam/camera/CameraThread.java | 1 + .../papart/procam/camera/TrackedView.java | 21 ++++++---- 4 files changed, 50 insertions(+), 21 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index 902f0b5b..6889e73c 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -330,13 +330,25 @@ static public IplImage createImageFrom(IplImage imgIn) { return imgOut; } + static public IplImage createNewSizeImageFrom(IplImage imgIn, int width, int height) { + // TODO: avoid this creation !! + CvSize outSize = new CvSize(); + outSize.width(width); + outSize.height(height); + IplImage imgOut = cvCreateImage(outSize, // size + imgIn.depth(), // depth + imgIn.nChannels()); +// imgIn.w + return imgOut; + } + static public IplImage createImageFrom(PImage in) { // TODO: avoid this creation !! CvSize outSize = new CvSize(); outSize.width(in.width); outSize.height(in.height); - System.out.println("inputImage to create an IPL:" + in.width + " " + in.height + " " + in.format ); + System.out.println("inputImage to create an IPL:" + in.width + " " + in.height + " " + in.format); IplImage imgOut = null; if (in.format == RGB) { imgOut = cvCreateImage(outSize, // size @@ -539,13 +551,12 @@ static public void IplImageToPImage(IplImage img, boolean RGB, PImage ret) { // } assert (img.width() == ret.width); assert (img.height() == ret.height); - //= new BufferedImage(); + ret.loadPixels(); if (img.nChannels() == 3) { ByteBuffer buff = img.getByteBuffer(); // PImage ret = new PImage(img.width(), img.height(), PApplet.RGB); - ret.loadPixels(); if (RGB) { for (int i = 0; i < img.width() * img.height(); i++) { int offset = i * 3; @@ -568,7 +579,6 @@ static public void IplImageToPImage(IplImage img, boolean RGB, PImage ret) { if (img.nChannels() == 4) { ByteBuffer buff = img.getByteBuffer(); // PImage ret = new PImage(img.width(), img.height(), PApplet.RGB); - ret.loadPixels(); for (int i = 0; i < img.width() * img.height(); i++) { int offset = i * 4; // ret.pixels[i] = applet.color(buff.get(offset + 0) & 0xff, buff.get(offset + 1) & 0xFF, buff.get(offset + 2) & 0xff); @@ -584,12 +594,14 @@ static public void IplImageToPImage(IplImage img, boolean RGB, PImage ret) { if (img.nChannels() == 1) { // TODO: no more allocations. ByteBuffer buff = img.getByteBuffer(); - byte[] arr = new byte[img.width() * img.height()]; - buff.get(arr); - for (int i = 0; i < img.width() * img.height(); i++) { + byte[] tmpArr = new byte[1]; +// byte[] arr = new byte[img.width() * img.height()]; +// buff.get(arr); - byte d = arr[i]; + for (int i = 0; i < img.width() * img.height(); i++) { + buff.get(tmpArr); + byte d = tmpArr[0]; // int d = (arr[i] & 0xFF); ret.pixels[i] = (0xFF) << 24 @@ -639,7 +651,6 @@ static public void byteBufferGRAYtoARGB(ByteBuffer gray, ByteBuffer argb) { argb.put((byte) 255); } argb.rewind(); - argb.rewind(); } static public void byteBufferGRAY32toARGB(ByteBuffer gray, ByteBuffer argb) { @@ -880,7 +891,7 @@ static public void convertARParam2(PApplet pa, String inputYAML, String outputDA pw.flush(); pw.close(); } - + static public void convertARParamFromDevice(PApplet pa, ProjectiveDeviceP pdp, String outputDAT) throws Exception { PrintWriter pw = pa.createWriter(outputDAT); @@ -900,7 +911,7 @@ static public void convertARParamFromDevice(PApplet pa, ProjectiveDeviceP pdp, S sb.append("0 ").append(" "); // if(pdp.handleDistorsions()){ - // TODO: handle the distorsions... + // TODO: handle the distorsions... // double[] distort = cam.distortionCoeffs.get(); // // alpha_c ?  //// sb.append("0 "); @@ -912,9 +923,9 @@ static public void convertARParamFromDevice(PApplet pa, ProjectiveDeviceP pdp, S // sb.append("0 "); // } // } else { - for (int i = 0; i < 6; i++) { - sb.append("0 "); - } + for (int i = 0; i < 6; i++) { + sb.append("0 "); + } // } // undist iterations sb.append("10\n"); diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 591d9589..bafcce4a 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -116,6 +116,16 @@ public String toString() { public PImage getImage() { return getPImage(); } + + public static Camera checkActingCamera(Camera camera) { + if (camera instanceof CameraRGBIRDepth) { + Camera acting = ((CameraRGBIRDepth) camera).getActingCamera(); + if (acting != null) { + camera = acting; + } + } + return camera; + } public abstract PImage getPImage(); diff --git a/papart/src/fr/inria/papart/procam/camera/CameraThread.java b/papart/src/fr/inria/papart/procam/camera/CameraThread.java index 187f13aa..3ce42a52 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraThread.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraThread.java @@ -141,6 +141,7 @@ private void tryToFindMarkers() { } this.detectedMarkers = computeMarkerLocations(); camera.setMarkers(this.detectedMarkers); +// System.out.println("Detected markers: " + detectedMarkers.length); break; } } diff --git a/papart/src/fr/inria/papart/procam/camera/TrackedView.java b/papart/src/fr/inria/papart/procam/camera/TrackedView.java index df6c8391..e5530d15 100755 --- a/papart/src/fr/inria/papart/procam/camera/TrackedView.java +++ b/papart/src/fr/inria/papart/procam/camera/TrackedView.java @@ -122,19 +122,20 @@ private void initiateImageCoordinates() { } public PImage getViewOf(Camera camera) { - + camera = Camera.checkActingCamera(camera); + IplImage img = camera.getIplImage(); if (!isExtractionReady(img)) { return null; } - + this.mainImage = img; this.camera = camera; CvMat homography = computeHomography(); // Convert to the good type... - Utils.remapImage(homography, camera.getIplImage(), extractedIplImage, extractedPImage); + Utils.remapImage(homography, img, extractedIplImage, extractedPImage); return extractedPImage; } @@ -156,19 +157,24 @@ private boolean isExtractionReady(IplImage img) { System.err.println("You should init the TrackedView before getting the view."); return false; } - return img != null && cornersSet; + + if(img != null){ + checkMemory(img); + } + + return img != null && (!useManualConrers || (useManualConrers && cornersSet)); } private CvMat computeHomography() { - checkMemory(); computeCorners(); CvMat homography = Utils.createHomography(screenPixelCoordinates, imagePixelCoordinates); return homography; } - private void checkMemory() { + private void checkMemory(IplImage memory) { if (extractedIplImage == null) { - extractedIplImage = Utils.createImageFrom(extractedPImage); + extractedIplImage = Utils.createNewSizeImageFrom(memory,imageWidthPx, imageHeightPx); + if (extractedIplImage == null) { System.err.println("Impossible to create a View! " + this + " " + extractedPImage); } @@ -255,6 +261,7 @@ private void computeCorners() { for (int i = 0; i < 4; i++) { screenPixelCoordinates[i] = camera.pdp.worldToPixel(corner3DPos[i], true); } + cornersSet = true; } public MarkerBoard getBoard() { From 799d171c1582fdd9b1a94885b59b9299020f0d7d Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 19:19:34 +0100 Subject: [PATCH 60/99] example to save a file in the Papart folder. --- papart/data/savedLocations/loc.xml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 papart/data/savedLocations/loc.xml diff --git a/papart/data/savedLocations/loc.xml b/papart/data/savedLocations/loc.xml new file mode 100644 index 00000000..57f4f734 --- /dev/null +++ b/papart/data/savedLocations/loc.xml @@ -0,0 +1,4 @@ + + + + From fed9645fb5191979ee1e4e2b54ae1fc90d2c6378 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 20:09:41 +0100 Subject: [PATCH 61/99] Calibration fixes. --- .../calibration/CalibrationExtrinsic.java | 14 ++++++-------- .../procam/camera/ProjectorAsCamera.java | 18 +++++++++--------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index a142805e..5813033e 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -39,6 +39,8 @@ public class CalibrationExtrinsic { private final PApplet parent; + private static final float OPEN_KINECT_Z_OFFSET = -15f; + private static final float REALSENSE_Z_OFFSET = -42f; // Cameras private ProjectorDisplay projector; private final PMatrix3D kinectCameraExtrinsics = new PMatrix3D(); @@ -121,16 +123,13 @@ protected void calibrateProjectorDepthCam(ArrayList snapsho // TODO: not sure here... ? movePlaneAlongOffset(planeCalibCam); - + saveKinectPlaneCalibration(planeCalibCam, homography); saveKinectCameraExtrinsics(kinectCameraExtrinsics); } - - private static final float OPEN_KINECT_Z_OFFSET = -12; - private static final float REALSENSE_Z_OFFSET = -42f; - private void movePlaneAlongOffset(PlaneCalibration planeCalib){ - + private void movePlaneAlongOffset(PlaneCalibration planeCalib) { + if (depthCameraDevice.type() == Camera.Type.OPEN_KINECT) { System.out.println("Moving the plane along Z... " + OPEN_KINECT_Z_OFFSET); planeCalib.moveAlongNormal(OPEN_KINECT_Z_OFFSET); @@ -140,7 +139,7 @@ private void movePlaneAlongOffset(PlaneCalibration planeCalib){ } } - + protected void calibrateDepthAndExternalCam(ArrayList snapshots) { calibrateDepthToExternalExtr(snapshots); calibrateDepthCamPlane(snapshots); @@ -193,7 +192,6 @@ public boolean calibrateDepthCamPlane(ArrayList snapshots) return true; } - public boolean calibrateDepthCamPlaneOnly(ArrayList snapshots) { // Depth -> color extrinsics PMatrix3D kinectExtr = depthCameraDevice.getStereoCalibration().get(); diff --git a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java index 56925d37..3dbba96a 100644 --- a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java @@ -43,12 +43,12 @@ public class ProjectorAsCamera extends Camera { private IplImage grayImage; private final ProjectorDisplay projector; - public ProjectorAsCamera(ProjectorDisplay projector, Camera cameraTracking, TrackedView view){ - this.projectorView = view; + public ProjectorAsCamera(ProjectorDisplay projector, Camera cameraTracking, TrackedView view) { + this.projectorView = view; this.cameraTracking = cameraTracking; this.projector = projector; } - + public void setImage(IplImage image) { this.currentImage = image; } @@ -105,15 +105,14 @@ public PImage getPImage() { @Override public void grab() { IplImage img = projectorView.getIplViewOf(cameraTracking); - if(img != null){ + if (img != null) { currentImage = img; - } - - if(this.format == PixelFormat.GRAY){ - currentImage = greyProjectorImage(img); + if (this.format == PixelFormat.GRAY) { + currentImage = greyProjectorImage(img); + } } } - + private opencv_core.IplImage greyProjectorImage(opencv_core.IplImage projImage) { if (projImage.nChannels() == 1) { @@ -134,6 +133,7 @@ private opencv_core.IplImage greyProjectorImage(opencv_core.IplImage projImage) // } return grayImage; } + /** * Not used. */ From 565917b438e4deb6d69852d67f09eb7703a5f81d Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 20:10:05 +0100 Subject: [PATCH 62/99] drawTouch is now 2D only. --- papart/src/fr/inria/papart/procam/PaperTouchScreen.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java index a59bca74..e0fa1321 100755 --- a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java @@ -115,6 +115,7 @@ public void updateTouch() { } + // TODO: cleaning of this static private final int DEFAULT_TOUCH_SIZE = 15; protected void drawTouch() { @@ -124,11 +125,12 @@ protected void drawTouch() { protected void drawTouch(int ellipseSize) { for (Touch t : touchList) { if (t.is3D) { - fill(185, 142, 62); + // fill(185, 142, 62); } else { fill(58, 71, 198); + ellipse(t.position.x, t.position.y, ellipseSize, ellipseSize); } - ellipse(t.position.x, t.position.y, ellipseSize, ellipseSize); + // ellipse(t.position.x, t.position.y, ellipseSize, ellipseSize); // ellipse(t.pposition.x, t.pposition.y, ellipseSize /2 , ellipseSize /2); // pushMatrix(); From 3972893af57686a1a388ac4e74bab907c86ce902 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 14 Dec 2016 20:10:32 +0100 Subject: [PATCH 63/99] updtatde to 1.0 --- papart/src/fr/inria/papart/apps/MyApp2D.java | 2 +- papart/src/fr/inria/papart/apps/MyApp2DTouch.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/papart/src/fr/inria/papart/apps/MyApp2D.java b/papart/src/fr/inria/papart/apps/MyApp2D.java index 382b768b..e7e0f29d 100644 --- a/papart/src/fr/inria/papart/apps/MyApp2D.java +++ b/papart/src/fr/inria/papart/apps/MyApp2D.java @@ -28,7 +28,7 @@ public class MyApp2D extends PaperScreen { @Override public void settings() { setDrawingSize(297, 210); - loadMarkerBoard(Papart.markerFolder + "A3-small1.svg", 297, 210); + loadMarkerBoard(Papart.markerFolder + "A4-default.svg", 297, 210); // loadMarkerBoard(Papart.markerFolder + "test.cfg", 297, 210); } diff --git a/papart/src/fr/inria/papart/apps/MyApp2DTouch.java b/papart/src/fr/inria/papart/apps/MyApp2DTouch.java index ce1d05a3..b3dc1ffa 100644 --- a/papart/src/fr/inria/papart/apps/MyApp2DTouch.java +++ b/papart/src/fr/inria/papart/apps/MyApp2DTouch.java @@ -28,7 +28,7 @@ public class MyApp2DTouch extends PaperTouchScreen { @Override public void settings() { setDrawingSize(297, 210); - loadMarkerBoard(Papart.markerFolder + "A3-small1.cfg", 297, 210); + loadMarkerBoard(Papart.markerFolder + "A4-default.svg", 297, 210); } @Override From 3a370db5cb5eec669a6d59e05e4e2327e19f2579 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 15 Dec 2016 20:33:40 +0100 Subject: [PATCH 64/99] The tracker is now loaded just before use. --- .../fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java b/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java index 55561f06..594511ee 100644 --- a/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java +++ b/papart/src/fr/inria/papart/tracking/MarkerBoardARToolKitPlus.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.tracking; +import static fr.inria.papart.procam.Papart.camCalibARtoolkit; import static fr.inria.papart.tracking.MarkerBoard.BLOCK_UPDATE; import static fr.inria.papart.tracking.MarkerBoard.FORCE_UPDATE; import static fr.inria.papart.tracking.MarkerBoard.NORMAL; @@ -118,6 +119,10 @@ protected void addTrackerImpl(Camera camera) { // tracker.setUseDetectLite(false); tracker.setUseDetectLite(true); + // Deal with the calibration files here... + Camera.convertARParams(this.applet, camera.getProjectiveDevice(), camCalibARtoolkit); + camera.setCalibrationARToolkit(camCalibARtoolkit); + // Initialize the tracker, with camera parameters and marker config. if (!tracker.init(camera.getCalibrationARToolkit(), this.getFileName(), 1.0f, 10000.f)) { System.err.println("Init ARTOOLKIT Error " + camera.getCalibrationARToolkit() + " " + this.getFileName()); From f9b851a10badd26c1b332637d7dcc9a84f3362b9 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 15 Dec 2016 20:34:02 +0100 Subject: [PATCH 65/99] Updates in ColorDetecion, now with a new test. --- .../inria/papart/procam/ColorDetection.java | 55 ++++++++++++++----- .../papart/procam/camera/TrackedView.java | 7 ++- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/ColorDetection.java b/papart/src/fr/inria/papart/procam/ColorDetection.java index d151775c..46e5592d 100755 --- a/papart/src/fr/inria/papart/procam/ColorDetection.java +++ b/papart/src/fr/inria/papart/procam/ColorDetection.java @@ -54,25 +54,21 @@ public ColorDetection(PaperScreen paperScreen) { } public void initialize() { - boardView = new TrackedView(paperScreen); - setPosition(pos); boardView.setCaptureSizeMM(captureSize); boardView.setImageWidthPx(picWidth); boardView.setImageHeightPx(picHeight); boardView.init(); - } public void setPosition(PVector pos) { this.pos.set(pos); - if (boardView != null) { if (invY) { boardView.setBottomLeftCorner(new PVector(pos.x, paperScreen.drawingSize.y - pos.y)); } else { - boardView.setBottomLeftCorner(pos); + boardView.setBottomLeftCorner(new PVector(pos.x, pos.y)); } } } @@ -84,13 +80,23 @@ public void update() { public void drawSelf() { computeColor(); + drawCaptureZone(); + paperScreen.pushMatrix(); paperScreen.translate(pos.x, pos.y, 1); - drawCaptureZonePriv(); - drawCapturedColor(); + if (!invY) { +// paperScreen.translate(0, captureSize.y, 0); + } + +// drawCaptureZonePriv(); + paperScreen.translate(captureSize.x + 20, 0); drawCapturedImage(); + + paperScreen.translate(20, 0); + drawCapturedColor(); + paperScreen.popMatrix(); } @@ -101,14 +107,14 @@ public PVector getPosition() { public void drawCapturedImage() { PImage out = getImage(); if (out != null) { - paperScreen.image(out, 0, -picHeight - 5, picWidth, picHeight); + paperScreen.image(out, 0, 0, captureSize.x, captureSize.y); } } public void drawCapturedColor() { paperScreen.fill(this.col); paperScreen.noStroke(); - paperScreen.ellipse(0, -picWidth - 5, picHeight, picHeight); + paperScreen.ellipse(0, 0, 10, 10); } public void drawCaptureZonePriv() { @@ -122,12 +128,18 @@ public void drawCaptureZonePriv() { public void drawCaptureZone() { paperScreen.pushMatrix(); paperScreen.translate(pos.x, - pos.y, 1); + pos.y, + 0.2f); + + if (!invY) { + paperScreen.translate(0, captureSize.y, 0); + } + paperScreen.strokeWeight(2); paperScreen.noFill(); paperScreen.stroke(80); paperScreen.rectMode(PApplet.CORNER); - paperScreen.rect(0, 0, captureSize.x, captureSize.y); + paperScreen.rect(0, -captureSize.y, captureSize.x, captureSize.y); paperScreen.popMatrix(); } @@ -208,23 +220,38 @@ public void setCaptureOffset(PVector captureOffset) { this.captureOffset = captureOffset; } + public void setCaptureOffset(float x, float y) { + this.captureOffset.set(x, y); + } + public PVector getCaptureSize() { return captureSize.copy(); } /** - * Set the capture size in millimeters. + * Set the capture size in millimeters. + * * @param x - * @param y + * @param y */ public void setCaptureSize(float x, float y) { this.captureSize.set(x, y); } + /** + * Set the capture size in millimeters. + * + * @param size in mm. + */ + public void setCaptureSize(PVector size) { + setCaptureSize(size.x, size.y); + } + /** * Set the picture size for analysis in pixels. + * * @param picWidth - * @param picHeight + * @param picHeight */ public void setPicSize(int picWidth, int picHeight) { this.picWidth = picWidth; diff --git a/papart/src/fr/inria/papart/procam/camera/TrackedView.java b/papart/src/fr/inria/papart/procam/camera/TrackedView.java index e5530d15..3d3e17fc 100755 --- a/papart/src/fr/inria/papart/procam/camera/TrackedView.java +++ b/papart/src/fr/inria/papart/procam/camera/TrackedView.java @@ -134,8 +134,9 @@ public PImage getViewOf(Camera camera) { CvMat homography = computeHomography(); + boolean useRGB = camera.getPixelFormat() == Camera.PixelFormat.RGB; // Convert to the good type... - Utils.remapImage(homography, img, extractedIplImage, extractedPImage); + Utils.remapImage(homography, img, extractedIplImage, extractedPImage, useRGB); return extractedPImage; } @@ -286,6 +287,10 @@ public void setBottomLeftCorner(PVector bottomLeftCorner) { this.bottomLeftCorner.set(bottomLeftCorner); this.isYUp = true; } + + public void forceYOrientation(boolean up){ + this.isYUp = up; + } /** * Use either TopLeftCorner OR BottomLeftCorner. Calling one will discard From 47e296b74898cbf425a11c2533994ec97532461f Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 15 Dec 2016 20:34:30 +0100 Subject: [PATCH 66/99] ARToolkit is now somewhere else. --- papart/src/fr/inria/papart/procam/Papart.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index 1566ce97..a79ea602 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -636,17 +636,17 @@ private void checkInitialization() { /** * Only for .cfg marker tracking. */ - private void setARToolkitCalib() { - // TODO: warning −> used only for .cfg files. - // try to get the params from the camera, instead of the files! - if (cameraTracking.isCalibrated()) { - Camera.convertARParams(this.applet, getPublicCameraTracking().getProjectiveDevice(), camCalibARtoolkit); - getPublicCameraTracking().setCalibrationARToolkit(camCalibARtoolkit); - } else { - Camera.convertARParams(this.applet, cameraCalib, camCalibARtoolkit); - getPublicCameraTracking().setCalibrationARToolkit(camCalibARtoolkit); - } - } +// private void setARToolkitCalib() { +// // TODO: warning −> used only for .cfg files. +// // try to get the params from the camera, instead of the files! +// if (cameraTracking.isCalibrated()) { +// Camera.convertARParams(this.applet, getPublicCameraTracking().getProjectiveDevice(), camCalibARtoolkit); +// getPublicCameraTracking().setCalibrationARToolkit(camCalibARtoolkit); +// } else { +// Camera.convertARParams(this.applet, cameraCalib, camCalibARtoolkit); +// getPublicCameraTracking().setCalibrationARToolkit(camCalibARtoolkit); +// } +// } /** * * @@ -801,7 +801,7 @@ public void startTrackingWithoutThread() { System.err.println("Start Tracking requires a Camera..."); return; } - setARToolkitCalib(); +// setARToolkitCalib(); this.getPublicCameraTracking().trackSheets(true); } @@ -814,7 +814,7 @@ public void startTracking() { System.err.println("Start Tracking requires a Camera..."); return; } - setARToolkitCalib(); +// setARToolkitCalib(); this.getPublicCameraTracking().trackSheets(true); startCameraThread(); } From 6f4edbb9a288106d576d2f3c2a54eadbd9426d8e Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 15 Dec 2016 20:34:53 +0100 Subject: [PATCH 67/99] remapImage now handles RGB vs BGR images. --- papart/src/fr/inria/papart/procam/Utils.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java index 6889e73c..c6d6fb7e 100755 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ b/papart/src/fr/inria/papart/procam/Utils.java @@ -486,11 +486,14 @@ static public void remapImage(PVector[] in, PVector[] out, IplImage imgIn, IplIm } static public void remapImage(CvMat homography, IplImage imgIn, IplImage imgTmp, PImage Pout) { + remapImage(homography, imgIn, imgTmp, Pout, false); + } + static public void remapImage(CvMat homography, IplImage imgIn, IplImage imgTmp, PImage Pout, boolean isRgb) { opencv_imgproc.cvWarpPerspective(imgIn, imgTmp, homography); // opencv_imgproc.CV_INTER_LINEAR ); // opencv_imgproc.CV_WARP_FILL_OUTLIERS); // getFillColor()); - IplImageToPImage(imgTmp, false, Pout); + IplImageToPImage(imgTmp, isRgb, Pout); } From da994a9f7c93b234368de4866db11123dadfd2c3 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 16 Dec 2016 17:44:21 +0100 Subject: [PATCH 68/99] Utils refactored. Bug fixed, the useRawDepth flag was used when not needed. --- .../src/fr/inria/papart/apps/PaperApp2D.java | 2 +- .../analysis/KinectDepthAnalysis.java | 5 +- .../depthcam/devices/DepthCameraDevice.java | 2 +- .../papart/multitouch/KinectTouchInput.java | 26 +- .../inria/papart/procam/ColorDetection.java | 4 +- papart/src/fr/inria/papart/procam/Papart.java | 16 +- .../inria/papart/procam/PaperTouchScreen.java | 4 +- papart/src/fr/inria/papart/procam/Screen.java | 5 +- papart/src/fr/inria/papart/procam/Utils.java | 1051 ----------------- .../papart/procam/camera/CamImageColor.java | 7 +- .../papart/procam/camera/CamImageGray.java | 13 +- .../fr/inria/papart/procam/camera/Camera.java | 13 +- .../papart/procam/camera/CameraRealSense.java | 5 +- .../procam/camera/ProjectorAsCamera.java | 4 +- .../papart/procam/camera/TrackedView.java | 11 +- .../papart/procam/display/ARDisplay.java | 2 +- .../procam/display/ProjectorDisplay.java | 2 +- .../procam/utils/ARToolkitPlusUtils.java | 277 +++++ .../papart/procam/{ => utils}/DrawUtils.java | 2 +- .../inria/papart/procam/utils/ImageUtils.java | 425 +++++++ .../papart/procam/utils/LibraryUtils.java | 103 ++ .../inria/papart/procam/utils/MathUtils.java | 279 +++++ 22 files changed, 1160 insertions(+), 1098 deletions(-) delete mode 100755 papart/src/fr/inria/papart/procam/Utils.java create mode 100644 papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java rename papart/src/fr/inria/papart/procam/{ => utils}/DrawUtils.java (99%) mode change 100755 => 100644 create mode 100644 papart/src/fr/inria/papart/procam/utils/ImageUtils.java create mode 100644 papart/src/fr/inria/papart/procam/utils/LibraryUtils.java create mode 100644 papart/src/fr/inria/papart/procam/utils/MathUtils.java diff --git a/papart/src/fr/inria/papart/apps/PaperApp2D.java b/papart/src/fr/inria/papart/apps/PaperApp2D.java index d2c465ac..f8b12d4c 100644 --- a/papart/src/fr/inria/papart/apps/PaperApp2D.java +++ b/papart/src/fr/inria/papart/apps/PaperApp2D.java @@ -36,7 +36,7 @@ public class PaperApp2D extends PApplet { @Override public void settings() { - size(900, 600, P3D); + size(900, 600); // fullScreen(P3D, 2); } diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index b1afd76e..0a6815c1 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -31,7 +31,8 @@ import static fr.inria.papart.depthcam.analysis.DepthAnalysis.papplet; import fr.inria.papart.depthcam.devices.RealSense; import fr.inria.papart.procam.ProjectiveDeviceP; -import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.utils.MathUtils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraRealSense; import java.nio.ByteBuffer; @@ -332,7 +333,7 @@ public PVector findDepthAtRGB(float x, float y, float z) { int worldToPixel = getDepthCameraDevice().getDepthCamera().getProjectiveDevice().worldToPixel(v2); // Point viewed in the depth camera point of view. - PVector pointDepth = Utils.toPVector(depthData.depthPoints[worldToPixel]); + PVector pointDepth = MathUtils.toPVector(depthData.depthPoints[worldToPixel]); return pointDepth; // get it back in the RGB point of view. diff --git a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java index a6af86a7..3888a52e 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java @@ -22,7 +22,7 @@ import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Papart; -import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraRGBIRDepth; diff --git a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java index d1cdb881..58212719 100755 --- a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java @@ -359,10 +359,8 @@ private PVector projectPointToScreen(Screen screen, // paperScreenCoord = project(screen, display, // p.x / (float) pdp.getWidth(), // p.y / (float) pdp.getHeight()); - // This works well in the best of worlds, where the depth information is // reliable. - paperScreenCoord = new PVector(); PVector pKinectP = new PVector(pKinect.x, pKinect.y, pKinect.z); @@ -372,7 +370,7 @@ private PVector projectPointToScreen(Screen screen, // // zOffset difference ? 1cm -> surface view. pKinectP.y -= 10; pKinectP.z += 10; - + // TODO: Here change the display.getCamera() to // another way to get the screen location... PMatrix3D transfo = screen.getLocation(display.getCamera()); @@ -381,10 +379,28 @@ private PVector projectPointToScreen(Screen screen, // TODO: check bounds too ?! } else { - // This is not working with raw Depth, because the coordinates + +// // other possib, we know the 3D Point -> screen transfo... +// PMatrix3D kinectExtrinsics = kinectDevice.getDepthCamera().getExtrinsics().get(); +// kinectExtrinsics.invert(); +// PMatrix3D paperLocation = screen.getLocation(display.getCamera()).get(); +// paperLocation.invert(); +// Vec3D depthPoint = pKinect; +// PVector pointPosExtr = new PVector(); +// PVector pointPosDisplay = new PVector(); +// kinectExtrinsics.mult(new PVector(depthPoint.x, +// depthPoint.y, +// depthPoint.z), +// pointPosExtr); +// paperLocation.mult(pointPosExtr, +// pointPosDisplay); +// System.out.println("new: " + pointPosDisplay); +// return pointPosDisplay; + // Not ready yet... + +// This is not working with raw Depth, because the coordinates // of pNorm is not in display Space, but in a custom space // defined for the touch surface... - paperScreenCoord = project(screen, display, pNorm.x, pNorm.y); diff --git a/papart/src/fr/inria/papart/procam/ColorDetection.java b/papart/src/fr/inria/papart/procam/ColorDetection.java index 46e5592d..7192fe48 100755 --- a/papart/src/fr/inria/papart/procam/ColorDetection.java +++ b/papart/src/fr/inria/papart/procam/ColorDetection.java @@ -19,6 +19,8 @@ */ package fr.inria.papart.procam; +import fr.inria.papart.procam.utils.MathUtils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.TrackedView; import processing.core.PApplet; @@ -200,7 +202,7 @@ public int computeOccurencesOfColor(int c, int threshold) { for (int k = 0; k < pxNb; k++) { int c2 = out.pixels[k]; - boolean isClose = Utils.colorDist(c, c2, threshold); + boolean isClose = MathUtils.colorDistRGB(c, c2, threshold); if (isClose) { nbSameColor++; } diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index a79ea602..cbfecb88 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -40,6 +40,7 @@ import fr.inria.papart.multitouch.TouchInput; import fr.inria.papart.multitouch.TUIOTouchInput; import fr.inria.papart.multitouch.KinectTouchInput; +import fr.inria.papart.procam.utils.LibraryUtils; import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraOpenKinect; import fr.inria.papart.procam.camera.CameraRGBIRDepth; @@ -64,10 +65,12 @@ */ public class Papart { - public final static String folder = fr.inria.papart.procam.Utils.getPapartFolder() + "/data/"; + public final static String folder = LibraryUtils.getPapartFolder() + "/data/"; public final static String calibrationFolder = folder + "calibration/"; public final static String markerFolder = folder + "markers/"; + public static boolean isInria = false; + public static boolean isReality= true; public static String calibrationFileName = "A4-calib.svg"; public static String cameraCalibName = "camera.yaml"; @@ -95,7 +98,6 @@ public class Papart { public static String planeAndProjectionCalib = calibrationFolder + "PlaneProjectionCalibration.xml"; public static String touchCalib = calibrationFolder + "Touch2DCalibration.xml"; public static String touchCalib3D = calibrationFolder + "Touch3DCalibration.xml"; - public static String defaultFont = folder + "Font/" + "GentiumBookBasic-48.vlw"; public int defaultFontSize = 12; protected static Papart singleton = null; @@ -136,11 +138,10 @@ public Papart(Object applet) { this.applet = (PApplet) applet; this.appletClass = applet.getClass(); - PFont font = this.applet.loadFont(defaultFont); // TODO: singleton -> Better implementation. if (Papart.singleton == null) { Papart.singleton = this; - fr.inria.papart.drawingapp.DrawUtils.applet = (PApplet) applet; + fr.inria.papart.procam.utils.DrawUtils.applet = (PApplet) applet; } } @@ -661,9 +662,10 @@ public void loadTouchInput() { private void updateDepthCameraDeviceExtrinsics(){ // Check if depthCamera is the same as the camera ! - if (cameraTracking instanceof CameraRGBIRDepth - && cameraTracking == depthCameraDevice.getMainCamera()) { - + if (projector == null && + cameraTracking instanceof CameraRGBIRDepth && + cameraTracking == depthCameraDevice.getMainCamera()) { + // No extrinsic used, it is already in the camera... depthCameraDevice.getDepthCamera().setExtrinsics(depthCameraDevice.getStereoCalibration()); diff --git a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java index e0fa1321..468bd352 100755 --- a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java @@ -19,6 +19,7 @@ */ package fr.inria.papart.procam; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.display.BaseDisplay; import fr.inria.papart.multitouch.TouchInput; @@ -27,6 +28,7 @@ import fr.inria.papart.multitouch.TUIOTouchInput; import fr.inria.papart.multitouch.TouchList; import fr.inria.papart.multitouch.TouchPoint; +import fr.inria.papart.procam.utils.MathUtils; import fr.inria.papart.procam.display.ProjectorDisplay; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -254,7 +256,7 @@ public int getColorOccurencesFrom(PVector coord, int radius, int col, int thresh for (int i = minX; i <= maxX; i++) { int offset = i + j * cameraTracking.width(); int pxCol = getColor(buff, offset); - if (Utils.colorDist(col, pxCol, threshold)) { + if (MathUtils.colorDistRGB(col, pxCol, threshold)) { k++; } } diff --git a/papart/src/fr/inria/papart/procam/Screen.java b/papart/src/fr/inria/papart/procam/Screen.java index 4bce55bb..7cf63a1c 100755 --- a/papart/src/fr/inria/papart/procam/Screen.java +++ b/papart/src/fr/inria/papart/procam/Screen.java @@ -23,9 +23,10 @@ import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.calibration.HomographyCreator; +import fr.inria.papart.procam.utils.MathUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.display.ProjectorDisplay; -import static fr.inria.papart.procam.Utils.toVec; +import static fr.inria.papart.procam.utils.MathUtils.toVec; import processing.core.PApplet; import processing.core.PMatrix3D; import processing.core.PVector; @@ -255,7 +256,7 @@ public void computeScreenPosTransform(Camera camera) { mat.translate(-size.x, 0, 0); paperPosCorners3D[3] = new PVector(mat.m03, mat.m13, mat.m23); - plane = new Plane(new Triangle3D(toVec(paperPosCorners3D[0]), toVec(paperPosCorners3D[1]), toVec(paperPosCorners3D[2]))); + plane = new Plane(new Triangle3D(MathUtils.toVec(paperPosCorners3D[0]), MathUtils.toVec(paperPosCorners3D[1]), MathUtils.toVec(paperPosCorners3D[2]))); homography.addPoint(paperPosCorners3D[0], new PVector(0, 0)); homography.addPoint(paperPosCorners3D[1], new PVector(1, 0)); diff --git a/papart/src/fr/inria/papart/procam/Utils.java b/papart/src/fr/inria/papart/procam/Utils.java deleted file mode 100755 index c6d6fb7e..00000000 --- a/papart/src/fr/inria/papart/procam/Utils.java +++ /dev/null @@ -1,1051 +0,0 @@ -/* - * Part of the PapARt project - https://project.inria.fr/papart/ - * - * Copyright (C) 2014-2016 Inria - * Copyright (C) 2011-2013 Bordeaux University - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, version 2.1. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; If not, see - * . - */ -package fr.inria.papart.procam; - -import fr.inria.papart.procam.camera.Camera.PixelFormat; - -import org.bytedeco.javacv.CameraDevice; -import org.bytedeco.javacv.ProjectorDevice; -import org.bytedeco.javacpp.opencv_imgproc; -import static org.bytedeco.javacpp.opencv_core.*; -import static org.bytedeco.javacpp.opencv_calib3d.*; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.net.URL; -import java.nio.ByteBuffer; -import processing.core.*; -import static processing.core.PConstants.ARGB; -import static processing.core.PConstants.RGB; -import processing.opengl.Texture; -import toxi.geom.Matrix4x4; -import toxi.geom.Vec3D; -import java.io.*; -import java.nio.FloatBuffer; -import static processing.core.PConstants.ALPHA; -import static processing.core.PConstants.GRAY; -import static processing.core.PConstants.HSB; - -/** - * - * @author jeremy - */ -public class Utils { - - static public final String LibraryName = "PapARt"; - - static public Process runExample(String exampleName, boolean silent) { - - try { - StringBuilder commandLine = new StringBuilder(); - String papartFolder = getPapartFolder(); - String sketchFolder = "/examples/" + exampleName + "/"; - - // On linux only - commandLine.append("nohup "); - - // TODO: find processing-java even when not installed ! - // Or make an easy install... - commandLine.append("processing-java "); - - commandLine.append("--sketch=") - .append(papartFolder) - .append(sketchFolder) - .append(" --output=") - .append(papartFolder) - .append(sketchFolder) - .append("build") - .append(" --force --run"); - -// commandLine.append("\""); -// processing-java --sketch=/home/jiii/papart/sketches/papartExamples/Kinect/MultiTouchKinect/ --output=/home/jiii/papart/sketches/papartExamples/Kinect/MultiTouchKinect/build --force --run -// println("Starting... \n" + commandLine.toString()); - // TODO: Alternative on Windows... when /bin/sh is not installed. - Process p = Runtime.getRuntime().exec(commandLine.toString()); -// Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", commandLine.toString()}); -// Process p = Runtime.getRuntime().exec(new String[]{"nohup", commandLine.toString()}); - - if (!silent) { - String line; - BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream())); - BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); - while ((line = bri.readLine()) != null) { - System.out.println(line); - } - bri.close(); - while ((line = bre.readLine()) != null) { - System.out.println(line); - } - bre.close(); - } - - return p; - // p.waitFor(); - } catch (Exception e) { - System.out.println("Could not start the Papart example : " - + exampleName - + "\n" + e); - }; - return null; - - } -// sketchbook - -// processing-java --sketch=/home/jiii/papart/sketches/papartExamples/Kinect/MultiTouchKinect/ --output=/home/jiii/papart/sketches/papartExamples/Kinect/MultiTouchKinect/build --force --run - static public String getSketchbookFolder() { - - String sketchbook = java.lang.System.getenv("SKETCHBOOK"); - if (sketchbook != null) { - return sketchbook; - } - - URL main = Matrix4x4.class.getResource("Matrix4x4.class"); - String tmp = main.getPath(); - - tmp = tmp.substring(0, tmp.indexOf('!')); - tmp = tmp.replace("file:", ""); -// tmp = tmp.replace("file:/", ""); TODO: OS check ? - - File f = new File(tmp); - if (!f.exists()) { - System.err.println("Error in loading the Sketchbook folder."); - } - - // if the file is within a library/lib folder - if (f.getParentFile().getAbsolutePath().endsWith(("/lib"))) { - // pathToSketchbook/libraries/myLib/library/lib/myLib.jar - f = f.getParentFile().getParentFile().getParentFile().getParentFile().getParentFile(); - } else { - // pathToSketchbook/libraries/myLib/library/myLib.jar - f = f.getParentFile().getParentFile().getParentFile().getParentFile(); - } - - return f.getAbsolutePath(); - } - - static public String getLibraryFolder(String libname) { - return getLibrariesFolder() + "/libraries/" + libname; - } - - static public String getLibrariesFolder() { - - // This is used, as Papart classes are often linked to another folder... - URL main = Matrix4x4.class.getResource("Matrix4x4.class"); -// URL main = ARDisplay.class.getResource("ARDisplay.class"); - String tmp = main.getPath(); - - System.out.println("path " + tmp); - - // its in a jar - if (tmp.contains("!")) { - tmp = tmp.substring(0, tmp.indexOf('!')); - tmp = tmp.replace("file:", ""); -// tmp = tmp.replace("file:/", ""); TODO: OS check ? - } - - File f = new File(tmp); - if (!f.exists()) { - System.err.println("Error in loading the Sketchbook folder."); - } - - // if the file is within a library/lib folder - if (f.getParentFile().getAbsolutePath().endsWith(("/lib"))) { - // pathToSketchbook/libraries/myLib/library/lib/myLib.jar - f = f.getParentFile().getParentFile().getParentFile().getParentFile(); - } else { - // pathToSketchbook/libraries/myLib/library/myLib.jar - f = f.getParentFile().getParentFile().getParentFile(); - } - - return f.getAbsolutePath(); - } - - static public String getPapartFolder() { - - String sketchbook = java.lang.System.getenv("SKETCHBOOK"); - if (sketchbook != null) { - System.out.println("Found SKETCHBOOK environment variable."); - return sketchbook + "/libraries/" + LibraryName; - } - - return getLibrariesFolder() + "/" + LibraryName; - } - - static public PVector mult(PMatrix3D mat, PVector source, PVector target) { - if (target == null) { - target = new PVector(); - } - target.x = mat.m00 * source.x + mat.m01 * source.y + mat.m02 * source.z + mat.m03; - target.y = mat.m10 * source.x + mat.m11 * source.y + mat.m12 * source.z + mat.m13; - target.z = mat.m20 * source.x + mat.m21 * source.y + mat.m22 * source.z + mat.m23; - float tw = mat.m30 * source.x + mat.m31 * source.y + mat.m32 * source.z + mat.m33; - if (tw != 0 && tw != 1) { - target.div(tw); - } - return target; - } - - static public Vec3D toVec(PVector p) { - return new Vec3D(p.x, p.y, p.z); - } - - static public PVector toPVector(Vec3D p) { - return new PVector(p.x, p.y, p.z); - } - - static public boolean colorDist(int c1, int c2, int threshold) { - int r1 = c1 >> 16 & 0xFF; - int g1 = c1 >> 8 & 0xFF; - int b1 = c1 >> 0 & 0xFF; - - int r2 = c2 >> 16 & 0xFF; - int g2 = c2 >> 8 & 0xFF; - int b2 = c2 >> 0 & 0xFF; - - int dr = PApplet.abs(r1 - r2); - int dg = PApplet.abs(g1 - g2); - int db = PApplet.abs(b1 - b2); - return dr < threshold && dg < threshold && db < threshold; - } - - // TODO: throws ... - public static void savePMatrix3D(PApplet pa, PMatrix3D mat, String filename) { - String[] lines = new String[16]; - - lines[0] = Float.toString(mat.m00); - lines[1] = Float.toString(mat.m01); - lines[2] = Float.toString(mat.m02); - lines[3] = Float.toString(mat.m03); - lines[4] = Float.toString(mat.m10); - lines[5] = Float.toString(mat.m11); - lines[6] = Float.toString(mat.m12); - lines[7] = Float.toString(mat.m13); - lines[8] = Float.toString(mat.m20); - lines[9] = Float.toString(mat.m21); - lines[10] = Float.toString(mat.m22); - lines[11] = Float.toString(mat.m23); - lines[12] = Float.toString(mat.m30); - lines[13] = Float.toString(mat.m31); - lines[14] = Float.toString(mat.m32); - lines[15] = Float.toString(mat.m33); - - pa.saveStrings(filename, lines); - } - - public static void addPMatrix3D(PMatrix3D src, PMatrix3D toAdd) { - src.m00 += toAdd.m00; - src.m01 += toAdd.m01; - src.m02 += toAdd.m02; - src.m03 += toAdd.m03; - - src.m10 += toAdd.m10; - src.m11 += toAdd.m11; - src.m12 += toAdd.m12; - src.m13 += toAdd.m13; - - src.m20 += toAdd.m20; - src.m21 += toAdd.m21; - src.m22 += toAdd.m22; - src.m23 += toAdd.m23; - - src.m30 += toAdd.m30; - src.m31 += toAdd.m31; - src.m32 += toAdd.m32; - src.m33 += toAdd.m33; - - } - - static public void scaleMat(PMatrix3D mat, float scale) { - //applscale(scale, 0, 0, 0, 0, scale, 0, 0, 0, 0, scale, 0, 0, 0, 0, 1); - mat.m00 *= scale; - mat.m01 *= scale; - mat.m02 *= scale; - mat.m03 *= scale; - mat.m10 *= scale; - mat.m11 *= scale; - mat.m12 *= scale; - mat.m13 *= scale; - mat.m20 *= scale; - mat.m21 *= scale; - mat.m22 *= scale; - mat.m23 *= scale; - mat.m30 *= scale; - mat.m31 *= scale; - mat.m32 *= scale; - mat.m33 *= scale; - } - - public static PMatrix3D loadPMatrix3D(PApplet pa, String filename) throws FileNotFoundException { - String[] lines = pa.loadStrings(filename); - if (lines == null) { - throw new FileNotFoundException(filename); - } - - PMatrix3D mat = new PMatrix3D(Float.parseFloat(lines[0]), Float.parseFloat(lines[1]), Float.parseFloat(lines[2]), Float.parseFloat(lines[3]), - Float.parseFloat(lines[4]), Float.parseFloat(lines[5]), Float.parseFloat(lines[6]), Float.parseFloat(lines[7]), - Float.parseFloat(lines[8]), Float.parseFloat(lines[9]), Float.parseFloat(lines[10]), Float.parseFloat(lines[11]), - Float.parseFloat(lines[12]), Float.parseFloat(lines[13]), Float.parseFloat(lines[14]), Float.parseFloat(lines[15])); - return mat; - } - - static public IplImage createImageFrom(IplImage imgIn, PImage Pout) { - // TODO: avoid this creation !! - CvSize outSize = new CvSize(); - outSize.width(Pout.width); - outSize.height(Pout.height); - IplImage imgOut = cvCreateImage(outSize, // size - imgIn.depth(), // depth - imgIn.nChannels()); -// imgIn.w - return imgOut; - } - - static public IplImage createImageFrom(IplImage imgIn) { - // TODO: avoid this creation !! - CvSize outSize = new CvSize(); - outSize.width(imgIn.width()); - outSize.height(imgIn.height()); - IplImage imgOut = cvCreateImage(outSize, // size - imgIn.depth(), // depth - imgIn.nChannels()); -// imgIn.w - return imgOut; - } - - static public IplImage createNewSizeImageFrom(IplImage imgIn, int width, int height) { - // TODO: avoid this creation !! - CvSize outSize = new CvSize(); - outSize.width(width); - outSize.height(height); - IplImage imgOut = cvCreateImage(outSize, // size - imgIn.depth(), // depth - imgIn.nChannels()); -// imgIn.w - return imgOut; - } - - static public IplImage createImageFrom(PImage in) { - // TODO: avoid this creation !! - CvSize outSize = new CvSize(); - outSize.width(in.width); - outSize.height(in.height); - - System.out.println("inputImage to create an IPL:" + in.width + " " + in.height + " " + in.format); - IplImage imgOut = null; - if (in.format == RGB) { - imgOut = cvCreateImage(outSize, // size - IPL_DEPTH_8U, // depth - 3); - } - - if (in.format == ALPHA || in.format == GRAY) { - imgOut = cvCreateImage(outSize, // size - IPL_DEPTH_8U, // depth - 1); - } - - if (in.format == ARGB) { - imgOut = cvCreateImage(outSize, // size - IPL_DEPTH_8U, // depth - 4); - } - -// imgIn.w - return imgOut; - } - - static public void createAnaglyph(PImage imgL, PImage imgR, PImage imgOut) { - - imgL.loadPixels(); - imgR.loadPixels(); - imgOut.loadPixels(); - - int[] pL = imgL.pixels; - int[] pR = imgR.pixels; - int[] pO = imgOut.pixels; - for (int i = 0; i < pL.length; i++) { - pO[i] = (pR[i] >> 16) << 16 - | (pL[i] >> 8) & 0xFF << 8 - | pL[i] & 0xFF; - -// pO[i] = pL[i]; - } - imgOut.updatePixels(); -// imgL.updatePixels(); - - } - - static public CvMat createHomography(PVector[] in, PVector[] out) { - - CvMat srcPoints; - CvMat dstPoints; - int nbPoints = in.length; - CvMat homography; - - // TODO: no create map - srcPoints = cvCreateMat(2, in.length, CV_32FC1); - dstPoints = cvCreateMat(2, in.length, CV_32FC1); - homography = cvCreateMat(3, 3, CV_32FC1); - - for (int i = 0; i < in.length; i++) { - srcPoints.put(i, in[i].x); - srcPoints.put(i + nbPoints, in[i].y); - dstPoints.put(i, out[i].x); - dstPoints.put(i + nbPoints, out[i].y); - } - - cvFindHomography(srcPoints, dstPoints, homography); -// It is better to use : GetPerspectiveTransform - return homography; - } - - // TODO: finish this, find another source... -// http://planning.cs.uiuc.edu/node103.html - static public PVector getRotations(PMatrix3D mat) { - - PVector r = new PVector(); - - r.z = PApplet.atan(mat.m10 / mat.m00); - r.y = PApplet.atan(-mat.m21 / PApplet.sqrt(mat.m21 * mat.m21 + mat.m22 * mat.m22)); - r.x = PApplet.atan(-mat.m21 / PApplet.sqrt(mat.m21 * mat.m21 + mat.m22 * mat.m22)); - - return null; - } - - // TO USE INSIDE THE DRAW FUNCTION - // TODO: Experimental -> To validate... -// static public Texture createTextureFrom(PApplet parent, IplImage img) { -// Texture tex = null; -// -// // We suppose... Depth = 3 : BGR and Depth = 4 : RGBA (even though it is written ARGB for Processing...) -// if (img.nChannels() == 3) { -// tex = new Texture(img.width(), img.height(), PApplet.RGB); -// } -// if (img.nChannels() == 4) { -// tex = new Texture(img.width(), img.height(), PApplet.ARGB); -// } -// return tex; -// } - static public void updateTexture(IplImage img, Texture tex) { - - System.out.println("Update Texture broken ? May Require CustomTexture..."); - -// if (img.nChannels() == 3) { -// tex.putBuffer(GL.GL_BGR, GL.GL_UNSIGNED_BYTE, img.getIntBuffer()); -// } -// if (img.nChannels() == 4) { -// tex.putBuffer(GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, img.getIntBuffer()); -// } - } - - static public void remapImage(PVector[] in, PVector[] out, IplImage imgIn, IplImage imgTmp, PImage Pout) { - - CvMat srcPoints; - CvMat dstPoints; - int nbPoints = in.length; - CvMat homography; - - // TODO: no create map - srcPoints = cvCreateMat(2, in.length, CV_32FC1); - dstPoints = cvCreateMat(2, in.length, CV_32FC1); - homography = cvCreateMat(3, 3, CV_32FC1); - - for (int i = 0; i < in.length; i++) { - srcPoints.put(i, in[i].x); - srcPoints.put(i + nbPoints, in[i].y); - dstPoints.put(i, out[i].x); - dstPoints.put(i + nbPoints, out[i].y); - } - - cvFindHomography(srcPoints, dstPoints, homography); -// It is better to use : GetPerspectiveTransform - - opencv_imgproc.cvWarpPerspective(imgIn, imgTmp, homography); - // opencv_imgproc.CV_INTER_LINEAR ); // opencv_imgproc.CV_WARP_FILL_OUTLIERS); -// getFillColor()); - IplImageToPImage(imgTmp, false, Pout); - - } - - static public void remapImage(CvMat homography, IplImage imgIn, IplImage imgTmp, PImage Pout) { - remapImage(homography, imgIn, imgTmp, Pout, false); - } - static public void remapImage(CvMat homography, IplImage imgIn, IplImage imgTmp, PImage Pout, boolean isRgb) { - - opencv_imgproc.cvWarpPerspective(imgIn, imgTmp, homography); - // opencv_imgproc.CV_INTER_LINEAR ); // opencv_imgproc.CV_WARP_FILL_OUTLIERS); -// getFillColor()); - IplImageToPImage(imgTmp, isRgb, Pout); - - } - - static public void remapImageIpl(CvMat homography, IplImage imgIn, IplImage imgOut) { - - opencv_imgproc.cvWarpPerspective(imgIn, imgOut, homography); - // opencv_imgproc.CV_INTER_LINEAR ); // opencv_imgproc.CV_WARP_FILL_OUTLIERS); -// getFillColor()); - } - - static public int getColor(IplImage img, int x, int y, boolean RGB) { - - if (img.nChannels() == 3) { - - ByteBuffer buff = img.getByteBuffer(); - int offset = (img.width() * y + x) * 3; - - if (RGB) { - - return (buff.get(offset) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset + 2) & 0xFF); - } else { - return (buff.get(offset + 2) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset) & 0xFF); - } - } - - // Operation not supported - return 0; - } - - // TODO: clean all this ! - static public void IplImageToPImage(IplImage img, PApplet applet, boolean RGB, PImage ret) { - IplImageToPImage(img, RGB, ret); - } - - static public void IplImageToPImage(IplImage img, PixelFormat format, PImage ret) { - if (format == PixelFormat.RGB) { - IplImageToPImage(img, true, ret); - } - if (format == PixelFormat.BGR) { - IplImageToPImage(img, false, ret); - } - } - - static public void IplImageToPImage(IplImage img, PImage ret) { - IplImageToPImage(img, true, ret); - } - static int conversionCount = 0; - - static public void IplImageToPImage(IplImage img, boolean RGB, PImage ret) { - -// conversionCount++; -// if (conversionCount % 600 == 0) { -// System.gc(); -// } - assert (img.width() == ret.width); - assert (img.height() == ret.height); - ret.loadPixels(); - - if (img.nChannels() == 3) { - ByteBuffer buff = img.getByteBuffer(); - - // PImage ret = new PImage(img.width(), img.height(), PApplet.RGB); - if (RGB) { - for (int i = 0; i < img.width() * img.height(); i++) { - int offset = i * 3; - ret.pixels[i] = (buff.get(offset) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset + 2) & 0xFF); - - } - } else { - for (int i = 0; i < img.width() * img.height(); i++) { - int offset = i * 3; - ret.pixels[i] = (buff.get(offset + 2) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset) & 0xFF); - - } - } - } - - if (img.nChannels() == 4) { - ByteBuffer buff = img.getByteBuffer(); - // PImage ret = new PImage(img.width(), img.height(), PApplet.RGB); - for (int i = 0; i < img.width() * img.height(); i++) { - int offset = i * 4; -// ret.pixels[i] = applet.color(buff.get(offset + 0) & 0xff, buff.get(offset + 1) & 0xFF, buff.get(offset + 2) & 0xff); - - ret.pixels[i] = (0xFF) << 24 - | (buff.get(offset) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset + 2) & 0xFF); - - } - } - - if (img.nChannels() == 1) { - // TODO: no more allocations. - ByteBuffer buff = img.getByteBuffer(); - - byte[] tmpArr = new byte[1]; -// byte[] arr = new byte[img.width() * img.height()]; -// buff.get(arr); - - for (int i = 0; i < img.width() * img.height(); i++) { - buff.get(tmpArr); - byte d = tmpArr[0]; -// int d = (arr[i] & 0xFF); - ret.pixels[i] - = (0xFF) << 24 - | (d & 0xFF) << 16 - | (d & 0xFF) << 8 - | (d & 0xFF); - } - - } - ret.updatePixels(); - } - - static public void byteBufferBRGtoARGB(ByteBuffer bgr, ByteBuffer argb) { - byte[] tmpArr = new byte[3]; - - for (int i = 0; i < bgr.capacity(); i += 3) { - bgr.get(tmpArr); - argb.put(tmpArr[2]); - argb.put(tmpArr[1]); - argb.put(tmpArr[0]); - argb.put((byte) 255); - } - argb.rewind(); - } - - static public void byteBufferRGBtoARGB(ByteBuffer bgr, ByteBuffer argb) { - byte[] tmpArr = new byte[3]; - - for (int i = 0; i < bgr.capacity(); i += 3) { - bgr.get(tmpArr); - argb.put(tmpArr[0]); - argb.put(tmpArr[1]); - argb.put(tmpArr[2]); - argb.put((byte) 255); - } - argb.rewind(); - } - - static public void byteBufferGRAYtoARGB(ByteBuffer gray, ByteBuffer argb) { - byte[] tmpArr = new byte[1]; - - for (int i = 0; i < gray.capacity(); i++) { - gray.get(tmpArr); - argb.put(tmpArr[0]); - argb.put(tmpArr[0]); - argb.put(tmpArr[0]); - argb.put((byte) 255); - } - argb.rewind(); - } - - static public void byteBufferGRAY32toARGB(ByteBuffer gray, ByteBuffer argb) { - - FloatBuffer floatGray = gray.asFloatBuffer(); - float[] tmpArr = new float[1]; - - for (int i = 0; i < argb.capacity(); i += 4) { - floatGray.get(tmpArr); - - byte v = (byte) (tmpArr[0] / 65535.0 * 255); -// byte v = (byte) (tmpArr[0] << 8 | tmpArr[1]); - argb.put((byte) (v)); - argb.put((byte) (v)); - argb.put((byte) (v)); - argb.put((byte) 255); - } - argb.rewind(); - } - - static public void byteBufferDepthK2toARGB(ByteBuffer gray, ByteBuffer argb) { - FloatBuffer floatGray = gray.asFloatBuffer(); - float[] tmpArr = new float[1]; - - for (int i = 0; i < argb.capacity(); i += 4) { - floatGray.get(tmpArr); - - // 8 meters - byte v = (byte) (tmpArr[0] / 8000 * 255); -// byte v = (byte) (tmpArr[0] << 8 | tmpArr[1]); - argb.put((byte) (v)); - argb.put((byte) (v)); - argb.put((byte) (v)); - argb.put((byte) 255); - } - argb.rewind(); - } - - static public void byteBufferDepthK1MMtoARGB(ByteBuffer gray, ByteBuffer argb) { - byte[] depthRaw = new byte[2]; - - for (int i = 0; i < argb.capacity(); i += 4) { - gray.get(depthRaw); - - int d = (depthRaw[0] & 0xFF) << 8 | (depthRaw[1] & 0xFF); - - // min depth: 400 - byte dValue = (byte) ((d - 300f) / 3000f * 255f); - argb.put(dValue); - argb.put(dValue); - argb.put(dValue); - argb.put((byte) 255); - } - argb.rewind(); - } - - static public void byteBufferZ16toARGB(ByteBuffer gray, ByteBuffer argb) { - byte[] tmpArr = new byte[2]; - - gray.rewind(); - for (int i = 0; i < argb.capacity(); i += 4) { - gray.get(tmpArr); - argb.put(tmpArr[0]); - argb.put(tmpArr[1]); - argb.put((byte) 128); - argb.put((byte) 255); - } - argb.rewind(); - } - - // TODO - private static byte[] kinectByteArray = null; - - static public void IplImageToPImageKinect(IplImage img, boolean RGB, PImage ret) { - -// conversionCount++; -// if (conversionCount % 30 == 0) { -// System.gc(); -// } - assert (img.width() == ret.width); - assert (img.height() == ret.height); -// BufferedImage bimg = new BufferedImage(); - - if (img.nChannels() == 3) { - - System.out.println("3 channels"); - ByteBuffer buff = img.getByteBuffer(); - - // PImage ret = new PImage(img.width(), img.height(), PApplet.RGB); - ret.loadPixels(); - if (RGB) { - for (int i = 0; i < img.width() * img.height(); i++) { - int offset = i * 3; -// ret.pixels[i] = applet.color(buff.get(offset + 0) & 0xff, buff.get(offset + 1) & 0xFF, buff.get(offset + 2) & 0xff); - - ret.pixels[i] = (buff.get(offset) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset + 2) & 0xFF); - - } - } else { - for (int i = 0; i < img.width() * img.height(); i++) { - int offset = i * 3; -// ret.pixels[i] = applet.color(buff.get(offset + 0) & 0xff, buff.get(offset + 1) & 0xFF, buff.get(offset + 2) & 0xff); - - ret.pixels[i] = (buff.get(offset + 2) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset) & 0xFF); - - } - - } - } else if (img.nChannels() == 1) { - - ////////////// Kinect Depth ////////////// - ByteBuffer buff = img.getByteBuffer(); - - if (Utils.kinectByteArray == null) { - kinectByteArray = new byte[2 * img.width() * img.height()]; - } -// else { -// Arrays.fill(kinectByteArray, (byte) 0); -// } - - buff.get(kinectByteArray); - - for (int i = 0; i < img.width() * img.height() * 2; i += 2) { - int d = (kinectByteArray[i] & 0xFF) << 8 - | (kinectByteArray[i + 1] & 0xFF); - - ret.pixels[i / 2] = d; -// ret.pixels[i] = -// (buff.get(i) & 0xFF) << 16 -// | (buff.get(i) & 0xFF) << 8 -// | (buff.get(i) & 0xFF); - } - - } - -// buff = null; - ret.updatePixels(); - } - - /** - * - * Deprecated - */ -// static public void PImageToIplImage(PImage src, IplImage dst) { -// dst.copyFrom((BufferedImage) src.getImage()); -// } - static public void PImageToIplImage2(IplImage img, boolean RGB, PImage ret) { - - ByteBuffer buff = img.getByteBuffer(); - - ret.loadPixels(); - if (RGB) { - for (int i = 0; i < img.width() * img.height(); i++) { - int offset = i * 3; - ret.pixels[i] = (buff.get(offset) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset + 2) & 0xFF); - - } - } else { - for (int i = 0; i < img.width() * img.height(); i++) { - int offset = i * 3; - ret.pixels[i] = (buff.get(offset + 2) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset) & 0xFF); - - } - - } - ret.updatePixels(); - } - - static public void convertARParam2(PApplet pa, String inputYAML, String outputDAT) throws Exception { - CameraDevice cam = null; - - // Hack - if (inputYAML.endsWith(".xml")) { - convertARParamXML(pa, inputYAML, outputDAT); - return; - } - - CameraDevice[] c = CameraDevice.read(inputYAML); - if (c.length > 0) { - cam = c[0]; - } - CameraDevice.Settings camSettings = (org.bytedeco.javacv.CameraDevice.Settings) cam.getSettings(); - int w = camSettings.getImageWidth(); - int h = camSettings.getImageHeight(); - - double[] proj = cam.cameraMatrix.get(); - - PrintWriter pw = pa.createWriter(outputDAT); - - StringBuffer sb = new StringBuffer(); - -// byte[] buf = new byte[SIZE_OF_PARAM_SET]; -// ByteBuffer bb = ByteBuffer.wrap(buf); -// bb.order(ByteOrder.BIG_ENDIAN); -// bb.putInt(w); -// bb.putInt(h); - // From ARToolkitPlus... -//http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html - sb.append("ARToolKitPlus_CamCal_Rev02\n"); - sb.append(w).append(" ").append(h).append(" "); - - // cx cy fx fy - sb.append(proj[2]).append(" ").append(proj[5]) - .append(" ").append(proj[0]). - append(" ").append(proj[4]).append(" "); - - // alpha_c // skew factor  - sb.append("0 ").append(" "); - - if (cam.distortionCoeffs != null) { - double[] distort = cam.distortionCoeffs.get(); - // alpha_c ?  -// sb.append("0 "); - // kc(1 - x) -> 6 values - for (int i = 0; i < distort.length; i++) { - sb.append(distort[i]).append(" "); - } - for (int i = distort.length; i < 6; i++) { - sb.append("0 "); - } - } else { - for (int i = 0; i < 6; i++) { - sb.append("0 "); - } - } - // undist iterations - sb.append("10\n"); - - pw.print(sb); - pw.flush(); - pw.close(); - } - - static public void convertARParamFromDevice(PApplet pa, ProjectiveDeviceP pdp, String outputDAT) throws Exception { - - PrintWriter pw = pa.createWriter(outputDAT); - StringBuffer sb = new StringBuffer(); - - // From ARToolkitPlus... -//http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html - sb.append("ARToolKitPlus_CamCal_Rev02\n"); - sb.append(pdp.getWidth()).append(" ").append(pdp.getHeight()).append(" "); - - // cx cy fx fy - sb.append(pdp.getCx()).append(" ").append(pdp.getCy()) - .append(" ").append(pdp.getFx()). - append(" ").append(pdp.getFy()).append(" "); - - // alpha_c // skew factor  - sb.append("0 ").append(" "); - -// if(pdp.handleDistorsions()){ - // TODO: handle the distorsions... -// double[] distort = cam.distortionCoeffs.get(); -// // alpha_c ?  -//// sb.append("0 "); -// // kc(1 - x) -> 6 values -// for (int i = 0; i < distort.length; i++) { -// sb.append(distort[i]).append(" "); -// } -// for (int i = distort.length; i < 6; i++) { -// sb.append("0 "); -// } -// } else { - for (int i = 0; i < 6; i++) { - sb.append("0 "); - } -// } - // undist iterations - sb.append("10\n"); - - pw.print(sb); - pw.flush(); - pw.close(); - } - - static public void convertProjParam(PApplet pa, String inputYAML, String outputDAT) throws Exception { - - ProjectorDevice cam = null; - - ProjectorDevice[] c = ProjectorDevice.read(inputYAML); - if (c.length > 0) { - cam = c[0]; - } - ProjectorDevice.Settings projSettings = (org.bytedeco.javacv.ProjectorDevice.Settings) cam.getSettings(); - int w = projSettings.getImageWidth(); - int h = projSettings.getImageHeight(); - - double[] mat = cam.cameraMatrix.get(); - double[] distort = cam.distortionCoeffs.get(); - - OutputStream os = pa.createOutput(outputDAT); - - PrintWriter pw = pa.createWriter(outputDAT); - - StringBuffer sb = new StringBuffer(); - -// byte[] buf = new byte[SIZE_OF_PARAM_SET]; -// ByteBuffer bb = ByteBuffer.wrap(buf); -// bb.order(ByteOrder.BIG_ENDIAN); -// bb.putInt(w); -// bb.putInt(h); - // From ARToolkitPlus... -//http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html - sb.append("ARToolKitPlus_CamCal_Rev02\n"); - sb.append(w).append(" ").append(h).append(" "); - - // cx cy fx fy - sb.append(mat[2]).append(" ").append(mat[5]) - .append(" ").append(mat[0]). - append(" ").append(mat[4]).append(" "); - - // alpha_c // skew factor  - sb.append("0 ").append(" "); - - // alpha_c ?  -// sb.append("0 "); - // kc(1 - x) -> 6 values - for (int i = 0; i < distort.length; i++) { - sb.append(distort[i]).append(" "); - } - for (int i = distort.length; i < 6; i++) { - sb.append("0 "); - } - - // undist iterations - sb.append("10\n"); - - pw.print(sb); - pw.flush(); - pw.close(); - } - - static public void convertARParamXML(PApplet pa, String fileName, String outputDAT) throws Exception { - - System.out.println("Convert AR Param XML"); - CameraDevice cam = null; - - ProjectiveDeviceP pdp = ProjectiveDeviceP.loadCameraDevice(pa, fileName); - -// CameraDevice[] c = CameraDevice.read(fileName); -// if (c.length > 0) { -// cam = c[0]; -// } - OutputStream os = pa.createOutput(outputDAT); - PrintWriter pw = pa.createWriter(outputDAT); - StringBuffer sb = new StringBuffer(); - - // From ARToolkitPlus... - //http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html - sb.append("ARToolKitPlus_CamCal_Rev02\n"); - sb.append(pdp.getWidth()).append(" ").append(pdp.getHeight()).append(" "); - - // cx cy fx fy - sb.append(pdp.getCx()).append(" ").append(pdp.getCy()) - .append(" ").append(pdp.getFx()). - append(" ").append(pdp.getFy()).append(" "); - - // alpha_c // skew factor  - sb.append("0 ").append(" "); - - // kc(1 - x) -> 6 values - if (pdp.handleDistorsions()) { - double[] distort = ((CameraDevice) pdp.getDevice()).distortionCoeffs.get(); - - for (int i = 0; i < distort.length; i++) { - sb.append(distort[i]).append(" "); - } - // fill with 0s the end. - for (int i = distort.length; i < 5; i++) { - sb.append("0 "); - } - } else { - for (int i = 0; i < 5; i++) { - sb.append("0 "); - } - } - - // undist iterations - sb.append("10\n"); - - pw.print(sb); - pw.flush(); - pw.close(); - } - -} diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java index d95a342c..4892d68e 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java @@ -19,7 +19,8 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.utils.ImageUtils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import java.awt.Image; import java.nio.ByteBuffer; import org.bytedeco.javacpp.opencv_core.IplImage; @@ -66,10 +67,10 @@ public void update(IplImage iplImage) { ByteBuffer imageBuffer = iplImage.getByteBuffer(); if (this.incomingFormat == Camera.PixelFormat.BGR) { - Utils.byteBufferBRGtoARGB(imageBuffer, argbBuffer); + ImageUtils.byteBufferBRGtoARGB(imageBuffer, argbBuffer); } if (this.incomingFormat == Camera.PixelFormat.RGB) { - Utils.byteBufferRGBtoARGB(imageBuffer, argbBuffer); + ImageUtils.byteBufferRGBtoARGB(imageBuffer, argbBuffer); } if (this.incomingFormat == Camera.PixelFormat.ARGB) { argbBuffer = iplImage.getByteBuffer(); diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index 3c21f32b..aac3a579 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -20,7 +20,8 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.utils.ImageUtils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera.PixelFormat; import java.awt.Image; import java.nio.ByteBuffer; @@ -67,19 +68,19 @@ public void update(opencv_core.IplImage iplImage) { ByteBuffer imageBuffer = iplImage.getByteBuffer(); if (incomingFormat == PixelFormat.GRAY) { - Utils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); + ImageUtils.byteBufferGRAYtoARGB(imageBuffer, argbBuffer); } if (incomingFormat == PixelFormat.GRAY_32) { - Utils.byteBufferGRAY32toARGB(imageBuffer, argbBuffer); + ImageUtils.byteBufferGRAY32toARGB(imageBuffer, argbBuffer); } if (incomingFormat == PixelFormat.FLOAT_DEPTH_KINECT2) { - Utils.byteBufferDepthK2toARGB(imageBuffer, argbBuffer); + ImageUtils.byteBufferDepthK2toARGB(imageBuffer, argbBuffer); } if (incomingFormat == PixelFormat.DEPTH_KINECT_MM) { - Utils.byteBufferDepthK1MMtoARGB(imageBuffer, argbBuffer); + ImageUtils.byteBufferDepthK1MMtoARGB(imageBuffer, argbBuffer); } if (incomingFormat == PixelFormat.REALSENSE_Z16) { - Utils.byteBufferZ16toARGB(imageBuffer, argbBuffer); + ImageUtils.byteBufferZ16toARGB(imageBuffer, argbBuffer); } // Utils.byteBufferBRGtoARGB(bgrBuffer, argbBuffer); diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index bafcce4a..f29b9989 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -24,9 +24,10 @@ * @author jeremylaviole */ import fr.inria.papart.procam.HasExtrinsics; +import fr.inria.papart.procam.utils.ImageUtils; import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.ProjectiveDeviceP; -import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import fr.inria.papart.tracking.DetectedMarker; import fr.inria.papart.tracking.MarkerList; import org.bytedeco.javacpp.opencv_core.CvMat; @@ -180,7 +181,7 @@ private void updateCalibration() { public PImage getPImageCopy() { PImage out = parent.createImage(this.width, this.height, RGB); - Utils.IplImageToPImage(currentImage, false, out); + ImageUtils.IplImageToPImage(currentImage, false, out); return out; } @@ -196,12 +197,12 @@ public PImage getPImageCopy(PApplet context) { if(currentImage.nChannels() == 1){ } - Utils.IplImageToPImage(currentImage, this.format == PixelFormat.RGB, out); + ImageUtils.IplImageToPImage(currentImage, this.format == PixelFormat.RGB, out); return out; } public PImage getPImageCopyTo(PImage out) { - Utils.IplImageToPImage(currentImage, this.format, out); + ImageUtils.IplImageToPImage(currentImage, this.format, out); return out; } @@ -500,7 +501,7 @@ static public void convertARParams(PApplet parent, String calibrationFile, // ARToolkit Plus 2.1.1 // fr.inria.papart.procam.Utils.convertARParam(parent, calibrationYAML, calibrationData, width, height); // ARToolkit Plus 2.3.0 - fr.inria.papart.procam.Utils.convertARParam2(parent, calibrationFile, calibrationARtoolkit); + fr.inria.papart.procam.utils.ARToolkitPlusUtils.convertARParam2(parent, calibrationFile, calibrationARtoolkit); } catch (Exception e) { PApplet.println("Conversion error. " + e); } @@ -509,7 +510,7 @@ static public void convertARParams(PApplet parent, String calibrationFile, static public void convertARParams(PApplet parent, ProjectiveDeviceP projectiveDevice, String calibrationARtoolkit) { try { - fr.inria.papart.procam.Utils.convertARParamFromDevice(parent, projectiveDevice, calibrationARtoolkit); + fr.inria.papart.procam.utils.ARToolkitPlusUtils.convertARParamFromDevice(parent, projectiveDevice, calibrationARtoolkit); } catch (Exception e) { PApplet.println("Conversion error. " + e); } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 9743188d..19b62388 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -67,9 +67,10 @@ public void internalStart() throws FrameGrabber.Exception { if (colorCamera.width() == 1280) { grabber.setFrameRate(60); } else { - grabber.setFrameRate(30); + grabber.setFrameRate(colorCamera.getFrameRate()); +// grabber.setFrameRate(30); } -// grabber.setFrameRate(colorCamera.getFrameRate()); + grabber.enableColorStream(); } diff --git a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java index 3dbba96a..f6dbc063 100644 --- a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java @@ -20,7 +20,7 @@ package fr.inria.papart.procam.camera; import fr.inria.papart.procam.ProjectiveDeviceP; -import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.display.ProjectorDisplay; import java.util.logging.Level; import java.util.logging.Logger; @@ -76,7 +76,7 @@ public void setCalibration(String fileName) { static public void convertARProjParams(PApplet parent, String calibrationFile, String calibrationARtoolkit) { try { - Utils.convertProjParam(parent, calibrationFile, calibrationARtoolkit); + ARToolkitPlusUtils.convertProjParam(parent, calibrationFile, calibrationARtoolkit); } catch (Exception ex) { System.out.println("Error converting projector to ARToolkit " + calibrationFile + " " + calibrationARtoolkit diff --git a/papart/src/fr/inria/papart/procam/camera/TrackedView.java b/papart/src/fr/inria/papart/procam/camera/TrackedView.java index 3d3e17fc..bb44d268 100755 --- a/papart/src/fr/inria/papart/procam/camera/TrackedView.java +++ b/papart/src/fr/inria/papart/procam/camera/TrackedView.java @@ -19,10 +19,11 @@ */ package fr.inria.papart.procam.camera; +import fr.inria.papart.procam.utils.ImageUtils; import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.tracking.MarkerBoardInvalid; import fr.inria.papart.procam.PaperScreen; -import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import org.bytedeco.javacpp.opencv_core.CvMat; import org.bytedeco.javacpp.opencv_core.IplImage; @@ -136,7 +137,7 @@ public PImage getViewOf(Camera camera) { boolean useRGB = camera.getPixelFormat() == Camera.PixelFormat.RGB; // Convert to the good type... - Utils.remapImage(homography, img, extractedIplImage, extractedPImage, useRGB); + ImageUtils.remapImage(homography, img, extractedIplImage, extractedPImage, useRGB); return extractedPImage; } @@ -149,7 +150,7 @@ public IplImage getIplViewOf(Camera camera) { this.mainImage = img; this.camera = camera; CvMat homography = computeHomography(); - Utils.remapImageIpl(homography, camera.getIplImage(), extractedIplImage); + ImageUtils.remapImageIpl(homography, camera.getIplImage(), extractedIplImage); return extractedIplImage; } @@ -168,13 +169,13 @@ private boolean isExtractionReady(IplImage img) { private CvMat computeHomography() { computeCorners(); - CvMat homography = Utils.createHomography(screenPixelCoordinates, imagePixelCoordinates); + CvMat homography = ImageUtils.createHomography(screenPixelCoordinates, imagePixelCoordinates); return homography; } private void checkMemory(IplImage memory) { if (extractedIplImage == null) { - extractedIplImage = Utils.createNewSizeImageFrom(memory,imageWidthPx, imageHeightPx); + extractedIplImage = ImageUtils.createNewSizeImageFrom(memory,imageWidthPx, imageHeightPx); if (extractedIplImage == null) { System.err.println("Impossible to create a View! " + this + " " + extractedPImage); diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index 9bbe9f63..1e560f36 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -22,7 +22,7 @@ import fr.inria.papart.calibration.PlaneCalibration; import processing.opengl.PGraphicsOpenGL; import org.bytedeco.javacv.ProjectiveDevice; -import fr.inria.papart.drawingapp.DrawUtils; +import fr.inria.papart.procam.utils.DrawUtils; import fr.inria.papart.multitouch.TouchInput; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.HasExtrinsics; diff --git a/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java b/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java index fcaf5665..d74b7415 100755 --- a/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java @@ -20,7 +20,7 @@ package fr.inria.papart.procam.display; import fr.inria.papart.calibration.PlaneCalibration; -import fr.inria.papart.drawingapp.DrawUtils; +import fr.inria.papart.procam.utils.DrawUtils; import fr.inria.papart.multitouch.TouchInput; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.tracking.MarkerBoard; diff --git a/papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java b/papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java new file mode 100644 index 00000000..c40cff62 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java @@ -0,0 +1,277 @@ +/* + * Part of the PapARt project - https://project.inria.fr/papart/ + * + * Copyright (C) 2014-2016 Inria + * Copyright (C) 2011-2013 Bordeaux University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; If not, see + * . + */ +package fr.inria.papart.procam.utils; + +import fr.inria.papart.procam.Papart; +import fr.inria.papart.procam.ProjectiveDeviceP; +import fr.inria.papart.procam.camera.Camera.PixelFormat; + +import org.bytedeco.javacv.CameraDevice; +import org.bytedeco.javacv.ProjectorDevice; +import org.bytedeco.javacpp.opencv_imgproc; +import static org.bytedeco.javacpp.opencv_core.*; +import static org.bytedeco.javacpp.opencv_calib3d.*; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.URL; +import java.nio.ByteBuffer; +import processing.core.*; +import static processing.core.PConstants.ARGB; +import static processing.core.PConstants.RGB; +import processing.opengl.Texture; +import toxi.geom.Matrix4x4; +import toxi.geom.Vec3D; +import java.io.*; +import java.nio.FloatBuffer; +import static processing.core.PConstants.ALPHA; +import static processing.core.PConstants.GRAY; +import static processing.core.PConstants.HSB; + +/** + * + * @author jeremy + */ +public class ARToolkitPlusUtils { + + static public final String LibraryName = "PapARt"; + + static int conversionCount = 0; + + static public void convertARParam2(PApplet pa, String inputYAML, String outputDAT) throws Exception { + CameraDevice cam = null; + + // Hack + if (inputYAML.endsWith(".xml")) { + convertARParamXML(pa, inputYAML, outputDAT); + return; + } + + CameraDevice[] c = CameraDevice.read(inputYAML); + if (c.length > 0) { + cam = c[0]; + } + CameraDevice.Settings camSettings = (org.bytedeco.javacv.CameraDevice.Settings) cam.getSettings(); + int w = camSettings.getImageWidth(); + int h = camSettings.getImageHeight(); + + double[] proj = cam.cameraMatrix.get(); + + PrintWriter pw = pa.createWriter(outputDAT); + + StringBuffer sb = new StringBuffer(); + +// byte[] buf = new byte[SIZE_OF_PARAM_SET]; +// ByteBuffer bb = ByteBuffer.wrap(buf); +// bb.order(ByteOrder.BIG_ENDIAN); +// bb.putInt(w); +// bb.putInt(h); + // From ARToolkitPlus... +//http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html + sb.append("ARToolKitPlus_CamCal_Rev02\n"); + sb.append(w).append(" ").append(h).append(" "); + + // cx cy fx fy + sb.append(proj[2]).append(" ").append(proj[5]) + .append(" ").append(proj[0]). + append(" ").append(proj[4]).append(" "); + + // alpha_c // skew factor  + sb.append("0 ").append(" "); + + if (cam.distortionCoeffs != null) { + double[] distort = cam.distortionCoeffs.get(); + // alpha_c ?  +// sb.append("0 "); + // kc(1 - x) -> 6 values + for (int i = 0; i < distort.length; i++) { + sb.append(distort[i]).append(" "); + } + for (int i = distort.length; i < 6; i++) { + sb.append("0 "); + } + } else { + for (int i = 0; i < 6; i++) { + sb.append("0 "); + } + } + // undist iterations + sb.append("10\n"); + + pw.print(sb); + pw.flush(); + pw.close(); + } + + static public void convertARParamFromDevice(PApplet pa, ProjectiveDeviceP pdp, String outputDAT) throws Exception { + + PrintWriter pw = pa.createWriter(outputDAT); + StringBuffer sb = new StringBuffer(); + + // From ARToolkitPlus... +//http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html + sb.append("ARToolKitPlus_CamCal_Rev02\n"); + sb.append(pdp.getWidth()).append(" ").append(pdp.getHeight()).append(" "); + + // cx cy fx fy + sb.append(pdp.getCx()).append(" ").append(pdp.getCy()) + .append(" ").append(pdp.getFx()). + append(" ").append(pdp.getFy()).append(" "); + + // alpha_c // skew factor  + sb.append("0 ").append(" "); + +// if(pdp.handleDistorsions()){ + // TODO: handle the distorsions... +// double[] distort = cam.distortionCoeffs.get(); +// // alpha_c ?  +//// sb.append("0 "); +// // kc(1 - x) -> 6 values +// for (int i = 0; i < distort.length; i++) { +// sb.append(distort[i]).append(" "); +// } +// for (int i = distort.length; i < 6; i++) { +// sb.append("0 "); +// } +// } else { + for (int i = 0; i < 6; i++) { + sb.append("0 "); + } +// } + // undist iterations + sb.append("10\n"); + + pw.print(sb); + pw.flush(); + pw.close(); + } + + static public void convertProjParam(PApplet pa, String inputYAML, String outputDAT) throws Exception { + + ProjectorDevice cam = null; + + ProjectorDevice[] c = ProjectorDevice.read(inputYAML); + if (c.length > 0) { + cam = c[0]; + } + ProjectorDevice.Settings projSettings = (org.bytedeco.javacv.ProjectorDevice.Settings) cam.getSettings(); + int w = projSettings.getImageWidth(); + int h = projSettings.getImageHeight(); + + double[] mat = cam.cameraMatrix.get(); + double[] distort = cam.distortionCoeffs.get(); + + OutputStream os = pa.createOutput(outputDAT); + + PrintWriter pw = pa.createWriter(outputDAT); + + StringBuffer sb = new StringBuffer(); + +// byte[] buf = new byte[SIZE_OF_PARAM_SET]; +// ByteBuffer bb = ByteBuffer.wrap(buf); +// bb.order(ByteOrder.BIG_ENDIAN); +// bb.putInt(w); +// bb.putInt(h); + // From ARToolkitPlus... +//http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html + sb.append("ARToolKitPlus_CamCal_Rev02\n"); + sb.append(w).append(" ").append(h).append(" "); + + // cx cy fx fy + sb.append(mat[2]).append(" ").append(mat[5]) + .append(" ").append(mat[0]). + append(" ").append(mat[4]).append(" "); + + // alpha_c // skew factor  + sb.append("0 ").append(" "); + + // alpha_c ?  +// sb.append("0 "); + // kc(1 - x) -> 6 values + for (int i = 0; i < distort.length; i++) { + sb.append(distort[i]).append(" "); + } + for (int i = distort.length; i < 6; i++) { + sb.append("0 "); + } + + // undist iterations + sb.append("10\n"); + + pw.print(sb); + pw.flush(); + pw.close(); + } + + static public void convertARParamXML(PApplet pa, String fileName, String outputDAT) throws Exception { + + System.out.println("Convert AR Param XML"); + CameraDevice cam = null; + + ProjectiveDeviceP pdp = ProjectiveDeviceP.loadCameraDevice(pa, fileName); + +// CameraDevice[] c = CameraDevice.read(fileName); +// if (c.length > 0) { +// cam = c[0]; +// } + OutputStream os = pa.createOutput(outputDAT); + PrintWriter pw = pa.createWriter(outputDAT); + StringBuffer sb = new StringBuffer(); + + // From ARToolkitPlus... + //http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/parameters.html + sb.append("ARToolKitPlus_CamCal_Rev02\n"); + sb.append(pdp.getWidth()).append(" ").append(pdp.getHeight()).append(" "); + + // cx cy fx fy + sb.append(pdp.getCx()).append(" ").append(pdp.getCy()) + .append(" ").append(pdp.getFx()). + append(" ").append(pdp.getFy()).append(" "); + + // alpha_c // skew factor  + sb.append("0 ").append(" "); + + // kc(1 - x) -> 6 values + if (pdp.handleDistorsions()) { + double[] distort = ((CameraDevice) pdp.getDevice()).distortionCoeffs.get(); + + for (int i = 0; i < distort.length; i++) { + sb.append(distort[i]).append(" "); + } + // fill with 0s the end. + for (int i = distort.length; i < 5; i++) { + sb.append("0 "); + } + } else { + for (int i = 0; i < 5; i++) { + sb.append("0 "); + } + } + + // undist iterations + sb.append("10\n"); + + pw.print(sb); + pw.flush(); + pw.close(); + } + +} diff --git a/papart/src/fr/inria/papart/procam/DrawUtils.java b/papart/src/fr/inria/papart/procam/utils/DrawUtils.java old mode 100755 new mode 100644 similarity index 99% rename from papart/src/fr/inria/papart/procam/DrawUtils.java rename to papart/src/fr/inria/papart/procam/utils/DrawUtils.java index 0ecbecfe..c62af84f --- a/papart/src/fr/inria/papart/procam/DrawUtils.java +++ b/papart/src/fr/inria/papart/procam/utils/DrawUtils.java @@ -17,7 +17,7 @@ * Public License along with this library; If not, see * . */ -package fr.inria.papart.drawingapp; +package fr.inria.papart.procam.utils; import processing.core.PApplet; import processing.core.PFont; diff --git a/papart/src/fr/inria/papart/procam/utils/ImageUtils.java b/papart/src/fr/inria/papart/procam/utils/ImageUtils.java new file mode 100644 index 00000000..7e7dea83 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/utils/ImageUtils.java @@ -0,0 +1,425 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package fr.inria.papart.procam.utils; + +import fr.inria.papart.procam.camera.Camera; +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import static org.bytedeco.javacpp.opencv_calib3d.cvFindHomography; +import org.bytedeco.javacpp.opencv_core; +import static org.bytedeco.javacpp.opencv_core.cvCreateImage; +import static org.bytedeco.javacpp.opencv_core.cvCreateMat; +import org.bytedeco.javacpp.opencv_imgproc; +import processing.core.PApplet; +import processing.core.PConstants; +import processing.core.PImage; +import processing.core.PVector; +import processing.opengl.Texture; + +/** + * + * @author jiii + */ +public class ImageUtils { + + public static void byteBufferDepthK1MMtoARGB(ByteBuffer gray, ByteBuffer argb) { + byte[] depthRaw = new byte[2]; + for (int i = 0; i < argb.capacity(); i += 4) { + gray.get(depthRaw); + int d = (depthRaw[0] & 255) << 8 | (depthRaw[1] & 255); + // min depth: 400 + byte dValue = (byte) ((d - 300.0F) / 3000.0F * 255.0F); + argb.put(dValue); + argb.put(dValue); + argb.put(dValue); + argb.put((byte) 255); + } + argb.rewind(); + } + + public static opencv_core.CvMat createHomography(PVector[] in, PVector[] out) { + opencv_core.CvMat srcPoints; + opencv_core.CvMat dstPoints; + int nbPoints = in.length; + opencv_core.CvMat homography; + // TODO: no create map + srcPoints = cvCreateMat(2, in.length, opencv_core.CV_32FC1); + dstPoints = cvCreateMat(2, in.length, opencv_core.CV_32FC1); + homography = cvCreateMat(3, 3, opencv_core.CV_32FC1); + for (int i = 0; i < in.length; i++) { + srcPoints.put(i, in[i].x); + srcPoints.put(i + nbPoints, in[i].y); + dstPoints.put(i, out[i].x); + dstPoints.put(i + nbPoints, out[i].y); + } + cvFindHomography(srcPoints, dstPoints, homography); + // It is better to use : GetPerspectiveTransform + return homography; + } + + public static void createAnaglyph(PImage imgL, PImage imgR, PImage imgOut) { + imgL.loadPixels(); + imgR.loadPixels(); + imgOut.loadPixels(); + int[] pL = imgL.pixels; + int[] pR = imgR.pixels; + int[] pO = imgOut.pixels; + for (int i = 0; i < pL.length; i++) { + pO[i] = (pR[i] >> 16) << 16 | (pL[i] >> 8) & 255 << 8 | pL[i] & 255; + // pO[i] = pL[i]; + } + imgOut.updatePixels(); + // imgL.updatePixels(); + } + + + // TODO wtf + private static byte[] kinectByteArray = null; + + + public static void IplImageToPImageKinect(opencv_core.IplImage img, boolean RGB, PImage ret) { + // conversionCount++; + // if (conversionCount % 30 == 0) { + // System.gc(); + // } + assert (img.width() == ret.width); + assert (img.height() == ret.height); + // BufferedImage bimg = new BufferedImage(); + if (img.nChannels() == 3) { + System.out.println("3 channels"); + ByteBuffer buff = img.getByteBuffer(); + // PImage ret = new PImage(img.width(), img.height(), PApplet.RGB); + ret.loadPixels(); + if (RGB) { + for (int i = 0; i < img.width() * img.height(); i++) { + int offset = i * 3; + // ret.pixels[i] = applet.color(buff.get(offset + 0) & 0xff, buff.get(offset + 1) & 0xFF, buff.get(offset + 2) & 0xff); + ret.pixels[i] = (buff.get(offset) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset + 2) & 255); + } + } else { + for (int i = 0; i < img.width() * img.height(); i++) { + int offset = i * 3; + // ret.pixels[i] = applet.color(buff.get(offset + 0) & 0xff, buff.get(offset + 1) & 0xFF, buff.get(offset + 2) & 0xff); + ret.pixels[i] = (buff.get(offset + 2) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset) & 255); + } + } + } else if (img.nChannels() == 1) { + ////////////// Kinect Depth ////////////// + ByteBuffer buff = img.getByteBuffer(); + if (kinectByteArray == null) { + kinectByteArray = new byte[2 * img.width() * img.height()]; + } + // else { + // Arrays.fill(kinectByteArray, (byte) 0); + // } + buff.get(kinectByteArray); + for (int i = 0; i < img.width() * img.height() * 2; i += 2) { + int d = (kinectByteArray[i] & 255) << 8 | (kinectByteArray[i + 1] & 255); + ret.pixels[i / 2] = d; + // ret.pixels[i] = + // (buff.get(i) & 0xFF) << 16 + // | (buff.get(i) & 0xFF) << 8 + // | (buff.get(i) & 0xFF); + } + } + // buff = null; + ret.updatePixels(); + } + + public static void byteBufferZ16toARGB(ByteBuffer gray, ByteBuffer argb) { + byte[] tmpArr = new byte[2]; + gray.rewind(); + for (int i = 0; i < argb.capacity(); i += 4) { + gray.get(tmpArr); + argb.put(tmpArr[0]); + argb.put(tmpArr[1]); + argb.put((byte) 128); + argb.put((byte) 255); + } + argb.rewind(); + } + + public static void byteBufferGRAYtoARGB(ByteBuffer gray, ByteBuffer argb) { + byte[] tmpArr = new byte[1]; + for (int i = 0; i < gray.capacity(); i++) { + gray.get(tmpArr); + argb.put(tmpArr[0]); + argb.put(tmpArr[0]); + argb.put(tmpArr[0]); + argb.put((byte) 255); + } + argb.rewind(); + } + + public static void remapImageIpl(opencv_core.CvMat homography, opencv_core.IplImage imgIn, opencv_core.IplImage imgOut) { + opencv_imgproc.cvWarpPerspective(imgIn, imgOut, homography); + // opencv_imgproc.CV_INTER_LINEAR ); // opencv_imgproc.CV_WARP_FILL_OUTLIERS); + // getFillColor()); + } + + public static opencv_core.IplImage createImageFrom(opencv_core.IplImage imgIn, PImage Pout) { + // TODO: avoid this creation !! + opencv_core.CvSize outSize = new opencv_core.CvSize(); + outSize.width(Pout.width); + outSize.height(Pout.height); + opencv_core.IplImage imgOut = cvCreateImage(outSize, // size + imgIn.depth(), // depth + imgIn.nChannels()); + // imgIn.w + return imgOut; + } + + public static opencv_core.IplImage createImageFrom(opencv_core.IplImage imgIn) { + // TODO: avoid this creation !! + opencv_core.CvSize outSize = new opencv_core.CvSize(); + outSize.width(imgIn.width()); + outSize.height(imgIn.height()); + opencv_core.IplImage imgOut = cvCreateImage(outSize, // size + imgIn.depth(), // depth + imgIn.nChannels()); + // imgIn.w + return imgOut; + } + + public static opencv_core.IplImage createImageFrom(PImage in) { + // TODO: avoid this creation !! + opencv_core.CvSize outSize = new opencv_core.CvSize(); + outSize.width(in.width); + outSize.height(in.height); + System.out.println("inputImage to create an IPL:" + in.width + " " + in.height + " " + in.format); + opencv_core.IplImage imgOut = null; + if (in.format == PConstants.RGB) { + imgOut = cvCreateImage(outSize, opencv_core.IPL_DEPTH_8U, // depth + 3); + } + if (in.format == PConstants.ALPHA || in.format == PConstants.GRAY) { + imgOut = cvCreateImage(outSize, opencv_core.IPL_DEPTH_8U, // depth + 1); + } + if (in.format == PConstants.ARGB) { + imgOut = cvCreateImage(outSize, opencv_core.IPL_DEPTH_8U, // depth + 4); + } + // imgIn.w + return imgOut; + } + + public static void byteBufferBRGtoARGB(ByteBuffer bgr, ByteBuffer argb) { + byte[] tmpArr = new byte[3]; + for (int i = 0; i < bgr.capacity(); i += 3) { + bgr.get(tmpArr); + argb.put(tmpArr[2]); + argb.put(tmpArr[1]); + argb.put(tmpArr[0]); + argb.put((byte) 255); + } + argb.rewind(); + } + + /** + * + * Deprecated + */ + // static public void PImageToIplImage(PImage src, IplImage dst) { + // dst.copyFrom((BufferedImage) src.getImage()); + // } + public static void PImageToIplImage2(opencv_core.IplImage img, boolean RGB, PImage ret) { + ByteBuffer buff = img.getByteBuffer(); + ret.loadPixels(); + if (RGB) { + for (int i = 0; i < img.width() * img.height(); i++) { + int offset = i * 3; + ret.pixels[i] = (buff.get(offset) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset + 2) & 255); + } + } else { + for (int i = 0; i < img.width() * img.height(); i++) { + int offset = i * 3; + ret.pixels[i] = (buff.get(offset + 2) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset) & 255); + } + } + ret.updatePixels(); + } + + public static opencv_core.IplImage createNewSizeImageFrom(opencv_core.IplImage imgIn, int width, int height) { + // TODO: avoid this creation !! + opencv_core.CvSize outSize = new opencv_core.CvSize(); + outSize.width(width); + outSize.height(height); + opencv_core.IplImage imgOut = cvCreateImage(outSize, // size + imgIn.depth(), // depth + imgIn.nChannels()); + // imgIn.w + return imgOut; + } + + public static void byteBufferRGBtoARGB(ByteBuffer bgr, ByteBuffer argb) { + byte[] tmpArr = new byte[3]; + for (int i = 0; i < bgr.capacity(); i += 3) { + bgr.get(tmpArr); + argb.put(tmpArr[0]); + argb.put(tmpArr[1]); + argb.put(tmpArr[2]); + argb.put((byte) 255); + } + argb.rewind(); + } + + public static void remapImage(PVector[] in, PVector[] out, opencv_core.IplImage imgIn, opencv_core.IplImage imgTmp, PImage Pout) { + opencv_core.CvMat srcPoints; + opencv_core.CvMat dstPoints; + int nbPoints = in.length; + opencv_core.CvMat homography; + // TODO: no create map + srcPoints = cvCreateMat(2, in.length, opencv_core.CV_32FC1); + dstPoints = cvCreateMat(2, in.length, opencv_core.CV_32FC1); + homography = cvCreateMat(3, 3, opencv_core.CV_32FC1); + for (int i = 0; i < in.length; i++) { + srcPoints.put(i, in[i].x); + srcPoints.put(i + nbPoints, in[i].y); + dstPoints.put(i, out[i].x); + dstPoints.put(i + nbPoints, out[i].y); + } + cvFindHomography(srcPoints, dstPoints, homography); + // It is better to use : GetPerspectiveTransform + opencv_imgproc.cvWarpPerspective(imgIn, imgTmp, homography); + // opencv_imgproc.CV_INTER_LINEAR ); // opencv_imgproc.CV_WARP_FILL_OUTLIERS); + // getFillColor()); + IplImageToPImage(imgTmp, false, Pout); + } + + public static void remapImage(opencv_core.CvMat homography, opencv_core.IplImage imgIn, opencv_core.IplImage imgTmp, PImage Pout) { + remapImage(homography, imgIn, imgTmp, Pout, false); + } + + public static void remapImage(opencv_core.CvMat homography, opencv_core.IplImage imgIn, opencv_core.IplImage imgTmp, PImage Pout, boolean isRgb) { + opencv_imgproc.cvWarpPerspective(imgIn, imgTmp, homography); + // opencv_imgproc.CV_INTER_LINEAR ); // opencv_imgproc.CV_WARP_FILL_OUTLIERS); + // getFillColor()); + IplImageToPImage(imgTmp, isRgb, Pout); + } + + // TO USE INSIDE THE DRAW FUNCTION + // TODO: Experimental -> To validate... + // static public Texture createTextureFrom(PApplet parent, IplImage img) { + // Texture tex = null; + // + // // We suppose... Depth = 3 : BGR and Depth = 4 : RGBA (even though it is written ARGB for Processing...) + // if (img.nChannels() == 3) { + // tex = new Texture(img.width(), img.height(), PApplet.RGB); + // } + // if (img.nChannels() == 4) { + // tex = new Texture(img.width(), img.height(), PApplet.ARGB); + // } + // return tex; + // } + public static void updateTexture(opencv_core.IplImage img, Texture tex) { + System.out.println("Update Texture broken ? May Require CustomTexture..."); + // if (img.nChannels() == 3) { + // tex.putBuffer(GL.GL_BGR, GL.GL_UNSIGNED_BYTE, img.getIntBuffer()); + // } + // if (img.nChannels() == 4) { + // tex.putBuffer(GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, img.getIntBuffer()); + // } + } + + public static void byteBufferDepthK2toARGB(ByteBuffer gray, ByteBuffer argb) { + FloatBuffer floatGray = gray.asFloatBuffer(); + float[] tmpArr = new float[1]; + for (int i = 0; i < argb.capacity(); i += 4) { + floatGray.get(tmpArr); + // 8 meters + byte v = (byte) (tmpArr[0] / 8000 * 255); + // byte v = (byte) (tmpArr[0] << 8 | tmpArr[1]); + argb.put((byte) (v)); + argb.put((byte) (v)); + argb.put((byte) (v)); + argb.put((byte) 255); + } + argb.rewind(); + } + + // TODO: clean all this ! + public static void IplImageToPImage(opencv_core.IplImage img, PApplet applet, boolean RGB, PImage ret) { + IplImageToPImage(img, RGB, ret); + } + + public static void IplImageToPImage(opencv_core.IplImage img, Camera.PixelFormat format, PImage ret) { + if (format == Camera.PixelFormat.RGB) { + IplImageToPImage(img, true, ret); + } + if (format == Camera.PixelFormat.BGR) { + IplImageToPImage(img, false, ret); + } + } + + public static void IplImageToPImage(opencv_core.IplImage img, PImage ret) { + IplImageToPImage(img, true, ret); + } + + public static void IplImageToPImage(opencv_core.IplImage img, boolean RGB, PImage ret) { + // conversionCount++; + // if (conversionCount % 600 == 0) { + // System.gc(); + // } + assert (img.width() == ret.width); + assert (img.height() == ret.height); + ret.loadPixels(); + if (img.nChannels() == 3) { + ByteBuffer buff = img.getByteBuffer(); + // PImage ret = new PImage(img.width(), img.height(), PApplet.RGB); + if (RGB) { + for (int i = 0; i < img.width() * img.height(); i++) { + int offset = i * 3; + ret.pixels[i] = (buff.get(offset) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset + 2) & 255); + } + } else { + for (int i = 0; i < img.width() * img.height(); i++) { + int offset = i * 3; + ret.pixels[i] = (buff.get(offset + 2) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset) & 255); + } + } + } + if (img.nChannels() == 4) { + ByteBuffer buff = img.getByteBuffer(); + // PImage ret = new PImage(img.width(), img.height(), PApplet.RGB); + for (int i = 0; i < img.width() * img.height(); i++) { + int offset = i * 4; + // ret.pixels[i] = applet.color(buff.get(offset + 0) & 0xff, buff.get(offset + 1) & 0xFF, buff.get(offset + 2) & 0xff); + ret.pixels[i] = (255) << 24 | (buff.get(offset) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset + 2) & 255); + } + } + if (img.nChannels() == 1) { + // TODO: no more allocations. + ByteBuffer buff = img.getByteBuffer(); + byte[] tmpArr = new byte[1]; + // byte[] arr = new byte[img.width() * img.height()]; + // buff.get(arr); + for (int i = 0; i < img.width() * img.height(); i++) { + buff.get(tmpArr); + byte d = tmpArr[0]; + // int d = (arr[i] & 0xFF); + ret.pixels[i] = (255) << 24 | (d & 255) << 16 | (d & 255) << 8 | (d & 255); + } + } + ret.updatePixels(); + } + + public static void byteBufferGRAY32toARGB(ByteBuffer gray, ByteBuffer argb) { + FloatBuffer floatGray = gray.asFloatBuffer(); + float[] tmpArr = new float[1]; + for (int i = 0; i < argb.capacity(); i += 4) { + floatGray.get(tmpArr); + byte v = (byte) (tmpArr[0] / 65535.0 * 255); + // byte v = (byte) (tmpArr[0] << 8 | tmpArr[1]); + argb.put((byte) (v)); + argb.put((byte) (v)); + argb.put((byte) (v)); + argb.put((byte) 255); + } + argb.rewind(); + } + +} diff --git a/papart/src/fr/inria/papart/procam/utils/LibraryUtils.java b/papart/src/fr/inria/papart/procam/utils/LibraryUtils.java new file mode 100644 index 00000000..a75168c6 --- /dev/null +++ b/papart/src/fr/inria/papart/procam/utils/LibraryUtils.java @@ -0,0 +1,103 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package fr.inria.papart.procam.utils; + +import fr.inria.papart.procam.Papart; +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.net.URL; +import toxi.geom.Matrix4x4; + +/** + * + * @author jiii + */ +public class LibraryUtils { + + public static Process runExample(String exampleName, boolean silent) { + try { + StringBuilder commandLine = new StringBuilder(); + String papartFolder = getPapartFolder(); + String sketchFolder = "/examples/" + exampleName + "/"; + // On linux only + commandLine.append("nohup "); + // TODO: find processing-java even when not installed ! + // Or make an easy install... + commandLine.append("processing-java "); + commandLine.append("--sketch=").append(papartFolder).append(sketchFolder).append(" --output=").append(papartFolder).append(sketchFolder).append("build").append(" --force --run"); + // commandLine.append("\""); + // processing-java --sketch=/home/jiii/papart/sketches/papartExamples/Kinect/MultiTouchKinect/ --output=/home/jiii/papart/sketches/papartExamples/Kinect/MultiTouchKinect/build --force --run + // println("Starting... \n" + commandLine.toString()); + // TODO: Alternative on Windows... when /bin/sh is not installed. + Process p = Runtime.getRuntime().exec(commandLine.toString()); + // Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash", "-c", commandLine.toString()}); + // Process p = Runtime.getRuntime().exec(new String[]{"nohup", commandLine.toString()}); + if (!silent) { + String line; + BufferedReader bri = new BufferedReader(new InputStreamReader(p.getInputStream())); + BufferedReader bre = new BufferedReader(new InputStreamReader(p.getErrorStream())); + while ((line = bri.readLine()) != null) { + System.out.println(line); + } + bri.close(); + while ((line = bre.readLine()) != null) { + System.out.println(line); + } + bre.close(); + } + return p; + // p.waitFor(); + } catch (Exception e) { + System.out.println("Could not start the Papart example : " + exampleName + "\n" + e); + } + ; + return null; + } + // sketchbook + + public static String getPapartFolder() { + String sketchbook = System.getenv("SKETCHBOOK"); + if (sketchbook != null) { + System.out.println("Found SKETCHBOOK environment variable."); + return sketchbook + "/libraries/" + ARToolkitPlusUtils.LibraryName; + } + return getLibrariesFolder() + "/" + ARToolkitPlusUtils.LibraryName; + } + + public static String getLibrariesFolder() { + // This is used, as Papart classes are often linked to another folder... + URL main = Matrix4x4.class.getResource("Matrix4x4.class"); +// URL main = Papart.class.getResource("Papart.class"); + String tmp = main.getPath(); + System.out.println("path " + tmp); + // its in a jar + if (tmp.contains("!")) { + tmp = tmp.substring(0, tmp.indexOf('!')); + tmp = tmp.replace("file:", ""); + // tmp = tmp.replace("file:/", ""); TODO: OS check ? + } + File f = new File(tmp); + if (!f.exists()) { + System.err.println("Error in loading the Sketchbook folder."); + } + // if the file is within a library/lib folder + if (f.getParentFile().getAbsolutePath().endsWith("/lib")) { + // pathToSketchbook/libraries/myLib/library/lib/myLib.jar + f = f.getParentFile().getParentFile().getParentFile().getParentFile(); + } else { + // pathToSketchbook/libraries/myLib/library/myLib.jar + f = f.getParentFile().getParentFile().getParentFile(); + } + return f.getAbsolutePath(); + } + + // processing-java --sketch=/home/jiii/papart/sketches/papartExamples/Kinect/MultiTouchKinect/ --output=/home/jiii/papart/sketches/papartExamples/Kinect/MultiTouchKinect/build --force --run + public static String getLibraryFolder(String libname) { + return getLibrariesFolder() + "/libraries/" + libname; + } + +} diff --git a/papart/src/fr/inria/papart/procam/utils/MathUtils.java b/papart/src/fr/inria/papart/procam/utils/MathUtils.java new file mode 100644 index 00000000..1a9973ae --- /dev/null +++ b/papart/src/fr/inria/papart/procam/utils/MathUtils.java @@ -0,0 +1,279 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package fr.inria.papart.procam.utils; + +import java.io.FileNotFoundException; +import java.nio.ByteBuffer; +import org.bytedeco.javacpp.opencv_core; +import processing.core.PApplet; +import static processing.core.PApplet.abs; +import processing.core.PGraphics; +import processing.core.PMatrix3D; +import processing.core.PVector; +import toxi.geom.Vec3D; + +/** + * + * @author Jérémy Laviole + */ +public class MathUtils { + + // ---- Vector Utility ---- + /** + * Vec3D to PVector + * + * @param p + * @return + */ + public static PVector toPVector(Vec3D p) { + return new PVector(p.x, p.y, p.z); + } + + /** + * PVector to Vec3D + * + * @param p + * @return + */ + public static Vec3D toVec(PVector p) { + return new Vec3D(p.x, p.y, p.z); + } + + // ---- Matrix Utility ---- + // TODO: finish this, find another source... + // + /** + * * + * Get the Rotations, in the Unity3D format. [WARNING] Work in progress. + * http://planning.cs.uiuc.edu/node103.html + * + * @param mat + * @return + */ + public static PVector getRotations(PMatrix3D mat) { + PVector r = new PVector(); + r.z = PApplet.atan(mat.m10 / mat.m00); + r.y = PApplet.atan(-mat.m21 / PApplet.sqrt(mat.m21 * mat.m21 + mat.m22 * mat.m22)); + r.x = PApplet.atan(-mat.m21 / PApplet.sqrt(mat.m21 * mat.m21 + mat.m22 * mat.m22)); + return null; + } + + /** + * Add two matrices, src += toAdd + * + * @param src + * @param toAdd + */ + public static void addPMatrix3D(PMatrix3D src, PMatrix3D toAdd) { + src.m00 += toAdd.m00; + src.m01 += toAdd.m01; + src.m02 += toAdd.m02; + src.m03 += toAdd.m03; + src.m10 += toAdd.m10; + src.m11 += toAdd.m11; + src.m12 += toAdd.m12; + src.m13 += toAdd.m13; + src.m20 += toAdd.m20; + src.m21 += toAdd.m21; + src.m22 += toAdd.m22; + src.m23 += toAdd.m23; + src.m30 += toAdd.m30; + src.m31 += toAdd.m31; + src.m32 += toAdd.m32; + src.m33 += toAdd.m33; + } + + /** + * Multiply a vector by a Matrix. + * + * @param mat source matrix + * @param source vector to multiply + * @param target output, will be created if null. + * @return + */ + public static PVector mult(PMatrix3D mat, PVector source, PVector target) { + if (target == null) { + target = new PVector(); + } + target.x = mat.m00 * source.x + mat.m01 * source.y + mat.m02 * source.z + mat.m03; + target.y = mat.m10 * source.x + mat.m11 * source.y + mat.m12 * source.z + mat.m13; + target.z = mat.m20 * source.x + mat.m21 * source.y + mat.m22 * source.z + mat.m23; + float tw = mat.m30 * source.x + mat.m31 * source.y + mat.m32 * source.z + mat.m33; + if (tw != 0 && tw != 1) { + target.div(tw); + } + return target; + } + + /** + * Load a PMatrix3D from a file. Really simple file format, using + * loadStrings. + * + * @param pa + * @param filename + * @return + * @throws FileNotFoundException + */ + public static PMatrix3D loadPMatrix3D(PApplet pa, String filename) throws FileNotFoundException { + String[] lines = pa.loadStrings(filename); + if (lines == null) { + throw new FileNotFoundException(filename); + } + PMatrix3D mat = new PMatrix3D(Float.parseFloat(lines[0]), Float.parseFloat(lines[1]), Float.parseFloat(lines[2]), Float.parseFloat(lines[3]), Float.parseFloat(lines[4]), Float.parseFloat(lines[5]), Float.parseFloat(lines[6]), Float.parseFloat(lines[7]), Float.parseFloat(lines[8]), Float.parseFloat(lines[9]), Float.parseFloat(lines[10]), Float.parseFloat(lines[11]), Float.parseFloat(lines[12]), Float.parseFloat(lines[13]), Float.parseFloat(lines[14]), Float.parseFloat(lines[15])); + return mat; + } + + // TODO: throws ... + /** + * Save a PMatrix3D to a file. Really simple file format, using saveStrings. + * + * @param pa + * @param mat + * @param filename + */ + public static void savePMatrix3D(PApplet pa, PMatrix3D mat, String filename) { + String[] lines = new String[16]; + lines[0] = Float.toString(mat.m00); + lines[1] = Float.toString(mat.m01); + lines[2] = Float.toString(mat.m02); + lines[3] = Float.toString(mat.m03); + lines[4] = Float.toString(mat.m10); + lines[5] = Float.toString(mat.m11); + lines[6] = Float.toString(mat.m12); + lines[7] = Float.toString(mat.m13); + lines[8] = Float.toString(mat.m20); + lines[9] = Float.toString(mat.m21); + lines[10] = Float.toString(mat.m22); + lines[11] = Float.toString(mat.m23); + lines[12] = Float.toString(mat.m30); + lines[13] = Float.toString(mat.m31); + lines[14] = Float.toString(mat.m32); + lines[15] = Float.toString(mat.m33); + pa.saveStrings(filename, lines); + } + + /** + * Multiply each element of a PMatrix3D by the scale. mat.m00 *= scale and + * so on... + * + * @param mat + * @param scale + */ + public static void scaleMat(PMatrix3D mat, float scale) { + mat.m00 *= scale; + mat.m01 *= scale; + mat.m02 *= scale; + mat.m03 *= scale; + mat.m10 *= scale; + mat.m11 *= scale; + mat.m12 *= scale; + mat.m13 *= scale; + mat.m20 *= scale; + mat.m21 *= scale; + mat.m22 *= scale; + mat.m23 *= scale; + mat.m30 *= scale; + mat.m31 *= scale; + mat.m32 *= scale; + mat.m33 *= scale; + } + + // ---- Color Utility ---- + /** + * Get a pixel from a PImage. + * + * @param img incoming image. + * @param x image space coordinate. + * @param y image space coordinate. + * @param RGB true if RGB, false if BGR + * @return + */ + public static int getColor(opencv_core.IplImage img, int x, int y, boolean RGB) { + if (img.nChannels() == 3) { + ByteBuffer buff = img.getByteBuffer(); + int offset = (img.width() * y + x) * 3; + if (RGB) { + return (buff.get(offset) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset + 2) & 255); + } else { + return (buff.get(offset + 2) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset) & 255); + } + } + // Operation not supported + return 0; + } + + /** + * RGB distance of two colors. Return true if all channels differences are + * below the difference threshold. + * + * @param c1 + * @param c2 + * @param threshold + * @return + */ + public static boolean colorDistRGB(int c1, int c2, int threshold) { + int r1 = c1 >> 16 & 255; + int g1 = c1 >> 8 & 255; + int b1 = c1 >> 0 & 255; + int r2 = c2 >> 16 & 255; + int g2 = c2 >> 8 & 255; + int b2 = c2 >> 0 & 255; + int dr = PApplet.abs(r1 - r2); + int dg = PApplet.abs(g1 - g2); + int db = PApplet.abs(b1 - b2); + return dr < threshold && dg < threshold && db < threshold; + } + + /** + * Color distance on the HSB scale. The incomingPix is compared with the + * baseline. The method returns true if each channel validates the condition for + * the given threshold. + * + * @param g + * @param baseline + * @param incomingPix + * @param hueTresh + * @param saturationTresh + * @param brightnessTresh + * @return + */ + public static boolean colorDistHSB(PGraphics g, int baseline, int incomingPix, + float hueTresh, float saturationTresh, float brightnessTresh) { + float h1 = g.hue(baseline); + float h2 = g.hue(incomingPix); + + return abs(h1 - h2) < hueTresh + && // Avoid desaturated pixels + g.saturation(incomingPix) > saturationTresh + && // avoid pixels not bright enough + g.brightness(incomingPix) > brightnessTresh; + } + + /** + * Warning here, the threshold is the same for each channel. Often the range + * depends on the declaration. To change the intensity of each, try to call + * HSB(100, 100, 100) for even thresholding or HSB(100, 200, 50) to be less + * picky on the brigthness and more picky on the saturation. + * + * @param g + * @param baseline + * @param incomingPix + * @param threshold + * @return + */ + public static boolean colorDistHSBAutoThresh(PGraphics g, int baseline, int incomingPix, + float threshold) { + float h1 = g.hue(baseline); + float h2 = g.hue(incomingPix); + + float d1 = abs(h1 - h2); + float d2 = abs(g.saturation(baseline) - g.saturation(incomingPix)); + float d3 = abs(g.brightness(baseline) - g.brightness(incomingPix)); + + return (d1 + d2 + d3) < (threshold * 3); + } + +} From e42395158929c4107dee61c0d36532193ca0e76a Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 16 Dec 2016 17:44:34 +0100 Subject: [PATCH 69/99] This font is not required anymore. --- papart/data/Font/GentiumBookBasic-48.vlw | Bin 181486 -> 0 bytes .../procam/utils/ARToolkitPlusUtils.java | 0 .../inria/papart/procam/utils/DrawUtils.java | 0 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 papart/data/Font/GentiumBookBasic-48.vlw mode change 100644 => 100755 papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java mode change 100644 => 100755 papart/src/fr/inria/papart/procam/utils/DrawUtils.java diff --git a/papart/data/Font/GentiumBookBasic-48.vlw b/papart/data/Font/GentiumBookBasic-48.vlw deleted file mode 100644 index e4bc2edef2ef40e9a09488c43687e44a47a14c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181486 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

    y6jRYf9d^H_`;XYK)l8K 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 diff --git a/papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java b/papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java old mode 100644 new mode 100755 diff --git a/papart/src/fr/inria/papart/procam/utils/DrawUtils.java b/papart/src/fr/inria/papart/procam/utils/DrawUtils.java old mode 100644 new mode 100755 From 1430176c129f81fc812e71fcbe18f3fdb4151e3b Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Fri, 16 Dec 2016 17:44:49 +0100 Subject: [PATCH 70/99] Refactor tests. --- papart/test/fr/inria/papart/UtilsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/papart/test/fr/inria/papart/UtilsTest.java b/papart/test/fr/inria/papart/UtilsTest.java index e908039b..bca3c49f 100644 --- a/papart/test/fr/inria/papart/UtilsTest.java +++ b/papart/test/fr/inria/papart/UtilsTest.java @@ -19,7 +19,7 @@ */ package fr.inria.papart; -import fr.inria.papart.procam.Utils; +import fr.inria.papart.procam.utils.ARToolkitPlusUtils; import org.bytedeco.javacpp.opencv_core.IplImage; import processing.core.PApplet; From 454e4cb42dbdea34fac66f86f8b497a9455a283e Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Tue, 20 Dec 2016 17:35:20 +0100 Subject: [PATCH 71/99] =?UTF-8?q?CameraFFMPEG=20was=20broken=C2=A0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../papart/procam/camera/CameraFFMPEG.java | 39 +++++-------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/camera/CameraFFMPEG.java b/papart/src/fr/inria/papart/procam/camera/CameraFFMPEG.java index c9079d11..00a51e9a 100644 --- a/papart/src/fr/inria/papart/procam/camera/CameraFFMPEG.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraFFMPEG.java @@ -44,7 +44,7 @@ public class CameraFFMPEG extends Camera { protected CameraFFMPEG(String description, String imFormat) { this.cameraDescription = description; - this.setPixelFormat(Camera.PixelFormat.BGR); +// this.setPixelFormat(Camera.PixelFormat.RGB); this.imageFormat = imFormat; converter = new OpenCVFrameConverter.ToIplImage(); } @@ -52,17 +52,17 @@ protected CameraFFMPEG(String description, String imFormat) { @Override public void start() { FFmpegFrameGrabber grabberFF = new FFmpegFrameGrabber(this.cameraDescription); - grabberFF.setImageWidth(width()); - grabberFF.setImageHeight(height()); -// grabberCV.setFrameRate(60); - -// grabberFF.setImageMode(FrameGrabber.ImageMode.COLOR); - grabberFF.setImageMode(FrameGrabber.ImageMode.RAW); + + grabberFF.setImageMode(FrameGrabber.ImageMode.COLOR); - this.setPixelFormat(PixelFormat.RGB); + this.setPixelFormat(PixelFormat.BGR); grabberFF.setFormat(this.imageFormat); + grabberFF.setImageWidth(width()); + grabberFF.setImageHeight(height()); + grabberFF.setFrameRate(frameRate); + try { grabberFF.start(); this.grabber = grabberFF; @@ -85,28 +85,9 @@ public void grab() { return; } try { - - if(parent.millis() > 5000){ - Frame frame = grabber.grab(); - Buffer b = frame.image[0]; -// byte[] arr = ((ByteBuffer) b).array(); -// System.out.println("Data: " + arr[0]); -// System.out.println("Data: " + arr[1]); - } -// IplImage img = converter.convertToIplImageDepth(grabber.grab()); -// -// -// if (img != null) { -// System.out.println(img.asByteBuffer().get(100)); -// System.out.println(img.asByteBuffer().get(101)); -// -// System.out.println("ipl depth: " + img.depth()); -// System.out.println("ipl channels: " + img.nChannels()); -// -// this.updateCurrentImage(img); -// } + this.updateCurrentImage(converter.convertToIplImage(grabber.grab())); } catch (Exception e) { - System.err.println("Camera: OpenCV Grab() Error ! " + e); + System.err.println("Camera: FFMPEG Grab() Error ! " + e); e.printStackTrace(); } } From 6de2fb4b1e29e5df2a1782a14e260aeaa62eb295 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 10:33:56 +0100 Subject: [PATCH 72/99] =?UTF-8?q?Small=20additions:=C2=A0=20-=20Mouse=20ca?= =?UTF-8?q?n=20be=20pointer=20in=20skatolo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calibration/CalibrationExtrinsic.java | 2 +- .../papart/multitouch/KinectTouchInput.java | 2 +- .../inria/papart/multitouch/SkatoloLink.java | 27 +++++++++++++++++-- .../papart/multitouch/TUIOTouchInput.java | 4 +-- .../inria/papart/multitouch/TouchInput.java | 18 ------------- .../fr/inria/papart/procam/camera/Camera.java | 4 +++ .../papart/procam/camera/CameraRealSense.java | 1 + .../papart/procam/display/BaseDisplay.java | 20 +++++++++++++- 8 files changed, 53 insertions(+), 25 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index 5813033e..7f2de537 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -40,7 +40,7 @@ public class CalibrationExtrinsic { private final PApplet parent; private static final float OPEN_KINECT_Z_OFFSET = -15f; - private static final float REALSENSE_Z_OFFSET = -42f; + private static final float REALSENSE_Z_OFFSET = -52f; // Cameras private ProjectorDisplay projector; private final PMatrix3D kinectCameraExtrinsics = new PMatrix3D(); diff --git a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java index 58212719..a12ac655 100755 --- a/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/KinectTouchInput.java @@ -401,7 +401,7 @@ private PVector projectPointToScreen(Screen screen, // This is not working with raw Depth, because the coordinates // of pNorm is not in display Space, but in a custom space // defined for the touch surface... - paperScreenCoord = project(screen, display, + paperScreenCoord = display.project(screen, pNorm.x, pNorm.y); diff --git a/papart/src/fr/inria/papart/multitouch/SkatoloLink.java b/papart/src/fr/inria/papart/multitouch/SkatoloLink.java index cd5ec6fd..eb40256e 100644 --- a/papart/src/fr/inria/papart/multitouch/SkatoloLink.java +++ b/papart/src/fr/inria/papart/multitouch/SkatoloLink.java @@ -19,10 +19,13 @@ */ package fr.inria.papart.multitouch; +import fr.inria.papart.procam.Papart; +import fr.inria.papart.procam.PaperTouchScreen; import fr.inria.skatolo.Skatolo; import fr.inria.skatolo.gui.Pointer; import java.util.ArrayList; import java.util.HashMap; +import processing.core.PApplet; import processing.core.PVector; /** @@ -33,14 +36,34 @@ public class SkatoloLink { public static HashMap> pointersMap = new HashMap(); + // Warning -> Must be linked to a physical screen // a Renderer. + // Warning -> the mouse must be "displayed" ... + + public static Touch mouseTouch = new Touch(); + + public static void addMouseTo(TouchList touchList, Skatolo skatolo, PaperTouchScreen paperScreen) { + PApplet applet = Papart.getPapart().getApplet(); + + float normX = (float) applet.mouseX / (float) applet.width; + float normY = (float) applet.mouseY / (float) applet.height; +// PVector pointer = paperScreen.getDisplay().projectPointer(paperScreen.getScreen(), normX, normY); + PVector pointer = paperScreen.getDisplay().project(paperScreen.getScreen(), normX, normY); + + System.out.println("Pointer: " + pointer); + + mouseTouch.setPosition(pointer.x * paperScreen.getDrawingSize().x, + pointer.y * paperScreen.getDrawingSize().y, 0); + touchList.add(mouseTouch); + } + public static void updateTouch(TouchList touchList, Skatolo skatolo) { // TODO: Full integration ! // TODO: use the pointerList ? ArrayList pointers; - if(pointersMap.containsKey(skatolo)){ + if (pointersMap.containsKey(skatolo)) { pointers = pointersMap.get(skatolo); - }else { + } else { pointers = new ArrayList<>(); pointersMap.put(skatolo, pointers); } diff --git a/papart/src/fr/inria/papart/multitouch/TUIOTouchInput.java b/papart/src/fr/inria/papart/multitouch/TUIOTouchInput.java index 8b003049..3a86f99b 100755 --- a/papart/src/fr/inria/papart/multitouch/TUIOTouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/TUIOTouchInput.java @@ -78,7 +78,7 @@ private Touch getCursor(Screen screen, BaseDisplay display, TuioCursor tcur) thr Touch touch = touchPoint.getTouch(); TuioPoint tuioPoint = tcur.getPosition(); - PVector v = project(screen, display, tuioPoint.getX(), tuioPoint.getY()); + PVector v = display.project(screen, tuioPoint.getX(), tuioPoint.getY()); touch.setPosition(v); return touch; } @@ -89,7 +89,7 @@ private Touch getObject(Screen screen, BaseDisplay display, TuioObject tobj) thr Touch touch = tp.getTouch(); TuioPoint tuioPoint = tobj.getPosition(); - PVector v = project(screen, display, tuioPoint.getX(), tuioPoint.getY()); + PVector v = display.project(screen, tuioPoint.getX(), tuioPoint.getY()); touch.setPosition(v); // // TODO: implement this ? diff --git a/papart/src/fr/inria/papart/multitouch/TouchInput.java b/papart/src/fr/inria/papart/multitouch/TouchInput.java index 6bd6b598..aefa1f2a 100755 --- a/papart/src/fr/inria/papart/multitouch/TouchInput.java +++ b/papart/src/fr/inria/papart/multitouch/TouchInput.java @@ -39,24 +39,6 @@ public abstract class TouchInput { abstract public TouchList projectTouchToScreen(Screen screen, BaseDisplay display); - public PVector project(Screen screen, BaseDisplay display, float x, float y) { - boolean isProjector = display instanceof ProjectorDisplay; - boolean isARDisplay = display instanceof ARDisplay; - - // check that the correct method is called ! - PVector paperScreenCoord; - if (isProjector) { - paperScreenCoord = ((ProjectorDisplay) display).projectPointer(screen, x, y); - } else { - if (isARDisplay) { - paperScreenCoord = ((ARDisplay) display).projectPointer(screen, x, y); - } else { - paperScreenCoord = display.projectPointer(screen, x, y); - } - } - return paperScreenCoord; - } - protected boolean computeOutsiders = false; public void computeOutsiders(boolean outsiders) { diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index f29b9989..2ba9ad71 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -181,6 +181,10 @@ private void updateCalibration() { public PImage getPImageCopy() { PImage out = parent.createImage(this.width, this.height, RGB); + if(currentImage == null){ + System.err.println("Error in PImageCopy(): no current image. "); + return out; + } ImageUtils.IplImageToPImage(currentImage, false, out); return out; } diff --git a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java index 19b62388..88113123 100755 --- a/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java +++ b/papart/src/fr/inria/papart/procam/camera/CameraRealSense.java @@ -94,6 +94,7 @@ public void internalStart() throws FrameGrabber.Exception { if (useHardwareIntrinsics) { if (useColor) { useHarwareIntrinsics(colorCamera, grabber); + System.out.println("setting hardware intrinsics for Realsense.."); } if (useIR) { useHarwareIntrinsics(IRCamera, grabber); diff --git a/papart/src/fr/inria/papart/procam/display/BaseDisplay.java b/papart/src/fr/inria/papart/procam/display/BaseDisplay.java index e8b7ed28..27bdaef3 100755 --- a/papart/src/fr/inria/papart/procam/display/BaseDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/BaseDisplay.java @@ -159,7 +159,7 @@ public void endDraw() { * Called in Automatic mode to display the image. */ public void draw() { - parent.g.background(100, 0, 0); + parent.g.background(30, 30, 30); drawScreensOver(); parent.noStroke(); parent.g.image(this.render(), 0, 0, this.drawingSizeX, this.drawingSizeY); @@ -280,4 +280,22 @@ public PVector projectPointer(Screen screen, float x, float y) { screenMat.mult(new PVector(x * drawingSizeX, y * drawingSizeY), transformed); return transformed; } + + + public PVector project(Screen screen, float x, float y) { + boolean isProjector = this instanceof ProjectorDisplay; + boolean isARDisplay = this instanceof ARDisplay; + // check that the correct method is called ! + PVector paperScreenCoord; + if (isProjector) { + paperScreenCoord = ((ProjectorDisplay) this).projectPointer(screen, x, y); + } else { + if (isARDisplay) { + paperScreenCoord = ((ARDisplay) this).projectPointer(screen, x, y); + } else { + paperScreenCoord = this.projectPointer(screen, x, y); + } + } + return paperScreenCoord; + } } From a70ecd11028e68ba8f2468dad4c57eab2cd90189 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 11:01:15 +0100 Subject: [PATCH 73/99] added small utility to refactor the examples as well as the core. --- linkExamples.sh | 3 +++ removeExamples.sh | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 linkExamples.sh create mode 100644 removeExamples.sh diff --git a/linkExamples.sh b/linkExamples.sh new file mode 100644 index 00000000..f7b08878 --- /dev/null +++ b/linkExamples.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +ln -s ../../../Papart-examples/papart-examples papart/src/ diff --git a/removeExamples.sh b/removeExamples.sh new file mode 100644 index 00000000..24c1a6b0 --- /dev/null +++ b/removeExamples.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +rm papart/src/papart-examples From 536f70c36839bbdc574415b926ce25bfc9942bd1 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 11:01:30 +0100 Subject: [PATCH 74/99] new P3B calibration. --- .../saved/projector-p3B-procamcalib.yaml | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 papart/data/calibration/saved/projector-p3B-procamcalib.yaml diff --git a/papart/data/calibration/saved/projector-p3B-procamcalib.yaml b/papart/data/calibration/saved/projector-p3B-procamcalib.yaml new file mode 100644 index 00000000..eb86abfe --- /dev/null +++ b/papart/data/calibration/saved/projector-p3B-procamcalib.yaml @@ -0,0 +1,214 @@ +%YAML:1.0 +Cameras: + - Camera 0 +Projectors: + - Projector 0 +Camera 0: + imageWidth: 640 + imageHeight: 480 + responseGamma: 0. + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 6.0336619173044176e+02, 0., 3.1412708141403124e+02, 0., + 6.0442266333410726e+02, 2.3392992279062375e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 1.4581568172715451e-01, -2.9304335419508754e-01, + -9.8065868768166184e-03, 1.6642932396551816e-03 ] + extrParams: !!opencv-matrix + rows: 10 + cols: 6 + dt: d + data: [ -4.7367538411373789e-01, -1.7019243542241474e-02, + 9.6458977737399372e-03, -1.7315164553833495e+02, + -1.8612635986348377e+02, 5.9631718160439220e+02, + -3.8444503786908940e-01, -3.3979268883880359e-01, + -1.4707484103287070e+00, -1.0419100304800661e+02, + 1.1588590155621586e+02, 4.4463736579914519e+02, + 2.2068113139126499e-02, -6.7299271184357712e-01, + -3.0379180380052189e+00, 2.4207425855627142e+02, + 1.1162729434716046e+02, 4.5226208703309703e+02, + 3.0598013668146801e-01, 7.2193572926477190e-01, + 2.9980060017234109e+00, 1.6652539272776798e+02, + 6.7284638612982860e+01, 3.6936358329709788e+02, + -3.3556896451320831e-02, -7.1764336643938598e-01, + -2.9682834843227135e+00, 3.1763144237120150e+02, + 1.0657052350183055e+02, 4.4532380686527551e+02, + -2.1200110711757125e-01, 1.9983615133679153e-01, + 1.5545015173670433e+00, 1.5088628680296540e+02, + -2.9256298554786582e+02, 5.5743412806818856e+02, + -4.7866525078363376e-01, -1.4366917002575195e-02, + 1.7585631052476892e-02, -1.8106507938446046e+02, + -2.0601489547772519e+02, 6.0676063229476370e+02, + -4.3131772290916159e-01, -2.7292253538956990e-01, + -1.2080720333000643e+00, -1.1849915403199785e+02, + 8.9595924951884456e+01, 4.5762470913268066e+02, + -3.8520408084693375e-01, -3.4756010049584646e-01, + -1.5744458144304001e+00, -1.8549613075878557e+02, + 1.3444778079343811e+02, 4.3410016706333994e+02, + -4.3079439584009879e-02, 6.4856011049213513e-01, + 3.0528076362429086e+00, 2.3154496913217247e+02, + 6.7738568062628090e+01, 4.7327165920781187e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 10 + dt: d + data: [ 3.3297489451038192e-01, 2.7443017905966699e-01, + 3.9225867153663374e-01, 3.9662553380781163e-01, + 3.9094336019940662e-01, 2.3530066173482525e-01, + 3.6632875722997627e-01, 4.9026108948039909e-01, + 3.7893793502081008e-01, 4.1982561263259860e-01 ] + avgReprojErr: 3.7736326610161719e-01 + maxReprojErr: 1.1061860448533452e+00 + R: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + T: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ 0., 0., 0. ] + E: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + F: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 0., 0., 0., 0., 0., 0., 0., 0., 0. ] + avgEpipolarErr: 0. + maxEpipolarErr: 0. + colorOrder: BGR + colorMixingMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1., 0., 0., 0., 1., 0., 0., 0., 1. ] + additiveLight: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ 0., 0., 0. ] + avgColorErr: 0. + colorR2: 1. +Projector 0: + imageWidth: 1280 + imageHeight: 800 + responseGamma: 2.2000000000000002e+00 + cameraMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 1.2563413051150239e+03, 0., 6.1553924606776650e+02, 0., + 1.2368291549251016e+03, 6.6016094038958443e+02, 0., 0., 1. ] + distortionCoeffs: !!opencv-matrix + rows: 1 + cols: 4 + dt: d + data: [ 3.5790450461787471e-02, -6.9014632423932951e-02, + -8.7105602669458101e-03, 2.0926794634546233e-03 ] + extrParams: !!opencv-matrix + rows: 10 + cols: 6 + dt: d + data: [ -3.3519585677079350e-01, -2.4751176841884402e-02, + 5.6450722169903156e-03, -1.7475803055902944e+02, + -2.8526769476846192e+02, 5.7654998758376394e+02, + -2.7005047957624245e-01, -2.3820884706815640e-01, + -1.4886005949136163e+00, -1.0442889063076275e+02, + 3.4438271626615823e+01, 4.6916406113879259e+02, + 3.9969391904097269e-02, -4.4952519180611317e-01, + -3.0831640429293725e+00, 2.4177702311562567e+02, + 2.8740672140084367e+01, 4.7854187036054810e+02, + 3.5846930653349890e-01, 5.2584112352569312e-01, + 3.0351324391641228e+00, 1.6507535549837374e+02, + -9.7429778083610135e+00, 3.6838252593390172e+02, + -2.1768127542179702e-02, -5.1135374556351265e-01, + -3.0132296343116525e+00, 3.1728637147825231e+02, + 2.3940672131866723e+01, 4.6919404513345796e+02, + -7.0044410993605852e-02, 3.3412158301295604e-02, + 1.5587061415014865e+00, 1.4865217483785480e+02, + -3.8915980756331180e+02, 5.0353924031304661e+02, + -3.4141268927128704e-01, -2.3196704363163921e-02, + 1.3235269962512643e-02, -1.8288377177069788e+02, + -3.0619084969696928e+02, 5.8406226907662108e+02, + -3.1096093446978923e-01, -1.8775397582118611e-01, + -1.2222532141593747e+00, -1.1895483027171115e+02, + 6.6751724785620228e+00, 4.7831449128361675e+02, + -2.7665670463571168e-01, -2.3756376324658632e-01, + -1.5926518995533041e+00, -1.8571238130387752e+02, + 5.4539902230989782e+01, 4.5997500830922348e+02, + -5.5179200125934351e-02, 4.1814329059201566e-01, + 3.0874837889528606e+00, 2.3097439532346635e+02, + -1.7744738014889073e+01, 4.9277929861942806e+02 ] + reprojErrs: !!opencv-matrix + rows: 1 + cols: 10 + dt: d + data: [ 3.4003159720932569e-01, 6.4400559331259588e-01, + 3.5493722205221800e-01, 8.1031265023380961e-01, + 3.4145181732367719e-01, 1.0597956456994664e+00, + 3.5947325905307848e-01, 5.5224144837909872e-01, + 3.5190322629802923e-01, 3.5917988120250516e-01 ] + avgReprojErr: 5.4262939199630345e-01 + maxReprojErr: 2.2710332160036666e+00 + R: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 9.9994587545892677e-01, 1.5340630900766295e-03, + -1.0290422883249568e-02, -2.7179253744314211e-03, + 9.9324101291584210e-01, -1.1603836927314588e-01, + 1.0042859868556547e-02, 1.1606005735113011e-01, + 9.9319142367084146e-01 ] + T: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ 4.3602330533858638e+00, -3.0662744530509769e+01, + 6.5825911898322609e+00 ] + E: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ -2.9005065488090453e-01, -1.0096819429753907e+01, + -2.9690141746652394e+01, 6.5384457005556351e+00, + -4.9595078805887116e-01, -4.3982837208398928e+00, + 3.0649234135479777e+01, 4.3778008791188139e+00, + -8.2148694114575849e-01 ] + F: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 2.0654990909259168e-07, 7.1775459066158173e-06, + 1.1012952274212352e-02, -4.7295911927624633e-06, + 3.5811944148860187e-07, 3.3215291123388229e-03, + -2.4425540991174687e-02, -8.5642820718516768e-03, 1. ] + avgEpipolarErr: 2.7443524713497749e+00 + maxEpipolarErr: 1.0151392941537374e+01 + colorOrder: BGR + colorMixingMatrix: !!opencv-matrix + rows: 3 + cols: 3 + dt: d + data: [ 7.6604573382889479e-02, -5.7218538924928064e-02, + -1.1554917018250581e-01, -8.6169109359339024e-02, + 3.4270475395352729e-01, -8.8937433175895225e-02, + -3.0311399592083395e-02, -2.9647717451540440e-01, + 6.6640269113887163e-01 ] + additiveLight: !!opencv-matrix + rows: 3 + cols: 1 + dt: d + data: [ 7.5043589623580176e-01, 5.6984854817797825e-01, + 2.8773446633667960e-01 ] + avgColorErr: 1.0188152067555140e-01 + colorR2: 8.0575256584721777e-01 From a2ef37e16cf10750f4f9619863e7dbabdb57ab22 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 11:58:25 +0100 Subject: [PATCH 75/99] createRedist does not create a libs anymore. --- createRedist.sh | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/createRedist.sh b/createRedist.sh index 6ab03597..bc58e24b 100755 --- a/createRedist.sh +++ b/createRedist.sh @@ -5,8 +5,7 @@ TMP=tmp NAME=PapARt ## NAME must match -## fr.inria.papart.procam.Utils.LibraryName = "ProCam"; - +## fr.inria.papart.procam.Utils.LibraryName = "PapARt" mkdir $TMP mkdir $TMP/$NAME @@ -41,7 +40,6 @@ cp -R papart/target/site/apidocs $TMP/$NAME/ echo "Copy the Data" cp -R papart/data $TMP/$NAME/ - echo "Download the examples" wget https://github.com/potioc/Papart-examples/archive/master.zip unzip master.zip @@ -53,18 +51,6 @@ echo "cleaning the examples" rm master.zip rm -rf Papart-examples-master - -# Calibration stuff -# cp -R sketches/calibration $TMP/$NAME/examples/calib - -# Now working with github examples and apps. - -# echo "Copy Examples, Calibration & Apps" -# Examples -# cp -R sketches/examples $TMP/$NAME/examples/examples -# Apps -# cp -R sketches/apps $TMP/$NAME/examples/apps - echo "Create the archive..." cd $TMP @@ -73,11 +59,6 @@ tar -zcf $NAME.tgz $NAME mv $NAME.tgz .. cd .. -cp -r $TMP/$NAME libraries/ - -echo "Create full archive : Papart & Deps" -tar -zcf papart-complete.tgz libraries - echo "Clean " rm -rf $TMP From 56f1dfdc8a32cd57fefe16662aefee0098ced94a Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 12:09:29 +0100 Subject: [PATCH 76/99] build scripts --- build.sh | 5 +++++ createAll.rb | 20 ++++++++++++++++++++ createAll.sh | 7 +++++++ createLibs.sh | 4 ++++ createRedist.sh | 31 ++++++------------------------- downloadExamples.sh | 8 ++++++++ 6 files changed, 50 insertions(+), 25 deletions(-) create mode 100644 build.sh create mode 100644 createAll.rb create mode 100644 createAll.sh create mode 100644 createLibs.sh create mode 100644 downloadExamples.sh diff --git a/build.sh b/build.sh new file mode 100644 index 00000000..3bba91d3 --- /dev/null +++ b/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd papart +mvn install +mvn javadoc:javadoc diff --git a/createAll.rb b/createAll.rb new file mode 100644 index 00000000..25a61e2d --- /dev/null +++ b/createAll.rb @@ -0,0 +1,20 @@ +#!/bin/ruby +# coding: utf-8 + + +`sh downloadExamples.sh` +`sh createLibs.sh` + + +output_names=["realsense"] + # "kinect", + # "hardware2", + # "hardware3"] + +output_names.each do |release_name| + %x(git checkout release-#{release_name}) + %x(sh build.sh) + %x(sh createRedist.sh #{release_name}) +end + + diff --git a/createAll.sh b/createAll.sh new file mode 100644 index 00000000..7e3d488b --- /dev/null +++ b/createAll.sh @@ -0,0 +1,7 @@ +#!/bin/ruby + +NAMES=realsense kinect hardware2 hardware3 + + + +git checkout diff --git a/createLibs.sh b/createLibs.sh new file mode 100644 index 00000000..057f7bc6 --- /dev/null +++ b/createLibs.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +echo "Create libraries" +tar -zcf libs.tgz libraries diff --git a/createRedist.sh b/createRedist.sh index bc58e24b..cf20fbc9 100755 --- a/createRedist.sh +++ b/createRedist.sh @@ -1,8 +1,8 @@ #!/bin/bash -SKETCHBOOK=sketches TMP=tmp NAME=PapARt +VERSION=$1 ## NAME must match ## fr.inria.papart.procam.Utils.LibraryName = "PapARt" @@ -12,22 +12,10 @@ mkdir $TMP/$NAME mkdir $TMP/$NAME/library mkdir $TMP/$NAME/examples - -echo "Cleaning previous versions" -rm -rf libraries/$NAME -echo "Create archive of depedencies" -tar -zcf libs.tgz libraries - echo "Copy Library" # Library cp papart/target/$NAME.jar $TMP/$NAME/library/$NAME.jar - -# echo "Copy JavaCV, OpenCV and friends" -# libs are javaCV and javaCV cppjars -# cp libs/* $NAME/library/ - - echo "Copy the sources" # copy the source also cp -R papart/src $TMP/$NAME/ @@ -40,23 +28,16 @@ cp -R papart/target/site/apidocs $TMP/$NAME/ echo "Copy the Data" cp -R papart/data $TMP/$NAME/ -echo "Download the examples" -wget https://github.com/potioc/Papart-examples/archive/master.zip -unzip master.zip - -mv Papart-examples-master/apps $TMP/$NAME/examples/ -mv Papart-examples-master/papart-examples $TMP/$NAME/examples/ - -echo "cleaning the examples" -rm master.zip -rm -rf Papart-examples-master +echo "Copy the examples" +cp -R Papart-examples-master/apps $TMP/$NAME/examples/ +cp -R Papart-examples-master/papart-examples $TMP/$NAME/examples/ echo "Create the archive..." cd $TMP -tar -zcf $NAME.tgz $NAME +tar -zcf $NAME-$VERSION.tgz $NAME -mv $NAME.tgz .. +mv $NAME-$VERSION.tgz .. cd .. echo "Clean " diff --git a/downloadExamples.sh b/downloadExamples.sh new file mode 100644 index 00000000..a36ac2be --- /dev/null +++ b/downloadExamples.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +echo "Download the examples" +wget https://github.com/potioc/Papart-examples/archive/master.zip +unzip master.zip + +echo "cleaning the examples" +rm master.zip From a34f571ab286cc6362c6b4e5ffe2d764238d79e9 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 12:09:51 +0100 Subject: [PATCH 77/99] ignore examples from github. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9dd4c285..b15fc544 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ build /papart-complete.tgz /PapARt.tgz /big-files/ +/Papart-examples-master/ From 235c2e920d3e5bea7cbd3636a33919c0bf37cb02 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 12:17:49 +0100 Subject: [PATCH 78/99] save current branch. --- createAll.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/createAll.rb b/createAll.rb index 25a61e2d..815bb89a 100644 --- a/createAll.rb +++ b/createAll.rb @@ -2,9 +2,10 @@ # coding: utf-8 -`sh downloadExamples.sh` -`sh createLibs.sh` +# %x(sh downloadExamples.sh) +# %x(sh createLibs.sh) +current_branch = %x(git rev-parse --abbrev-ref HEAD).chomp output_names=["realsense"] # "kinect", @@ -12,9 +13,12 @@ # "hardware3"] output_names.each do |release_name| + puts "Get the version: " + release_name %x(git checkout release-#{release_name}) + puts "Build it." %x(sh build.sh) + puts "Create redistribuable." %x(sh createRedist.sh #{release_name}) end - +%x(git checkout #{current_branch}) From 1530f736d7e3bb1c586e6b2544480556713a40bb Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 12:18:50 +0100 Subject: [PATCH 79/99] createall test. --- createAll.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/createAll.rb b/createAll.rb index 815bb89a..f8fb4d9f 100644 --- a/createAll.rb +++ b/createAll.rb @@ -7,10 +7,10 @@ current_branch = %x(git rev-parse --abbrev-ref HEAD).chomp -output_names=["realsense"] - # "kinect", - # "hardware2", - # "hardware3"] +output_names=["realsense", + "kinect", + "hardware2", + "hardware3"] output_names.each do |release_name| puts "Get the version: " + release_name From 3ac7026350282caf09668507326e5330fbd66e4f Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 16:43:12 +0100 Subject: [PATCH 80/99] Download and create archive for depedencies. --- deps/getLibs.sh | 77 +++++ deps/javacv-buid/createLibs.rb | 36 +++ deps/javacv-buid/pom-linux.xml | 441 +++++++++++++++++++++++++++ deps/javacv-buid/pom-windows.xml | 441 +++++++++++++++++++++++++++ deps/reflections-build/createLibs.rb | 20 ++ deps/reflections-build/pom.xml | 441 +++++++++++++++++++++++++++ 6 files changed, 1456 insertions(+) create mode 100644 deps/getLibs.sh create mode 100644 deps/javacv-buid/createLibs.rb create mode 100644 deps/javacv-buid/pom-linux.xml create mode 100644 deps/javacv-buid/pom-windows.xml create mode 100644 deps/reflections-build/createLibs.rb create mode 100644 deps/reflections-build/pom.xml diff --git a/deps/getLibs.sh b/deps/getLibs.sh new file mode 100644 index 00000000..46a86e82 --- /dev/null +++ b/deps/getLibs.sh @@ -0,0 +1,77 @@ +#!/bin/bash + + +mkdir libraries + +echo "Get Toxiclibs" + +wget https://bitbucket.org/postspectacular/toxiclibs/downloads/toxiclibs-complete-0020.zip + +unzip toxiclibs-complete-0020.zip +mv audioutils libraries/ +mv colorutils libraries/ +mv datautils libraries/ +mv simutils libraries/ +mv toxiclibscore libraries/ +mv toxiclibs_p5 libraries/ +mv verletphysics libraries/ +mv volumeutils libraries/ + +echo "Get SVGExtended" +wget https://github.com/Rea-lity-Tech/SVGExtended/releases/download/2.3.1/SVGExtended.tgz + +tar xvzf SVGExtended.tgz +mv SVGExtended libraries/ + +echo "Get Processing Video" +#wget https://github.com/processing/processing-video/releases/download/latest/video.zip + +unzip video.zip +unzip video +mv video libraries/ + + +echo "Get Processing TUIO" +wget https://github.com/poqudrof/ProcessingTUIO/releases/download/0.5/processingTUIO.tgz + +tar xvzf processingTUIO.tgz +mv processingTUIO libraries/ + + +echo "Get OSCP5" +wget http://www.sojamo.de/libraries/oscP5/download/oscP5-0.9.8.zip + +unzip oscP5-0.9.8.zip +mv oscP5 libraries/ + +echo "Get Skatolo" +wget https://github.com/poqudrof/Skatolo/releases/download/1.0.1/skatolo.tgz + +tar xvzf skatolo.tgz +mv skatolo libraries/ + +echo "Get Gui Modes" +wget https://github.com/poqudrof/guiModes/releases/download/0.5/guiModes.tgz + +tar xvzf guiModes.tgz +mv guiModes libraries/ + +echo "get Peasycam" +wget http://mrfeinberg.com/peasycam/peasycam_202.zip +unzip peasycam_202.zip +mv peasycam libraries/ + +echo "Compile reflections" +cd reflections-build +ruby createLibs.rb +cp reflections.tgz .. +cd .. +tar xvzf reflections.tgz +mv reflections libraries/ + +echo "Compile JavaCV" +cd javacv-build +ruby createLibs.rb + +echo "compile all" +zip -r libraries.zip libraries diff --git a/deps/javacv-buid/createLibs.rb b/deps/javacv-buid/createLibs.rb new file mode 100644 index 00000000..bd827ea7 --- /dev/null +++ b/deps/javacv-buid/createLibs.rb @@ -0,0 +1,36 @@ +#!/bin/ruby + + +platforms = ["linux", "windows"] +archs = ["x86_64", "x86"] + + +def build(platform, arch) + + puts "Build " + platform + %x(cp pom-#{platform}.xml pom.xml) + + puts "Get the library" + + %x(mvn -Dplatform=#{platform}-#{arch} dependency:copy-dependencies) + + %x(rm target/dependency/*linux*) if platform.eql? "windows" + + `mv target/dependency target/library` + `mv target javacv` + `mv javacv/library/javacv-1.2.jar javacv/library/javacv.jar` + + puts "compress library" + `tar -zcf javacv-#{platform}-#{arch}.tgz javacv` + `rm -rf javacv` + + puts "done javacv-" + platform + "-" + arch + + %x(rm pom.xml) +end + +build("linux", "x86_64") +build("windows", "x86_64") +build("windows", "x86") + +# mvn -Dplatform=windows-x86_64 dependency:copy-dependencies diff --git a/deps/javacv-buid/pom-linux.xml b/deps/javacv-buid/pom-linux.xml new file mode 100644 index 00000000..e29d35ab --- /dev/null +++ b/deps/javacv-buid/pom-linux.xml @@ -0,0 +1,441 @@ + + 4.0.0 + fr.inria + papart-deps + 0.7-SNAPSHOT + jar + + PapARt-deps + Paper Augmented Reality Toolkit + http://papart.gforge.inria.fr + + + + clojars.org + http://clojars.org/repo + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + + central + Maven Repository Switchboard + default + http://repo1.maven.org/maven2 + + true + + + + + + + GNU Lesser General Public License version 2 (LGPLv2) + https://www.gnu.org/licenses/lgpl.html + repo + + + + + + Jeremy Laviole + jeremy.laviole@inria.fr + + + + + + linux-${os.arch} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.bytedeco + javacpp + 1.2 + + + + org.bytedeco + javacv + 1.2 + + + + org.bytedeco.javacpp-presets + opencv + 3.1.0-1.2 + ${platform} + runtime + + + + org.bytedeco.javacpp-presets + opencv + 3.1.0-1.2 + compile + + + + org.bytedeco.javacpp-presets + artoolkitplus + 2.3.1-1.2 + + + + org.bytedeco.javacpp-presets + artoolkitplus + 2.3.1-1.2 + ${platform} + runtime + + + + org.bytedeco.javacpp-presets + ffmpeg + 3.1.2-1.2 + + + + org.bytedeco.javacpp-presets + ffmpeg + 3.0.2-1.2 + ${platform} + + + + org.bytedeco.javacpp-presets + flycapture + 2.9.3.43-1.2 + + + + + + org.bytedeco.javacpp-presets + libfreenect + 0.5.3-1.2 + + + + org.bytedeco.javacpp-presets + libfreenect + 0.5.3-1.2 + ${platform} + runtime + + + + + + + org.bytedeco.javacpp-presets + librealsense + 1.9.6-1.2 + + + + org.bytedeco.javacpp-presets + librealsense + 1.9.6-1.2 + ${platform} + runtime + + + + + + + + + + + + + + + src + test + target/classes + + + + maven-dependency-plugin + 2.3 + + + + copy-dependencies + + + ${project.build.directory} + true + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.3.2 + + PapARt + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.8 + 1.8 + + + + + + + + src + + **/*.vert + **/*.frag + **/*.glsl + + + + + + + + + + + + linux + + + linux + + + + linux + + + + macosx + + + mac os x + + + + macosx + + + + windows + + + windows + + + + windows + + + + i386 + + + i386 + + + + x86 + + + + i486 + + + i486 + + + + x86 + + + + i586 + + + i586 + + + + x86 + + + + i686 + + + i686 + + + + x86 + + + + amd64 + + + amd64 + + + + x86_64 + + + + x86-64 + + + x86-64 + + + + x86_64 + + + + + + + diff --git a/deps/javacv-buid/pom-windows.xml b/deps/javacv-buid/pom-windows.xml new file mode 100644 index 00000000..f2e975f8 --- /dev/null +++ b/deps/javacv-buid/pom-windows.xml @@ -0,0 +1,441 @@ + + 4.0.0 + fr.inria + papart-deps + 0.7-SNAPSHOT + jar + + PapARt-deps + Paper Augmented Reality Toolkit + http://papart.gforge.inria.fr + + + + clojars.org + http://clojars.org/repo + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + + central + Maven Repository Switchboard + default + http://repo1.maven.org/maven2 + + true + + + + + + + GNU Lesser General Public License version 2 (LGPLv2) + https://www.gnu.org/licenses/lgpl.html + repo + + + + + + Jeremy Laviole + jeremy.laviole@inria.fr + + + + + + windows-${os.arch} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.bytedeco + javacpp + 1.2 + + + + org.bytedeco + javacv + 1.2 + + + + org.bytedeco.javacpp-presets + opencv + 3.1.0-1.2 + ${platform} + runtime + + + + org.bytedeco.javacpp-presets + opencv + 3.1.0-1.2 + compile + + + + org.bytedeco.javacpp-presets + artoolkitplus + 2.3.1-1.2 + + + + org.bytedeco.javacpp-presets + artoolkitplus + 2.3.1-1.2 + ${platform} + runtime + + + + org.bytedeco.javacpp-presets + ffmpeg + 3.1.2-1.2 + + + + org.bytedeco.javacpp-presets + ffmpeg + 3.0.2-1.2 + ${platform} + + + + org.bytedeco.javacpp-presets + flycapture + 2.9.3.43-1.2 + + + + + + org.bytedeco.javacpp-presets + libfreenect + 0.5.3-1.2 + + + + org.bytedeco.javacpp-presets + libfreenect + 0.5.3-1.2 + ${platform} + runtime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + src + test + target/classes + + + + maven-dependency-plugin + 2.3 + + + + copy-dependencies + + + ${project.build.directory} + true + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.3.2 + + PapARt + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.8 + 1.8 + + + + + + + + src + + **/*.vert + **/*.frag + **/*.glsl + + + + + + + + + + + + linux + + + linux + + + + linux + + + + macosx + + + mac os x + + + + macosx + + + + windows + + + windows + + + + windows + + + + i386 + + + i386 + + + + x86 + + + + i486 + + + i486 + + + + x86 + + + + i586 + + + i586 + + + + x86 + + + + i686 + + + i686 + + + + x86 + + + + amd64 + + + amd64 + + + + x86_64 + + + + x86-64 + + + x86-64 + + + + x86_64 + + + + + + + diff --git a/deps/reflections-build/createLibs.rb b/deps/reflections-build/createLibs.rb new file mode 100644 index 00000000..6e0dc93f --- /dev/null +++ b/deps/reflections-build/createLibs.rb @@ -0,0 +1,20 @@ +#!/bin/ruby + +puts "Get the library" + +%x(mvn dependency:copy-dependencies) + +`mv target/dependency target/library` +`mv target reflections` + +`mv reflections/library/reflections-0.9.9.jar reflections/library/reflections.jar` + +puts "compress library" +`tar -zcf reflections.tgz reflections` + + +`rm -rf reflections` + +puts "done reflections" + +# mvn -Dplatform=windows-x86_64 dependency:copy-dependencies diff --git a/deps/reflections-build/pom.xml b/deps/reflections-build/pom.xml new file mode 100644 index 00000000..b0131ad5 --- /dev/null +++ b/deps/reflections-build/pom.xml @@ -0,0 +1,441 @@ + + 4.0.0 + fr.inria + papart-deps + 0.7-SNAPSHOT + jar + + PapARt-deps + Paper Augmented Reality Toolkit + http://papart.gforge.inria.fr + + + + clojars.org + http://clojars.org/repo + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + + central + Maven Repository Switchboard + default + http://repo1.maven.org/maven2 + + true + + + + + + + GNU Lesser General Public License version 2 (LGPLv2) + https://www.gnu.org/licenses/lgpl.html + repo + + + + + + Jeremy Laviole + jeremy.laviole@inria.fr + + + + + + linux-${os.arch} + + + + + + org.reflections + reflections + 0.9.9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + src + test + target/classes + + + + maven-dependency-plugin + 2.3 + + + + copy-dependencies + + + ${project.build.directory} + true + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.3.2 + + PapARt + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.8 + 1.8 + + + + + + + + src + + **/*.vert + **/*.frag + **/*.glsl + + + + + + + + + + + + linux + + + linux + + + + linux + + + + macosx + + + mac os x + + + + macosx + + + + windows + + + windows + + + + windows + + + + i386 + + + i386 + + + + x86 + + + + i486 + + + i486 + + + + x86 + + + + i586 + + + i586 + + + + x86 + + + + i686 + + + i686 + + + + x86 + + + + amd64 + + + amd64 + + + + x86_64 + + + + x86-64 + + + x86-64 + + + + x86_64 + + + + + + + From d60f555fc1a5135598f4ceb9bbfcbf4b789bd212 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 17:04:14 +0100 Subject: [PATCH 81/99] updated pom to correct version. --- deps/getLibs.sh | 1 + deps/javacv-buid/pom-linux.xml | 3 ++- deps/javacv-buid/pom-windows.xml | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/deps/getLibs.sh b/deps/getLibs.sh index 46a86e82..23774a86 100644 --- a/deps/getLibs.sh +++ b/deps/getLibs.sh @@ -72,6 +72,7 @@ mv reflections libraries/ echo "Compile JavaCV" cd javacv-build ruby createLibs.rb +mv javacv-*.tgz .. echo "compile all" zip -r libraries.zip libraries diff --git a/deps/javacv-buid/pom-linux.xml b/deps/javacv-buid/pom-linux.xml index e29d35ab..b44d6722 100644 --- a/deps/javacv-buid/pom-linux.xml +++ b/deps/javacv-buid/pom-linux.xml @@ -193,6 +193,7 @@ runtime + org.bytedeco.javacpp-presets ffmpeg @@ -202,7 +203,7 @@ org.bytedeco.javacpp-presets ffmpeg - 3.0.2-1.2 + 3.1.2-1.2 ${platform} diff --git a/deps/javacv-buid/pom-windows.xml b/deps/javacv-buid/pom-windows.xml index f2e975f8..59378162 100644 --- a/deps/javacv-buid/pom-windows.xml +++ b/deps/javacv-buid/pom-windows.xml @@ -202,7 +202,7 @@ org.bytedeco.javacpp-presets ffmpeg - 3.0.2-1.2 + 3.1.2-1.2 ${platform} From f26de63c5e52ac1fe665ad15e59b4156387056a1 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 17:04:33 +0100 Subject: [PATCH 82/99] cleaning in the pom. --- papart/pom.xml | 233 +++++++++++++++++++++++++++---------------------- 1 file changed, 127 insertions(+), 106 deletions(-) diff --git a/papart/pom.xml b/papart/pom.xml index 10567805..ad07b4aa 100755 --- a/papart/pom.xml +++ b/papart/pom.xml @@ -53,50 +53,112 @@ + + + org.reflections + reflections + 0.9.9 + + - tech.lity.rea - SVGExtended - 3.2.1 + org.processing + core + 3.2.3 + - org.bytedeco - javacpp - 1.2 + org.jogamp.jogl + jogl + 2.3.2 + + + + org.jogamp.jogl + jogl-all + 2.3.2 + + + + org.jogamp.gluegen + gluegen-rt-main + 2.3.2 + + + + org.jogamp.jogl + newt-main + 2.3.2 - org.bytedeco.javacpp-presets - opencv - 3.1.0-1.2 - compile + org.jogamp.jogl + nativewindow-main + 2.3.2 - + - org.bytedeco.javacpp-presets - ffmpeg - 3.1.2-1.2 + org.processing + video + 3.2.3 + + - org.bytedeco.javacpp-presets - flycapture - 2.9.3.43-1.2 + com.googlecode.gstreamer-java + gstreamer-java + 1.5 + + + + - org.bytedeco.javacpp-presets - libdc1394 - 2.2.4-1.2 + tech.lity.rea + SVGExtended + 3.2.1 + + - org.bytedeco.javacpp-presets - videoinput - 0.200-1.2 + fr.inria.potioc + ProcessingTUIO + 1.1.0 - + + + + org.clojars.frederikdb + oscp5 + 0.9.8-SNAPSHOT + + + + + org.clojars.hozumi + toxiclibscore + 0022 + + + + + fr.inria.potioc + skatolo + 1.0 + + + + + org.bytedeco + javacpp + 1.2 + + + org.bytedeco javacv 1.2 @@ -110,6 +172,13 @@ runtime + + org.bytedeco.javacpp-presets + opencv + 3.1.0-1.2 + compile + + org.bytedeco.javacpp-presets artoolkitplus @@ -124,6 +193,35 @@ runtime + + org.bytedeco.javacpp-presets + ffmpeg + 3.1.2-1.2 + + + + org.bytedeco.javacpp-presets + ffmpeg + 3.1.2-1.2 + ${platform} + + + + org.bytedeco.javacpp-presets + flycapture + 2.9.3.43-1.2 + + + + org.bytedeco.javacpp-presets libfreenect @@ -136,14 +234,14 @@ 0.5.3-1.2 ${platform} runtime - - + + + junit junit @@ -198,62 +274,7 @@ test - - org.jogamp.jogl - jogl - 2.3.2 - - - - org.jogamp.jogl - jogl-all - 2.3.2 - - - - org.jogamp.gluegen - gluegen-rt-main - 2.3.2 - - - - org.jogamp.jogl - newt-main - 2.3.2 - - - - org.jogamp.jogl - nativewindow-main - 2.3.2 - - - - fr.inria.potioc - ProcessingTUIO - 1.1.0 - - - com.googlecode.gstreamer-java - gstreamer-java - 1.5 - - - org.clojars.frederikdb - oscp5 - 0.9.8-SNAPSHOT - - - org.clojars.hozumi - toxiclibscore - 0022 - - - - fr.inria.potioc - skatolo - 1.0 - + From ce44725334caba3e9d5bc6ee4ab17e8ff3d2c762 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 18:39:35 +0100 Subject: [PATCH 83/99] renamed folder, update to papart 1.0 (JavaCV 1.3). --- .../createLibs.rb | 2 +- .../pom-linux.xml | 135 ++--------------- .../pom-windows.xml | 136 ++---------------- 3 files changed, 31 insertions(+), 242 deletions(-) rename deps/{javacv-buid => javacv-build}/createLibs.rb (91%) rename deps/{javacv-buid => javacv-build}/pom-linux.xml (68%) rename deps/{javacv-buid => javacv-build}/pom-windows.xml (68%) diff --git a/deps/javacv-buid/createLibs.rb b/deps/javacv-build/createLibs.rb similarity index 91% rename from deps/javacv-buid/createLibs.rb rename to deps/javacv-build/createLibs.rb index bd827ea7..fb7ddd17 100644 --- a/deps/javacv-buid/createLibs.rb +++ b/deps/javacv-build/createLibs.rb @@ -18,7 +18,7 @@ def build(platform, arch) `mv target/dependency target/library` `mv target javacv` - `mv javacv/library/javacv-1.2.jar javacv/library/javacv.jar` + `mv javacv/library/javacv-1.3.jar javacv/library/javacv.jar` puts "compress library" `tar -zcf javacv-#{platform}-#{arch}.tgz javacv` diff --git a/deps/javacv-buid/pom-linux.xml b/deps/javacv-build/pom-linux.xml similarity index 68% rename from deps/javacv-buid/pom-linux.xml rename to deps/javacv-build/pom-linux.xml index b44d6722..a183998b 100644 --- a/deps/javacv-buid/pom-linux.xml +++ b/deps/javacv-build/pom-linux.xml @@ -53,121 +53,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + org.bytedeco javacpp - 1.2 + 1.3 org.bytedeco javacv - 1.2 + 1.3 org.bytedeco.javacpp-presets opencv - 3.1.0-1.2 + 3.1.0-1.3 ${platform} runtime @@ -175,42 +79,41 @@ org.bytedeco.javacpp-presets opencv - 3.1.0-1.2 + 3.1.0-1.3 compile org.bytedeco.javacpp-presets artoolkitplus - 2.3.1-1.2 + 2.3.1-1.3 org.bytedeco.javacpp-presets artoolkitplus - 2.3.1-1.2 + 2.3.1-1.3 ${platform} runtime - org.bytedeco.javacpp-presets ffmpeg - 3.1.2-1.2 + 3.2.1-1.3 org.bytedeco.javacpp-presets ffmpeg - 3.1.2-1.2 + 3.2.1-1.3 ${platform} org.bytedeco.javacpp-presets flycapture - 2.9.3.43-1.2 + 2.9.3.43-1.3 - - - - - - - + diff --git a/deps/javacv-buid/pom-windows.xml b/deps/javacv-build/pom-windows.xml similarity index 68% rename from deps/javacv-buid/pom-windows.xml rename to deps/javacv-build/pom-windows.xml index 59378162..675be854 100644 --- a/deps/javacv-buid/pom-windows.xml +++ b/deps/javacv-build/pom-windows.xml @@ -53,121 +53,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + org.bytedeco javacpp - 1.2 + 1.3 org.bytedeco javacv - 1.2 + 1.3 org.bytedeco.javacpp-presets opencv - 3.1.0-1.2 + 3.1.0-1.3 ${platform} runtime @@ -175,20 +78,20 @@ org.bytedeco.javacpp-presets opencv - 3.1.0-1.2 + 3.1.0-1.3 compile org.bytedeco.javacpp-presets artoolkitplus - 2.3.1-1.2 + 2.3.1-1.3 org.bytedeco.javacpp-presets artoolkitplus - 2.3.1-1.2 + 2.3.1-1.3 ${platform} runtime @@ -196,20 +99,20 @@ org.bytedeco.javacpp-presets ffmpeg - 3.1.2-1.2 + 3.2.1-1.3 org.bytedeco.javacpp-presets ffmpeg - 3.1.2-1.2 + 3.2.1-1.3 ${platform} org.bytedeco.javacpp-presets flycapture - 2.9.3.43-1.2 + 2.9.3.43-1.3 - + - + - - - - - - - - - - + From 1ac6bd262dce3bb999aa1c1b8859e4f40c04b735 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 18:46:46 +0100 Subject: [PATCH 84/99] added gitignore to ignore build in deps. --- deps/.gitignore | 2 ++ deps/javacv-build/.gitignore | 1 + deps/reflections-build/.gitignore | 1 + 3 files changed, 4 insertions(+) create mode 100644 deps/.gitignore create mode 100644 deps/javacv-build/.gitignore create mode 100644 deps/reflections-build/.gitignore diff --git a/deps/.gitignore b/deps/.gitignore new file mode 100644 index 00000000..20811576 --- /dev/null +++ b/deps/.gitignore @@ -0,0 +1,2 @@ +/libraries/ +*.tgz diff --git a/deps/javacv-build/.gitignore b/deps/javacv-build/.gitignore new file mode 100644 index 00000000..aa1ec1ea --- /dev/null +++ b/deps/javacv-build/.gitignore @@ -0,0 +1 @@ +*.tgz diff --git a/deps/reflections-build/.gitignore b/deps/reflections-build/.gitignore new file mode 100644 index 00000000..aa1ec1ea --- /dev/null +++ b/deps/reflections-build/.gitignore @@ -0,0 +1 @@ +*.tgz From b4507712b2ad17dbf870cfdac43852d518920b75 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 18:47:00 +0100 Subject: [PATCH 85/99] cleaning old scripts. --- createAll.sh | 7 ----- createRedist-public.sh | 70 ------------------------------------------ 2 files changed, 77 deletions(-) delete mode 100644 createAll.sh delete mode 100755 createRedist-public.sh diff --git a/createAll.sh b/createAll.sh deleted file mode 100644 index 7e3d488b..00000000 --- a/createAll.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/ruby - -NAMES=realsense kinect hardware2 hardware3 - - - -git checkout diff --git a/createRedist-public.sh b/createRedist-public.sh deleted file mode 100755 index 8ce3b392..00000000 --- a/createRedist-public.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -SKETCHBOOK=sketches -TMP=tmp -NAME=PapARt -OUTPUT_NAME=PapARt-public - -## NAME must match -## fr.inria.papart.procam.Utils.LibraryName = "ProCam"; - - -mkdir $TMP -mkdir $TMP/$NAME -mkdir $TMP/$NAME/library -mkdir $TMP/$NAME/examples - - -echo "Cleaning previous versions" -rm -rf libraries/$NAME -echo "Create archive of depedencies" -tar -zcf libs.tgz libraries - - -echo "Cleaning sketches" -sh $SKETCHBOOK/clean.sh - -echo "Copy Library" -# Library -cp papart/target/$NAME.jar $TMP/$NAME/library/$NAME.jar - - -# echo "Copy JavaCV, OpenCV and friends" -# libs are javaCV and javaCV cppjars -# cp libs/* $NAME/library/ - -echo "Copy the deps & tests" -cp -R papart/deps $TMP/$NAME/ -cp -R papart/test $TMP/$NAME/ - -echo "Copy the JavaDoc" -cp -R papart/target/site/apidocs $TMP/$NAME/ - -echo "Copy the Data" -cp -R papart/data $TMP/$NAME/ - - -echo "Copy Examples, Calibration & Apps" -# Examples -cp -R sketches/examples $TMP/$NAME/examples/examples - -# Calibration stuff -cp -R sketches/calibration $TMP/$NAME/examples/calib - -# Apps -cp -R sketches/apps $TMP/$NAME/examples/apps - - -echo "Create the archive..." -cd $TMP - -tar -zcf $OUTPUT_NAME.tgz $NAME - -mv $OUTPUT_NAME.tgz .. -cd .. - -echo "Clean " -rm -rf $TMP - - -echo "Creation OK" From 0f6b1023f886deae9fbae35ee3bf97dda425dd6d Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 18:47:10 +0100 Subject: [PATCH 86/99] update in scrpits. --- createRedist.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/createRedist.sh b/createRedist.sh index cf20fbc9..8d3fe383 100755 --- a/createRedist.sh +++ b/createRedist.sh @@ -15,6 +15,8 @@ mkdir $TMP/$NAME/examples echo "Copy Library" # Library cp papart/target/$NAME.jar $TMP/$NAME/library/$NAME.jar +echo "Copy the dependencies" +cp papart/target/reflections.jar $TMP/$NAME/library/ echo "Copy the sources" # copy the source also From 4b9ed150afc821479769ef31f0f5108e0c28c162 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 18:48:47 +0100 Subject: [PATCH 87/99] libs handled in the deps folder. --- createAll.rb | 1 - createLibs.sh | 4 ---- 2 files changed, 5 deletions(-) delete mode 100644 createLibs.sh diff --git a/createAll.rb b/createAll.rb index f8fb4d9f..28033fd3 100644 --- a/createAll.rb +++ b/createAll.rb @@ -3,7 +3,6 @@ # %x(sh downloadExamples.sh) -# %x(sh createLibs.sh) current_branch = %x(git rev-parse --abbrev-ref HEAD).chomp diff --git a/createLibs.sh b/createLibs.sh deleted file mode 100644 index 057f7bc6..00000000 --- a/createLibs.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -echo "Create libraries" -tar -zcf libs.tgz libraries From 8bb3311f3a6e07eb0b9c6e6ef3b34588c705798d Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Wed, 21 Dec 2016 18:51:59 +0100 Subject: [PATCH 88/99] update to JavacPP 1.3 --- papart/pom.xml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/papart/pom.xml b/papart/pom.xml index ad07b4aa..c88a3fd5 100755 --- a/papart/pom.xml +++ b/papart/pom.xml @@ -155,19 +155,19 @@ org.bytedeco javacpp - 1.2 + 1.3 org.bytedeco javacv - 1.2 + 1.3 org.bytedeco.javacpp-presets opencv - 3.1.0-1.2 + 3.1.0-1.3 ${platform} runtime @@ -175,20 +175,20 @@ org.bytedeco.javacpp-presets opencv - 3.1.0-1.2 + 3.1.0-1.3 compile org.bytedeco.javacpp-presets artoolkitplus - 2.3.1-1.2 + 2.3.1-1.3 org.bytedeco.javacpp-presets artoolkitplus - 2.3.1-1.2 + 2.3.1-1.3 ${platform} runtime @@ -196,20 +196,20 @@ org.bytedeco.javacpp-presets ffmpeg - 3.1.2-1.2 + 3.2.1-1.3 org.bytedeco.javacpp-presets ffmpeg - 3.1.2-1.2 + 3.2.1-1.3 ${platform} org.bytedeco.javacpp-presets flycapture - 2.9.3.43-1.2 + 2.9.3.43-1.3 - + org.bytedeco.javacpp-presets diff --git a/papart/pom.xml b/papart/pom.xml index c88a3fd5..bd43caff 100755 --- a/papart/pom.xml +++ b/papart/pom.xml @@ -237,18 +237,18 @@ - + org.bytedeco.javacpp-presets From 4bca5abb5428fbad3f55b3334cbaaf548f50a410 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 15:42:46 +0100 Subject: [PATCH 91/99] new utility to create redistribuable. --- .gitignore | 2 ++ createRedist.sh | 4 ++-- downloadExamples.sh | 10 +++++++--- mergeCurrentToRedist.rb | 20 ++++++++++++++++++++ 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 mergeCurrentToRedist.rb diff --git a/.gitignore b/.gitignore index b15fc544..88fd6a67 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ build /PapARt.tgz /big-files/ /Papart-examples-master/ +/Papart-examples/ +*.tgz diff --git a/createRedist.sh b/createRedist.sh index cf20fbc9..21f8170a 100755 --- a/createRedist.sh +++ b/createRedist.sh @@ -29,8 +29,8 @@ echo "Copy the Data" cp -R papart/data $TMP/$NAME/ echo "Copy the examples" -cp -R Papart-examples-master/apps $TMP/$NAME/examples/ -cp -R Papart-examples-master/papart-examples $TMP/$NAME/examples/ +cp -R Papart-examples/apps $TMP/$NAME/examples/ +cp -R Papart-examples/papart-examples $TMP/$NAME/examples/ echo "Create the archive..." cd $TMP diff --git a/downloadExamples.sh b/downloadExamples.sh index a36ac2be..cbac6c8b 100644 --- a/downloadExamples.sh +++ b/downloadExamples.sh @@ -1,8 +1,12 @@ #!/bin/bash +BRANCH=realsense + echo "Download the examples" -wget https://github.com/potioc/Papart-examples/archive/master.zip -unzip master.zip +wget https://github.com/potioc/Papart-examples/archive/$BRANCH.zip +unzip $BRANCH.zip + +mv Papart-examples-$BRANCH Papart-examples echo "cleaning the examples" -rm master.zip +rm $BRANCH.zip diff --git a/mergeCurrentToRedist.rb b/mergeCurrentToRedist.rb new file mode 100644 index 00000000..e36f8470 --- /dev/null +++ b/mergeCurrentToRedist.rb @@ -0,0 +1,20 @@ +#!/bin/ruby + + + + +current_branch = %x(git rev-parse --abbrev-ref HEAD).chomp + +output_names=["realsense", + "kinect", + "hardware2", + "hardware3"] + +output_names.each do |release_name| + puts %x(git checkout release-#{release_name}) + puts %x(git merge --commit -m "automatic merge for deployment" #{current_branch}) + + puts %x(git push github release-#{release_name}) +end + +puts %x(git checkout #{current_branch}) From a21c2be35f7105b8a543a5ec7508ecd52b9352ad Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 16:14:50 +0100 Subject: [PATCH 92/99] fixed bugs for papart HW2 . --- .../fr/inria/papart/calibration/CalibrationExtrinsic.java | 2 +- .../src/fr/inria/papart/calibration/CalibrationPopup.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java index 7f2de537..ea4cfe10 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationExtrinsic.java @@ -39,7 +39,7 @@ public class CalibrationExtrinsic { private final PApplet parent; - private static final float OPEN_KINECT_Z_OFFSET = -15f; + private static final float OPEN_KINECT_Z_OFFSET = -25f; private static final float REALSENSE_Z_OFFSET = -52f; // Cameras private ProjectorDisplay projector; diff --git a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java index 0c0ad567..d13a5f76 100644 --- a/papart/src/fr/inria/papart/calibration/CalibrationPopup.java +++ b/papart/src/fr/inria/papart/calibration/CalibrationPopup.java @@ -132,7 +132,7 @@ public void setup() { calibrationApp = new CalibrationApp(); calibrationApp.pre(); } - + board = calibrationApp.getBoard(); cameraTracking = Papart.getPapart().getPublicCameraTracking(); @@ -162,7 +162,8 @@ public void setup() { } // 2. Tracking camera is another camera. - if (!(cameraTracking instanceof SubCamera)) { + if (cameraTracking != depthCameraDevice.getColorCamera() + && cameraTracking != depthCameraDevice.getIRCamera()) { // the depth camera initTrackingOn(papart.getDepthCameraDevice()); System.out.println("Calibration with a Depth and color camera in DIFFERENT devices."); @@ -344,7 +345,7 @@ void initMatrixGui() { .setLineHeight(14); if (useExternalColorCamera) { - System.out.println("Kinect 360 OK..."); + System.out.println("Depth camera OK..."); kinectMatrixText = skatolo.addTextarea("Kinect") .setPosition(600, MATRICES_HEIGHT) .setSize(330, 100) From 5341cc6ed8e2fc12bc480b80810bee6a237c750d Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 16:51:42 +0100 Subject: [PATCH 93/99] Refactor, utils moved one package level lower. --- .../papart/depthcam/analysis/KinectDepthAnalysis.java | 4 ++-- .../inria/papart/depthcam/devices/DepthCameraDevice.java | 2 +- papart/src/fr/inria/papart/procam/ColorDetection.java | 4 ++-- papart/src/fr/inria/papart/procam/Papart.java | 4 ++-- papart/src/fr/inria/papart/procam/PaperTouchScreen.java | 4 ++-- papart/src/fr/inria/papart/procam/Screen.java | 4 ++-- .../src/fr/inria/papart/procam/camera/CamImageColor.java | 4 ++-- .../src/fr/inria/papart/procam/camera/CamImageGray.java | 4 ++-- papart/src/fr/inria/papart/procam/camera/Camera.java | 8 ++++---- .../fr/inria/papart/procam/camera/ProjectorAsCamera.java | 2 +- papart/src/fr/inria/papart/procam/camera/TrackedView.java | 4 ++-- papart/src/fr/inria/papart/procam/display/ARDisplay.java | 2 +- .../fr/inria/papart/procam/display/ProjectorDisplay.java | 2 +- .../papart/{procam => }/utils/ARToolkitPlusUtils.java | 2 +- .../src/fr/inria/papart/{procam => }/utils/DrawUtils.java | 2 +- .../fr/inria/papart/{procam => }/utils/ImageUtils.java | 2 +- .../fr/inria/papart/{procam => }/utils/LibraryUtils.java | 2 +- .../src/fr/inria/papart/{procam => }/utils/MathUtils.java | 2 +- 18 files changed, 29 insertions(+), 29 deletions(-) rename papart/src/fr/inria/papart/{procam => }/utils/ARToolkitPlusUtils.java (99%) rename papart/src/fr/inria/papart/{procam => }/utils/DrawUtils.java (99%) rename papart/src/fr/inria/papart/{procam => }/utils/ImageUtils.java (99%) rename papart/src/fr/inria/papart/{procam => }/utils/LibraryUtils.java (99%) rename papart/src/fr/inria/papart/{procam => }/utils/MathUtils.java (99%) diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index 0a6815c1..4595f354 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -31,8 +31,8 @@ import static fr.inria.papart.depthcam.analysis.DepthAnalysis.papplet; import fr.inria.papart.depthcam.devices.RealSense; import fr.inria.papart.procam.ProjectiveDeviceP; -import fr.inria.papart.procam.utils.MathUtils; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.MathUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraRealSense; import java.nio.ByteBuffer; diff --git a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java index 3888a52e..9a7ee106 100644 --- a/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java +++ b/papart/src/fr/inria/papart/depthcam/devices/DepthCameraDevice.java @@ -22,7 +22,7 @@ import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.multitouch.KinectTouchInput; import fr.inria.papart.procam.Papart; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraRGBIRDepth; diff --git a/papart/src/fr/inria/papart/procam/ColorDetection.java b/papart/src/fr/inria/papart/procam/ColorDetection.java index 7192fe48..f1c5c6ce 100755 --- a/papart/src/fr/inria/papart/procam/ColorDetection.java +++ b/papart/src/fr/inria/papart/procam/ColorDetection.java @@ -19,8 +19,8 @@ */ package fr.inria.papart.procam; -import fr.inria.papart.procam.utils.MathUtils; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.MathUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.camera.TrackedView; import processing.core.PApplet; diff --git a/papart/src/fr/inria/papart/procam/Papart.java b/papart/src/fr/inria/papart/procam/Papart.java index cbfecb88..587a6da8 100755 --- a/papart/src/fr/inria/papart/procam/Papart.java +++ b/papart/src/fr/inria/papart/procam/Papart.java @@ -40,7 +40,7 @@ import fr.inria.papart.multitouch.TouchInput; import fr.inria.papart.multitouch.TUIOTouchInput; import fr.inria.papart.multitouch.KinectTouchInput; -import fr.inria.papart.procam.utils.LibraryUtils; +import fr.inria.papart.utils.LibraryUtils; import fr.inria.papart.procam.camera.CameraFactory; import fr.inria.papart.procam.camera.CameraOpenKinect; import fr.inria.papart.procam.camera.CameraRGBIRDepth; @@ -141,7 +141,7 @@ public Papart(Object applet) { // TODO: singleton -> Better implementation. if (Papart.singleton == null) { Papart.singleton = this; - fr.inria.papart.procam.utils.DrawUtils.applet = (PApplet) applet; + fr.inria.papart.utils.DrawUtils.applet = (PApplet) applet; } } diff --git a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java index 468bd352..063bb6f5 100755 --- a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java @@ -19,7 +19,7 @@ */ package fr.inria.papart.procam; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.display.BaseDisplay; import fr.inria.papart.multitouch.TouchInput; @@ -28,7 +28,7 @@ import fr.inria.papart.multitouch.TUIOTouchInput; import fr.inria.papart.multitouch.TouchList; import fr.inria.papart.multitouch.TouchPoint; -import fr.inria.papart.procam.utils.MathUtils; +import fr.inria.papart.utils.MathUtils; import fr.inria.papart.procam.display.ProjectorDisplay; import java.nio.ByteBuffer; import java.util.ArrayList; diff --git a/papart/src/fr/inria/papart/procam/Screen.java b/papart/src/fr/inria/papart/procam/Screen.java index 7cf63a1c..bdf6ad70 100755 --- a/papart/src/fr/inria/papart/procam/Screen.java +++ b/papart/src/fr/inria/papart/procam/Screen.java @@ -23,10 +23,10 @@ import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.calibration.HomographyCalibration; import fr.inria.papart.calibration.HomographyCreator; -import fr.inria.papart.procam.utils.MathUtils; +import fr.inria.papart.utils.MathUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.display.ProjectorDisplay; -import static fr.inria.papart.procam.utils.MathUtils.toVec; +import static fr.inria.papart.utils.MathUtils.toVec; import processing.core.PApplet; import processing.core.PMatrix3D; import processing.core.PVector; diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java index 4892d68e..a4ad3204 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageColor.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageColor.java @@ -19,8 +19,8 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.utils.ImageUtils; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.ImageUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import java.awt.Image; import java.nio.ByteBuffer; import org.bytedeco.javacpp.opencv_core.IplImage; diff --git a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java index aac3a579..3afaf465 100755 --- a/papart/src/fr/inria/papart/procam/camera/CamImageGray.java +++ b/papart/src/fr/inria/papart/procam/camera/CamImageGray.java @@ -20,8 +20,8 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.utils.ImageUtils; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.ImageUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera.PixelFormat; import java.awt.Image; import java.nio.ByteBuffer; diff --git a/papart/src/fr/inria/papart/procam/camera/Camera.java b/papart/src/fr/inria/papart/procam/camera/Camera.java index 2ba9ad71..e498da20 100755 --- a/papart/src/fr/inria/papart/procam/camera/Camera.java +++ b/papart/src/fr/inria/papart/procam/camera/Camera.java @@ -24,10 +24,10 @@ * @author jeremylaviole */ import fr.inria.papart.procam.HasExtrinsics; -import fr.inria.papart.procam.utils.ImageUtils; +import fr.inria.papart.utils.ImageUtils; import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.procam.ProjectiveDeviceP; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import fr.inria.papart.tracking.DetectedMarker; import fr.inria.papart.tracking.MarkerList; import org.bytedeco.javacpp.opencv_core.CvMat; @@ -505,7 +505,7 @@ static public void convertARParams(PApplet parent, String calibrationFile, // ARToolkit Plus 2.1.1 // fr.inria.papart.procam.Utils.convertARParam(parent, calibrationYAML, calibrationData, width, height); // ARToolkit Plus 2.3.0 - fr.inria.papart.procam.utils.ARToolkitPlusUtils.convertARParam2(parent, calibrationFile, calibrationARtoolkit); + fr.inria.papart.utils.ARToolkitPlusUtils.convertARParam2(parent, calibrationFile, calibrationARtoolkit); } catch (Exception e) { PApplet.println("Conversion error. " + e); } @@ -514,7 +514,7 @@ static public void convertARParams(PApplet parent, String calibrationFile, static public void convertARParams(PApplet parent, ProjectiveDeviceP projectiveDevice, String calibrationARtoolkit) { try { - fr.inria.papart.procam.utils.ARToolkitPlusUtils.convertARParamFromDevice(parent, projectiveDevice, calibrationARtoolkit); + fr.inria.papart.utils.ARToolkitPlusUtils.convertARParamFromDevice(parent, projectiveDevice, calibrationARtoolkit); } catch (Exception e) { PApplet.println("Conversion error. " + e); } diff --git a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java index f6dbc063..3f164ab3 100644 --- a/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java +++ b/papart/src/fr/inria/papart/procam/camera/ProjectorAsCamera.java @@ -20,7 +20,7 @@ package fr.inria.papart.procam.camera; import fr.inria.papart.procam.ProjectiveDeviceP; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.display.ProjectorDisplay; import java.util.logging.Level; import java.util.logging.Logger; diff --git a/papart/src/fr/inria/papart/procam/camera/TrackedView.java b/papart/src/fr/inria/papart/procam/camera/TrackedView.java index bb44d268..c3ec998d 100755 --- a/papart/src/fr/inria/papart/procam/camera/TrackedView.java +++ b/papart/src/fr/inria/papart/procam/camera/TrackedView.java @@ -19,11 +19,11 @@ */ package fr.inria.papart.procam.camera; -import fr.inria.papart.procam.utils.ImageUtils; +import fr.inria.papart.utils.ImageUtils; import fr.inria.papart.tracking.MarkerBoard; import fr.inria.papart.tracking.MarkerBoardInvalid; import fr.inria.papart.procam.PaperScreen; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import fr.inria.papart.procam.camera.Camera; import org.bytedeco.javacpp.opencv_core.CvMat; import org.bytedeco.javacpp.opencv_core.IplImage; diff --git a/papart/src/fr/inria/papart/procam/display/ARDisplay.java b/papart/src/fr/inria/papart/procam/display/ARDisplay.java index 1e560f36..b6c97def 100755 --- a/papart/src/fr/inria/papart/procam/display/ARDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ARDisplay.java @@ -22,7 +22,7 @@ import fr.inria.papart.calibration.PlaneCalibration; import processing.opengl.PGraphicsOpenGL; import org.bytedeco.javacv.ProjectiveDevice; -import fr.inria.papart.procam.utils.DrawUtils; +import fr.inria.papart.utils.DrawUtils; import fr.inria.papart.multitouch.TouchInput; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.HasExtrinsics; diff --git a/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java b/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java index d74b7415..f11dced7 100755 --- a/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java +++ b/papart/src/fr/inria/papart/procam/display/ProjectorDisplay.java @@ -20,7 +20,7 @@ package fr.inria.papart.procam.display; import fr.inria.papart.calibration.PlaneCalibration; -import fr.inria.papart.procam.utils.DrawUtils; +import fr.inria.papart.utils.DrawUtils; import fr.inria.papart.multitouch.TouchInput; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.tracking.MarkerBoard; diff --git a/papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java b/papart/src/fr/inria/papart/utils/ARToolkitPlusUtils.java similarity index 99% rename from papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java rename to papart/src/fr/inria/papart/utils/ARToolkitPlusUtils.java index c40cff62..258004e8 100755 --- a/papart/src/fr/inria/papart/procam/utils/ARToolkitPlusUtils.java +++ b/papart/src/fr/inria/papart/utils/ARToolkitPlusUtils.java @@ -17,7 +17,7 @@ * Public License along with this library; If not, see * . */ -package fr.inria.papart.procam.utils; +package fr.inria.papart.utils; import fr.inria.papart.procam.Papart; import fr.inria.papart.procam.ProjectiveDeviceP; diff --git a/papart/src/fr/inria/papart/procam/utils/DrawUtils.java b/papart/src/fr/inria/papart/utils/DrawUtils.java similarity index 99% rename from papart/src/fr/inria/papart/procam/utils/DrawUtils.java rename to papart/src/fr/inria/papart/utils/DrawUtils.java index c62af84f..c9a0a0e3 100755 --- a/papart/src/fr/inria/papart/procam/utils/DrawUtils.java +++ b/papart/src/fr/inria/papart/utils/DrawUtils.java @@ -17,7 +17,7 @@ * Public License along with this library; If not, see * . */ -package fr.inria.papart.procam.utils; +package fr.inria.papart.utils; import processing.core.PApplet; import processing.core.PFont; diff --git a/papart/src/fr/inria/papart/procam/utils/ImageUtils.java b/papart/src/fr/inria/papart/utils/ImageUtils.java similarity index 99% rename from papart/src/fr/inria/papart/procam/utils/ImageUtils.java rename to papart/src/fr/inria/papart/utils/ImageUtils.java index 7e7dea83..16d36a42 100644 --- a/papart/src/fr/inria/papart/procam/utils/ImageUtils.java +++ b/papart/src/fr/inria/papart/utils/ImageUtils.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package fr.inria.papart.procam.utils; +package fr.inria.papart.utils; import fr.inria.papart.procam.camera.Camera; import java.nio.ByteBuffer; diff --git a/papart/src/fr/inria/papart/procam/utils/LibraryUtils.java b/papart/src/fr/inria/papart/utils/LibraryUtils.java similarity index 99% rename from papart/src/fr/inria/papart/procam/utils/LibraryUtils.java rename to papart/src/fr/inria/papart/utils/LibraryUtils.java index a75168c6..dc479942 100644 --- a/papart/src/fr/inria/papart/procam/utils/LibraryUtils.java +++ b/papart/src/fr/inria/papart/utils/LibraryUtils.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package fr.inria.papart.procam.utils; +package fr.inria.papart.utils; import fr.inria.papart.procam.Papart; import java.io.BufferedReader; diff --git a/papart/src/fr/inria/papart/procam/utils/MathUtils.java b/papart/src/fr/inria/papart/utils/MathUtils.java similarity index 99% rename from papart/src/fr/inria/papart/procam/utils/MathUtils.java rename to papart/src/fr/inria/papart/utils/MathUtils.java index 1a9973ae..704bc1a2 100644 --- a/papart/src/fr/inria/papart/procam/utils/MathUtils.java +++ b/papart/src/fr/inria/papart/utils/MathUtils.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package fr.inria.papart.procam.utils; +package fr.inria.papart.utils; import java.io.FileNotFoundException; import java.nio.ByteBuffer; From a4c4dff424efc17f32f9c717b6a00c903d9a6161 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 18:54:34 +0100 Subject: [PATCH 94/99] Screen location update moved to pre(). --- papart/src/fr/inria/papart/multitouch/SkatoloLink.java | 6 ++++-- papart/src/fr/inria/papart/procam/PaperScreen.java | 4 ++++ papart/src/fr/inria/papart/procam/PaperTouchScreen.java | 5 ++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/papart/src/fr/inria/papart/multitouch/SkatoloLink.java b/papart/src/fr/inria/papart/multitouch/SkatoloLink.java index eb40256e..8a21f52b 100644 --- a/papart/src/fr/inria/papart/multitouch/SkatoloLink.java +++ b/papart/src/fr/inria/papart/multitouch/SkatoloLink.java @@ -1,6 +1,7 @@ /* * Part of the PapARt project - https://project.inria.fr/papart/ * + * Copyright (C) 2016 RealityTech * Copyright (C) 2014-2016 Inria * Copyright (C) 2011-2013 Bordeaux University * @@ -20,6 +21,7 @@ package fr.inria.papart.multitouch; import fr.inria.papart.procam.Papart; +import fr.inria.papart.procam.PaperScreen; import fr.inria.papart.procam.PaperTouchScreen; import fr.inria.skatolo.Skatolo; import fr.inria.skatolo.gui.Pointer; @@ -30,7 +32,7 @@ /** * - * @author Jérémy Laviole - jeremy.laviole@inria.fr + * @author Jérémy Laviole */ public class SkatoloLink { @@ -41,7 +43,7 @@ public class SkatoloLink { public static Touch mouseTouch = new Touch(); - public static void addMouseTo(TouchList touchList, Skatolo skatolo, PaperTouchScreen paperScreen) { + public static void addMouseTo(TouchList touchList, Skatolo skatolo, PaperScreen paperScreen) { PApplet applet = Papart.getPapart().getApplet(); float normX = (float) applet.mouseX / (float) applet.width; diff --git a/papart/src/fr/inria/papart/procam/PaperScreen.java b/papart/src/fr/inria/papart/procam/PaperScreen.java index 330ab538..b622e34a 100755 --- a/papart/src/fr/inria/papart/procam/PaperScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperScreen.java @@ -196,6 +196,10 @@ public void pre() { isInitialized = true; } + + // Needed for touch and projection operations + screen.computeScreenPosTransform(cameraTracking); + // assert (isInitialized); // if (this.isWithoutCamera || useManualLocation) { // return; diff --git a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java index 063bb6f5..2d744c84 100755 --- a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java @@ -84,6 +84,7 @@ public void setLocation(PVector v) { @Override public void setLocation(float x, float y, float z) { super.setLocation(x, y, z); + screen.computeScreenPosTransform(cameraTracking); updateTouch(); } @@ -93,8 +94,6 @@ public void updateTouch() { return; } } - screen.computeScreenPosTransform(cameraTracking); - // Warning TODO: Hack.. V_V // Touch in 2D  mode has boundaries. // Touch in 3D mode has no boundaries. @@ -130,7 +129,7 @@ protected void drawTouch(int ellipseSize) { // fill(185, 142, 62); } else { fill(58, 71, 198); - ellipse(t.position.x, t.position.y, ellipseSize, ellipseSize); + ellipse(t.position.x, t.position.y, ellipseSize, ellipseSize); } // ellipse(t.position.x, t.position.y, ellipseSize, ellipseSize); From a1dc7b86a24cf7c4e95a658f6a9f12dc74b5cf94 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 19:13:01 +0100 Subject: [PATCH 95/99] cleaning. --- .../inria/papart/procam/PaperTouchScreen.java | 92 ++----------------- papart/src/fr/inria/papart/procam/Screen.java | 36 -------- .../src/fr/inria/papart/utils/ImageUtils.java | 3 +- .../src/fr/inria/papart/utils/MathUtils.java | 59 +++++++++++- 4 files changed, 68 insertions(+), 122 deletions(-) diff --git a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java index 2d744c84..0c70c8ff 100755 --- a/papart/src/fr/inria/papart/procam/PaperTouchScreen.java +++ b/papart/src/fr/inria/papart/procam/PaperTouchScreen.java @@ -131,14 +131,6 @@ protected void drawTouch(int ellipseSize) { fill(58, 71, 198); ellipse(t.position.x, t.position.y, ellipseSize, ellipseSize); } - // ellipse(t.position.x, t.position.y, ellipseSize, ellipseSize); - -// ellipse(t.pposition.x, t.pposition.y, ellipseSize /2 , ellipseSize /2); -// pushMatrix(); -// translate(t.position.x, t.position.y); -// ellipse(0, 0, ellipseSize, ellipseSize); -// line(0, 0, t.speed.x * 4, t.speed.y *4); -// popMatrix(); } } @@ -214,53 +206,19 @@ public PImage getImageFrom(PVector coord, PImage src, PImage dst, int radius) { return dst; } - /** - * Unsafe do not use unless you are sure. - */ - public int getColorOccurencesFrom(PVector coord, PImage cameraImage, int radius, int col, int threshold) { - int x = (int) coord.x; - int y = (int) coord.y; - int minX = PApplet.constrain(x - radius, 0, cameraTracking.width() - 1); - int maxX = PApplet.constrain(x + radius, 0, cameraTracking.width() - 1); - int minY = PApplet.constrain(y - radius, 0, cameraTracking.height() - 1); - int maxY = PApplet.constrain(y + radius, 0, cameraTracking.height() - 1); - int k = 0; - for (int j = minY; j <= maxY; j++) { - for (int i = minX; i <= maxX; i++) { - int offset = i + j * cameraTracking.width(); - int pxCol = cameraImage.pixels[offset]; - if (colorDist(col, pxCol) < threshold) { - k++; - } - } - } - return k; - } - - /** - * Unsafe do not use unless you are sure. - */ - public int getColorOccurencesFrom(PVector coord, int radius, int col, int threshold) { + public int getColorAt(PVector coord) { int x = (int) coord.x; int y = (int) coord.y; - int minX = PApplet.constrain(x - radius, 0, cameraTracking.width() - 1); - int maxX = PApplet.constrain(x + radius, 0, cameraTracking.width() - 1); - int minY = PApplet.constrain(y - radius, 0, cameraTracking.height() - 1); - int maxY = PApplet.constrain(y + radius, 0, cameraTracking.height() - 1); - ByteBuffer buff = cameraTracking.getIplImage().getByteBuffer(); + int offset = x + y * cameraTracking.width(); + return getColor(buff, offset); + } - int k = 0; - for (int j = minY; j <= maxY; j++) { - for (int i = minX; i <= maxX; i++) { - int offset = i + j * cameraTracking.width(); - int pxCol = getColor(buff, offset); - if (MathUtils.colorDistRGB(col, pxCol, threshold)) { - k++; - } - } - } - return k; + private int getColor(ByteBuffer buff, int offset) { + offset = offset * 3; + return (buff.get(offset + 2) & 0xFF) << 16 + | (buff.get(offset + 1) & 0xFF) << 8 + | (buff.get(offset) & 0xFF); } public int getColorFrom3D(PVector point) { @@ -276,38 +234,6 @@ public PVector getPxCoordinates(PVector cameraTracking3DCoord) { return coord; } - public int getColorAt(PVector coord) { - int x = (int) coord.x; - int y = (int) coord.y; - ByteBuffer buff = cameraTracking.getIplImage().getByteBuffer(); - int offset = x + y * cameraTracking.width(); - return getColor(buff, offset); - } - - private int getColor(ByteBuffer buff, int offset) { - offset = offset * 3; - return (buff.get(offset + 2) & 0xFF) << 16 - | (buff.get(offset + 1) & 0xFF) << 8 - | (buff.get(offset) & 0xFF); - } - - // TODO: move this to image analysis module - private int colorDist(int c1, int c2) { - int r1 = c1 >> 16 & 0xFF; - int g1 = c1 >> 8 & 0xFF; - int b1 = c1 >> 0 & 0xFF; - - int r2 = c2 >> 16 & 0xFF; - int g2 = c2 >> 8 & 0xFF; - int b2 = c2 >> 0 & 0xFF; - - int dr = PApplet.abs(r1 - r2); - int dg = PApplet.abs(g1 - g2); - int db = PApplet.abs(b1 - b2); - - return dr + dg + db; - } - /** * Unsafe do not use unless you are sure. */ diff --git a/papart/src/fr/inria/papart/procam/Screen.java b/papart/src/fr/inria/papart/procam/Screen.java index bdf6ad70..f05f1dfe 100755 --- a/papart/src/fr/inria/papart/procam/Screen.java +++ b/papart/src/fr/inria/papart/procam/Screen.java @@ -26,7 +26,6 @@ import fr.inria.papart.utils.MathUtils; import fr.inria.papart.procam.camera.Camera; import fr.inria.papart.procam.display.ProjectorDisplay; -import static fr.inria.papart.utils.MathUtils.toVec; import processing.core.PApplet; import processing.core.PMatrix3D; import processing.core.PVector; @@ -110,28 +109,6 @@ public PGraphicsOpenGL getGraphics() { return thisGraphics; } - // The board must be registered with the camera. - /** - * ** - * @deprecated - * - */ -// public void setAutoUpdatePos(Camera camera, MarkerBoard board) { -// if (!camera.tracks(board)) { -// camera.trackMarkerBoard(board); -// } -// -// isFloatArrayUpdating = board.useFloatArray(); -// if (this.isFloatArrayUpdating) { -// posFloat = board.getTransfo(camera); -// transformation = new PMatrix3D(); -// } else { -//// System.out.println("Getting the original transfo"); -// -// transformation = board.getTransfoMat(camera); -// posFloat = new float[12]; -// } -// } public boolean isOpenGL() { return isOpenGL; } @@ -230,19 +207,6 @@ public float getScale() { return this.scale; } - /** - * update the internals of the screen to match the tracking. - */ - @Deprecated - public void updatePos(Camera camera, MarkerBoard board) { - System.err.println("ERROR Depracted call updatePos. "); -// transformation.set(board.getTransfoMat(camera)); - } - - protected void updatePos() { - - } - public void computeScreenPosTransform(Camera camera) { ///////////////////// PLANE COMPUTATION ////////////////// diff --git a/papart/src/fr/inria/papart/utils/ImageUtils.java b/papart/src/fr/inria/papart/utils/ImageUtils.java index 16d36a42..dafda369 100644 --- a/papart/src/fr/inria/papart/utils/ImageUtils.java +++ b/papart/src/fr/inria/papart/utils/ImageUtils.java @@ -5,6 +5,7 @@ */ package fr.inria.papart.utils; +import fr.inria.papart.procam.PaperTouchScreen; import fr.inria.papart.procam.camera.Camera; import java.nio.ByteBuffer; import java.nio.FloatBuffer; @@ -421,5 +422,5 @@ public static void byteBufferGRAY32toARGB(ByteBuffer gray, ByteBuffer argb) { } argb.rewind(); } - + } diff --git a/papart/src/fr/inria/papart/utils/MathUtils.java b/papart/src/fr/inria/papart/utils/MathUtils.java index 704bc1a2..359d4ace 100644 --- a/papart/src/fr/inria/papart/utils/MathUtils.java +++ b/papart/src/fr/inria/papart/utils/MathUtils.java @@ -5,12 +5,15 @@ */ package fr.inria.papart.utils; +import fr.inria.papart.procam.PaperTouchScreen; +import fr.inria.papart.procam.camera.Camera; import java.io.FileNotFoundException; import java.nio.ByteBuffer; import org.bytedeco.javacpp.opencv_core; import processing.core.PApplet; import static processing.core.PApplet.abs; import processing.core.PGraphics; +import processing.core.PImage; import processing.core.PMatrix3D; import processing.core.PVector; import toxi.geom.Vec3D; @@ -229,8 +232,8 @@ public static boolean colorDistRGB(int c1, int c2, int threshold) { /** * Color distance on the HSB scale. The incomingPix is compared with the - * baseline. The method returns true if each channel validates the condition for - * the given threshold. + * baseline. The method returns true if each channel validates the condition + * for the given threshold. * * @param g * @param baseline @@ -276,4 +279,56 @@ public static boolean colorDistHSBAutoThresh(PGraphics g, int baseline, int inco return (d1 + d2 + d3) < (threshold * 3); } + /** + * Unsafe do not use unless you are sure. + */ + public static int getColorOccurencesFrom(Camera camera, PVector coord, int radius, int col, int threshold, PaperTouchScreen paperTouchScreen) { + int x = (int) coord.x; + int y = (int) coord.y; + int minX = PApplet.constrain(x - radius, 0, camera.width() - 1); + int maxX = PApplet.constrain(x + radius, 0, camera.width() - 1); + int minY = PApplet.constrain(y - radius, 0, camera.height() - 1); + int maxY = PApplet.constrain(y + radius, 0, camera.height() - 1); + ByteBuffer buff = camera.getIplImage().getByteBuffer(); + int k = 0; + for (int j = minY; j <= maxY; j++) { + for (int i = minX; i <= maxX; i++) { + int offset = i + j * camera.width(); + int pxCol = getColor(buff, offset); + if (MathUtils.colorDistRGB(col, pxCol, threshold)) { + k++; + } + } + } + return k; + } + + private static int getColor(ByteBuffer buff, int offset) { + offset = offset * 3; + return (buff.get(offset + 2) & 255) << 16 | (buff.get(offset + 1) & 255) << 8 | (buff.get(offset) & 255); + } + + /** + * Unsafe do not use unless you are sure. + */ + public int getColorOccurencesFrom(PVector coord, PImage cameraImage, int radius, int col, int threshold, PaperTouchScreen paperTouchScreen) { + int x = (int) coord.x; + int y = (int) coord.y; + int minX = PApplet.constrain(x - radius, 0, cameraImage.width - 1); + int maxX = PApplet.constrain(x + radius, 0, cameraImage.width - 1); + int minY = PApplet.constrain(y - radius, 0, cameraImage.height - 1); + int maxY = PApplet.constrain(y + radius, 0, cameraImage.height - 1); + int k = 0; + for (int j = minY; j <= maxY; j++) { + for (int i = minX; i <= maxX; i++) { + int offset = i + j * cameraImage.width; + int pxCol = cameraImage.pixels[offset]; + if (colorDistRGB(col, pxCol, threshold)) { + k++; + } + } + } + return k; + } + } From d75962deb24ddee98835f5f041b22ec88292a648 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 19:13:18 +0100 Subject: [PATCH 96/99] refactor missed. --- papart/test/fr/inria/papart/UtilsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/papart/test/fr/inria/papart/UtilsTest.java b/papart/test/fr/inria/papart/UtilsTest.java index bca3c49f..056b59c3 100644 --- a/papart/test/fr/inria/papart/UtilsTest.java +++ b/papart/test/fr/inria/papart/UtilsTest.java @@ -19,7 +19,7 @@ */ package fr.inria.papart; -import fr.inria.papart.procam.utils.ARToolkitPlusUtils; +import fr.inria.papart.utils.ARToolkitPlusUtils; import org.bytedeco.javacpp.opencv_core.IplImage; import processing.core.PApplet; From f704e4ab07d1234f061e0fa0a32c3655661a87bc Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 19:33:51 +0100 Subject: [PATCH 97/99] Pointcloud visualization handles better RGB vs BGR. --- .../analysis/KinectDepthAnalysis.java | 2 +- .../depthcam/analysis/KinectProcessing.java | 30 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java index 4595f354..128a2781 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectDepthAnalysis.java @@ -73,7 +73,7 @@ public class KinectDepthAnalysis extends DepthAnalysis { protected DepthCameraDevice depthCameraDevice; protected DepthComputation depthComputationMethod; - private Camera colorCamera; + protected Camera colorCamera; public DepthCameraDevice getDepthCameraDevice() { return this.depthCameraDevice; diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java index 22ab0dfe..e7aa602a 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java @@ -25,6 +25,7 @@ import fr.inria.papart.depthcam.devices.DepthCameraDevice; import fr.inria.papart.depthcam.devices.KinectOne; import static fr.inria.papart.depthcam.analysis.DepthAnalysis.papplet; +import fr.inria.papart.procam.camera.Camera; import java.util.ArrayList; import java.util.Arrays; import org.bytedeco.javacpp.indexer.UByteIndexer; @@ -226,7 +227,14 @@ public PImage update(IplImage depth, IplImage color, int skip) { // computeDepthAndDo(skip, new DoNothing()); // TODO: get the color with Kinect2... - computeDepthAndDo(skip, new SetImageData()); + + System.out.println("PixelFormat " + colorCamera.getPixelFormat().name()); + if(this.colorCamera.getPixelFormat() == Camera.PixelFormat.RGB){ + computeDepthAndDo(skip, new SetImageDataRGB()); + } + if(this.colorCamera.getPixelFormat() == Camera.PixelFormat.BGR){ + computeDepthAndDo(skip, new SetImageData()); + } // computeDepthAndDo(skip, new Select2DPointOverPlane()); validPointsPImage.updatePixels(); @@ -255,6 +263,16 @@ public void execute(Vec3D p, PixelOffset px) { setPixelColor(px.offset); } } + class SetImageDataRGB implements DepthPointManiplation { + public SetImageDataRGB(){ + super(); + } + @Override + public void execute(Vec3D p, PixelOffset px) { + depthData.validPointsMask[px.offset] = true; + setPixelColorRGB(px.offset); + } + } private void setFakeColor(int offset, int r, int g, int b) { int c = (r & 0xFF) << 16 @@ -273,6 +291,16 @@ private void setPixelColor(int offset) { validPointsPImage.pixels[offset] = c; } + private void setPixelColorRGB(int offset) { + + // TODO: Get a cleaner way go obtain the color... + int colorOffset = depthCameraDevice.findColorOffset(depthData.depthPoints[offset]) * 3; + int c = (colorRaw[colorOffset + 0] & 0xFF) << 16 + | (colorRaw[colorOffset + 1] & 0xFF) << 8 + | (colorRaw[colorOffset + 2] & 0xFF); + + validPointsPImage.pixels[offset] = c; + } public PImage getColouredDepthImage() { return validPointsPImage; From 73c2efc49e8ca45336ad69815b001f68434b6e5c Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 19:34:35 +0100 Subject: [PATCH 98/99] note added. --- .../src/fr/inria/papart/depthcam/analysis/KinectProcessing.java | 1 + 1 file changed, 1 insertion(+) diff --git a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java index e7aa602a..59781818 100755 --- a/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java +++ b/papart/src/fr/inria/papart/depthcam/analysis/KinectProcessing.java @@ -281,6 +281,7 @@ private void setFakeColor(int offset, int r, int g, int b) { validPointsPImage.pixels[offset] = c; } + // TODO: Generalization here, same functions as those to convert the pixels for OpenGL. private void setPixelColor(int offset) { // TODO: Get a cleaner way go obtain the color... From 12e6b07867552f344d210d2ddc841e84543e1e77 Mon Sep 17 00:00:00 2001 From: Jeremy Laviole Date: Thu, 22 Dec 2016 19:37:28 +0100 Subject: [PATCH 99/99] version 1.0 --- papart/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/papart/pom.xml b/papart/pom.xml index bd43caff..6530a48d 100755 --- a/papart/pom.xml +++ b/papart/pom.xml @@ -3,7 +3,7 @@ 4.0.0 fr.inria papart - 0.7-SNAPSHOT + 1.0 jar PapARt