درک AVFoundation برای اسکن بارکد و QR Code

چارچوب AVFoundation اپل یک رابط کامل و سطح پایین برای کار با رسانه های صوتی و بصری بر روی دستگاه های iOS فراهم می کند.برای بارکد و اسکن کد QR، چارچوب اجرای (FLT:0 کلاس، که می تواند طیف گسترده ای از کدهای قابل خواندن ماشین را در زمان واقعی از فید دوربین تشخیص دهد، این شامل کدهای QR، EAN-8، کد گذاری کد گذاری، و تجزیه و تحلیل های سنگین، به جای حذف کد های نوار کد گذاری کد گذاری، کد گذاری کد گذاری کد گذاری کد گذاری کد گذاری کد گذاری کد گذاری کد گذاری، و سایر فایل های گرافیکی.

اسکن AVFoundation سخت افزار در دستگاه های مدرن، ارائه سریع و قابل اعتماد تشخیص حتی در شرایط نورپردازی چالش برانگیز کار می کند، و منطقه تشخیص می تواند به یک منطقه خاص از علاقه به بهبود عملکرد و تجربه کاربر محدود شود.

دانلود بازی The Camera Capture Session

هسته هر اسکنر AVFoundation مبتنی بر آن است که [FLT 1]، این شی جریان داده ها را از ورودی دوربین به خروجی متاداده هدایت می کند. تنظیم جلسه نیاز به چندین گام دیگ بخار دارد که بهترین آنها در یک کنترل کننده دید یا کلاس مدیر اختصاصی اجرا می شوند.

درخواست مجوز دوربین

قبل از دسترسی به دوربین، باید از مجوز کاربر درخواست کنید. شروع در iOS 10، شما باید کلید در فایل Info.plist خود را با یک رشته توضیح دهید که چرا برنامه شما نیاز به مجوز دوربین دارد استفاده از (FLT:3) هر دو مورد - اعطا و رد - و به روز رسانی 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

هنگامی که مجوز داده می شود، یک پیش فرض (FLT:5) را تنظیم کنید تا کیفیت ویدیو را کنترل کند؛ برای اسکن بارکد (FLT:6) پیش فرض خوبی است، اما شما همچنین می توانید از [FLT7] برای پردازش سریع تر استفاده کنید.

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)")
}

اضافه کردن metadata Output Output

برای مثال، یک بار از آن استفاده کنید و به آن اضافه کنید.

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 پاسخگو باشد. Call (FLT:14) در یک صف ارسال پس زمینه یا در یک صف سریال اختصاصی.

DispatchQueue.global(qos: .userInitiated).async {
 session.startRunning()
}

پیاده سازی روش Delegate

روش نمایندگی (FLT:16) هر زمان که اسکنر یک یا چند کد را تشخیص دهد، نامیده می شود.این روش آرایه ای از موارد را دریافت می کند که شما باید برای دسترسی به رشته رمزگشایی شده، آن را به کار گیرید.

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)
}

معمول است که پس از اسکن موفق، جلسه را متوقف کنید تا از تشخیص های مکرر جلوگیری شود. Call (FLT:20) پس از اجرای کد، و آن را زمانی که کاربر اسکنر را تنظیم می کند، مجدداً شروع کنید.

مدیریت کدهای شناسایی شده

هنگامی که شما ارزش رشته را دارید، تعیین کنید که چه اقداماتی بر اساس نوع کد و محتوا انجام دهید.

  • [[۱] [۱۰] [۱۰] [۱۰] [۱]] [۱]] [۱]] [۱] [۱]] [۱]] [۱]] [۱]] [۱] [۱۰] [۱]]] [۱] [۱]] [۱]] [۱] [۱]] [۱]] [۱] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱]]] [۱] [۱] [۱] [۱] [۱]]]]] [۱]]]] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱] [۱]] [۱] [۱] [بر [بر [بر روی [بر روی [بر [بر [بر روی [بر روی [بر روی [بر روی [بر روی [بر روی [بر روی [بر [بر روی [بر روی [بر روی [بر روی [بر روی [بر روی [بر روی [بر
  • [[۱] [۱۰] [۱] [۱۰] [۱]] [۱]] [۱]] [[۱۰]]] [[۱۰]]]] [۱]] [۱]] [۱]]] [[۲]]]] [[[۲]]]]]] [۲]]] [۲]] [۲]] [۲]] [۲]] [۱] [۲]] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵] [۵]]]] [۵]]] [۱] [[[[[[[[۲]]]]]]]]]]]]]]]]]]]]]]]] [[[[[[[[[[[[[[[[[[[[۳]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] [۳]]]]]]]] [۲]]]]] [[[[[
  • کدهای محصول - اطلاعات محصول را از طریق یک API مانند پایگاه داده UPC] یا سیستم موجودی خود مشاهده کنید.
  • اطلاعات تماس - Parse vCard یا MeCard فرمت و ایجاد یک تماس جدید در کتاب آدرس.
  • [در این باره] در متن (FLT:0) و یا در یک هشدار یا کپی برای چسباندن صفحه نمایش داده می شود.

برای هر نوع کد، قبل از پردازش، اعتبار رشته را تأیید کنید.کد های مخرب یا مخرب باید نادیده گرفته شوند یا به طور ماهرانه گزارش شوند.

بهترین روش ها برای اسکن عملکرد

برای اطمینان از اسکن صاف و کارآمد، این دستورالعمل ها را دنبال کنید:

  • انواع اشیاء متاداده را [FLT 1] - فقط فرمت های کد برنامه خود را در واقع نیاز است.
  • یک منطقه از علاقه را تنظیم کنید، از برای تعریف بخش کوچکی از خوراک ویدئویی که انتظار می رود کد ها به طور چشمگیری سرعت تشخیص را بهبود می بخشد و مثبت کاذب را کاهش می دهد، استفاده کنید.
  • استفاده از جاذبه ویدیو صحیح پیش نمایش دوربین را متناسب نگه می دارد و برای راهنمای های Overlaying Scan-area ایده آل است.
  • یک صف زنجیره ای برای فراخوانی های نماینده - انجام پردازش سنگین (به عنوان مثال، شبکه جستجو) از موضوع اصلی برای حفظ UI پاسخگو.
  • پشتیبانی از مشعل های هشدار دهنده [FLT 1] - اجازه دهید کاربر به پرتاب مشعل دوربین برای سناریوهای کم نور.
  • پس از انجام اسکن تنظیم پس از اسکن موفق، جلسه را با تاخیر کوتاه (به عنوان مثال، 1 تا 2 ثانیه) برای جلوگیری از شناسایی مجدد فوری از همان کد، شروع کنید.

ارائه بازخورد کاربر

یک تجربه اسکن خوب شامل نشانه های بصری و شنوایی است که این مکانیزم های بازخورد را برای هدایت کاربر به کار می برد:

  • [[۱] [۱۰] [[۱]]] [[۱۰]]] [[۱]]]] [[۱]]] [[۱۰]]]] [[۱۰]]] [[۱۰]]]] [[۱۰]]] [[۳]]]] [۳]] [۲]]] [۳] [۳]] [۳] [۳]] [۳] [۳] [۳] [و [این [به [مشرکانتِ [مشرکانتِ [مِ [مِ [مِ [مشرکانتِ [مِ]]]]]] نیاز دارد] مختصاتِ [مِ [مِ [مِ [مِ [مِ [مِ [مِ [داده های [داده های [مِ] [ه] [هُو] [مِ]]]]]]] [مِ [مِ [مِ [مِ [ه]]] [بر [بر [مِ [ه] [مِ [مِ [مشرکانِ [هُو]]]]]] مختصاتِ [ه] [هُو] [ه] [م
  • [[۱] [۱۰] [۱۰] [۱]] [۱]] [۳]] [۳] [۱]] [۳]] [۳] [۱]] [۳]] [۳] [۱]] [۳]] [۱] [۳] [۳]] [۳] [۳] [۳] [به عنوان مثال، یک مرز کوچک [به عنوان یک کد شناخته شده].
  • [[۱] [۱۰] [۱۰] [۱۰] [۱۰] [۱۰] [۱]]] [[۱۰]]] [[۳]]] [۱]]] [[۳]]] [[۱۰]]]] [[۱۰]] [۱]]] [۳] [۳]] [۳] [۱] [۳] [بر روی یک صدای کوتاه و مثبت [به صورتِ [به صورت] پخش کنید.
  • [[۱] [۱۰] [۱] [۱۰] [۱]] [[۱۰]]] [[۳]]]] [[۳]]] [۳]]] [۳] [۳]] [۳]] [۳]] [[۳]]] [[۳]]] [۳] [۳]] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۵] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [۳] [
  • راهنمای منطقه - یک مستطیلی با راهنماهای گوشه ای را برای کمک به کاربران در مرکز کد نمایش دهید.

خطای مدیریت و Edge Cases

کنترل خطای قوی تضمین می کند که اسکنر شما به طور ماهرانه ای در هنگام اشتباه کردن چیزها، تضعیف می شود.

  • Camera در دسترس نیست - چک کنید و بر روی دستگاه.در آی پاد لمس یا شبیه ساز بدون دوربین، ارائه یک پیام معنی دار.
  • [در این باره] [از رد شد [و] هشدار را با یک دکمه که تنظیمات را از طریق باز می کند، نشان دهید.
  • خرابی پیکربندی - خطای وارد شده در هنگام (FLT36) یا بازگشت [FLT 38] این اتفاق می افتد اگر یک برنامه دیگر از دوربین در پس زمینه (rare) استفاده کند.
  • نور کم یا تصاویر تار و تار [FLT 1] - کاهش منطقه تشخیص مورد علاقه و اطمینان از فوکوس خودکار دوربین فعال است.
  • (FLT:0) انواع کد های پشتیبانی شده یا بدون پشتوانه - اموال [FLT 39] ممکن است از تمام فرمت ها در تمام دستگاه ها پشتیبانی نکند.

تست در سراسر دستگاه

عملکرد اسکن بارکد AVFoundation به طور قابل توجهی در نسل های آیفون و iPad متفاوت است.

  • دستگاه های قدیمی تر (iPhone 6s، iPad Air 2) – این پردازنده ها دارای پردازنده های کندتر هستند و ممکن است با پیش تنظیم های با وضوح بالا مبارزه کنند.استفاده از آن (FLT:41) برای تعادل بهینه در سخت افزار قدیمی تر.
  • دستگاه هایی که دارای دوربین های مختلف هستند – آیفون هایی با دوربین های تله فوتو یا دوربین های فوق العاده گسترده ممکن است به طور متفاوتی تمرکز کنند.همیشه از دوربین های به طور پیش فرض عریض برای اسکن بارکد استفاده کنید.
  • محیط های کم نور - تست در شرایط کم برای اطمینان از اینکه پوشش اسکن هنوز قابل مشاهده است و مشعل کار می کند.
  • اندازه ها و جهت گیری های مختلف کد - سعی کنید کدهای 1 سانتی متر × 1 سانتی متر به پوسترهای بزرگ و چشم انداز تست در مقابل اسکن پرتره.

بررسی های پیشرفته

برای برنامه های تولید، ویژگی هایی مانند اسکن مداوم (اجازه دادن به کدهای متعدد در یک جلسه)، کنترل زوم یا ادغام با ARKit برای واقعیت افزوده اضافه کنید، اگر شما نیاز به پردازش کدهای از تصاویر هنوز (به عنوان مثال، کتابخانه عکس)، استفاده از FLT:42 یا (FLT:43 از چارچوب دید، اگر چه AVFoundation به طور کلی سریع تر برای ویدیو واقعی است.

برای یک شیرجه عمیق تر به پیکربندی AVFoundation، به Apple’s مراجعه کنید تا یک جلسه ضبط و مستندات ورودی (FLT:2) را پیدا کنید.

با دنبال کردن این دستورالعمل ها و تست کامل پیاده سازی، می توانید یک بارکد با عملکرد بالا و اسکنر کد QR را که قابلیت استفاده و قابلیت اطمینان برنامه iOS شما را افزایش می دهد، ارائه دهید.