ARKit: BodyTracking ile Hareket Algılama

ARKit kullanarak kendi robot klonunuzu yaratın!

Rana Taki
TurkishKit
5 min readJan 13, 2021

--

Evet doğru duydunuz. Bugünkü makalemizde ARKit kullanarak kendimizi taklit eden bir robot yapacağız. 🤖

Apple, ilk olarak “ARBodyTrackingConfiguration” özelliğini ARKit 3'ü ile birlikte WWDC19'da duyurdu. Bununla birlikte de ARKit’te insanları ve hareketlerini algılama olayını yapılabileceğini göstermiş oldu.

Bu makale, ARKit’i derinlemesinden incelemektedir. Bu nedenle yeni başlayanlar için tavsiye edilmez. ARKit’e yeniyseniz ARKit’in temellerini anlattığımız makaleyi okumanızı tavsiye ederiz! 😊

ARBodyTrackingConfiguration: İnsan vücutları algılamak için kullanılır. Apple, bu özelliği aslında tüm nesnelere kullanmak üzere çıkarmıştır ancak bu makalede, ARBodyTrackingConfiguration özelliğinin insan vücudu algılamasını baz alacağız.

ARBodyTrackingConfiguration, insanların hareketlerini algılamakta kullanılır. Belirli bir anatomik yapılanma vardır ve kameradan algılanan insana göre bu anatomik yapıyı uyarlar. Yazılımın belirlediği eklem yerleri, kameradan görülen insanın eklem yerleri ile eşleştirilir. Böylece insanın hareketi algılanılabilir.

Bilmeniz gereken özellikler:

1. ARBodyTrackingConfiguration tek bir insan üzerinde işlem yapar. 💃

2. Arkada çalışan yazılım makine öğrenmesi ile çalışır ve iskelet ve pozisyonu barındırır.

3. Yazılım her frame’de kendini günceller. Yani sürekli çalışır ve dış dünyadan durmadan veri alır. Bu şekilde saniye farkıyla hareket tespitleri yapılabilir.

3 boyutlu cismi insan olarak düşünsek sistem mavi noktalarda gösterildiği gibi bir iskelet çıkarmaktadır. Bu iskeleti algılanan insanın vücuduna yerleştirecek ve eklem yerlerlerini (hareket yerlerini) tespit ederek hareketini algılayacaktır.

ARBodyTrackingConfiguration ile Uygulama Geliştirme

Xcode’dan yeni bir AR uygulaması oluşturalım. Uygulamanızı kodlamaya başlamadan önce tüm kütüphanelerin “import” edildiğinden emin olun.

Uygulamanızın yapması gereken üç tane temel olay vardır:

  1. İnsanı algılamak. 🏄‍♀️
  2. Yanına bir robot eklemek. 🤖
  3. Robotu insanın hareketleri ile senkronize etmek. 🦾

Teker teker tüm olayları kodlamanız gerekir. Öncelikle uygulamanızda kullanmak istediğiniz robotu tanımlamanız gerekecektir. Bunu “ViewController” sınıfınızın içine aşağıdaki kodu yazarak yapabilirsiniz.

Şuan karakteriniz tam olarak nerede scene’inizin tam ortasında duracaktır. Ancak taklit edilecek insanı kapatmaması için biraz daha yanında durması gerekir. Bunu aşağıdaki kodu yazarak yapabilirsiniz.

Son olarak da robotu scene’e bir obje olarak ekleyebilmek için anchor’ını yaratmanız gerekecektir. 👾

Not: Anchor’un ne olduğunu daha iyi anlayabilmek için bu konu hakkındaki makalemize göz atabilirsiniz:

Şimdi ise karakterinizi sizin hareketlerinizle senkronize edecek şekilde scene’inize eklemeniz gerekecektir. Bunu yapmak için öncellikle karakterinizi olduğu dosyadan çıkartıp koda eklemeniz gerekir. 🦿

Bu kod uygulamadaki en karışık kodlardan bir olabilir. Baştan açıklamak gerekirse, herhangi bir uygulamayı durdurma işlemi gerçekleşip gerçekleşmediğini kontrol edebilmek için cancellable diye bir değişken tanımlamanız gerekir. Eğer durdurma işlemi gerçekleşmezse nil değerini alır ve character/robot dosyalarının içindeki robot modelini scene’e ekler. Yukarıdaki //***** sembollerine kadar olan tüm kısım kısaca error tespit etmek ve uygulamayı error bulunduğunda durdurma kısımlarıdır. Apple ne yazık ki bu noktada bir kısaltmaya varmadığında bunu karmaşık gibi gözüken bir kodla ifade etmek gerekir.

