راهنمای برنامه‌نویس چهره‌های افزوده برای iOS

با نحوه استفاده از چهره های افزوده در برنامه های خود آشنا شوید.

پیش نیازها

  • Xcode نسخه 13.0 یا بالاتر
  • Cocoapods 1.4.0 یا بالاتر در صورت استفاده از Cocoapod
  • یک دستگاه اپل سازگار با ARKit دارای iOS 12.0 یا بالاتر (هدف استقرار iOS 12.0 یا جدیدتر مورد نیاز است)

برنامه نمونه را بسازید و اجرا کنید

برای جزئیات بیشتر به شروع سریع مراجعه کنید.

  1. برای دریافت نمونه کد برنامه ، ARCore SDK برای iOS را از GitHub کلون یا دانلود کنید.
  2. یک پنجره ترمینال را باز کنید و pod install از پوشه ای که پروژه Xcode در آن وجود دارد اجرا کنید.
  3. برنامه نمونه را در Xcode نسخه 10.3 یا بالاتر باز کنید و دستگاه را از طریق USB به دستگاه توسعه خود وصل کنید. برای جلوگیری از خطاهای ساخت، مطمئن شوید که از فایل .xcworkspace می سازید و نه فایل .xcodeproj .
  4. Cmd+R را فشار دهید یا روی Run کلیک کنید. برای کار با چهره های تقویت شده از یک دستگاه فیزیکی استفاده کنید، نه شبیه ساز.
  5. روی «OK» ضربه بزنید تا دوربین به برنامه نمونه دسترسی داشته باشد. برنامه باید دوربین جلو را باز کند و بلافاصله چهره شما را در فید دوربین ردیابی کند. باید تصاویر گوش روباه را روی دو طرف پیشانی شما قرار دهد و بینی روباهی را روی بینی خود قرار دهد.

مروری بر پیاده سازی چهره های افزوده در برنامه شما

فایل های *.scn را به Xcode وارد کنید

برای افزودن دارایی‌های خود مانند بافت‌ها و مدل‌های سه‌بعدی به چهره شناسایی‌شده در برنامه‌تان، دارایی *.scn را به Xcode بکشید.

یک جلسه چهره های افزوده را راه اندازی کنید

برای استفاده از Augmented Faces API از برنامه خود، یک جلسه Augmented Faces را مقداردهی اولیه کنید. این جلسه مسئول گرفتن تصاویر دوربین با سرعت 60 فریم بر ثانیه است و به‌روزرسانی‌های چهره را به‌صورت ناهمزمان به روش نمایندگی برمی‌گرداند. هنگام مقداردهی اولیه، به سادگی میدان دید دستگاه ضبط را رد کنید و مطمئن شوید که نماینده را تنظیم کرده اید.

// Session takes a float for field of view
let faceSession = try? GARAugmentedFaceSession(fieldOfView: cameraFieldOfView)
faceSession?.delegate = self

تصاویر دوربین را به جلسه ارسال کنید

اکنون که جلسه شما مقداردهی اولیه و به درستی پیکربندی شده است، برنامه شما می تواند شروع به ارسال تصاویر دوربین به جلسه کند. برنامه نمونه با ایجاد یک AVCaptureSession با فریم های ویدیویی از دوربین جلو، تصاویر دوربین را دریافت می کند.

نمونه کد زیر پیاده‌سازی روش AVFoundation 's Capture Output Delegate را نشان می‌دهد که تصویر، یک مهر زمان و یک چرخش تشخیص را به جلسه چهره شما ارسال می‌کند.

func captureOutput(_ output: AVCaptureOutput,
                     didOutput sampleBuffer: CMSampleBuffer,
                     from connection: AVCaptureConnection) {

     faceSession.update(with: imageBuffer,
                        timestamp: frameTime,
                        recognitionRotation: rotationDegrees)
}

پس از پردازش تصویر، Augmented Faces API یک فراخوان نماینده ارسال می کند که یک GARAugmentedFaceFrame را برمی گرداند. این شامل یک شیء Augmented Face است که به شما کمک می کند جلوه هایی را به صورت بچسبانید. همچنین حاوی بافر تصویر و مهر زمانی است که به روش به‌روزرسانی ارسال کرده‌اید. این برای همگام سازی جلوه های چهره با تصاویر مفید است. این شیء همچنین به شما یک تبدیل نمایشگر و یک ماتریس طرح ریزی می دهد تا مطمئن شوید که می توانید دنیای سه بعدی و نماهای دو بعدی را به گونه ای تنظیم کنید که به راحتی جلوه های چهره خود را که به چهره شناسایی شده متصل به نظر می رسد ارائه دهید.

var face: GARAugmentedFace? { get }
var capturedImage: CVPixelBuffer { get }
var timestamp: TimeInterval { get }

جهت مش صورت

به جهت گیری فیس مش برای iOS توجه کنید:

یک بافت 2 بعدی را روی صورت اعمال کنید

برنامه Sample کلاسی را برای تبدیل چهره افزوده شما به یک شی SCNGeometry ارائه می دهد. می‌توانید از این هندسه برای اتصال آسان به گره SceneKit استفاده کنید، که آن را در تبدیل مرکز چهره افزوده قرار می‌دهید.

let faceNode = SCNNode()

// Gets the most recent frame's face
let face = faceSession.currentFrame?.face

// This is instantiated once, not with every frame
let faceGeometryConverter = FaceMeshGeometryConverter()

// Converts Augmented Face to SCNGeometry object
let faceMesh = faceGeometryConverter.geometryFromFace(face)

// Assigns geometry to node and sets the pose
faceNode.geometry = faceMesh
faceNode.simdTransform = face.centerTransform

بافت چهره دوبعدی به صورت UIImage بارگذاری می‌شود و روی ماده‌ای تنظیم می‌شود که به هندسه مش چهره متصل است.

faceTextureMaterial = SCNMaterial()
faceTextureMaterial.diffuse.contents = UIImage(named:@"face.png")

faceMesh?.firstMaterial = faceTextureMaterial

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

GARAugmentedFace دریافت شده از پاسخ تماس نماینده، 3 ناحیه مختلف یا تبدیل را فراهم می کند که می توانید برای پیوست کردن محتوا به یک چهره استفاده کنید. این دگرگونی ها به شما این امکان را می دهد که بینی، سمت چپ پیشانی و سمت راست پیشانی را در فضای جهان قرار دهید. در اینجا از تبدیل بینی برای اتصال یک کره به بینی استفاده می شود.

// Create node and add to scene
let node = SCNNode(geometry: SCNSphere(radius: .02))
sceneView.rootNode.addChild(node)

// Every frame updates the node's position
node.simdWorldTransform = session.currentFrame.face.transform(for: .nose)

دارایی های خود را به Xcode وارد کنید

برای افزودن دارایی‌هایی مانند بافت‌ها و مدل‌های سه‌بعدی به چهره شناسایی‌شده در برنامه‌تان، ابتدا دارایی‌ها را در Xcode وارد کنید.

  1. یک فایل *.dae (مدل سه بعدی) را صادر کنید.
  2. فایل *.dae را به پروژه Xcode بکشید.
  3. با رفتن به Editor > Convert to SceneKit scene file format (.scn) فایل را به فرمت .scn در Xcode تبدیل کنید.