53 lines
2.1 KiB
Kotlin
53 lines
2.1 KiB
Kotlin
package be.kuleuven.howlongtobeat.google
|
|
|
|
import android.graphics.Bitmap
|
|
import be.kuleuven.howlongtobeat.asEncodedGoogleVisionImage
|
|
import be.kuleuven.howlongtobeat.cartridges.Cartridge
|
|
import com.google.api.client.http.javanet.NetHttpTransport
|
|
import com.google.api.client.json.gson.GsonFactory
|
|
import com.google.api.services.vision.v1.Vision
|
|
import com.google.api.services.vision.v1.VisionRequestInitializer
|
|
import com.google.api.services.vision.v1.model.AnnotateImageRequest
|
|
import com.google.api.services.vision.v1.model.BatchAnnotateImagesRequest
|
|
import com.google.api.services.vision.v1.model.BatchAnnotateImagesResponse
|
|
import com.google.api.services.vision.v1.model.Feature
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.withContext
|
|
|
|
class GoogleVisionClient {
|
|
|
|
// TODO encrypt and store externally: https://cloud.google.com/docs/authentication/api-keys?hl=en&visit_id=637642790375688006-1838986332&rd=1
|
|
private val vision = Vision.Builder(NetHttpTransport(), GsonFactory.getDefaultInstance(), null)
|
|
.setVisionRequestInitializer(VisionRequestInitializer("AIzaSyCaMjQQOY7508y95riDhr25fsrqe3m2JW0"))
|
|
.build()
|
|
|
|
suspend fun findCartCodeViaGoogleVision(cameraSnap: Bitmap): String? {
|
|
var response: BatchAnnotateImagesResponse
|
|
withContext(Dispatchers.IO) {
|
|
println("Encoding image...")
|
|
val sml2Data = cameraSnap.asEncodedGoogleVisionImage()
|
|
|
|
println("Done, uploading image...")
|
|
val req = AnnotateImageRequest().apply {
|
|
features = listOf(Feature().apply {
|
|
type = "TEXT_DETECTION"
|
|
maxResults = 10
|
|
})
|
|
image = sml2Data
|
|
}
|
|
|
|
val batch = BatchAnnotateImagesRequest().apply {
|
|
requests = listOf(req)
|
|
}
|
|
response = vision.images().annotate(batch).execute()
|
|
}
|
|
if(response.responses.isEmpty()) {
|
|
return null
|
|
}
|
|
|
|
val gbId = response.responses.get(0).textAnnotations.filter {
|
|
Cartridge.isValid(it.description)
|
|
}.firstOrNull()
|
|
return gbId?.description ?: null
|
|
}
|
|
} |