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:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1import androidx.camera.core.CameraSelector
2import androidx.camera.core.ImageAnalysis
3import androidx.camera.lifecycle.ProcessCameraProvider
4import com.google.mlkit.vision.barcode.BarcodeScanning
5import com.google.mlkit.vision.common.InputImage
6
7class MainActivity: AppCompatActivity() {
8private lateinit var cameraProvider: ProcessCameraProvider
9private val scanner = BarcodeScanning.getClient()
10
11override fun onCreate(savedInstanceState: Bundle?) {
12super.onCreate(savedInstanceState)
13setContentView(R.layout.activity_main)
14startCamera()
15}
16
17private fun startCamera() {
18val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
19cameraProviderFuture.addListener({
20cameraProvider = cameraProviderFuture.result
21val imageAnalysis = ImageAnalysis.Builder().setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST).build()
22
23imageAnalysis.setAnalyzer(Executors.newSingleThreadExecutor()) { imageProxy ->
24val mediaImage = imageProxy.image
25if (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}
36
37val preview = Preview.Builder().build()
38val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
39preview.setSurfaceProvider(binding.previewView.surfaceProvider)
40
41cameraProvider.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.PreviewView
6android: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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz