diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fc692edcc16..2867a45eef8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -21,7 +21,6 @@ gson = "2.9.0" antlr = "4.10.1" tensorflow = "0.4.1" jarchivelib = "1.2.0" -logbackClassic = "1.2.11" minim = "2.2.2" netty = "4.1.79.Final" rabbitcontrol = "0.3.29" @@ -64,7 +63,6 @@ boofcv = { group = "org.boofcv", name = "boofcv-core", version.ref = "boofcv" } libfreenect = { group = "org.bytedeco", name = "libfreenect", version.ref = "libfreenect" } librealsense = { group = "org.bytedeco", name = "librealsense2", version.ref = "librealsense" } jarchivelib = { group = "org.rauschig", name = "jarchivelib", version.ref = "jarchivelib" } -logback-classic = { group = "ch.qos.logback", name = "logback-classic", version.ref = "logbackClassic" } minim = { group = "net.compartmental.code", name = "minim", version.ref = "minim" } netty-all = { group = "io.netty", name = "netty-all", version.ref = "netty" } rabbitcontrol-rcp = { group = "cc.rabbitcontrol", name = "rcp", version.ref = "rabbitcontrol" } diff --git a/orx-depth-camera/README.md b/orx-depth-camera/README.md new file mode 100644 index 00000000000..9b998e56d24 --- /dev/null +++ b/orx-depth-camera/README.md @@ -0,0 +1,47 @@ +# orx-depth-camera + +General [DepthCamera](src/commonMain/kotlin/DepthCamera.kt) API for obtaining the signal from any type of +depth camera. + +It offers selection of `DepthMeasurement` units (`METERS`, `RAW_NORMALIZED`, `RAW`), and allows +to flip the image horizontally and vertically. + +Depth camera provides current resolution, current frame, as well as +an asynchronous hook to react to the latest received depth frame. + +Note: Implementations will guarantee that the `onFrameReceived` hook is executed in coroutine of +the main drawer thread. + +## Usage + +Even though the API is generic, it can be used only with specific provider. The only one working at the moment: + + * [orx-kinect-v1](https://github.com/openrndr/orx/tree/master/orx-jvm/orx-kinect-v1) + +```kotlin +import org.openrndr.application +import org.openrndr.extra.kinect.v1.Kinect1 + +/** + * Basic use case showing stream of depth camera frames. + * + * Note: kinect depth map is stored only on the RED color channel, + * therefore depth map is displayed only in the red tones. + */ +fun main() = application { + configure { // default resolution of the Kinect v1 depth camera + width = 640 + height = 480 + } + program { + val kinect = extend(Kinect1()) + val device = kinect.openDevice() + device.depthCamera.flipH = true // to make a mirror + camera.depthMeasurement = DepthMeasurement.METERS + device.depthCamera.enabled = true + extend { + drawer.image(device.depthCamera.currentFrame) + } + } +} +``` diff --git a/orx-jvm/orx-depth-camera-calibrator/README.md b/orx-jvm/orx-depth-camera-calibrator/README.md new file mode 100644 index 00000000000..27f0c4fa278 --- /dev/null +++ b/orx-jvm/orx-depth-camera-calibrator/README.md @@ -0,0 +1,3 @@ +# orx-depth-camera-calibrator + +Allows calibration of the depth camera. diff --git a/orx-jvm/orx-depth-camera-calibrator/build.gradle.kts b/orx-jvm/orx-depth-camera-calibrator/build.gradle.kts index 353d82073dc..7116e2b3144 100644 --- a/orx-jvm/orx-depth-camera-calibrator/build.gradle.kts +++ b/orx-jvm/orx-depth-camera-calibrator/build.gradle.kts @@ -8,4 +8,7 @@ dependencies { implementation(project(":orx-fx")) api(project(":orx-depth-camera")) api(project(":orx-jvm:orx-gui")) -} \ No newline at end of file + demoImplementation(project(":orx-jvm:orx-kinect-v1")) + demoRuntimeOnly(project(":orx-jvm:orx-kinect-v1-${(gradle as ExtensionAware).extra["openrndrClassifier"]}")) + demoRuntimeOnly(libs.slf4j.simple) +} diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo10DepthCameraCalibration.kt b/orx-jvm/orx-depth-camera-calibrator/src/demo/kotlin/DemoDepthCameraCalibrator.kt similarity index 74% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo10DepthCameraCalibration.kt rename to orx-jvm/orx-depth-camera-calibrator/src/demo/kotlin/DemoDepthCameraCalibrator.kt index 25fa68e895e..5141fe7721d 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo10DepthCameraCalibration.kt +++ b/orx-jvm/orx-depth-camera-calibrator/src/demo/kotlin/DemoDepthCameraCalibrator.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.openrndr.Fullscreen import org.openrndr.application import org.openrndr.draw.Filter @@ -11,9 +9,6 @@ import org.openrndr.extra.depth.camera.calibrator.isolatedWithCalibration import org.openrndr.extra.gui.GUI import org.openrndr.extra.kinect.v1.Kinect1 -/** - * How to use [DepthCameraCalibrator] with [Kinect1]? - */ fun main() = application { configure { fullscreen = Fullscreen.CURRENT_DISPLAY_MODE @@ -33,7 +28,23 @@ fun main() = application { ) // simple visual effect applied to kinect data - val spaceRangeExtractor = SpaceRangeExtractor() + val spaceRangeExtractor = object : Filter(filterShaderFromCode(""" + uniform sampler2D tex0; // kinect raw + uniform float minDepth; + uniform float maxDepth; + out vec4 o_color; + void main() { + ivec2 uv = ivec2(gl_FragCoord.xy); + float depth = texelFetch(tex0, uv, 0).r; + float luma = ((depth >= minDepth) && (depth <= maxDepth)) ? 1.0 : 0.0; + o_color = vec4(vec3(luma), 1.0); + } + """.trimIndent(), + "space range extractor" + )) { + var minDepth: Double by parameters + var maxDepth: Double by parameters + } camera.onFrameReceived { frame -> spaceRangeExtractor.apply(frame, outputBuffer) } @@ -91,27 +102,3 @@ fun main() = application { } } - -/** - * A visual effect applied to kinect data in this demonstration. - * Everything is black, except for the white pixels within the range - * of 2 virtual walls positioned at [minDepth] at front of the - * viewer and [maxDepth] behind the viewer. - */ -class SpaceRangeExtractor : Filter(filterShaderFromCode(""" - uniform sampler2D tex0; // kinect raw - uniform float minDepth; - uniform float maxDepth; - out vec4 o_color; - void main() { - ivec2 uv = ivec2(gl_FragCoord.xy); - float depth = texelFetch(tex0, uv, 0).r; - float luma = ((depth >= minDepth) && (depth <= maxDepth)) ? 1.0 : 0.0; - o_color = vec4(vec3(luma), 1.0); - } - """.trimIndent(), - "space range extractor" -)) { - var minDepth: Double by parameters - var maxDepth: Double by parameters -} diff --git a/orx-jvm/orx-kinect-common/README.md b/orx-jvm/orx-kinect-common/README.md new file mode 100644 index 00000000000..3520f93f72f --- /dev/null +++ b/orx-jvm/orx-kinect-common/README.md @@ -0,0 +1,5 @@ +# orx-kinect-common + +Common base code for all the kinect versions. + +Note: This extension is an internal library, not intended to be used directly. diff --git a/orx-jvm/orx-kinect-v1-demo/build.gradle.kts b/orx-jvm/orx-kinect-v1-demo/build.gradle.kts deleted file mode 100644 index 51464ba5904..00000000000 --- a/orx-jvm/orx-kinect-v1-demo/build.gradle.kts +++ /dev/null @@ -1,15 +0,0 @@ -plugins { - org.openrndr.extra.convention.`kotlin-jvm` -} - -dependencies { - implementation(libs.openrndr.application) - implementation(libs.openrndr.math) - implementation(project(":orx-jvm:orx-kinect-v1")) - implementation(project(":orx-jvm:orx-depth-camera-calibrator")) - implementation(project(":orx-fx")) - implementation(project(":orx-jvm:orx-gui")) - runtimeOnly(project(":orx-jvm:orx-kinect-v1-${(gradle as ExtensionAware).extra["openrndrClassifier"]}")) - runtimeOnly(libs.openrndr.gl3.core) - runtimeOnly(libs.logback.classic) -} \ No newline at end of file diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/resources/logback.xml b/orx-jvm/orx-kinect-v1-demo/src/main/resources/logback.xml deleted file mode 100644 index 3d7044e63fa..00000000000 --- a/orx-jvm/orx-kinect-v1-demo/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - true - - - - %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - diff --git a/orx-jvm/orx-kinect-v1/README.md b/orx-jvm/orx-kinect-v1/README.md index f88680f4c53..7fb261fbba3 100644 --- a/orx-jvm/orx-kinect-v1/README.md +++ b/orx-jvm/orx-kinect-v1/README.md @@ -1,23 +1,3 @@ # orx-kinect-v1 -Support for the Kinect V1 RGB+Depth camera. - -## Example usage - -``` -fun main() = application { - configure { - fullscreen = Fullscreen.CURRENT_DISPLAY_MODE - } - program { - val kinects = getKinectsV1() - val kinect = kinects.startDevice() - kinect.depthCamera.enabled = true - kinect.depthCamera.mirror = true - extend(kinect) - extend { - drawer.image(kinect.depthCamera.currentFrame) - } - } -} -``` +Support for the Kinect V1 depth camera. diff --git a/orx-jvm/orx-kinect-v1/build.gradle.kts b/orx-jvm/orx-kinect-v1/build.gradle.kts index 41cee592254..220d5a4f417 100644 --- a/orx-jvm/orx-kinect-v1/build.gradle.kts +++ b/orx-jvm/orx-kinect-v1/build.gradle.kts @@ -8,4 +8,10 @@ dependencies { implementation(libs.kotlin.coroutines) api(project(":orx-jvm:orx-kinect-common")) api(libs.libfreenect) -} \ No newline at end of file + demoImplementation(project(":orx-jvm:orx-kinect-v1")) + demoImplementation(project(":orx-jvm:orx-depth-camera-calibrator")) + demoImplementation(project(":orx-fx")) + demoImplementation(project(":orx-jvm:orx-gui")) + demoRuntimeOnly(project(":orx-jvm:orx-kinect-v1-${(gradle as ExtensionAware).extra["openrndrClassifier"]}")) + demoRuntimeOnly(libs.slf4j.simple) +} diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo01BasicUseCase.kt b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo01BasicUseCase.kt similarity index 94% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo01BasicUseCase.kt rename to orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo01BasicUseCase.kt index a90dd0b95c2..8be433266a3 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo01BasicUseCase.kt +++ b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo01BasicUseCase.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.openrndr.application import org.openrndr.extra.kinect.v1.Kinect1 diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo02MotionCaptureUseCase.kt b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo02MotionCaptureUseCase.kt similarity index 98% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo02MotionCaptureUseCase.kt rename to orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo02MotionCaptureUseCase.kt index 95308cdc1fb..1ede9e55cd7 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo02MotionCaptureUseCase.kt +++ b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo02MotionCaptureUseCase.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.openrndr.application import org.openrndr.draw.colorBuffer import org.openrndr.extra.depth.camera.DepthMeasurement diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo03DepthToColorMaps.kt b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo03DepthToColorMaps.kt similarity index 98% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo03DepthToColorMaps.kt rename to orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo03DepthToColorMaps.kt index 888fe6a6c38..a6e8f118f00 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo03DepthToColorMaps.kt +++ b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo03DepthToColorMaps.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.openrndr.application import org.openrndr.draw.ColorFormat import org.openrndr.draw.colorBuffer diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo04SwitchOffLed.kt b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo04SwitchOffLed.kt similarity index 95% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo04SwitchOffLed.kt rename to orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo04SwitchOffLed.kt index 9eff2b41654..f849329627a 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo04SwitchOffLed.kt +++ b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo04SwitchOffLed.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.bytedeco.libfreenect.global.freenect import org.openrndr.application import org.openrndr.extra.kinect.v1.Kinect1 diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo05MultipleDevices.kt b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo05MultipleDevices.kt similarity index 95% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo05MultipleDevices.kt rename to orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo05MultipleDevices.kt index 0efea25ff95..7a56728fbfb 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo05MultipleDevices.kt +++ b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo05MultipleDevices.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.openrndr.application import org.openrndr.extra.kinect.v1.Kinect1 diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo07NativeFreenectCommands.kt b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo07NativeFreenectCommands.kt similarity index 97% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo07NativeFreenectCommands.kt rename to orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo07NativeFreenectCommands.kt index 432281b0caf..0c973dd6a97 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo07NativeFreenectCommands.kt +++ b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo07NativeFreenectCommands.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.bytedeco.libfreenect.global.freenect import org.bytedeco.libfreenect.global.freenect.* import org.openrndr.application diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo08LogLevelFlood.kt b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo08LogLevelFlood.kt similarity index 95% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo08LogLevelFlood.kt rename to orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo08LogLevelFlood.kt index 48940cbea9c..2131163c049 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo08LogLevelFlood.kt +++ b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo08LogLevelFlood.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.openrndr.application import org.openrndr.extra.kinect.v1.Kinect1 diff --git a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo09RawDepthProcessing.kt b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo09RawDepthProcessing.kt similarity index 97% rename from orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo09RawDepthProcessing.kt rename to orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo09RawDepthProcessing.kt index a214e172a72..c60b7256b93 100644 --- a/orx-jvm/orx-kinect-v1-demo/src/main/kotlin/Kinect1Demo09RawDepthProcessing.kt +++ b/orx-jvm/orx-kinect-v1/src/demo/kotlin/Kinect1Demo09RawDepthProcessing.kt @@ -1,5 +1,3 @@ -package org.openrndr.extra.kinect.v1.demo - import org.openrndr.application import org.openrndr.draw.Filter import org.openrndr.draw.colorBuffer diff --git a/settings.gradle.kts b/settings.gradle.kts index bea6ab8c570..1a02ee74826 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -79,7 +79,6 @@ include( "orx-jvm:orx-kinect-v1-natives-linux-x64", "orx-jvm:orx-kinect-v1-natives-macos", "orx-jvm:orx-kinect-v1-natives-windows", - "orx-jvm:orx-kinect-v1-demo", "orx-jvm:orx-video-profiles", "orx-depth-camera", "orx-jvm:orx-depth-camera-calibrator"