Fotoğraflardaki Yazıyı Okuyan Kotlin Android Program (QCR) Uygulaması Kodları

Kotlin ile fotoğraftaki yazıyı metne çevirecek (OCR - Optical Character Recognition) bir program yazmak için, genellikle Google'ın **ML Kit** veya **Tesseract OCR** gibi kütüphaneler kullanılır. Bu örnekte, Google ML Kit'i kullanarak basit bir OCR uygulaması geliştireceğiz. Bu uygulama, kullanıcının bir fotoğraf seçmesine ve fotoğraftaki metni çevirmesine olanak tanır.

---

### 1. Proje Kurulumu
- Android Studio'da yeni bir proje oluşturun.
- `Empty Activity` şablonunu seçin.

---

### 2. Gerekli Bağımlılıkları Ekleme
- `build.gradle` dosyasına ML Kit bağımlılıklarını ekleyin:

```gradle
dependencies {

implementation ("com.google.android.gms:play-services-mlkit-text-recognition:19.0.0")
implementation ("androidx.activity:activity-ktx:1.7.0")
implementation ("androidx.fragment:fragment-ktx:1.6.0")

}
```

---

### 3. XML Layout Dosyası Oluşturma
- `res/layout/activity_main.xml` dosyasını açın ve aşağıdaki gibi bir kullanıcı arayüzü tasarlayın:

```xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<Button
android:id="@+id/btnSelectImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Fotoğraf Seç" />

<ImageView
android:id="@+id/ivSelectedImage"
android:layout_width="match_parent"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:contentDescription="Seçilen Fotoğraf" />

<TextView
android:id="@+id/tvRecognizedText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tanınan Metin"
android:padding="8dp"
android:textSize="16sp" />


</LinearLayout>
---

### 4. Kotlin Kodları ile OCR İşlemi
- `MainActivity.kt` dosyasını açın ve aşağıdaki gibi kodlayın:
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.provider.MediaStore
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import com.google.mlkit.vision.common.InputImage
import com.google.mlkit.vision.text.TextRecognition
import com.google.mlkit.vision.text.latin.TextRecognizerOptions
import java.io.IOException


class MainActivity : AppCompatActivity() {

private lateinit var btnSelectImage: Button
private lateinit var ivSelectedImage: ImageView
private lateinit var tvRecognizedText: TextView

private val selectImageLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data: Intent? = result.data
val imageUri: Uri? = data?.data
if (imageUri != null) {
ivSelectedImage.setImageURI(imageUri)
processImageFromUri(imageUri)
}
}
}

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

btnSelectImage = findViewById(R.id.btnSelectImage)
ivSelectedImage = findViewById(R.id.ivSelectedImage)
tvRecognizedText = findViewById(R.id.tvRecognizedText)

btnSelectImage.setOnClickListener {
openImagePicker()
}
}

private fun openImagePicker() {
val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
selectImageLauncher.launch(intent)
}

private fun processImageFromUri(imageUri: Uri) {
try {
val bitmap: Bitmap = MediaStore.Images.Media.getBitmap(contentResolver, imageUri)
recognizeTextFromImage(bitmap)
} catch (e: IOException) {
e.printStackTrace()
Toast.makeText(this, "Fotoğraf yüklenirken hata oluştu!", Toast.LENGTH_SHORT).show()
}
}

private fun recognizeTextFromImage(bitmap: Bitmap) {
val image = InputImage.fromBitmap(bitmap, 0)
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

recognizer.process(image)
.addOnSuccessListener { visionText ->
tvRecognizedText.text = visionText.text
}
.addOnFailureListener { e ->
e.printStackTrace()
Toast.makeText(this, "Metin tanıma başarısız!", Toast.LENGTH_SHORT).show()
}
}
}

```

---

### 5. İzinler
- Galeriden fotoğraf seçmek,gerektiğinde internete bağlanabilmek ve hafızayı kullanabilmek için `AndroidManifest.xml` dosyasına aşağıdaki izinleri ekleyin:

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

<uses-permission android:name="android.permission.CAMERA"
tools:ignore="PermissionImpliesUnsupportedChromeOsHardware" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>

### 6. Uygulamayı Çalıştırın
- Uygulamayı çalıştırın ve bir fotoğraf seçin. Fotoğraftaki metin, `TextView`'da görüntülenecektir.

---

### Açıklamalar:
1. **Fotoğraf Seçme**: `ActivityResultContracts` API'si kullanılarak galeriden fotoğraf seçilir.
2. **Metin Tanıma**: Google ML Kit'in `TextRecognition` API'si kullanılarak fotoğraftaki metin tanınır.
3. **Hata Yönetimi**: Fotoğraf yükleme veya metin tanıma sırasında oluşabilecek hatalar için `try-catch` blokları ve `Toast` mesajları kullanılmıştır.

Bu örnek, temel bir OCR uygulamasıdır. Daha gelişmiş özellikler (örneğin, kamera ile canlı metin tanıma) eklemek için ML Kit'in diğer özelliklerini inceleyebilirsiniz.

Yorumlar

Bu blogdaki popüler yayınlar

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

Uygulama Reklam Butonu