Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MainActivity : AppCompatActivity() {
- private val permReqCode = 10
- private val requiredPerms = arrayOf(Manifest.permission.CAMERA)
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- if (allPermissionsGranted()) {
- startCamera()
- } else {
- ActivityCompat.requestPermissions(
- this, requiredPerms, permReqCode)
- }
- }
- fun recognizeText(image: InputImage, proxy: ImageProxy) {
- val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
- val result = recognizer.process(image)
- .addOnSuccessListener { visionText ->
- Log.e("OCE", "success")
- processTextBlock(visionText)
- }
- .addOnFailureListener { e ->
- Log.e("OCE", "failed ${e.toString()}")
- }
- result.addOnCompleteListener { _ -> proxy.close()}
- }
- private fun processTextBlock(result: Text) {
- val resultText = result.text
- for (block in result.textBlocks) {
- val blockText = block.text
- val blockCornerPoints = block.cornerPoints
- val blockFrame = block.boundingBox
- findViewById<TextView>(R.id.textView).text = blockText
- for (line in block.lines) {
- val lineText = line.text
- val lineCornerPoints = line.cornerPoints
- val lineFrame = line.boundingBox
- //findViewById<TextView>(R.id.textView).text = lineText
- for (element in line.elements) {
- val elementText = element.text
- val elementCornerPoints = element.cornerPoints
- val elementFrame = element.boundingBox
- //findViewById<TextView>(R.id.textView).text = elementText
- }
- }
- }
- }
- @SuppressLint("UnsafeOptInUsageError")
- private fun startCamera() {
- val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
- cameraProviderFuture.addListener(Runnable {
- val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
- // Preview
- val preview = Preview.Builder()
- .build()
- .also {
- it.setSurfaceProvider(findViewById<PreviewView>(R.id.viewFinder).surfaceProvider)
- }
- val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
- val imageAnalysis = ImageAnalysis.Builder()
- .setTargetResolution(Size(1280, 720))
- .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
- .build()
- imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(this), ImageAnalyzer())
- try {
- cameraProvider.unbindAll()
- cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, imageAnalysis, preview)
- } catch(exc: Exception) {
- Log.e("OCR", "binding failed", exc)
- }
- }, ContextCompat.getMainExecutor(this))
- }
- inner class ImageAnalyzer : ImageAnalysis.Analyzer {
- @SuppressLint("UnsafeOptInUsageError")
- override fun analyze(imageProxy: ImageProxy) {
- val mediaImage = imageProxy.image
- if (mediaImage != null) {
- val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
- recognizeText(image, imageProxy)
- }
- }
- }
- private fun allPermissionsGranted() = requiredPerms.all {
- ContextCompat.checkSelfPermission(
- baseContext, it) == PackageManager.PERMISSION_GRANTED
- }
- override fun onRequestPermissionsResult(
- requestCode: Int, permissions: Array<String>, grantResults:
- IntArray) {
- if (requestCode == permReqCode) {
- if (allPermissionsGranted()) {
- startCamera()
- } else {
- Toast.makeText(this,
- "Permissions not granted by the user.",
- Toast.LENGTH_SHORT).show()
- finish()
- }
- }
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- }
- }
Add Comment
Please, Sign In to add comment