Вимірювання та приладобудування
Розробка сканера штрих-коду та коду Qr в Ios з авокаційною авангарією
Table of Contents
Розуміння AVFoundation для сканування штрих-коду та QR-коду
Модуль «АвФундація» Apple забезпечує повнофункціональний, низький рівень інтерфейсу для роботи з аудіовізуальними медіа на пристроях iOS. Для штрих-коду та сканування QR-коду, рамка виводить клас , який може виявити широкий спектр машинно-читованих кодів в режимі реального часу від камери. Це включає QR-коди, EAN-8/13, Код 128, PDF417, Aztec та багато інших форматів. В рамках ручає важке підйому аналізу зображень та декодування коду, що дозволяє розробникам зосередитися на логіці програми, а не реалізовувати користувацькі алгоритми сканування.
AVFoundation Scan – це апаратне забезпечення, що забезпечує швидке та надійне виявлення навіть у складних умовах освітлення. Працює з передніми та задніми камерами, а зона виявлення може бути обмежена на певній області інтересу до поліпшення продуктивності та досвіду користувачів.
Налаштування сеансу камери
Серце будь-якого AVFoundation-настройка є . Цей об'єкт скопіює потік даних з камери, що вводяться до виходу метаданих. Налаштування сеансу вимагає декількох кроків котелли, які найкраще реалізуються в виділеному режимі контролера або класу менеджера.
Запитання камери
Перед тим як отримати доступ до камери, необхідно запитати про дозвіл користувача. Починаючи з iOS 10, потрібно включити ключ в файлі Info.plist з рядком, пояснивши, чому ваш додаток потребує камери. Дозвіл запитується за допомогою . Ручка як випадки – надана і відмова – і оновлення UI відповідно.
AVCaptureDevice.requestAccess(for: .video) { granted in
if granted {
// Configure and start the capture session
} else {
// Show an alert guiding the user to Settings
}
}
Створення AVCaptureSession
Після того, як дозвіл надається, миттєво ознайомтеся з . Налаштуйте свій задану задану задану дату для контролю якості відео; для сканування штрих-кодів - це хороший за замовчуванням, але ви також можете використовувати для швидкого обробки.
let session = AVCaptureSession()
session.sessionPreset = .high
Додавання введення камери
Завантажуйте відеопристрою за замовчуванням (задня камера) і створюйте . Якщо вхід не можна додавати до сеансу (наприклад, пристрій зайнятий), зловіть помилку і поставте зворотний зв'язок до користувача.
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)")
}
Додавання виходу метаданих
Створіть екземпляр, встановіть делегат (на спеціальній черги), і додайте його до сеансу. Делегат отримає виявлені об'єкти метаданих.
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]
Важливо: необхідно встановити після виходу до сеансу. Встановлення його раніше призведе до аварійного завершення.
Початок сесії
Запустіть сеанс на фоновій нитки, щоб зберегти чуйність UI. Зателефонуйте в фоновому режимі, відправивши чергу або на спеціальній серійній черзі.
DispatchQueue.global(qos: .userInitiated).async {
session.startRunning()
}
Реалізація методу видалення
Метод делегування називається, коли сканер виявляє один або кілька кодів. Цей метод отримує масив екземплярів, які потрібно відлити для доступу до декодованого рядка.
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)
}
Після успішного сканування, потрібно припинити сеанс після успішного сканування, щоб запобігти повторному виявленню. Зателефонуйте після обробки коду, і перезавантажте його при скиданнях сканера.
Обробка вигнутих кодів
Після того, як у вас є значення рядка, визначте, що дія, яка повинна прийматися на основі типу коду та вмісту. Загальні сценарії включають:
- URLs] – Відкрито в Safari або в додатку браузера за допомогою .
- Wi‐Fi тексесії] – Парсе стандартний формат () та програма підключення тематично (обов’язково додаткове заголовок).
- Коди продуктів] – Перегляд інформації про продукт через API, такі як UPC Database або власної системи інвентаризації.
- Контакти – Формати карт і створення нового контакту в адресній книзі.
- Plain text – Відображення повідомлення або копіювання в пастеризатор.
Для кожного типу коду валідувати рядок перед обробкою. Малформовані або шкідливі коди повинні ігноруватися або повідомляти про витонченість.
Кращі практики для сканування продуктивності
Щоб забезпечити легке та ефективне сканування, слідуйте цим рекомендаціям:
- – Тільки увімкніть формати коду, які потрібно для вашого додатка. Кожен додатковий формат додає обробку накладних.
- Складає регіон інтересу] – Використовуйте для визначення невеликої порції відео корму, де очікувані коди. Це різко покращує швидкість виявлення та зменшує помилкові позитивність.
- Використовувати правильні відеовагантності – зберігає пропорцію зображення камери і ідеально підходить для накладання скан-реагаторів.
- Поверніть послідовну чергу для делегатів зворотнього зв’язку – Виконайте важку обробку (наприклад, мережеві дивапи) з основної нитки, щоб зберегти UI відчуження.
- Консудераторний факел підтримки – Дозволяє користувачеві можливість переключити пальчик камери для сценаріїв низького рівня. Перевірте перед точуванням.
- Попереднє сканування після обробки – Після успішного сканування перезапустіть сеанс з короткою затримкою (наприклад, 1–2 секунд) для запобігання негайного переозброєння одного коду.
Забезпечення зворотного зв'язку користувача
До того ж, до цього часу, до якого входять слухові та слухові кулі. Впроваджуйте ці механізми зворотного зв’язку, щоб довести користувача:
- Visual overlay] – Складіть родзинку навколо виявленого коду за допомогою властивості . Це вимагає перетворення координат метаданих для перегляду координат через .
- Animation] – Грати тонку анімацію (наприклад, усадку кордону) при визнанні коду.
- Сунд] – Грати звук системи за допомогою з коротким, позитивним тоном, як (звучать “Mail Sent).
- Haptic зворотний зв'язок] – Використовуйте або для тонкої вібрації.
- Скандинавський гід] – Відображення напівпрозорого прямокутника з кутовими напрямами, щоб допомогти користувачам центрувати код.
Помилка Handling і Edge Cases
Ми гарантуємо, що Ваш сканер не гарантує, що ваші дані не відповідають дійсності.
- Camera 0. – Перевірте і на пристрої. На iPod сенсорний або тренажер без камери присутній змістове повідомлення.
- Попередня відмова] – Показати сповіщення з кнопкою, яка відкриває налаштування через .
- ]Пропускна відмова конфігурації – Лог помилки, коли або повертає . Це може статися, якщо інший додаток використовує камеру на фоні (rare).
- Low light або розмитих зображень – Зменшити область виявлення відсотків і забезпечити ввімкнено автофокус камери. Промінь користувача для збільшення світла або стійкого пристрою.
- Invalid або unsupported type код – властивість може не підтримувати всі формати на всіх пристроях. Використовуйте для сумісності запиту до налаштування.
Тестування пристроїв Across
Продуктивність сканування штрих-кодів AVFoundation значно змінюється по генераціях iPhone і iPad. Перевірте вашу реалізацію:
- Старші пристрої (iPhone 6s, IPad Air 2) – Це повільні процесори і можуть боротися з пресетами високої роздільної здатності. Використовуйте для оптимального балансу на старшому апараті.
- Пристрої з різною оптикою камери - iPhone з телевізором або ультра-широкими камерами можуть фокусуватися по-різному. Завжди використовуйте ширококутну камеру за замовчуванням для сканування штрих-кодів.
- Низькосвітлові середовища – Тест в умовах дім, щоб забезпечити видимість скан-накладки та торкнутися роботи.
- Різні розміри коду і орієнтації – Спробуйте коди від 1 см × 1 см наклейки до великих плакатів, і тестовий ландшафт проти портретного сканування.
Розширені характеристики
Для виробничих додатків, враховуйте, додаючи функції, такі як безперервне сканування (понад кілька кодів в одному сеансі), управління золотими, або інтеграцію з ARKit для доповнених реальності накладок. Якщо вам потрібно обробляти коди з зображень (наприклад, фото бібліотека), скористайтеся або з бази зору, хоча AVFoundation зазвичай швидше для відео в режимі реального часу.
Для більш глибокого занурення в налаштування AVFoundation, див. у Apple Налаштування сеансу захоплення керівництво та AVCaptureMetadataOutput документація. Ви також можете знайти повний зразок проекту в Scanning Barcodes з AVCaptureMetadataOutput статті.
Ви можете надати полірований, високопродуктивний штрих-код та сканер QR-коду, який посилює зручність та надійність вашого додатка iOS.