میڈیا پائپ کا استعمال کرتے ہوئے اتحاد میں حقیقی چہروں کے ساتھ ورچوئل ہیڈز کو سیدھ میں لانا

Temp mail SuperHeros
میڈیا پائپ کا استعمال کرتے ہوئے اتحاد میں حقیقی چہروں کے ساتھ ورچوئل ہیڈز کو سیدھ میں لانا
میڈیا پائپ کا استعمال کرتے ہوئے اتحاد میں حقیقی چہروں کے ساتھ ورچوئل ہیڈز کو سیدھ میں لانا

اے آر ڈیولپمنٹ کے لیے ورچوئل ہیڈ پلیسمنٹ میں چیلنجز

Augmented reality (AR) پروجیکٹ پر کام کرنا دلچسپ اور چیلنجنگ دونوں ہوسکتا ہے۔ Unity کے ساتھ ایک Android ایپلیکیشن تیار کرتے وقت، میرا مقصد حقیقی دنیا کے چہروں پر ورچوئل سر رکھ کر ڈیجیٹل اور حقیقی دنیا کو بغیر کسی رکاوٹ کے ملانا تھا۔ یہ خصوصیت ایک عمیق تجربہ تخلیق کرنے کے لیے درستگی پر بہت زیادہ انحصار کرتی ہے۔ 🕶️

اس کو حاصل کرنے کے لیے، میں نے چہرے کے نشانات جیسے آنکھیں، ناک اور منہ کا پتہ لگانے کے لیے گوگل کے میڈیا پائپ کا استعمال کیا۔ ورچوئل ہیڈ پھر ان اہم نکات کی بنیاد پر تیار کیا گیا اور رکھا گیا۔ یہ دیکھنا دلچسپ تھا کہ جدید ٹولز اے آر کے امکانات کو کس طرح تبدیل کر سکتے ہیں، لیکن یہ سفر کامل سے بہت دور تھا۔

یہ مسئلہ اس وقت سامنے آیا جب ورچوئل ہیڈ توقع کے مطابق اصل چہرے کے ساتھ سیدھ میں نہیں آیا۔ زاویہ یا آلہ سے کوئی فرق نہیں پڑتا، جگہ کا تعین ہمیشہ تھوڑا سا "آف" ہوتا تھا، جس سے غیر فطری اثر ہوتا ہے۔ یہ ایسا ہی تھا جیسے مجازی نمائندگی حقیقت سے منقطع تھی۔ اس نے خرابیوں کا سراغ لگانے کے تجربات کا ایک سلسلہ شروع کیا۔

Unity کی کیمرہ سیٹنگز کو ٹوئیک کرنے سے لے کر MediaPipe کے الگورتھم کے ساتھ تجربہ کرنے تک، ہر کوشش میں مسلسل بہتری آئی لیکن کوئی حتمی حل نہیں۔ یہ مضمون مسئلے کے بنیادی حصے، سیکھے گئے اسباق اور اسی طرح کے چیلنجز کا سامنا کرنے والے ڈویلپرز کے لیے ممکنہ حل کے بارے میں بات کرتا ہے۔ 🚀

حکم استعمال کی مثال
mainCamera.usePhysicalProperties یہ کمانڈ یونٹی کی فزیکل کیمرہ خصوصیات کے استعمال کو قابل بناتا ہے، جس سے فوکل لینتھ اور لینس ڈسٹورشن پر زیادہ درست کنٹرول ہو سکتا ہے تاکہ ورچوئل اور حقیقی دنیا کی اشیاء کو سیدھ کیا جا سکے۔
faceMesh.GetDetectedFaceTransform() MediaPipe کے چہرے کے میش سے پتہ لگائے گئے چہرے کے ٹرانسفارم ڈیٹا (پوزیشن اور گردش) کو بازیافت کرتا ہے، جو حقیقی چہروں پر درست طریقے سے ورچوئل ہیڈز رکھنے کے لیے اہم ہے۔
UnityObjectToClipPos شیڈر کے لیے مخصوص فنکشن جو کہ ایک عمودی پوزیشن کو آبجیکٹ اسپیس سے کلپ اسپیس میں تبدیل کرتا ہے، جس کا استعمال لینس ڈسٹورشن کریکشن شیڈرز میں سیدھ کو یقینی بنانے کے لیے کیا جاتا ہے۔
tex2D ایک شیڈر کمانڈ کا استعمال مخصوص UV کوآرڈینیٹس پر ٹیکسچر کے نمونے کے لیے کیا جاتا ہے، جو کیمرہ فیڈز میں تحریف کی اصلاح کو لاگو کرنے کے لیے ضروری ہے۔
length(distUV) اصل سے UV کوآرڈینیٹس کے یوکلیڈین فاصلے کا حساب لگاتا ہے، جو لینس ڈسٹورشن ایڈجسٹمنٹ کو بتدریج لاگو کرنے کے لیے لیوریج کیا جاتا ہے۔
adjuster.virtualHead ورچوئل ہیڈ گیم آبجیکٹ کا حوالہ دینے والا اسکرپٹ متغیر، چہرے سے باخبر رہنے والے ڈیٹا کی بنیاد پر اس کی پوزیشن اور گردش کو متحرک طور پر اپ ڈیٹ کرنے کے قابل بناتا ہے۔
[TestFixture] ایک NUnit وصف جو کسی کلاس کو ٹیسٹ فکسچر کے بطور نشان زد کرتا ہے، یہ اشارہ کرتا ہے کہ اس میں یونٹ ٹیسٹ ہیں۔ یہ ورچوئل ہیڈ الائنمنٹ منطق کی تصدیق کے لیے مفید ہے۔
Assert.AreEqual ایک NUnit طریقہ جو یونٹ ٹیسٹنگ کے دوران متوقع اور حقیقی قدروں کا موازنہ کرنے کے لیے استعمال کیا جاتا ہے، اس بات کو یقینی بناتے ہوئے کہ ورچوئل ہیڈ پلیسمنٹ مطلوبہ نتائج سے میل کھاتا ہے۔
_DistortionStrength ایک شیڈر پراپرٹی جو عینک کے بگاڑ کی شدت کو ایڈجسٹ کرتی ہے، حقیقی اور ورچوئل دنیا کے درمیان صف بندی کو ٹھیک کرتی ہے۔
Quaternion.Euler یولر زاویوں پر مبنی ایک گردش تخلیق کرتا ہے، جو عام طور پر یونٹی کی 3D جگہ میں ورچوئل ہیڈ جیسی اشیاء کو سیدھ میں لانے کے لیے استعمال ہوتا ہے۔

اتحاد اور میڈیا پائپ کے ساتھ اے آر کی درستگی کو بڑھانا

پہلا اسکرپٹ جسے ہم نے دریافت کیا وہ یونٹی کی فزیکل کیمرہ خصوصیات کے استعمال پر مرکوز ہے۔ چالو کرنے سے جسمانی خصوصیات کا استعمال کریں۔، ہم حقیقی دنیا کے آپٹکس کو زیادہ قریب سے ملنے کے لیے کیمرے کے رویے کو ایڈجسٹ کرتے ہیں۔ AR کے ساتھ کام کرتے وقت یہ خاص طور پر اہم ہے، جہاں فوکل لینتھ یا فیلڈ آف ویو میں معمولی تضاد بھی ورچوئل اشیاء کو غلط طریقے سے ظاہر کر سکتا ہے۔ مثال کے طور پر، فوکل لینتھ کو 35 ملی میٹر کی درست قدر پر سیٹ کرنے سے ورچوئل ہیڈ کو شناخت شدہ چہرے کے ساتھ سیدھ میں لانے میں مدد مل سکتی ہے۔ یہ ایڈجسٹمنٹ دور کی چیزوں کو کامل فوکس میں لانے کے لیے ٹیلی سکوپ کو ٹھیک کرنے کے مترادف ہے، اس بات کو یقینی بناتے ہوئے کہ AR کا تجربہ قدرتی اور عمیق محسوس ہو۔ 📸

اسکرپٹ کا ایک اور اہم جزو پتہ چلا چہرے کی پوزیشن اور گردش کو دوبارہ حاصل کرنا ہے faceMesh.GetDetectedFaceTransform(). یہ فنکشن MediaPipe کے فیس میش سے ریئل ٹائم اپڈیٹس فراہم کرتا ہے، جو کہ ورچوئل ہیڈ کو صارف کی نقل و حرکت کے ساتھ ہم آہنگ کرنے کے لیے ضروری ہے۔ ایک ویڈیو گیم کھیلنے کا تصور کریں جہاں آپ کے کردار کا سر آپ کے اپنے ساتھ مطابقت پذیر نہیں ہوتا ہے۔ تجربہ پریشان کن ہو گا. درست صف بندی کو یقینی بنا کر، یہ اسکرپٹ AR کو ایک نیاپن سے ایک ٹول میں تبدیل کرتا ہے جو ورچوئل میٹنگز یا ایڈوانس گیمنگ جیسی ایپلی کیشنز کو سپورٹ کر سکتا ہے۔

دوسرا اسکرپٹ شیڈر پروگرامنگ میں شامل ہے، خاص طور پر لینس کی مسخ کو حل کرنا۔ شیڈر کیمرہ فیڈ میں بگاڑ کو درست کرتا ہے، _DistortionStrength جیسی خصوصیات کا استعمال کرتے ہوئے یہ جوڑ توڑ کرتا ہے کہ UV کوآرڈینیٹس کو ساخت پر کیسے نقش کیا جاتا ہے۔ یہ خاص طور پر مفید ہے جب وائڈ اینگل لینسز یا منفرد ڈسٹورشن پروفائلز والے کیمروں سے نمٹیں۔ مثال کے طور پر، اگر کوئی ورچوئل ہیڈ زاویہ کے لحاظ سے اصل چہرے سے بڑا یا چھوٹا نظر آتا ہے، تو مسخ کی ترتیبات کو ٹویک کرنا بہتر سیدھ کو یقینی بناتا ہے۔ یہ فن ہاؤس اثر کو ختم کرنے کے لیے آئینے کے فریم کو ایڈجسٹ کرنے کی طرح ہے، عکاسی کو مزید حقیقت پسندانہ بنانا۔ 🎨

آخر میں، تیسرے اسکرپٹ سے یونٹ ٹیسٹ حلوں کی توثیق کرتے ہیں۔ یہ ٹیسٹ ورچوئل ہیڈ کی متوقع پوزیشن اور گردش کا اصل نتائج کے ساتھ موازنہ کرتے ہیں، اس بات کو یقینی بناتے ہیں کہ ایڈجسٹمنٹ مختلف حالات میں برقرار رہے۔ NUnit's کا استعمال کرتے ہوئے Assert.AreEqual, ڈویلپر مختلف منظرناموں کی تقلید کر سکتے ہیں، جیسے سر کو تیزی سے حرکت دینا یا اسے انتہائی زاویوں پر جھکانا، سیدھ کی تصدیق کے لیے۔ مثال کے طور پر، ڈیولپمنٹ کے دوران، میں نے دیکھا کہ آگے کی طرف رخ کرتے وقت صف بندی اچھی طرح سے کام کرتی ہے لیکن جب سر سائیڈ کی طرف مڑتا ہے تو بڑھ جاتا ہے۔ ان یونٹ ٹیسٹوں نے مسئلے کو اجاگر کیا اور مزید بہتری کی رہنمائی کی، جس سے مضبوط اے آر ایپلی کیشنز بنانے میں مکمل جانچ کی اہمیت کو تقویت ملی۔ 🚀

یونٹی اور میڈیا پائپ کے ساتھ اے آر میں ورچوئل آبجیکٹ پلیسمنٹ کو ایڈجسٹ کرنا

حل 1: FOV اور لینس ڈسٹورشن کو ایڈجسٹ کرنے کے لیے یونٹی کے فزیکل کیمرہ کا استعمال

// Import necessary Unity libraries
using UnityEngine;
using Mediapipe.Unity;

public class VirtualHeadAdjuster : MonoBehaviour
{
    public Camera mainCamera; // Assign Unity's physical camera
    public GameObject virtualHead; // Assign the virtual head prefab
    private MediapipeFaceMesh faceMesh; // MediaPipe's face mesh component

    void Start()
    {
        // Enable Unity's physical camera
        mainCamera.usePhysicalProperties = true;
        mainCamera.focalLength = 35f; // Set a standard focal length
    }

    void Update()
    {
        if (faceMesh != null && faceMesh.IsTracking)
        {
            // Update the virtual head's position and rotation
            Transform detectedHead = faceMesh.GetDetectedFaceTransform();
            virtualHead.transform.position = detectedHead.position;
            virtualHead.transform.rotation = detectedHead.rotation;
        }
    }
}

ورچوئل ہیڈ الائنمنٹ کے لیے متبادل ایڈجسٹمنٹ کی تلاش

حل 2: عینک کی مسخ کو درست کرنے کے لیے حسب ضرورت شیڈر کا استعمال

Shader "Custom/LensDistortionCorrection"
{
    Properties
    {
        _DistortionStrength ("Distortion Strength", Float) = 0.5
    }

    SubShader
    {
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            float _DistortionStrength;

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                float2 distUV = i.uv - 0.5;
                distUV *= 1.0 + _DistortionStrength * length(distUV);
                distUV += 0.5;
                return tex2D(_MainTex, distUV);
            }
            ENDCG
        }
    }
}

یونٹی کے اے آر پروجیکٹس میں بہتر مطابقت کی جانچ

حل 3: ورچوئل ہیڈ الائنمنٹ کے لیے یونٹ ٹیسٹ کا نفاذ

using NUnit.Framework;
using UnityEngine;
using Mediapipe.Unity;

[TestFixture]
public class VirtualHeadAlignmentTests
{
    private VirtualHeadAdjuster adjuster;
    private GameObject testHead;

    [SetUp]
    public void Init()
    {
        GameObject cameraObject = new GameObject("MainCamera");
        adjuster = cameraObject.AddComponent<VirtualHeadAdjuster>();
        testHead = new GameObject("VirtualHead");
        adjuster.virtualHead = testHead;
    }

    [Test]
    public void TestVirtualHeadAlignment()
    {
        Vector3 expectedPosition = new Vector3(0, 1, 2);
        Quaternion expectedRotation = Quaternion.Euler(0, 45, 0);

        adjuster.virtualHead.transform.position = expectedPosition;
        adjuster.virtualHead.transform.rotation = expectedRotation;

        Assert.AreEqual(expectedPosition, testHead.transform.position);
        Assert.AreEqual(expectedRotation, testHead.transform.rotation);
    }
}

بہتر کیلیبریشن تکنیکوں کے ذریعے اے آر پلیسمنٹ کو بہتر بنانا

اے آر الائنمنٹ کے مسائل کا ایک اکثر نظر انداز کیا جانے والا پہلو کیمرہ کیلیبریشن کی اہمیت ہے۔ AR پروجیکٹس میں جیسے کہ ایک حقیقی پر ورچوئل ہیڈ رکھنا، عینک کا اندرونی پیرامیٹرز ایک اہم کردار ادا کریں. ان پیرامیٹرز میں فوکل لینتھ، آپٹیکل سینٹر، اور ڈسٹورشن گتانک شامل ہیں۔ جب یہ قدریں درست نہیں ہیں، تو ورچوئل ہیڈ غلط طور پر یا مسخ شدہ ظاہر ہو سکتا ہے۔ اس سے نمٹنے کے لیے، مخصوص ڈیوائس کیمرے کے لیے ان پیرامیٹرز کی گنتی کے لیے انشانکن ٹولز کا استعمال کیا جا سکتا ہے۔ مثال کے طور پر، OpenCV جیسا سافٹ ویئر کیمرہ کے عین مطابق میٹرکس اور ڈسٹورشن پروفائلز بنانے کے لیے مضبوط انشانکن افادیت پیش کرتا ہے۔ 📐

ایک اور نقطہ نظر میں یونٹی کا فائدہ اٹھانا شامل ہے۔ پوسٹ پروسیسنگ اسٹیک. فیلڈ کی گہرائی یا رنگین خرابی کی اصلاح جیسے اثرات کو لاگو کرکے، آپ پیش کردہ ورچوئل ہیڈ اور حقیقی دنیا کے ماحول کے درمیان تضادات کو ہموار کرسکتے ہیں۔ پوسٹ پروسیسنگ میں پولش کی ایک پرت شامل ہوتی ہے جو ورچوئل آبجیکٹ اور فزیکل اسپیس کے درمیان فرق کو ختم کرتی ہے۔ مثال کے طور پر، ایک ٹھیک ٹھیک دھندلا اثر ان سخت کناروں کو کم کر سکتا ہے جو غلط ترتیب کو نمایاں کرتے ہیں۔ یہ خاص طور پر عمیق ایپلی کیشنز میں مفید ہے جہاں صارفین منظر پر بہت زیادہ توجہ مرکوز کرتے ہیں۔

آخر میں، رن ٹائم کے دوران متحرک موافقت کی طاقت کو کم نہ سمجھیں۔ مشین لرننگ ماڈلز کو اپنی AR پائپ لائن میں شامل کرنے سے سسٹم کو وقت کے ساتھ ساتھ پلیسمنٹ سیکھنے اور ایڈجسٹ کرنے کی اجازت مل سکتی ہے۔ مثال کے طور پر، ایک AI ماڈل صارف کے تاثرات کا تجزیہ کر سکتا ہے یا عدم مطابقتوں کا پتہ لگا سکتا ہے اور سیدھ کو متحرک طور پر ٹھیک کر سکتا ہے۔ یہ نظام کو مزید مضبوط بناتا ہے اور روشنی، ڈیوائس کی کارکردگی، یا صارف کے رویے میں تغیرات سے نمٹنے کے قابل بناتا ہے۔ یہ اصلاحات ایک ہموار AR کے تجربے کو یقینی بناتی ہیں، جس سے ورچوئل اور حقیقی دنیا کو حقیقی معنوں میں مربوط محسوس ہوتا ہے۔ 🚀

MediaPipe اور Unity AR پلیسمنٹ کے بارے میں عام سوالات

  1. میرا ورچوئل ہیڈ اصلی چہرے کے ساتھ کیوں غلط ہے؟
  2. مسئلہ اکثر کیمرے کی غلط انشانکن سے پیدا ہوتا ہے۔ کا حساب لگانے کے لیے اوپن سی وی جیسے ٹولز کا استعمال camera matrix اور distortion coefficients بہت سیدھ کو بہتر کر سکتے ہیں.
  3. اے آر سیدھ میں فوکل کی لمبائی کا کیا کردار ہے؟
  4. دی focal length اس بات کی وضاحت کرتا ہے کہ کیمرہ کس طرح 3D پوائنٹس کو 2D جہاز پر پیش کرتا ہے۔ یونٹی کے فزیکل کیمرہ سیٹنگز میں اسے ایڈجسٹ کرنے سے درستگی میں اضافہ ہو سکتا ہے۔
  5. کیا یونٹی لینس کی مسخ کی اصلاح کو سنبھال سکتی ہے؟
  6. ہاں، Unity تحریف کی اصلاح کے لیے شیڈرز کی حمایت کرتا ہے۔ جیسے خصوصیات کے ساتھ شیڈر لگائیں۔ _DistortionStrength آپ کے لینس پروفائل کی بنیاد پر اصلاحات کو حسب ضرورت بنانے کے لیے۔
  7. میں ورچوئل آبجیکٹ کی سیدھ کو کیسے جانچ سکتا ہوں؟
  8. NUnit میں یونٹ ٹیسٹ جیسے کمانڈز کے ساتھ استعمال کرنا Assert.AreEqual آپ کو مختلف حالات میں ورچوئل آبجیکٹ کی پوزیشننگ اور گردش کی توثیق کرنے کی اجازت دیتا ہے۔
  9. کیا AR پروجیکٹس کے لیے پوسٹ پروسیسنگ ضروری ہے؟
  10. جبکہ لازمی نہیں، پوسٹ پروسیسنگ اثرات جیسے depth of field اور chromatic aberration AR مناظر کے بصری معیار اور حقیقت پسندی کو بڑھا سکتا ہے۔
  11. کیا میڈیا پائپ چہروں کے علاوہ کسی اور چیز کا پتہ لگا سکتا ہے؟
  12. ہاں، MediaPipe ہاتھوں، پوز، اور یہاں تک کہ مجموعی ٹریکنگ کے لیے حل پیش کرتا ہے، جو اسے مختلف AR استعمال کے کیسز کے لیے ورسٹائل بناتا ہے۔
  13. یونٹی اے آر ایپلی کیشنز کے لیے کون سا ہارڈ ویئر بہترین کام کرتا ہے؟
  14. اعلی کارکردگی والے GPUs اور عین مطابق کیمرے والے آلات مثالی ہیں۔ جیسے اوزار ARCore اور ARKit مزید مطابقت میں اضافہ.
  15. مخصوص زاویوں پر صف بندی بدتر کیوں ہے؟
  16. یہ کیمرہ اور ورچوئل ماحول کے درمیان منظر کے میدان میں مماثلت کی وجہ سے ہو سکتا ہے۔ یونٹی کیمرے کو ایڈجسٹ کرنا fieldOfView جائیداد مدد کر سکتی ہے.
  17. شیڈرز اے آر سیدھ کو کیسے بہتر بناتے ہیں؟
  18. شیڈرز رینڈرنگ میں ریئل ٹائم ایڈجسٹمنٹ کی اجازت دیتے ہیں، جیسے کہ بگاڑ کو درست کرنا یا لینس کے اثرات کی نقل کرنا، ورچوئل اور حقیقی اشیاء کے درمیان بہتر ہم آہنگی کو یقینی بنانا۔
  19. کیا اے آر سسٹم وقت کے ساتھ خود کو ایڈجسٹ کر سکتے ہیں؟
  20. ہاں، مشین لرننگ ماڈلز کو مربوط کرنے سے سسٹمز کو متحرک طور پر اپنانے کے قابل بناتا ہے، فیڈ بیک سے سیکھتے ہوئے وقت کے ساتھ ساتھ صف بندی اور کارکردگی کو بہتر بناتا ہے۔

اے آر کی درستگی کو بڑھانا: حتمی خیالات

عمیق AR تجربات کے لیے ورچوئل اور حقیقی دنیا کی اشیاء کے درمیان قطعی سیدھ حاصل کرنا بہت ضروری ہے۔ محتاط انشانکن اور جدید تکنیکوں کے ذریعے، لینس کی مسخ اور غیر مماثل فوکل لینتھ جیسے مسائل کو کم کیا جا سکتا ہے، بہتر درستگی اور صارف کی اطمینان کو یقینی بنا کر۔

Unity کے ٹولز، MediaPipe الگورتھم، اور متحرک ایڈجسٹمنٹ کو ضم کرنا AR ڈویلپرز کے لیے مضبوط حل پیش کرتا ہے۔ یہ اصلاحات گیمنگ، ورچوئل میٹنگز اور اس سے آگے کے نئے امکانات کو کھولتے ہوئے ڈیجیٹل اور فزیکل دنیا کے ہموار امتزاج کو فعال کرتی ہیں۔ استقامت اور جدت کے ساتھ، اے آر الائنمنٹ چیلنجز قابل انتظام ہو جاتے ہیں۔ 🚀

ذرائع اور حوالہ جات
  1. Unity میں MediaPipe استعمال کرنے کے بارے میں تفصیلات کا حوالہ سرکاری MediaPipe دستاویزات سے لیا گیا تھا۔ اسے دریافت کریں۔ یہاں .
  2. یونٹی کے کیمرہ کیلیبریشن اور جسمانی خصوصیات کے بارے میں رہنمائی یونٹی دستاویزات کی سائٹ پر مل سکتی ہے۔ وزٹ کریں۔ یونٹی کیمرے کی ترتیبات مزید تفصیلات کے لیے
  3. اے آر ایپلی کیشنز اور لینس ڈسٹورشن تصحیح کے لیے شیڈر پروگرامنگ شیڈر ڈویلپمنٹ پر مضامین سے متاثر تھی، جیسے کہ کیٹ لائک کوڈنگ .
  4. Google کی ARCore ڈویلپر سائٹ سے Android کی ترقی کے لیے ARCore کی صلاحیتوں اور حدود کا جائزہ لیا گیا۔ پر مزید جانیں۔ گوگل اے آر کور .