Skip to content

Commit

Permalink
Merge pull request #9 from the-super-toys/va/thread-safe-interpreter
Browse files Browse the repository at this point in the history
Make interpreter global and thread safe
  • Loading branch information
VictorAlbertos committed Mar 8, 2019
2 parents 8df6b69 + 843ff43 commit a757e2b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 12 deletions.
25 changes: 14 additions & 11 deletions glimpse-core/src/main/java/glimpse/core/BitmapExtensions.kt
Expand Up @@ -66,11 +66,8 @@ fun Bitmap.debugHeatMap(
pixels.forEach { pixel -> inputBuffer.putFloat((pixel shr 16 and 0xFF) / 255f) }
pixels.forEach { pixel -> inputBuffer.putFloat((pixel shr 8 and 0xFF) / 255f) }
pixels.forEach { pixel -> inputBuffer.putFloat((pixel and 0xFF) / 255f) }
val intpr = Interpreter(rawModel, Interpreter.Options().apply {
setNumThreads(1)
})
intpr.run(inputBuffer, output)
intpr.close()

intpreter.runThreadSafe(inputBuffer, output)

// calculate tempered softmax
val flattened = output[0][0].flattened()
Expand Down Expand Up @@ -116,6 +113,14 @@ fun Bitmap.debugHeatMap(
}
}



@Synchronized
fun Interpreter.runThreadSafe(inputBuffer: ByteBuffer, output: Array<Array<Array<FloatArray>>>) {
run(inputBuffer, output)
}


@JvmOverloads
fun Bitmap.findCenter(
temperature: Float = 0.2f,
Expand All @@ -135,11 +140,8 @@ fun Bitmap.findCenter(
pixels.forEach { pixel -> inputBuffer.putFloat((pixel shr 16 and 0xFF) / 255f) }
pixels.forEach { pixel -> inputBuffer.putFloat((pixel shr 8 and 0xFF) / 255f) }
pixels.forEach { pixel -> inputBuffer.putFloat((pixel and 0xFF) / 255f) }
val intpr = Interpreter(rawModel, Interpreter.Options().apply {
setNumThreads(1)
})
intpr.run(inputBuffer, output)
intpr.close()

intpreter.runThreadSafe(inputBuffer, output)

// calculate tempered softmax
val flattened = output[0][0].flattened()
Expand All @@ -148,4 +150,5 @@ fun Bitmap.findCenter(

// get averaged center
return MathUtils.getLargestFocusArea(reshaped[0][0], lowerBound = lowerBound)
}
}

8 changes: 7 additions & 1 deletion glimpse-core/src/main/java/glimpse/core/models.kt
@@ -1,3 +1,9 @@
package glimpse.core

internal val rawModel by lazy { IOUtils.loadModel(Glimpse.client.applicationContext, "model.tflite") }
import org.tensorflow.lite.Interpreter

private val rawModel by lazy { IOUtils.loadModel(Glimpse.client.applicationContext, "model.tflite") }

internal val intpreter by lazy {
Interpreter(rawModel, Interpreter.Options())
}

0 comments on commit a757e2b

Please sign in to comment.