16 Şubat 2025 Pazar

Kotlinde Kameranın Çektiği Fotoğraftaki Yazıyı Canlı Okuyabilen Program

Kotlin'de bir kameranın çektiği fotoğraftaki yazıyı canlı olarak okuyup yazdırmak için, genellikle **OCR (Optical Character Recognition)** teknolojisini kullanmanız gerekecek. Bu işlem için Google'ın **ML Kit** veya **Tesseract OCR** gibi kütüphaneleri kullanabilirsiniz. Aşağıda, ML Kit ile basit bir örnek bulabilirsiniz.
 Gereksinimler:
1. Android Studio
2. Kotlin
3. Google ML Kit (Text Recognition)
 Adım Adım Uygulama:

1. Projeye ML Kit Dependency Ekleyin
`build.gradle` dosyanıza aşağıdaki bağımlılıkları ekleyin:

```gradle
dependencies {
    implementation 'com.google.mlkit:text-recognition:16.0.0'
    implementation 'com.google.mlkit:text-recognition-latin:16.0.0'
    implementation 'com.google.android.gms:play-services-mlkit-text-recognition:19.0.0'
}
```

 2. Kamera ve OCR İzinlerini Ayarlayın
`AndroidManifest.xml` dosyanıza kamera ve depolama izinlerini ekleyin:

```xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```

 3. Kamera ve OCR İşlemlerini Gerçekleştirin
Aşağıda, kameradan görüntü alıp OCR ile metni tanıyan basit bir Kotlin kodu bulunmaktadır:

```kotlin
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageAnalysis
import androidx.camera.core.ImageProxy
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.google.mlkit.vision.common.InputImage
import com.google.mlkit.vision.text.TextRecognition
import com.google.mlkit.vision.text.latin.TextRecognizerOptions

class MainActivity : AppCompatActivity() {

    private lateinit var previewView: PreviewView
    private val textRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        previewView = findViewById(R.id.previewView)

        if (allPermissionsGranted()) {
            startCamera()
        } else {
            ActivityCompat.requestPermissions(
                this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS
            )
        }
    }

    private fun startCamera() {
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)

        cameraProviderFuture.addListener({
            val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

            val preview = androidx.camera.core.Preview.Builder().build().also {
                it.setSurfaceProvider(previewView.surfaceProvider)
            }

            val imageAnalysis = ImageAnalysis.Builder()
                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                .build()
                .also {
                    it.setAnalyzer(ContextCompat.getMainExecutor(this), ::analyzeImage)
                }

            val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

            try {
                cameraProvider.unbindAll()
                cameraProvider.bindToLifecycle(
                    this, cameraSelector, preview, imageAnalysis
                )
            } catch (exc: Exception) {
                Log.e(TAG, "Camera binding failed", exc)
            }

        }, ContextCompat.getMainExecutor(this))
    }

    private fun analyzeImage(imageProxy: ImageProxy) {
        val mediaImage = imageProxy.image
        if (mediaImage != null) {
            val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)

            textRecognizer.process(image)
                .addOnSuccessListener { visionText ->
                    // Tanınan metni log'a yazdır
                    Log.d(TAG, "Recognized text: ${visionText.text}")
                    // UI'da göstermek için Toast kullan
                    Toast.makeText(this, visionText.text, Toast.LENGTH_SHORT).show()
                }
                .addOnFailureListener { e ->
                    Log.e(TAG, "Text recognition failed", e)
                }
                .addOnCompleteListener {
                    imageProxy.close()
                }
        }
    }

    private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all {
        ContextCompat.checkSelfPermission(baseContext, it) == PackageManager.PERMISSION_GRANTED
    }

    companion object {
        private const val TAG = "CameraXApp"
        private const val REQUEST_CODE_PERMISSIONS = 10
        private val REQUIRED_PERMISSIONS = arrayOf(android.Manifest.permission.CAMERA)
    }
}
```

 4. Layout Dosyasını Oluşturun
`activity_main.xml` dosyasında kamera önizlemesi için bir `PreviewView` ekleyin:

```xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.camera.view.PreviewView
        android:id="@+id/previewView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
```

 Açıklama:
- **ML Kit**: Google'ın OCR işlemleri için sağladığı bir kütüphanedir.
- **CameraX**: Kamera işlemlerini kolaylaştıran bir kütüphanedir.
- **ImageAnalysis**: Kameradan alınan görüntüleri analiz etmek için kullanılır.

Bu kod, kameradan alınan görüntülerdeki metni tanır ve log'a yazdırır. Ayrıca, tanınan metni bir `Toast` mesajı olarak da gösterir.

 Not:
- Bu örnek, temel bir uygulama içindir. Gerçek bir uygulamada, performans optimizasyonu ve hata yönetimi gibi ek özellikler eklemeniz gerekebilir.
- ML Kit, çevrimdışı çalışabilir ve oldukça hızlıdır, ancak daha karmaşık OCR ihtiyaçları için Tesseract gibi daha gelişmiş kütüphaneler de kullanabilirsiniz.

Hiç yorum yok:

Yorum Gönder