Table of Contents
Viivakoodin ja QR-koodin skannauksen AVFounding
Apple.S AVFounding framework tarjoaa täyden ja matalan tason käyttöliittymän, joka toimii audiovisuaalisten median kanssa iOS-laitteissa. Viivakoodia ja QR-koodiskannausta varten kehys paljastaa [-luokan, joka voi havaita laajan valikoiman koneellisesti luettavia koodeja reaaliaikaisesti kamerasyötteestä. Tämä sisältää QR-koodit, EAN-8/13, Code 128, PDF417, Aztec ja monet muut muodot. Kehys käsittelee kuvan raskasta nostoa ja koodin dekoodaus, jolloin kehittäjät voivat keskittyä sovelluslogiikkaan sen sijaan, että ottaisivat käyttöön mukautetun skannausalgoritmin.
AVFounding-skannaus on modernissa käytössä, ja se tarjoaa nopean ja luotettavan havaitsemisen myös haastavissa valaistusolosuhteissa. Se toimii sekä etu- että takakameroilla, ja havaintoalue voidaan rajoittaa tietylle alueelle suorituskyvyn ja käyttäjäkokemuksen parantamiseksi.
Kameran kaappaussession asetukset
Minkä tahansa AVFounducation-pohjaisen skannerin ydin on . Tämä objekti järjestää datavirran kamerasyötteestä metadatalähtöön. Istunnon perustaminen edellyttää useita kattilalevyvaiheita, jotka on parasta toteuttaa omassa katseluohjaimessa tai managerin luokassa.
Pyydän kameralupaa
Ennen kameran käyttöä sinun on pyydettävä käyttölupaa. Aloita iOS 10:stä, sinun on sisällytettävä [-näppäin info.plist-tiedostoosi merkkijonolla, joka selittää, miksi sovelluksesi tarvitsee kameraa. Lupaa pyydetään käyttämällä [. Hoida molemmat tapaukset .
AVCaptureDevice.requestAccess(for: .video) { granted in
if granted {
// Configure and start the capture session
} else {
// Show an alert guiding the user to Settings
}
}
AVCaptureSession-ohjelman luominen
Kun lupa on myönnetty, instantioi []. Määritä sen istunto, jonka esiasetettu ohjaamaan videon laatua; viivakoodin skannaus [ on hyvä oletus, mutta voit myös käyttää [] nopeampaan käsittelyyn.
let session = AVCaptureSession()
session.sessionPreset = .high
Lisään kamerasyötteen
Hanki oletusvideolaite (takakamera) ja luo . Jos tuloa ei voida lisätä istuntoon (esim. laite on varattu), kiinnitä virhe ja anna palautetta käyttäjälle.
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)")
}
Lisään metadatan ulostulon
Luo instanssi, aseta sen edustaja (omistettu sarjajonossa) ja lisää se istuntoon. Valtuutettu saa havaittuja metadataesineitä.
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]
Tärkeä: on asetettava sen jälkeen, kun tuloste on lisätty istuntoon.
Istunto alkaa
Aja istunto taustalangalla, jotta käyttöliittymä pysyy aktiivisena. Soita taustalähetyksen jonossa tai omalla sarjajonolla.
DispatchQueue.global(qos: .userInitiated).async {
session.startRunning()
}
Delegoidun menetelmän täytäntöönpano
Skannerilla on oltava vähintään yksi koodi, joka on merkitty tunnuksella .
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)
}
Se on yleinen keskeyttää istunnon jälkeen onnistunut skannaus estää toistuvia havaintoja. Soita jälkeen käsitellä koodia, ja käynnistää sen uudelleen, kun käyttäjä nollaa skanneri.
Tunnistetut koodit
Kun sinulla on merkkijonoarvo, määritä mitä toimia tehdä koodityypin ja sisällön perusteella.
- URLs .
- Wi-Fi-tunnukset . ... ...................................................................................................................................................................................................................................
- Tuotekoodit[ ... .........................................................................................................................................................................................................................................
- Ota yhteyttä [ ... .........................................................................................................................................................................................................................................
- Pelaa teksti[ .
Kunkin koodityypin osalta validoi merkkijono ennen käsittelyä. Epämuodostuneet tai haitalliset koodit on jätettävä huomiotta tai niistä on ilmoitettava hienovaraisesti.
Parhaat käytännöt suorituskyvyn skannaamiseksi
Skannauksen sujuvuuden ja tehokkuuden varmistamiseksi on noudatettava seuraavia ohjeita:
- Limit metadata objektityypit[ ... Ota vain käyttöön koodiformaatit sovelluksesi todella tarvitsee. Jokainen ylimääräinen muoto lisää käsittelyn yläpuolella.
- Aseta alue, jota asia koskee[ . Käytä määrittääksesi pienen osan videosyötteestä, jossa koodit ovat odotettavissa. Tämä parantaa huomattavasti havaintonopeutta ja vähentää vääriä positiivisia tuloksia.
- Käytä oikeaa videopainovoimaa[] . [.] pitää kameran esikatselun suhteellisena ja sopii erinomaisesti skannausalueen yliviivaukseen.
- Vedä sarjajono valtuutettujen puhelujen [ .
- ]Kohdelampputuki[ . Salli käyttäjän vaihtaa kameran lamppu matalavaloskenaarioiden varalta. Tarkista ennen tikkausta.
- Nollaa skannaus käsittelyn jälkeen[ . Kun onnistuit skannaamaan, käynnistä istunto uudelleen lyhyellä viiveellä (esim. 1... 2 sekuntia), jotta saman koodin välitön uudelleen havaitseminen ei onnistuisi.
Käyttäjän palaute
Hyvä skannauskokemus sisältää visuaalisia ja kuuloisia vihjeitä. Toteuta nämä palautemekanismit käyttäjän ohjeeksi:
- ]Visual overlay[ . Piirrä näkyvissä oleva suorakulmio havaittujen koodien ympärille käyttäen []-ominaisuutta. Tämä edellyttää metatietojen koordinaattien muuntamista katsellaksesi koordinaatteja .
- Animaatio[ ... ........................................................................................................................................................................................................................................
- Sound ... ...........................................................................................................................................................................................................................................
- Haptinen palaute[] .
- Skannaa alue opas[ . .. Näytä läpikuultava suorakulmio kulmaoppailla auttaa käyttäjiä keskittämään koodin.
Virheiden käsittely ja sivuseikka
Vahva virhekäsittely varmistaa skannerin rappeutumisen hienovaraisesti, kun asiat menevät pieleen.
- Kamera ei saatavilla[ . Tarkista ja laitteessa. iPod-kosketuksessa tai simulaattorissa ilman kameraa, esitä mielekäs viesti.
- Lupa evätty[] ... Näytä hälytys painikkeella, joka avaa Asetukset .
- Session-asetusvirhe[ ... ......................................................................................................................................................................................................................................
- Hiljainen valo tai samea kuva[ . ... Vähennä havaintoaluetta ja varmista kameran automaattitarkennus on käytössä.
- ]Vähän tai tukemattomat koodityypit[] ... ominaisuus ei saa tukea kaikkia formaatteja kaikissa laitteissa.
Testaus eri laitteilla
AVFountion viivakoodi skannaus suorituskyky vaihtelee merkittävästi eri sukupolvien iPhone ja iPad. Testaa toteutusta:
- Vanhemmat laitteet (iPhone 6s, iPad Air 2) ... ...Näissä on hitaammat prosessorit ja ne saattavat kamppailla korkean resoluution esiasetusten kanssa. Käytä optimaaliseen tasapainoon vanhoilla laitteistoilla.
- Laitteet, joilla on eri kameraoptiikka ... iPhonet, joissa on telephoto tai ultra-laaja kamera, voivat keskittyä eri tavalla. Käytä aina oletuslaajakulmakameraa viivakoodin skannaukseen.
- Matalan valon ympäristöt ... Testaa hämärissä olosuhteissa, jotta skannaus peitto pysyy näkyvissä ja soihtu toimii.
- Eri koot ja suuntaviivat . Kokeile koodia 1 cm × 1 cm tarroja suuriin julisteisiin ja testimaisema vs. muotokuvan skannaus.
Lisähuomiot
Tuotannossa kannattaa lisätä ominaisuuksia, kuten jatkuva skannaus (saattaa useita koodeja yhteen istuntoon), zoomausohjaimet tai integrointi ARKitin kanssa lisätyn todellisuuden peitoamiseen. Jos täytyy käsitellä hiljaa olevien kuvien (esim. kuvakirjaston) koodeja, käytä tai [ Vision kehyksestä, vaikka AVFounding on yleensä nopeampi reaaliaikaisessa videossa.
Jos haluat syvemmän sukeltaa AVFounding-asetuksiin, katso Apple... Stocking Up a Capture Session[] -opas ja AVCaptureMetadataOutput documentation[]. Voit myös löytää täydellisen näyteprojektin []-artikkelistaSkannaus Barcodes AVCaptureMetadataOutput -artikkelissa.
Noudattamalla näitä ohjeita ja testaamalla perusteellisesti toteutustasi, voit toimittaa kiillotetun, suorituskykyisen viivakoodin ja QR-koodin skannerin, joka parantaa iOS-sovelluksen käytettävyyttä ja luotettavuutta.