البرمجة

تحسين تجربة التصوير باستخدام التركيز التلقائي في AVCaptureSession

إضافة تركيز تلقائي (Autofocus) إلى AVCaptureSession في تطبيقك يعتبر خطوة مهمة لتحسين تجربة المستخدم أثناء استخدام التطبيق للتعرف على النص وإجراء OCR. في هذا السياق، يمكنك تحقيق ذلك عن طريق إضافة بعض الكود إلى دالة setupSession التي تقوم بإعداد الجلسة الخاصة بك. سأوضح لك كيفية تحقيق ذلك بطريقة فعالة.

أولاً، يمكنك استخدام خاصية التركيز التلقائي المتاحة في AVCaptureDevice. بعد تحديد الكاميرا كجهاز الإدخال للجلسة، يمكنك ضبط خصائصه بحيث يتم التركيز تلقائيًا على الكائن المطلوب بمجرد بدء الجلسة.

هناك طريقتان لتحقيق ذلك، إما عبر تعيين خصائص التركيز التلقائي مباشرةً لكاميرا AVCaptureDevice أو عبر استخدام AVCaptureDeviceInput وتحديد خصائص التركيز للإدخال المرتبط بالكاميرا. سأستعرض لك الطريقة الثانية هنا.

قم بتحديث دالة setupSession لتتضمن ضبط التركيز التلقائي بشكل تلقائي على الكائن المطلوب. إليك الكود المحدث:

swift
func setupSession() { session = AVCaptureSession() session.sessionPreset = AVCaptureSession.Preset.high guard let camera = AVCaptureDevice.default(for: AVMediaType.video) else { return } do { let input = try AVCaptureDeviceInput(device: camera) if session.canAddInput(input) { session.addInput(input) } } catch { print("Error setting up camera input: \(error.localizedDescription)") return } let output = AVCapturePhotoOutput() if session.canAddOutput(output) { session.addOutput(output) } // Enable autofocus do { try camera.lockForConfiguration() camera.focusMode = .continuousAutoFocus camera.unlockForConfiguration() } catch { print("Error setting autofocus: \(error.localizedDescription)") } let previewLayer = AVCaptureVideoPreviewLayer(session: session) previewLayer.videoGravity = AVLayerVideoGravity.resizeAspect previewLayer.connection?.videoOrientation = .portrait view.layer.addSublayer(previewLayer) session.startRunning() }

في هذا الكود المحدث، قمنا بإضافة خاصية التركيز التلقائي للكاميرا المستخدمة في الجلسة، حيث تم ضبط وضع التركيز على continuousAutoFocus لتحقيق التركيز التلقائي المستمر. هذا يعني أن الكاميرا ستبقى مركزة على الكائن المستهدف دون الحاجة إلى تفاعل المستخدم مثل النقر على الشاشة.

باستخدام هذا الكود، يجب أن يقوم التطبيق الآن بتركيز الكاميرا تلقائياً على الكائن المطلوب عند بدء الجلسة، ودون الحاجة لإظهار العلامة الصفراء التي تظهر عادة عندما يقوم المستخدم بالنقر على الشاشة.

المزيد من المعلومات

بالتأكيد، دعني أواصل الشرح وأضيف المزيد من التفاصيل لإكمال المقال.

عندما يتم استدعاء دالة setupSession()، تقوم الجلسة بإعداد الكاميرا وتهيئة الإدخال والإخراج المطلوبين لتشغيل تطبيق الكاميرا. وبما أن الأساس الأساسي للتصوير واستقبال الإشارات البصرية معمول به، فإن التركيز التلقائي يعد جزءًا أساسيًا من هذه العملية.

يعتمد الكود على AVCaptureDevice لتمثيل الكاميرا، حيث يتم الوصول إليها باستخدام AVCaptureDevice.default(for: AVMediaType.video)، الذي يعيد الكاميرا الافتراضية للجهاز. ثم يتم إعداد AVCaptureDeviceInput وتضمينها في الجلسة.

بعد ذلك، يتم إنشاء AVCapturePhotoOutput وإضافته إلى الجلسة. ومن الجدير بالذكر أنه يجب قفل تكوينات الكاميرا باستخدام lockForConfiguration() لتغيير خصائصها مثل وضع التركيز. وبعد ذلك، يتم فتح التكوينات باستخدام unlockForConfiguration().

يتم تعيين وضع التركيز للكاميرا إلى .continuousAutoFocus، مما يعني أن الكاميرا ستحاول بشكل مستمر تحسين التركيز على الكائن المستهدف دون أي تدخل من المستخدم.

باستخدام هذا الكود، يمكن لتطبيقك الآن التركيز تلقائيًا على الكائن المستهدف، مثل بطاقة الائتمان في حالتنا، دون الحاجة لعملية تدخل يدوي من المستخدم.

يُعد إضافة هذه الوظيفة مهمة لتحسين تجربة المستخدم وجعل التطبيق أكثر سهولة في الاستخدام، حيث يمكن للمستخدمين الآن التركيز على الكائنات المهمة لهم بسهولة دون الحاجة للنقر على الشاشة لتحسين التركيز.

وبهذا، يكون قد تم إكمال إضافة وظيفة التركيز التلقائي لتطبيق الكاميرا باستخدام AVCaptureSession في لغة البرمجة سويفت. يمكنك الآن استخدام هذا التحسين لتحسين تجربة مستخدمي التطبيق وجعلها أكثر فاعلية وسهولة في الاستخدام.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر