rajaasim

Untitled

Oct 18th, 2021 (edited)
339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.40 KB | None | 0 0
  1. class MainActivity : AppCompatActivity() {
  2.     private val permReqCode = 10
  3.     private val requiredPerms = arrayOf(Manifest.permission.CAMERA)
  4.     override fun onCreate(savedInstanceState: Bundle?) {
  5.         super.onCreate(savedInstanceState)
  6.         setContentView(R.layout.activity_main)
  7.  
  8.         if (allPermissionsGranted()) {
  9.             startCamera()
  10.         } else {
  11.             ActivityCompat.requestPermissions(
  12.                 this, requiredPerms, permReqCode)
  13.         }
  14.     }
  15.  
  16.     fun recognizeText(image: InputImage, proxy: ImageProxy) {
  17.         val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
  18.         val result = recognizer.process(image)
  19.                 .addOnSuccessListener { visionText ->
  20.                     Log.e("OCE", "success")
  21.                     processTextBlock(visionText)
  22.                 }
  23.                 .addOnFailureListener { e ->
  24.                     Log.e("OCE", "failed ${e.toString()}")
  25.                 }
  26.         result.addOnCompleteListener { _ ->  proxy.close()}
  27.     }
  28.  
  29.     private fun processTextBlock(result: Text) {
  30.         val resultText = result.text
  31.         for (block in result.textBlocks) {
  32.             val blockText = block.text
  33.             val blockCornerPoints = block.cornerPoints
  34.             val blockFrame = block.boundingBox
  35.             findViewById<TextView>(R.id.textView).text = blockText
  36.             for (line in block.lines) {
  37.                 val lineText = line.text
  38.                 val lineCornerPoints = line.cornerPoints
  39.                 val lineFrame = line.boundingBox
  40.                 //findViewById<TextView>(R.id.textView).text = lineText
  41.                 for (element in line.elements) {
  42.                     val elementText = element.text
  43.                     val elementCornerPoints = element.cornerPoints
  44.                     val elementFrame = element.boundingBox
  45.                     //findViewById<TextView>(R.id.textView).text = elementText
  46.                 }
  47.             }
  48.         }
  49.     }
  50.  
  51.     @SuppressLint("UnsafeOptInUsageError")
  52.     private fun startCamera() {
  53.         val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
  54.         cameraProviderFuture.addListener(Runnable {
  55.             val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
  56.             // Preview
  57.             val preview = Preview.Builder()
  58.                 .build()
  59.                 .also {
  60.                     it.setSurfaceProvider(findViewById<PreviewView>(R.id.viewFinder).surfaceProvider)
  61.                 }
  62.  
  63.             val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
  64.             val imageAnalysis = ImageAnalysis.Builder()
  65.                     .setTargetResolution(Size(1280, 720))
  66.                     .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
  67.                     .build()
  68.  
  69.             imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(this), ImageAnalyzer())
  70.  
  71.             try {
  72.                 cameraProvider.unbindAll()
  73.                 cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, imageAnalysis, preview)
  74.  
  75.             } catch(exc: Exception) {
  76.                 Log.e("OCR", "binding failed", exc)
  77.             }
  78.  
  79.         }, ContextCompat.getMainExecutor(this))
  80.     }
  81.  
  82.     inner class ImageAnalyzer : ImageAnalysis.Analyzer {
  83.         @SuppressLint("UnsafeOptInUsageError")
  84.         override fun analyze(imageProxy: ImageProxy) {
  85.             val mediaImage = imageProxy.image
  86.             if (mediaImage != null) {
  87.                 val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
  88.                 recognizeText(image, imageProxy)
  89.             }
  90.         }
  91.     }
  92.  
  93.     private fun allPermissionsGranted() = requiredPerms.all {
  94.         ContextCompat.checkSelfPermission(
  95.             baseContext, it) == PackageManager.PERMISSION_GRANTED
  96.     }
  97.  
  98.     override fun onRequestPermissionsResult(
  99.         requestCode: Int, permissions: Array<String>, grantResults:
  100.         IntArray) {
  101.         if (requestCode == permReqCode) {
  102.             if (allPermissionsGranted()) {
  103.                 startCamera()
  104.             } else {
  105.                 Toast.makeText(this,
  106.                     "Permissions not granted by the user.",
  107.                     Toast.LENGTH_SHORT).show()
  108.                 finish()
  109.             }
  110.         }
  111.         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
  112.     }
  113. }
Add Comment
Please, Sign In to add comment