[orx-runway] Add BASNet, PersonSegmentation, U-2-Net presets

This commit is contained in:
Ricardo Matias
2020-08-03 21:56:23 +02:00
committed by Edwin Jakobs
parent 4a24cb5fea
commit 555ec41530
7 changed files with 101 additions and 3 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,26 @@
import org.openrndr.application
import org.openrndr.draw.*
import org.openrndr.extra.runway.*
/**
* This example requires a `runway/BASNet` model to be active in Runway.
*/
fun main() = application {
configure {
width = 331
height = 400
}
program {
val image = loadImage("demo-data/images/life-cover.jpg")
val result: BASNETResult =
runwayQuery("http://localhost:8000/query", BASNETRequest(image.toData()))
val segmentImage = ColorBuffer.fromData(result.image)
extend {
drawer.image(segmentImage, 0.0, 0.0)
}
}
}

View File

@@ -0,0 +1,26 @@
import org.openrndr.application
import org.openrndr.draw.*
import org.openrndr.extra.runway.*
/**
* This example requires a `runway/Person-Segmentation` model to be active in Runway.
*/
fun main() = application {
configure {
width = 331
height = 400
}
program {
val image = loadImage("demo-data/images/life-cover.jpg")
val result: PersonSegmentationResult =
runwayQuery("http://localhost:8000/query", PersonSegmentationRequest(image.toData(), 0.2))
val segmentImage = ColorBuffer.fromData(result.image)
extend {
drawer.image(segmentImage, 0.0, 0.0)
}
}
}

View File

@@ -0,0 +1,26 @@
import org.openrndr.application
import org.openrndr.draw.*
import org.openrndr.extra.runway.*
/**
* This example requires a `runway/U-2-Net` model to be active in Runway.
*/
fun main() = application {
configure {
width = 305
height = 400
}
program {
val image = loadImage("demo-data/images/vw-beetle.jpg")
val result: U2NetResult =
runwayQuery("http://localhost:8000/query", U2NetRequest(image.toData()))
val segmentImage = ColorBuffer.fromData(result.image)
extend {
drawer.image(segmentImage, 0.0, 0.0)
}
}
}

View File

@@ -7,6 +7,11 @@ class AttnGANRequest(val caption: String)
class AttnGANResult(val result: String)
// -- BASNET
class BASNETRequest(val image: String)
class BASNETResult(val image: String)
// -- BDCN
class BdcnRequest(val input_image: String)
@@ -67,6 +72,17 @@ class DeOldifyResponse(val image: String)
class DenseCapRequest(val image: String, @SerializedName("max_detections") val maxDetections: Int = 10)
class DenseCapResponse(val bboxes: List<List<Double>>, val classes: List<String>, val scores: List<Double>)
// -- Person-Segmentation
/**
* Automatically detects people and extracts them from photos
*
* @property image
* @property threshold [0.0, 1.0]
*/
class PersonSegmentationRequest(val image: String, val threshold: Double)
class PersonSegmentationResult(val image: String)
// -- PoseNet
class PoseNetRequest(
val image: String,
@@ -76,3 +92,7 @@ class PoseNetRequest(
)
class PoseNetResponse(val poses: List<List<List<Double>>>, val scores: List<Double>)
// -- U-2-Net
class U2NetRequest(val image: String)
class U2NetResult(val image: String)

View File

@@ -44,14 +44,13 @@ inline fun <Q, reified R> runwayQuery(target: String, query: Q): R {
try {
val queryJson = Gson().toJson(query)
val connection = URL(target).openConnection() as HttpURLConnection
//with(connection) {
connection.doOutput = true
connection.connectTimeout = 1_000
connection.readTimeout = 200_000
connection.requestMethod = "POST"
connection.setRequestProperty("Content-Type", "application/json")
connection.setRequestProperty("Accept", "application/json")
//}
val outputStream = connection.outputStream
outputStream.write(queryJson.toByteArray())
@@ -59,9 +58,10 @@ inline fun <Q, reified R> runwayQuery(target: String, query: Q): R {
val inputStream = connection.inputStream
val responseJson = String(inputStream.readBytes())
println(responseJson)
inputStream.close()
connection.disconnect()
return Gson().fromJson(responseJson, R::class.java)
} catch (e: SocketTimeoutException) {
error("RunwayML connection timed out '$target'. Check if Runway and model are running.")