Ölçme ve Değerlendirme
Ios'ta bir barkod ve Qr Kod Tarayıcısını Avfoundation ile Geliştirme
Table of Contents
Barınma ve QR Code Scanning için AVFoundation'ı Anlayın
Apple'ın AVFoundation framework, kameradan gelen görsel medya ile çalışmak için tam zamanlı, düşük seviyeli bir arayüz sunar. barkod ve QR kodu tarama için, çerçeve görüntü analizi ve kod silmenin ağır kaldırmasını ortaya koyar, kameradan gerçek zamanlı olarak uygulama mantığına odaklanmaya olanak sağlar.This contains QR code, PDF417, Aztek, and birçok başka format.
AVFoundation tarama, modern cihazlarda donanıma dayalı, zorlu aydınlatma koşullarında bile hızlı ve güvenilir bir algılama sunmaktır. Hem ön hem de arka kameralarla çalışır ve algılama alanı performansı ve kullanıcı deneyimini geliştirmek için belirli bir ilgi alanına kapılabilir.
Kamera Yakalama Seanı Ayarlayın
Herhangi bir AVFoundation-based tarayıcının çekirdeği, özel bir görüntü kontrol veya yönetici sınıfında uygulanan birkaç kazan plaka adımını ayarlamak.
Kamera İzin Vermek
Kameraya girmeden önce, kullanıcı izni talep etmelisiniz. iOS 10'da başlayın, Info.plist dosyasınızdaki anahtarın, uygulamanızın neden kameraya ihtiyaç duyduğunı açıklayan bir dize ile güncelleştirilmesi gerekir. Permission is requested usingFLT:3).
AVCaptureDevice.requestAccess(for: .video) { granted in
if granted {
// Configure and start the capture session
} else {
// Show an alert guiding the user to Settings
}
}
AVCaptureSession
İzin verildiğinde, anında bir İLDİT:5. Video kalitesini kontrol etmek için oturum açmasını yapılandırın; barkod taraması için, ) iyi bir varsayılandır, ancak daha hızlı işleme için de kullanırsınız.
let session = AVCaptureSession()
session.sessionPreset = .high
Kamera Girişi Ekleyin
Varsayılan video cihazı ( arka kamera) alın ve birİLFLT:9 oluşturmak. Eğer giriş oturuma eklenemezse (örneğin, cihaz meşgul), hatayı yakalamak ve kullanıcıya geri bildirim sunmak.
guard let camera = AVCaptureDevice.default(for: .video) else { return }
do {
let input = try AVCaptureDeviceInput(device: camera)
guard session.canAddInput(input) else { return }
session.addInput(input)
} catch {
print("Camera input error: \(error.localizedDescription)")
}
Metadata Çıktısını Ekle
Örneğin birFL: 16. oluşturun, delegesini (bir özel bir seri kuyruk) ayarlar ve oturuma eklenecektir.
let metadataOutput = AVCaptureMetadataOutput()
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
guard session.canAddOutput(metadataOutput) else { return }
session.addOutput(metadataOutput)
// Specify which code types to detect – must be done after the output is added
metadataOutput.metadataObjectTypes = [.qr, .ean13, .code128, .pdf417]
Önemli:FLT:13, çıktının oturuma eklendiğinden sonra ayarlanmalıdır. Daha önce ayarlama bir kazaya neden olacaktır.
Oturuma başlayın
Oturumu UI'ye duyarlı tutmak için arka plandaki bir iple izleyin. CallETHFLT:14" bir arka plan kuyruğunda veya özel bir seri kuyruğunda.
DispatchQueue.global(qos: .userInitiated).async {
session.startRunning()
}
Delegate Yöntemini Uygulamayın
Deleksiyon yöntemi, tarayıcının bir veya daha fazla kodu tespit ettiğinde çağrılmaktadır. Bu yöntem, kodlanmış dizeye erişmek için kullanılan bir dizi ESFLT:17 alır.
func metadataOutput(_ output: AVCaptureMetadataOutput,
didOutput metadataObjects: [AVMetadataObject],
from connection: AVCaptureConnection) {
// Process only the first detected code (most common pattern)
guard let metadataObject = metadataObjects.first,
let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject,
let stringValue = readableObject.stringValue else { return }
// Use the scanned value (e.g., display, validate, or send to server)
handleScannedCode(stringValue, type: readableObject.type)
}
Oturumu tekrarlanan algılamaları önlemek için başarılı bir taramadan sonra durdurmak yaygındır. CallurFLT:20 kodu kullandıktan sonra ve kullanıcının tarayıcıyı sıfırlaması sırasında yeniden başlatması gerekir.
Tanımlanmış Kodlar
Bir kere dize değeriniz varsa, kod tipi ve içeriğine dayanarak hangi eylemi belirlemeniz gerekir. Common scenarios şunları içerir:
- [FONT:0]URLs [DÜT:1] – Safari'de açın veya a in-app browser using ESFLT:21).
- [FONT=0)Wi-Fi kimlikleri) - Standart format () ve programmatik olarak (requires ek entitlement) bağlanır.
- [FONT:0)Ürün kodları[[DÜT:1) - Ürün bilgilerini a API aracılığıyla arayınız:2.Ücret Veritabanı[[DÜDÜ:3) veya kendi envanter sisteminiz.
- [FONT:0)İletişim bilgi - Parse vCard veya MeCard formatları ve adres kitabında yeni bir iletişim oluşturmak.
- [FONT:0]Plain text[[Dönemli: 1)|Bir uyarıda veya yapıştırmaya Ekran.
Her kod türü için, işlemeden önce dizeyi doğrulayın. Malform veya kötü niyetli kodlar görmezden gelin veya değerli raporlanmalıdır.
Scanning Performansı için En İyi Uygulamalar
Düzgün ve verimli tarama sağlamak için, bu yönergeleri takip edin:
- [FONT=0]Limit metadata nesne türü[Dönem: 1) Yalnızca uygulamanızın aslında ihtiyaç duyduğu kod formatlarını etkinleştirin.Her ekstra format işleme ekini ekliyor.
- [FONT:0]Bir ilgi alanı[[Dönetici: 1 ) – UseETHFLT:23), kodların beklendiği video beslemesinin küçük bir kısmını tanımlamak için.Bu dramatik olarak algılama hızını artırır ve yanlış pozitifleri azaltır.
- [FONT=0] Doğru video yerçekimini kullanın [Döntgen: 1) [Dönetici:0) kamerayı doğru bir şekilde doğru şekilde takip eder ve aşırı tarama kılavuzları için idealdir.
- [FONT=0]Bir seri sırayı delege çağrısı için ayırın[[[Dönder: 1) – Ağır işleme (örneğin, ağ aramaları) UI yanıtını tutmak için ana threadden çıkarın.
- [FONT=0]Consider support) - Kullanıcının kameranın yüksek ışık senaryoları için tokşamasına izin verin.| CheckFLT:25).
- [FONT:0]Reset tarama işlemine ([Dönetici: 1)) - Başarılı bir taramadan sonra, seansı kısa bir gecikme ile yeniden başlatma (örneğin, 1-2 saniye) aynı kodun hemen tekrar tekrar tekrar tekrarlanmasını engellemek için.
Kullanıcı Geri Bildirimi
İyi bir tarama deneyimi, kullanıcıyı yönlendirmek için bu geri bildirim mekanizmalarının uygulanmasına görsel ve denetçileri içerir:
- [FONT=0)Visual overlay[[Dönemli)[[[Dönemli)))))))))))))))))) Bu, metadata koordinatlarını kullanarak algılamayı gerektirir.
- [FONT=0]Animation[[[Dönetici: 1 ) – Bir kod kabul edildiğinde ince bir animasyon oyna (örneğin, daralma sınırı).
- [FONT:0]Sound[DÜDÜT:1) – Kısa, pozitif ton gibi bir sistem sesi oyna (Mail Sent” ses).
- [FONT:0)Haptic geri bildirim[[Dönetici: 1 ) - İnce bir titreşim için [[Döneticileri kullanın.
- [FONT:0)Scan alanı rehberi[[[Dönetici: 1))[[Döneticileri göster) kullanıcıların kodu merkeze yardımcı olmak için köşe kılavuzları ile bir translucent ret bok.
Hata işleme ve Edge Cases
Robust hatası işlemi, tarayıcınızın yanlış gittiğinde lütufta olmasını sağlar.
- [FONT:0]Camera mevcut değil [Dönetici: 1 ) – Kontrol|Dahili: 0:45|Sesli bir kamera olmadan, bir kamera olmadan iPod touch veya simülatöründe, anlamlı bir mesaj mevcut.
- [FONT:0) İzin[[DÜDÜT:1)[[[0] - Ayarları açabilen bir düğme ile bir uyarı göster.
- [FONT:0]Session configuration failure[[Dönetici: 1 ) – Log hataları ne zaman [FONTD:36) veya [[FONTD:37) geri dönerler.
- [[Düzücük ışık veya bulanık görüntüler[[Dönetici:0) Düşük ışık veya bulanık görüntüler[Döntgen: 0,0) Düşük ışık veya bulanık görüntüler[Dönetici: 2) - Dikkatin tespit bölgesini azaltır ve kamera otomatikfocusu etkinleştirilir. Cihazın ışığı artırmak için kullanıcıyı uyarır.
- [FONT:0]Invalid veya desteklenmemiş kod türleri) – TheurFLT:39) mülkiyet tüm cihazlarda tüm formatları destekleymeyebilir.UseENFLT:40, ayarlamadan önce uyumluluk için.
Test Across Cihazları
AVFoundation barkod tarama performansı iPhone ve iPad nesiller boyunca önemli ölçüde değişir: Uygulamanızı test edin:
- Yaşlı cihazlar (iPhone 6s, iPad Air 2) – Bunlar daha yavaş işlemciler var ve yüksek çözünürlüklü başlangıçlarla mücadele edebilir. UseurFLT:41) daha eski donanımda en iyi denge için.
- Farklı kamera optikleri olan cihazlar – telefoto veya ultra geniş kameralarla iPhonelar farklı odaklanabilir. Her zaman barkod tarama için varsayılan geniş ekran kamerayı kullanabilir.
- Düşük ışık ortamları - Taramayı aşırılamanın görünür kalmasını sağlamak için dim koşullarında test edin ve toggle çalışır.
- Çeşitli kod boyutları ve yönelimleri - 1 cm × 1 cm çıkartmalarından büyük posterlere kodları deneyin ve manzarayı vs. portre taramasını test edin.
Gelişmiş Tahminler
Üretim uygulamaları için sürekli tarama gibi özellikleri eklemeyi düşünün (bir seansta birden fazla koda sahip olmak), artırılmış gerçeklik için ARKit ile artırılmış gerçeklik aşırılıkları için, ancak hala görüntülerden kodlar işlemeniz gerekir (örneğin, fotoğraf kütüphanesi), kullanımdan yararlanın.)
Daha derin bir şekilde AVFoundation konfigürasyonuna atla, Apple'ın 03.Öyle:0) Bir yakalama oturumunu (FLT:1) izlemek ve [[Dönetici:2)AVCaptureMetadataOutput Belgeleri)[Üye Olmayanlar İçin Tam Bir Örnek Projeyi Bulabilirsiniz.
Bu yönergeleri takip ederek ve uygulamanızı tamamen test ederek, iOS uygulamanızın kullanılabilirliğini ve güvenilirliğini artıran bir parlatılmış, yüksek performanslı barkod ve QR kodu tarayıcısını teslim edebilirsiniz.