DynamicProcessor Image Processor Class
There are four main steps to processing photos or videos with the Dyanmic SDK:
1) Create Instance
Use singleton instance of DynamicProcessor with Hilt Dependency Injection:
@Singleton
@Provides
fun provideDynamicProcessor(@ApplicationContext context: Context):DynamicProcessor{
return DynamicProcessor(context)
}
You may use any other singleton pattern for creating this instance.
2) Initialize
Set Dynamic license (API key and Certificate)
- param
apiKey
[string]
- param
cert
[string]
- param
recreate
[boolean]
If you update the certificate at runtime, set recreate
to true.
DynamicProcessor.setLicence(apiKey = apiKey, cert = cert, recreate = recreate)
Initialize DynamicProcessor
It make take a few seconds, so we recommend to do it in background thread to prevent UI freeze.
- param
useGpu
[boolean]
true
for GPU inference (faster on most devices)
false
for CPU inference
DynamicProcessor.init(useGpu = true)
3) Process Preview Image
Process given image in bitmap object and get result for preview. This method used for fast preview, image is scaled down to screen size.
- param
bitmap
[bitmap] original bitmap image
- param
strength
[float] strength of dynamic to be applied (in range from 0.0 to 1.0)
- return
DynamicOutput
set this result to DynamicView
DynamicProcessor.processImagePreview(bitmap = imageBitmap, strength = 0.8)
4) Process full size image
Process given image in bitmap object and get bitmap return for preview in standard ImageView or for saving to storage. This method may last longer but returns result in full size bitmap.
- param
bitmap
[bitmap] original bitmap image
- param
strength
[float] strength of dynamic to be applied (in range from 0.0 to 1.0)
- return
Bitmap
DynamicProcessor.processImage(bitmap = imageBitmap, strength = 0.8)
DynamicView Widget for Previewing
We have created a simple widget to allow you to quickly add a preview of the Dynamic correction to your app.
1) Include into UI
<photos.eyeq.dynamic.eglx.image.DynamicView
android:id="@+id/dynamic_preview"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
2) Render Preview
- method
setBitmap
[bitmap] original bitmap image
- method
setParams
[DynamicOutput] output received from DynamicProcessor
- method
requestRender
after setting Bitmap and DynamicOuput call this method to render preview
binding.dynamicPreview.setBitmap(bitmap)
binding.dynamicPreview.setParams(dynamicOutput.global, dynamicOutput.local, dynamicOutput.fusion)
binding.dynamicPreview.requestRender()
Change dynamic strength
- method
setStrength
(optional) [float 0.0 - 1.0] after setting Bitmap and DynamicOuput we can change dynamic strength WITHOUT recalling DynamicProcessor::processImage
After each change of strength, a call to requestRender
is required. Simple example:
binding.dynamicPreview.setStrength(0.5f)
binding.dynamicPreview.requestRender()
Sample Usage
XML layout
<photos.eyeq.dynamic.eglx.image.DynamicView
android:id="@+id/dynamic_preview"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
Fragment or Activity
fun previewImage(bitmap: Bitmap) = with(binding) {
val outputs = dynamicProcessor.processImagePreview(bitmap, 0.8f)
dynamicPreview.setBitmap(bitmap)
dynamicPreview.setParams(outputs.global, outputs.local, outputs.fusion)
dynamicPreview.requestRender()
}
fun saveImage(bitmap: Bitmap) {
val resultImage = dynamicProcessor.processImage(bitmap, 0.8f)
saveImageToStorage(resultImage)
}
- Copyright
- Copyright (C) 2022 EyeQ Imaging Inc