Skip to content

Instantly share code, notes, and snippets.

@AliAzaz
Created September 14, 2019 20:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AliAzaz/b06212aa45d0ee62c303ef476b703f6b to your computer and use it in GitHub Desktop.
Save AliAzaz/b06212aa45d0ee62c303ef476b703f6b to your computer and use it in GitHub Desktop.
Presenter class of text recognizer and label in image using Firebase ML Kit
class MainPresenter(private val mainActivity: MainActivity) : MainView.PresenterView {
private var permissionFlag = false
init {
onGettingPermission()
}
override fun grantPermission(): Boolean {
return permissionFlag
}
override fun onCaptureClicked(CAMERA_REQUEST: Int) {
if (!permissionFlag) {
mainActivity.setToast(mainActivity.getString(R.string.denied))
return
}
mainActivity.startActivityForResult(Intent(MediaStore.ACTION_IMAGE_CAPTURE), CAMERA_REQUEST)
}
override fun onGettingBitmapForImageView(bitmap: Bitmap) {
mainActivity.showDialog()
mainActivity.setBitmapOnImageView(bitmap)
onGettingVisionBitmapAnalysis(bitmap)
}
override fun onGettingBitmapURIForCrop(bitmapURI: Uri) {
CropImage.activity(bitmapURI)
.setBackgroundColor(R.color.crop_shade)
.setActivityTitle(R.string.cropping.toString())
.start(mainActivity)
}
private fun onGettingVisionAnalysisText(bitmap: Bitmap, visionText: FirebaseVisionText) {
val blocks = visionText.textBlocks
mainActivity.setTextView(
when {
blocks.isEmpty() -> "No Text Found!!"
else -> visionText.text
}
)
if (blocks.isEmpty()) {
mainActivity.dismissDialog()
return
}
onGettingLabelFromImage(bitmap, blocks)
}
private fun onGettingVisionBitmapAnalysis(bitmap: Bitmap) {
val fbVisionImg = FirebaseVisionImage.fromBitmap(bitmap)
val fbVisionTxtDetect = FirebaseVision.getInstance().onDeviceTextRecognizer
fbVisionTxtDetect.processImage(fbVisionImg)
.addOnSuccessListener {
onGettingVisionAnalysisText(bitmap, it)
}
.addOnFailureListener {
when {
it.printStackTrace().toString().equals(R.string.model_download_warning.toString()) -> {
onGettingVisionBitmapAnalysis(bitmap)
}
else -> {
mainActivity.dismissDialog()
it.printStackTrace()
}
}
}
}
private fun onGettingLabelFromImage(bitmap: Bitmap, blocks: List<FirebaseVisionText.TextBlock>) {
val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)
val canvas = Canvas(mutableBitmap)
val graphics = onGettingGraphics()
for (i in blocks.indices) {
val lines: List<FirebaseVisionText.Line> = blocks[i].lines
for (j in lines.indices) {
val elements: List<FirebaseVisionText.Element> = lines[j].elements
for (k in elements.indices) {
canvas.drawRect(elements[k].boundingBox, graphics.first)
}
}
}
mainActivity.setBitmapOnImageView(mutableBitmap)
mainActivity.dismissDialog()
}
private fun onGettingPermission() {
val permissions = arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
Permissions.check(mainActivity/*context*/, permissions, null/*options*/, null, object : PermissionHandler() {
override fun onGranted() {
permissionFlag = true
}
})
}
private fun onGettingGraphics(): Pair<Paint, Paint> {
val rectPaint = Paint()
rectPaint.color = Color.RED
rectPaint.style = Paint.Style.STROKE
rectPaint.strokeWidth = 4F
val textPaint = Paint()
textPaint.color = Color.RED
textPaint.textSize = 40F
return Pair(rectPaint, textPaint)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment