Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK
Code

الواقع المعزز مع ARKit: النقاط المميزة وكشف المستوى الافقي

by
Difficulty:AdvancedLength:LongLanguages:

Arabic (العربية/عربي) translation by Maryam Abbas (you can also view the original English article)

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

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

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

لنبدأ

إصدار Xcode

قبل أن نبدأ، تأكد من حصولك على أحدث إصدار من Xcode مثبت على جهاز Mac. هذا مهم جدًا لأن ARKit سيكون متاحًا فقط على Xcode 9 أو الأحدث. يمكنك التحقق من الإصدار الخاص بك عن طريق فتح Xcode والانتقال إلى Xcode> حول Xcode في شريط الأدوات العلوي.

إذا كان إصدار Xcode أقدم من Xcode 9، فيمكنك الانتقال إلى Mac App Store وتحديثه مجانًا. إذا لم يكن لديك بالفعل Xcode، فيمكنك أيضًا تنزيله وتثبيته مجانًا.

مشروع العينة

مشروع جديد

بعد التأكد من أن لديك الإصدار الصحيح من Xcode، ستحتاج إلى إنشاء مشروع Xcode جديد.

امضي قدما وافتح Xcode وانقر على إنشاء مشروع Xcode جديد.

Figure 1 Create an Xcode Project

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

Figure 2 Select Augmented Reality Template

أطر الألعاب

يمكنك تسمية مشروعك بأي شيء تريده، ولكن سأقوم بتسمية كشف الألغام. ستلاحظ أيضًا وجود خيار في الأسفل حيث يمكنك الاختيار من SceneKit، و SpriteKit، و Metal.

هذه هي جميع أطر ألعاب Apple، ولغرض البرنامج التعليمي، سنستخدم SceneKit لأننا سنستخدم كائنات ثلاثية الأبعاد.

امضي قدما وحدد SceneKit إذا لم تكن محددة بالفعل. يجب أن تبدو شاشتك كالتالي:

Figure 3 Name your Project

التحضير للاختبار

توصيل جهاز iPhone

بما أن مقلد Xcode لايحتوي على كاميرا، فستحتاج إلى توصيل جهاز iPhone الخاص بك. للأسف، إذا لم يكن لديك جهاز iPhone، فستحتاج إلى استعارة واحد حتى تتمكن من المتابعة مع هذا البرنامج التعليمي (وأي تطبيقات أخرى ذات صلة بالكاميرا). إذا كان لديك بالفعل جهاز iPhone متصل بـ Xcode، فيمكنك الانتقال إلى الخطوة التالية.

ميزة جديدة أنيقة في Xcode 9 هي أنه يمكنك تصحيح تطبيقك لاسلكيًا على أحد الأجهزة، لذلك لنأخذ الوقت الكافي لإعداده الآن:

في شريط القائمة العلوي، اختر نافذة> الاجهزة والمقلدات. في النافذة التي تظهر، تأكد من تحديد الأجهزة في الجزء العلوي.

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

Figure 4 Devices and Simulators

ستتمكن الآن من التصحيح اللاسلكي على هذا الـ iPhone لجميع التطبيقات المستقبلية.

استكمال الإعداد

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

الآن انتهيت من إنشاء مشروعك المبدئي، ومن المفترض أن ترى مركبة فضائية افتراضية تظهر في عالمك بمجرد النقر على تشغيل. إليك ما يجب أن يبدو عليه:

Figure 5 Run the Sample App

نظريا

قبل البدء الفعلي في برمجة هذا التطبيق، من المهم فهم كيفية اكتشاف ARKit لهذه المستويات بالفعل. في هذا البرنامج التعليمي، سنستكشف فكرتين رئيسيتين: النقاط المميزة والمستويات الأفقية. باختصار، يعمل الواقع المعزز على iPhone الخاص بك مع عملية تسمى الحصول على بيانات الحرك  البطيئة المرئية (VIO)، والتي تأخذ البيانات من الكاميرات وأجهزة الاستشعار الداخلية للحصول على فهم ثلاثي الأبعاد للمشهد.

النقطة المميزة

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

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

كما توضح وثائق Apple، تساعد النقاط المميزة جهازك (و ARKit) على فهم عمق و "واقعية" عالمك، مما يجعل الواقع المعزز أكثر دقة. وتستخدم هذه أيضًا للمساعدة في توفير أشياء افتراضية للكائنات، مما يساعدهم في معرفة مكان البقاء في حالة نقل جهازك.

المستويات الأفقية

على غرار النقاط المميزة، تساعد المستويات الأفقية تطبيقك في التعرف على ما يحيط به. ليس من المستغرب أن تقترن النقاط المميزة والمستويات الأفقية ارتباطًا وثيقًا بعدم إمكانية اكتشاف هذه المستويات بدون نقاط مميزة.

باستخدام أجهزة الاستشعار المدمجة في جهاز iPhone، بما في ذلك الكاميرا (بالطبع) ومزيج من النقاط المميز هذه، يمكن لـ ARKit اكتشاف المستويات المختلفة في المشهد الخاص بك. تتم هذه الحسابات والتقديرات لكل إطار، ويمكن الكشف عن مستويات متعددة في وقت واحد.

عندما تقوم بتشغيل جلسة تعقب عالمي AR، يتم تمكين خيار الكشف عن المسار الخاص بها، تضيف الجلسة تلقائيًا إلى قائمة المرتكزات الخاصة بها كائن ARPlaneAnchor لكل سطح مسطح يكتشفه ARKit بالكاميرا الخلفية. يوفر كل مرتكز مستوي معلومات حول الموضع والشكل المقدر للسطح. _ آبل

في الكود

عظيم!  لقد حصلت الآن على تطبيق ARKit عملي. هدفك من هذا التطبيق هو أن تكون قادرًا على اكتشاف مستوى أفقي وتصوره مع نقاط مميزة (نقاط افتراضية يتم وضعها في المشاهد في ARKit).

كود المبتدئين

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

اعداد مشروعك

إذا فتحت ملف ViewController.swift ، فسوف تلاحظ أن Apple لديه كود للمبتدئ تم إعداده بالفعل لك (والذي يعرض مركبة فضائية). لن نغطي ما يعنيه كل شيء في هذا البرنامج التعليمي، ولكن إذا كنت ترغب في الحصول على شرح خطي، فلا تتردد في الاطلاع على برنامجي التعليمي الآخر عن ARKit.

ونظرًا لأن الكثير من الشيفرات هي شيفرة معيارية، فسوف نحتفظ بها، ولكن بالنسبة لسفينة الفضاء، دعونا نخرجه عن الطريق عن طريق إزالة الشيفرة التي تتعامل مع موضعها. في ملف ViewController.swift الخاص بك، في طريقة العرض DidLoad ()، قم بإزالة أسطر التعليمات البرمجية التالية:

النقاط المميزة

تمكين خيارات التصحيح

مشروع Xcode جاهز الآن لبدء العمل. خطوتنا الأولى هي إضافة نقاط مميزة مرئية. من المحتمل أنك لن تجعلها مرئية لتطبيقات الإنتاج، ولكنها ميزة رائعة لتصحيح أخطاء تطبيقات الواقع المعزَّز.

هذه الخطوة بسيطة جدًا، ويمكن تنفيذها في سطر واحد. في طريقة عرض DidLoad () الخاصة بك، أضف السطر التالي من التعليمات البرمجية:

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

Figure 6 Feature Points

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

التشكيل

الآن، نحن مستعدون لاكتشاف المستوي. إذا ألقيت نظرة على طريقة العرض WillAppear ()، فسترى السطرين التاليين من الشيفرة. دعونا نتوقف لحظة لمعرفة ما الذي تعنيه أنها ستكون ذات صلة بالكشف عن المستوي:

هنا، يتم إنشاء مثيل لفئة تشكيل التعقب العالمي AR. هذه الفئة مسؤولة عن تحديد موقع الجهاز. بعد ذلك، نقوم بتشغيل التشكيل في جلسة عرض المشهد الحالي. إذا كنت مهتمًا بمعرفة المزيد عن هذا الأمر، فيمكنك زيارة وثائق Apple حول هذا الموضوع. في الوقت الحالي، أنت جاهز للاستمرار في الخطوة التالية.

الآن، لنقم بتمكين اكتشاف المستوي في تشكيل التعقب العالمي  AR. أسفل الخط الذي ينشئ التشكيل، ستحتاج إلى إدراج السطر التالي:

ممتاز! الآن، يتم تمكين اكتشاف المستوى الأفقي، لكننا لا نستطيع رؤيته لأنه يحدث تحت الغطاء، وهذا يعني أن جهاز iPhone يعرف مكان المستوي، ولكننا لا نستطيع رؤية ما يفكر فيه.

كشف المستوي

التحقق من المرتكزات

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

ابدأ بتعريف طريقة مندوب العرض ARSCN، وكما سترى، فإن فئة المتحكم بالعرض تتوافق بالفعل مع هذا المندوب في شيفرة البدء. قم بلصق طريقة المندوب التالية في فئة المتحكم بالعرض لديك:

وهذا يستدعى عندما يتم إضافة مرتكزات AR جديدة مع عقدة موافقة، والتي، في هذه الحالة، ستكون مستوانا الأفقي.

يخبر المندوب أنه قد تمت إضافة عقدة SceneKit متوافقة مع مرتكز AR جديد إلى المشهد. __Apple

هندسة المستوي

بالنسبة إلى معظم التطبيقات، قد ترغب في أن يتمكن المستخدم من معرفة المكان الذي يعتقد فيه تطبيقك على أنه يشير إلى خطوط أفقية، لذلك سنتعلم كيفية عرض هذه المستويات بالفعل للمستخدم باستخدام العقدة والمرتكز المقدمة في طريقة المندوب التي استدعيناها سابقاً.

سؤالنا الأول هو: هل المرتكز AR حقاً مستوي، أم أنه شيء لا نريده؟ يمكننا التحقق من ذلك باستخدام قالب الكتابة والربط الاختياري. ضع هذا السطر من التعليمة البرمجية في طريقة المندوب الخاص بك:

ربما لاحظت أن معامل الارتكاز يحتوي على النوع مرتكز AR . إذا أردنا معرفة ما إذا كان هذا الارتكاز هو مستوى، فيمكننا محاولة الكتابة عليه كـمرتكز مستوى AR. إذا نجح ذلك، فنحن نعرف أنه تم اكتشاف مستوي.

داخل عبارة الربط الاختياري، دعنا نضيف رمزًا لإنشاء SCNPlane بأبعاد المرتكز التي تلقيناها من طريقة المندوب. اكتب سطرين من الكود التاليين:

يخلق السطر الأول هنا SCNPlane ثنائي الأبعاد يأخذ بارامترين في منشئه: العرض واالارتفاع. سترى أننا نمر على anchor.extent.x و anchor.extent.z، والتي، كما تشير أسماءها، تمثل عرض وطول المستويات المكتشفة. ستلاحظ أننا قمنا بحذف قيمة y للمرتكز، وذلك لأن المستويات التي نكتشفها ثنائية الأبعاد، ومحاور x و z تعمل عبر المستويات التي نحددها.

يطبق سطر التعليمة البرمجية التالي لونًا أحمر نصف شفاف على هذه المستويات المكتشفة، ويمكنك رؤية هذه المستويات نظرًا لأن قيمة ألفا قد تم تعيينها على 0.5. بالطبع، يمكنك استخدام أي ألوان أو مظاهر ترغب فيها، طالما أنك ستتمكن من رؤيتها.

خلق العقدة

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

نحن بصدد إنشاء SCNNode لأول مرة باستخدام هندسة المستوى التي أنشأناها في الخطوة السابقة. يتم ذلك عن طريق المرور في الهندسة كبارامتر لمُنشئ SCNNode.

بعد ذلك، نضع عقدة المستوي في وسط مرتكز المستوي مباشرةً باستخدام تمثيل SCNVector3 للإحداثيات x، و y، و z في المستوى ثلاثي الأبعاد.

أيضا، في السطر التالي، سترى أن القيمةمن زوايا اويلر الخاصة بنا يتم تعيينها إلى -π/2. تمثل الخاصية زوايا اويلر المستقر، وزاوية الانحراف، وزاوية الدوران لـ SCNNode. ووفقًا لوثائق شركة Apple، تمثل القيمة x المستقر (أو الدوران حول المحور x)، ونريد أن يكون المستوي الخاص بنا أن يكون مسطحاً على مستوى المستوي (لا يلتصق في وضع مستقيم).

وأخيرًا، تتم إضافة العقدة المنشأة حديثًا كعقدة فرعية لعقدة المستوي المكتشفة لجعلها مرئية للمستخدم في نفس الموقع.

استنتاج

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

Figure 7 Horizontal Planes and Feature Points

أنت الآن تعرف كيفية الكشف عن الأسطح المسطحة مثل الطاولات أو المكاتب وعرضها للمستخدم كطريقة أفقية. بالإضافة إلى ذلك، لقد تمكنت من رؤية كيفية رؤية ARKit للعالم من خلال النقاط المميزة . أثناء وجودك هنا، تأكد من إطلاعك على بعض دوراتنا وبرامجنا التعليمية الأخرى هنا على Envato Tuts +!


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.