Yukarıda gördüğünüz kod parçası, asıl ilgilenmeniz gereken kısımdır. Bu noktada eğer robot dosyadan hatasız çekilebildiyse, robotu scene’inize yerleştirirsiniz 🤖. Öncelikle “character” diye bir değişken yaratmanız gerekir. Bu değişkeni yaratmanızın nedeni robotun boyutunu kolayca ayarlayabilmektir. “character.scale” kodunda yapılan da tam olarak eklenilen robotun boyutlarını insan boyutlarına eşitlemektir. Sonradan bu yarattığınız karakteri ayarladığınız boyutlarla scene’inize yerleştirebilmek için “character” değişkenine eşitlemeniz gerekir. Geriye kalan kodlar da aynı şekilde “error handling” dediğimiz olası errorlarda uygulamayı durdurmak için vardır.

Son olarak robotunuzu scene’inize eklemeyi unutmayın!

Buraya kadar geldiyseniz kodlarda “Entity” diye çok tanıdık gelmeyen bir özellik görmüş olabilirsiniz. Bu özellik, robotun animasyonları için gereklidir. Robot, sizin hareketini algılayıp hareket edeceğinden animasyonlara ihtiyacı vardır. BodyTrackedEntity kullanarak bu animasyonlar kullanıcının vücut hareketleri senkronize edilebilir. 🚶‍♀️

İkinci ve üçüncü kısma geçmek için öncelikle uygulamanıza ARBodyTrackingConfiguration eklemeniz gerekecektir. Bu, uygulamanıza insanları algılaması gerektiğini komutlayacaktır.

Not: Configuration’ın ne olduğunu merak ediyorsanız bu konu hakkında yazdığımız makaleyi inceleyebilirsiniz.

Kullanıcının hareketini algılamak ve robotun bu hareketleri yapması, saniyeler süren bir işlemdir. Bu nedenle kullanıcının hareketi algılandığı an bu hareketlerin robotun animasyon özellikleri ile iletişime geçtiğinden emin olmanız gerekir.

Bunu anchor kullanarak yapabilirsiniz. Uygulamanız kullanıcınızın vücudunu bir anchor olarak algılarsa bu anchor’un yaptığı hareketleri ve pozisyonunu algılayabilir ve aynısını robotun anchor’una yaptırabilir. 🧚‍♀️

Öncelikle bodyAnchor diye bir anchor tanımlamak gerekir. Bu, kullanıcının anchor’udur. Kullanıcının pozisyonunu alabilmek için bodyPosition tanımlanır ve gerçek dünyadaki pozisyonu sanal ortama entegre edilir. 🌍

Bunu yaptıktan sonra robotunuzun anchor’unu (characterAnchor), kullanıcınızın anchor’undan (bodyAnchor) başta tanımladığınız “offset” değeri kadar sola kaydırmanız gerekir. Robotunuzu tamamen doğru bir şekilde yerleştirmek için kullanıcının nereye dönük olduğunu bilmeniz gerekir. Bunu elde edebilmek için robotunuzun oryantasyonunu kullanıcınızın (bodyAnchor) rotasyon açısına eşitlemeniz gerekir.

En sonda, robotunuzun herhangi bir parent’ı olup olmadığını kontrol etmeniz gerekir. Eğer bir parent node’u yoksa, robotunuzu, onun için oluşturduğunuz anchor’a eklemeniz gerekir.

Son olarak uygulamanızın hangi cihazlarla çalıştığını anlayabilmek ve uygun olamayan cihazlardan çalıştırmamak için aşağıdaki kodu yazmanız gerekir:

Sonuç

Artık projemizi çalıştırmak için hazırız. Bu yaptığımız uygulama bir AR uygulaması olduğu için bilgisayarın içerisindeki simülatörü kullanamayacağız. iPhone’unuzu veya iPad’inizi bilgisayarınıza bağlayarak uygulamanızı orada test edebilirisiniz.

Oldukça havalı, öyle değil mi? 🤓

Burada yaptığımız projeye erişmek için aşağıdaki linke tıklayabilirsiniz!

Bir ARKit makalesinin daha sonuna geldik. 🥳 Bu makalede ARKit ile insanların vücut hareketlerini algılamayı ve bunlara göre bir robot oluşturmayı öğrendik. Sonraki ARKit makalelerinde görüşmek üzere!🖖

Bizi daha yakından takip etmek istiyorsanız, sosyal medya hesaplarımıza aşağıdan ulaşabilirsiniz!

Twitter | Instagram | Facebook

--

--