Android'de QR Kod Tarayıcı: ML Kit ile Hızlı Çözüm
ML Kit, Google'ın makine öğrenmesi kütüphanesidir ve QR kod tanıması için optimize edilmiştir. Cihazda çalışır, internet gerektirmez ve hızlıdır. Basit bir tarayıcı uygulaması yapmak için CameraX ve ML Kit'i birleştireceğiz.
İlk olarak `build.gradle` dosyasına bağımlılıkları ekle:
1dependencies {2implementation 'androidx.camera:camera-core:1.3.0'3implementation 'androidx.camera:camera-camera2:1.3.0'4implementation 'androidx.camera:camera-lifecycle:1.3.0'5implementation 'com.google.mlkit:barcode-scanning:17.1.0'6}AndroidManifest.xml'ye kamera izni ekle:
1<uses-permission android:name="android.permission.CAMERA" />Ana Activity'de kamera ve ML Kit'i konfigüre et:
1import androidx.camera.core.CameraSelector2import androidx.camera.core.ImageAnalysis3import androidx.camera.lifecycle.ProcessCameraProvider4import com.google.mlkit.vision.barcode.BarcodeScanning5import com.google.mlkit.vision.common.InputImage67class MainActivity: AppCompatActivity() {8private lateinit var cameraProvider: ProcessCameraProvider9private val scanner = BarcodeScanning.getClient()1011override fun onCreate(savedInstanceState: Bundle?) {12super.onCreate(savedInstanceState)13setContentView(R.layout.activity_main)14startCamera()15}1617private fun startCamera() {18val cameraProviderFuture = ProcessCameraProvider.getInstance(this)19cameraProviderFuture.addListener({20cameraProvider = cameraProviderFuture.result21val imageAnalysis = ImageAnalysis.Builder().setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST).build()2223imageAnalysis.setAnalyzer(Executors.newSingleThreadExecutor()) { imageProxy ->24val mediaImage = imageProxy.image25if (mediaImage!= null) {26val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)27scanner.process(image).addOnSuccessListener { barcodes ->28for (barcode in barcodes) {29Log.d("QR", "Taranmış: ${barcode.rawValue}")30}31}.addOnCompleteListener {32imageProxy.close()33}34}35}3637val preview = Preview.Builder().build()38val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA39preview.setSurfaceProvider(binding.previewView.surfaceProvider)4041cameraProvider.bindToLifecycle(this, cameraSelector, imageAnalysis, preview)42}, ContextCompat.getMainExecutor(this))43}44}Layout dosyasında PreviewView ekle (activity_main.xml):
1<?xml version="1.0" encoding="utf-8"?>2<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"3android:layout_width="match_parent"4android:layout_height="match_parent">5<androidx.camera.view.PreviewView6android:id="@+id/previewView"7android:layout_width="match_parent"8android:layout_height="match_parent" />9</FrameLayout>Beklenen çıktı: Kamera açıldığında QR kod taranır ve Logcat'te "Taranmış: [QR içeriği]" mesajı görülür.
Sık yapılan hata: Runtime izinleri kontrol etmeden kamera başlatmaya çalışmak. Android 6.0+ için `requestPermissions()` kullan. ML Kit ilk çalıştırmada modeli indirir; bu sırada biraz gecikme normal. İnternet bağlantısı gerekir ama sadece ilk kez.
0 yorum