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.
Hiç yorum yok:
Yorum Gönder