diff --git a/orx-runway/src/demo/kotlin/PoseNet01.kt b/orx-runway/src/demo/kotlin/PoseNet01.kt new file mode 100644 index 000000000..6eca0f644 --- /dev/null +++ b/orx-runway/src/demo/kotlin/PoseNet01.kt @@ -0,0 +1,44 @@ +import org.openrndr.application +import org.openrndr.color.ColorRGBa +import org.openrndr.draw.isolatedWithTarget +import org.openrndr.draw.loadImage +import org.openrndr.draw.renderTarget +import org.openrndr.extra.runway.* + +/** + * This demonstrates the body estimation model of PoseNet + * This example requires a `runway/PoseNet` model active in Runway. + */ +fun main() = application { + configure { + width = 512 + height = 512 + } + + program { + val rt = renderTarget(512, 512) { + colorBuffer() + } + val image = loadImage("demo-data/images/peopleCity01.jpg") + + drawer.isolatedWithTarget(rt) { + drawer.ortho(rt) + drawer.clear(ColorRGBa.BLACK) + drawer.image(image, (rt.width - image.width) / 2.0, (rt.height - image.height) / 2.0) + } + + extend { + val result: PoseNetResponse = runwayQuery("http://localhost:8000/query", PoseNetRequest(rt.colorBuffer(0).toData())) + val poses = result.poses + val scores = result.scores + + drawer.image(image, 0.0, 0.0, 512.0, 512.0) + + poses.forEach { poses -> + poses.forEach { pose -> + drawer.circle(pose[0]*512.0, pose[1]*512.0, 10.0) + } + } + } + } +} \ No newline at end of file diff --git a/orx-runway/src/main/kotlin/Presets.kt b/orx-runway/src/main/kotlin/Presets.kt index 2547ea8de..5c5e96aa9 100644 --- a/orx-runway/src/main/kotlin/Presets.kt +++ b/orx-runway/src/main/kotlin/Presets.kt @@ -65,4 +65,14 @@ class DeOldifyResponse(val image: String) // -- DenseCap class DenseCapRequest(val image: String, @SerializedName("max_detections") val maxDetections: Int = 10) -class DenseCapResponse(val bboxes: List>, val classes: List, val scores: List) \ No newline at end of file +class DenseCapResponse(val bboxes: List>, val classes: List, val scores: List) + +// -- PoseNet +class PoseNetRequest( + val image: String, + @SerializedName("estimationType") val estimationType: String = "Multi Pose", + @SerializedName("maxPoseDetections") val maxPoseDetections: Int = 5, + @SerializedName("scoreThreshold") val scoreThreshold: Double = 0.25 + ) +class PoseNetResponse(val poses: List>>, val scores: List) +