با نحوه استفاده از چهره های افزوده در برنامه های خود آشنا شوید.
پیش نیازها
- Xcode نسخه 13.0 یا بالاتر
- Cocoapods 1.4.0 یا بالاتر در صورت استفاده از Cocoapod
- یک دستگاه اپل سازگار با ARKit دارای iOS 12.0 یا بالاتر (هدف استقرار iOS 12.0 یا جدیدتر مورد نیاز است)
برنامه نمونه را بسازید و اجرا کنید
برای جزئیات بیشتر به شروع سریع مراجعه کنید.
- برای دریافت نمونه کد برنامه ، ARCore SDK برای iOS را از GitHub کلون یا دانلود کنید.
- یک پنجره ترمینال را باز کنید و
pod install
از پوشه ای که پروژه Xcode در آن وجود دارد اجرا کنید. - برنامه نمونه را در Xcode نسخه 10.3 یا بالاتر باز کنید و دستگاه را از طریق USB به دستگاه توسعه خود وصل کنید. برای جلوگیری از خطاهای ساخت، مطمئن شوید که از فایل
.xcworkspace
می سازید و نه فایل.xcodeproj
. - Cmd+R را فشار دهید یا روی Run کلیک کنید. برای کار با چهره های تقویت شده از یک دستگاه فیزیکی استفاده کنید، نه شبیه ساز.
- روی «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 وارد کنید.
- یک فایل
*.dae
(مدل سه بعدی) را صادر کنید. - فایل
*.dae
را به پروژه Xcode بکشید. - با رفتن به Editor > Convert to SceneKit scene file format (.scn) فایل را به فرمت
.scn
در Xcode تبدیل کنید.