[orx-runway] Add BASNet, PersonSegmentation, U-2-Net presets
This commit is contained in:
committed by
Edwin Jakobs
parent
4a24cb5fea
commit
555ec41530
BIN
demo-data/images/life-cover.jpg
Normal file
BIN
demo-data/images/life-cover.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 50 KiB |
BIN
demo-data/images/vw-beetle.jpg
Normal file
BIN
demo-data/images/vw-beetle.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
26
orx-runway/src/demo/kotlin/DemoBASNet.kt
Normal file
26
orx-runway/src/demo/kotlin/DemoBASNet.kt
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
orx-runway/src/demo/kotlin/DemoPersonSegmentation.kt
Normal file
26
orx-runway/src/demo/kotlin/DemoPersonSegmentation.kt
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
orx-runway/src/demo/kotlin/DemoU2Net.kt
Normal file
26
orx-runway/src/demo/kotlin/DemoU2Net.kt
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,11 @@ class AttnGANRequest(val caption: String)
|
|||||||
|
|
||||||
class AttnGANResult(val result: String)
|
class AttnGANResult(val result: String)
|
||||||
|
|
||||||
|
// -- BASNET
|
||||||
|
class BASNETRequest(val image: String)
|
||||||
|
|
||||||
|
class BASNETResult(val image: String)
|
||||||
|
|
||||||
// -- BDCN
|
// -- BDCN
|
||||||
class BdcnRequest(val input_image: String)
|
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 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>)
|
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
|
// -- PoseNet
|
||||||
class PoseNetRequest(
|
class PoseNetRequest(
|
||||||
val image: String,
|
val image: String,
|
||||||
@@ -76,3 +92,7 @@ class PoseNetRequest(
|
|||||||
)
|
)
|
||||||
class PoseNetResponse(val poses: List<List<List<Double>>>, val scores: List<Double>)
|
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)
|
||||||
|
|||||||
@@ -44,14 +44,13 @@ inline fun <Q, reified R> runwayQuery(target: String, query: Q): R {
|
|||||||
try {
|
try {
|
||||||
val queryJson = Gson().toJson(query)
|
val queryJson = Gson().toJson(query)
|
||||||
val connection = URL(target).openConnection() as HttpURLConnection
|
val connection = URL(target).openConnection() as HttpURLConnection
|
||||||
//with(connection) {
|
|
||||||
connection.doOutput = true
|
connection.doOutput = true
|
||||||
connection.connectTimeout = 1_000
|
connection.connectTimeout = 1_000
|
||||||
connection.readTimeout = 200_000
|
connection.readTimeout = 200_000
|
||||||
connection.requestMethod = "POST"
|
connection.requestMethod = "POST"
|
||||||
connection.setRequestProperty("Content-Type", "application/json")
|
connection.setRequestProperty("Content-Type", "application/json")
|
||||||
connection.setRequestProperty("Accept", "application/json")
|
connection.setRequestProperty("Accept", "application/json")
|
||||||
//}
|
|
||||||
|
|
||||||
val outputStream = connection.outputStream
|
val outputStream = connection.outputStream
|
||||||
outputStream.write(queryJson.toByteArray())
|
outputStream.write(queryJson.toByteArray())
|
||||||
@@ -59,9 +58,10 @@ inline fun <Q, reified R> runwayQuery(target: String, query: Q): R {
|
|||||||
|
|
||||||
val inputStream = connection.inputStream
|
val inputStream = connection.inputStream
|
||||||
val responseJson = String(inputStream.readBytes())
|
val responseJson = String(inputStream.readBytes())
|
||||||
println(responseJson)
|
|
||||||
inputStream.close()
|
inputStream.close()
|
||||||
connection.disconnect()
|
connection.disconnect()
|
||||||
|
|
||||||
return Gson().fromJson(responseJson, R::class.java)
|
return Gson().fromJson(responseJson, R::class.java)
|
||||||
} catch (e: SocketTimeoutException) {
|
} catch (e: SocketTimeoutException) {
|
||||||
error("RunwayML connection timed out '$target'. Check if Runway and model are running.")
|
error("RunwayML connection timed out '$target'. Check if Runway and model are running.")
|
||||||
|
|||||||
Reference in New Issue
Block a user