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.

Yorumlar

Tarih Bilgini Test Etmeye Hazır mısın?

Avrupa'dan Afrika'ya, Asya'dan Amerika ve İslam tarihine uzanan 40 soruluk dev genel kültür testimiz yayında!

🏆 Yarışmayı Tam Sayfa Aç
PDF Okuyucu İkonu

Hızlı PDF Okuyucu

Hızlı, hafif ve kullanıcı dostu PDF görüntüleme deneyimi.

Google Play'den İndir
Dersimiz Tarih

Dersimiz Tarih Uygulaması

Tarih Derslerinden Tarih Alanında Hemen Herşeye Kadar Dijital Tarih Bilgi Merkezi.

Google Play'den İndir

Bu blogdaki popüler yayınlar

YouTube ile Web Sitesi SEO'su: Kapsamlı Strateji Rehberi

Uygulama Reklam Butonu