portaldacalheta.pt
  • Glavni
  • Inovacije
  • Agile Talent
  • Prihodki In Rast
  • Spletno Mesto
Mobilni

Vadnica za iOS ARKit: Risanje v zraku z golimi prsti



Pred kratkim je Apple objavil svojo novo knjižnico razširjene resničnosti (AR) z imenom ARKit . Za mnoge se je zdela le še ena dobra knjižnica AR, ne pa moteč motilec tehnologije. Če pa si ogledate napredek AR v zadnjih nekaj letih, takšnih zaključkov ne bi smelo biti prehitro.

Ilustracijska vadnica ARKit: Interakcija z navideznimi predmeti v aplikaciji ARKit za iOS



V tej objavi bomo ustvarili zabaven primer primera ARKit z uporabo iOS ARKit. Uporabnik bo položil prste na mizo, kot da bi držal pero, tapnil sličico in začel risati. Ko bo uporabnik končal, bo lahko risbo preoblikoval v 3D objekt, kot je prikazano v spodnji animaciji. Na voljo je celotna izvorna koda za naš primer ARKit za iOS na GitHub .



Predstavitev naše uporabljene vzorčne aplikacije za razširjeno resničnost ARKit za iOS



Zakaj bi morali skrbeti za iOS ARKit zdaj?

Vsak izkušen razvijalec se verjetno zaveda dejstva, da je AR star koncept. Prvi resni razvoj AR lahko določimo za čas, ko so razvijalci dobili dostop do posameznih okvirjev s spletnih kamer. Takratne aplikacije so bile običajno uporabljene za preoblikovanje vašega obraza. Vendar človeštvo ni kmalu ugotovilo, da preoblikovanje obrazov v zajčke ni ena izmed njihovih neposrednih potreb, in kmalu je hype zbledela!

Menim, da je AR vedno pogrešal dva ključna tehnološka preskoka, da bi bil koristen: uporabnost in potop. Če ste zasledili druge hype AR, boste to opazili. Na primer, hiper AR se je spet zagnal, ko so razvijalci dobili dostop do posameznih okvirjev z mobilnih kamer. Poleg močne vrnitve velikih zajčjih transformatorjev smo videli še val aplikacij, ki spuščajo 3D predmete na natisnjene QR kode. Nikoli pa niso nikoli vzleteli kot koncept. Niso bile razširjena resničnost, temveč razširjene QR kode.



Potem nas je Google presenetil z znanstveno fantastiko, Google Glass. Minili sta dve leti in ko naj bi ta neverjetni izdelek zaživel, je bil že mrtev! Številni kritiki so analizirali razloge za neuspeh Googla Glass, pri čemer so krivili karkoli, od družbenih vidikov do Googlovega dolgočasnega pristopa pri lansiranju izdelka. Vendar nas v tem članku skrbi zaradi enega posebnega razloga - potopitve v okolje. Medtem ko je Google Glass rešil težavo uporabnosti, še vedno ni šlo zgolj za 2D sliko, narisano v zraku.

Tehtanski titani, kot so Microsoft, Facebook in Apple, so se te ostre lekcije naučili na pamet. Junija 2017 je Apple objavil svojo čudovito knjižnico iOS ARKit, zato je potopitev njegova glavna prednostna naloga. Držanje telefona je še vedno velika ovira za uporabniško izkušnjo, vendar nas je lekcija Google Glass naučila, da strojna oprema ni problem.



Verjamem, da se zelo kmalu odpravljamo k novemu vrhunskemu AR in s tem novim pomembnim pivotom bi lahko sčasoma našel svoj domači trg, kar bi omogočilo, da bi več aplikacij AR postalo mainstream. To tudi pomeni, da bo vsako podjetje za razvoj aplikacij za obogateno resničnost lahko izkoristilo Appleov ekosistem in bazo uporabnikov.

A dovolj zgodovine, umažemo si roke s kodo in si oglejte Appleovo razširjeno resničnost v akciji!



Funkcije potopitve ARKit

ARKit ponuja dve glavni značilnosti; prva je lokacija kamere v 3D prostoru, druga pa zaznavanje vodoravne ravnine. Za dosego prvega ARKit predpostavlja, da je vaš telefon kamera, ki se premika v resničnem 3D prostoru, tako da bo spuščanje nekega 3D virtualnega predmeta na kateri koli točki zasidrano na to točko v resničnem 3D prostoru. In slednjemu ARKit zaznava vodoravne ravnine kot tabele, tako da lahko na njih položite predmete.

Torej, kako ARKit to doseže? To se naredi s tehniko, imenovano Vizualna inercialna odometrija (VIO). Ne skrbite, tako kot podjetniki uživajo v številu hihitanja, ki ga hihite, ko ugotovite vir, ki stoji za njihovim zagonskim imenom, raziskovalci najdejo svoje število prask po glavi, ki jih poskušate razvozlati, če pridejo do izraza poimenovanje njihovih izumov - zato jim dovolimo, da se zabavajo, in gremo naprej.



VIO je tehnika, pri kateri se okviri kamer združijo s senzorji gibanja za sledenje lokacije naprave v 3D prostoru. Sledenje gibanju iz okvirjev kamere poteka z zaznavanjem elementov ali, z drugimi besedami, robnih točk na sliki z visokim kontrastom - kot je rob med modro vazo in belo mizo. Z zaznavanjem, koliko teh točk so se premaknile med seboj iz enega okvira v drugega, lahko ocenimo, kje je naprava v 3D prostoru. Zato ARKit ne bo deloval pravilno, če je postavljen proti beli steni ali če se naprava zelo hitro premika, kar povzroči zamegljene slike.

Uvod v ARKit v iOS-u

Od trenutka pisanja tega članka je ARKit del sistema iOS 11, ki je še vedno v različici beta. Za začetek morate na iPhone 6s ali novejši prenesti iOS 11 Beta in novo Xcode Beta. Nov projekt ARKit lahko začnemo od Novo> Projekt> Razširjena resničnost . Vendar se mi je zdelo bolj priročno začeti to vadnico razširjene resničnosti z uradnikom Vzorec Apple ARKit , ki vsebuje nekaj bistvenih blokov kode in je še posebej koristen za zaznavanje ravnine. Začnimo torej s to primerno kodo, najprej razložimo glavne točke v njej in jo nato spremenimo za naš projekt.



Najprej bi morali določiti, kateri motor bomo uporabljali. ARKit se lahko uporablja s Sprite SceneKit ali Metal. V primeru Apple ARKit uporabljamo iOS SceneKit, 3D-mehanizem, ki ga ponuja Apple. Nato moramo nastaviti pogled, ki bo upodabljal naše 3D predmete. To naredimo tako, da dodamo pogled vrste ARSCNView.

ARSCNView je podrazred glavnega pogleda SceneKit z imenom SCNView, vendar razširi pogled z nekaj uporabnimi funkcijami. Kot ozadje scene upodablja videoposnetek v živo iz kamere naprave, medtem ko samodejno poveže prostor SceneKit z resničnim svetom, ob predpostavki, da je naprava premikajoča se kamera v tem svetu.

ARSCNView obdelave AR ne izvaja sam, vendar zahteva objekt seje AR, ki upravlja kamero naprave in obdelavo gibanja. Za začetek moramo dodeliti novo sejo:

self.session = ARSession() sceneView.session = session sceneView.delegate = self setupFocusSquare()

Zadnja vrstica zgoraj doda vizualni indikator, ki uporabniku pomaga vizualno pri opisu stanja zaznavanja ravnine. Focus Square zagotavlja vzorčna koda, ne knjižnica ARKit, in to je eden glavnih razlogov, da smo začeli s to vzorčno kodo. Več o tem lahko najdete v datoteki readme, ki je vključena v vzorčno kodo. Naslednja slika prikazuje kvadrat ostrenja, projiciran na mizo:

Fokusni kvadrat, projiciran na mizo z uporabo Apple ARKit

Naslednji korak je začetek seje ARKit. Sejo je smiselno znova zagnati vsakič, ko se prikaže pogled, ker ne moremo uporabiti informacij iz prejšnje seje, če uporabniku ne sledimo več. Torej, sejo bomo začeli v viewDidAppear:

override func viewDidAppear(_ animated: Bool) { let configuration = ARWorldTrackingSessionConfiguration() configuration.planeDetection = .horizontal session.run(configuration, options: [.resetTracking, .removeExistingAnchors]) }

V zgornji kodi začnemo z nastavitvijo konfiguracije seje ARKit za zaznavanje vodoravnih ravnin. Od pisanja tega članka Apple ne ponuja drugih možnosti, razen te. A očitno namiguje na odkrivanje bolj zapletenih predmetov v prihodnosti. Nato začnemo izvajati sejo in poskrbimo, da sledenje ponastavimo.

Končno moramo posodobiti Focus Square, kadar koli se spremeni položaj kamere, tj. Dejanska usmeritev ali položaj naprave. To lahko storite s funkcijo za upodabljanje upodabljalnika SCNView, ki se pokliče vsakič, ko bo upodobljen nov okvir 3D-mehanizma:

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { updateFocusSquare() }

Če zaženete aplikacijo, boste do te točke videli tok ostrenja nad tokom kamere, ki išče vodoravno ravnino. V naslednjem poglavju bomo razložili, kako zaznamo ravnine in kako lahko ustrezno postavimo fokusni kvadrat.

Odkrivanje ravnin v ARKitu

ARKit lahko zazna nova letala, posodobi obstoječa ali jih odstrani. Za priročno ravnanje z ravninami bomo ustvarili nekaj lažnega vozlišča SceneKit, ki vsebuje informacije o položaju ravnine in sklic na kvadrat ostrenja. Ravnine so definirane v smeri X in Z, kjer je Y normalna površina, tj. Vedno bi morali imeti položaje risalnih vozlišč znotraj enake vrednosti Y ravnine, če želimo, da je videti, kot da je natisnjena na ravnini .

Zaznavanje letal poteka prek funkcij povratnega klica, ki jih ponuja ARKit. Na primer, kadar je zaznana nova ravnina, se pokliče naslednja funkcija povratnega klica:

var planes = [ARPlaneAnchor: Plane]() func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { if let planeAnchor = anchor as? ARPlaneAnchor { serialQueue.async { self.addPlane(node: node, anchor: planeAnchor) self.virtualObjectManager.checkIfObjectShouldMoveOntoPlane(anchor: planeAnchor, planeAnchorNode: node) } } } func addPlane(node: SCNNode, anchor: ARPlaneAnchor) { let plane = Plane(anchor) planes[anchor] = plane node.addChildNode(plane) } ... class Plane: SCNNode { var anchor: ARPlaneAnchor var focusSquare: FocusSquare? init(_ anchor: ARPlaneAnchor) { self.anchor = anchor super.init() } ... }

Funkcija povratnega klica nam ponuja dva parametra, anchor in node. node je normalno vozlišče SceneKit, postavljeno na natančen položaj in orientacijo ravnine. Nima geometrije, zato je neviden. Uporabljamo ga za dodajanje lastnega ravninskega vozlišča, ki je prav tako nevidno, vendar vsebuje informacije o orientaciji in položaju ravnine v anchor

Torej, kako se položaj in usmeritev shranita v ARPlaneAnchor Položaj, orientacija in lestvica so kodirani v matriki 4x4. Če bom imel priložnost izbrati en matematični koncept, ki se ga boste naučili, bodo to nedvomno matrice. Kakor koli že, lahko se temu izognemo tako, da matrico 4x4 opišemo na naslednji način: Briljantna dvodimenzionalna matrika, ki vsebuje 4x4 številke s plavajočo vejico. Z množenjem teh števil na določen način s 3D točko v1 v njenem lokalnem prostoru nastane nova 3D točka v2, ki predstavlja v1 v svetovnem prostoru. Torej, če je v1 = (1, 0, 0) v svojem lokalnem prostoru in ga želimo umestiti v x = 100 v svetovni prostor, bo v2 glede na svetovni prostor enak (101, 0, 0). Seveda je matematika za tem bolj zapletena, ko dodamo vrtenje okoli osi, vendar je dobra novica, da lahko storimo, ne da bi jo razumeli (toplo priporočam, da preverite ustrezen razdelek iz ta odličen članek za poglobljeno razlago tega koncepta).

checkIfObjectShouldMoveOntoPlane preveri, če že imamo narisane predmete, in preveri, ali se os y vseh teh predmetov ujema z osjo na novo zaznanih ravnin.

Zdaj pa nazaj na updateFocusSquare(), opisano v prejšnjem razdelku. Želimo, da ostane fokusni kvadrat v središču zaslona, ​​vendar projiciran na najbližji zaznani ravnini. Spodnja koda to dokazuje:

func updateFocusSquare() { let worldPos = worldPositionFromScreenPosition(screenCenter, self.sceneView) self.focusSquare?.simdPosition = worldPos } func worldPositionFromScreenPosition(_ position: CGPoint, in sceneView: ARSCNView) -> float3? { let planeHitTestResults = sceneView.hitTest(position, types: .existingPlaneUsingExtent) if let result = planeHitTestResults.first { return result.worldTransform.translation } return nil }

sceneView.hitTest išče resnična letala, ki ustrezajo 2D točki v pogledu zaslona, ​​tako da to 2D točko projicira na najbližjo pod ravnino. result.worldTransform je matrika 4x4, ki vsebuje vse informacije o preoblikovanju zaznane ravnine, medtem ko result.worldTransform.translation je priročna funkcija, ki vrne samo položaj.

Zdaj imamo vse informacije, ki jih potrebujemo, da spustimo 3D objekt na zaznane površine z 2D točko na zaslonu. Torej, začnimo risati.

Risba

Najprej razložimo pristop risanja oblik, ki sledi človekovemu prstu v računalniškem vidu. Risanje oblik poteka tako, da zaznamo vsako novo lokacijo gibljivega prsta, spustimo oglišče na tej lokaciji in vsako oglišče povežemo s prejšnjim. Točke lahko povežemo s preprosto črto ali prek Bezierjeve krivulje, če potrebujemo nemoten izhod.

Zaradi poenostavitve bomo pri risanju sledili nekoliko naivnemu pristopu. Za vsako novo lokacijo prsta bomo na zaznani načrt spustili zelo majhno škatlo z zaobljenimi vogali in skoraj ničelno višino. Videti bo, kot da je pika. Ko uporabnik konča risanje in izbere gumb 3D, bomo spremenili višino vseh spuščenih predmetov glede na premikanje uporabnikovega prsta.

Naslednja koda prikazuje PointNode razred, ki predstavlja točko:

let POINT_SIZE = CGFloat(0.003) let POINT_HEIGHT = CGFloat(0.00001) class PointNode: SCNNode { static var boxGeo: SCNBox? override init() { super.init() if PointNode.boxGeo == nil { PointNode.boxGeo = SCNBox(width: POINT_SIZE, height: POINT_HEIGHT, length: POINT_SIZE, chamferRadius: 0.001) // Setup the material of the point let material = PointNode.boxGeo!.firstMaterial material?.lightingModel = SCNMaterial.LightingModel.blinn material?.diffuse.contents = UIImage(named: 'wood-diffuse.jpg') material?.normal.contents = UIImage(named: 'wood-normal.png') material?.specular.contents = UIImage(named: 'wood-specular.jpg') } let object = SCNNode(geometry: PointNode.boxGeo!) object.transform = SCNMatrix4MakeTranslation(0.0, Float(POINT_HEIGHT) / 2.0, 0.0) self.addChildNode(object) } . . . }

V zgornji kodi boste opazili, da geometrijo vzdolž osi y prevedemo za polovico višine. Razlog za to je zagotoviti, da je dno predmeta vedno na y = 0 , tako da se zdi nad ravnino.

Nato bomo v funkciji povratnega klica upodabljalnika SceneKit narisali indikator, ki deluje kot konica konice pisala, z uporabo istega PointNode razred. Točko na tem mestu bomo spustili, če je risanje omogočeno, ali risbo dvignili v 3D strukturo, če je omogočen način 3D:

gostovanje spletnega mesta na githubu
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { updateFocusSquare() // Setup a dot that represents the virtual pen's tippoint if (self.virtualPenTip == nil) { self.virtualPenTip = PointNode(color: UIColor.red) self.sceneView.scene.rootNode.addChildNode(self.virtualPenTip!) } // Draw if let screenCenterInWorld = worldPositionFromScreenPosition(self.screenCenter, self.sceneView) { // Update virtual pen position self.virtualPenTip?.isHidden = false self.virtualPenTip?.simdPosition = screenCenterInWorld // Draw new point if (self.inDrawMode && !self.virtualObjectManager.pointNodeExistAt(pos: screenCenterInWorld)){ let newPoint = PointNode() self.sceneView.scene.rootNode.addChildNode(newPoint) self.virtualObjectManager.loadVirtualObject(newPoint, to: screenCenterInWorld) } // Convert drawing to 3D if (self.in3DMode ) { if self.trackImageInitialOrigin != nil { DispatchQueue.main.async { let newH = 0.4 * (self.trackImageInitialOrigin!.y - screenCenterInWorld.y) / self.sceneView.frame.height self.virtualObjectManager.setNewHeight(newHeight: newH) } } else { self.trackImageInitialOrigin = screenCenterInWorld } } }

virtualObjectManager je razred, ki upravlja izžrebane točke. V 3D načinu ocenjujemo razliko od zadnjega položaja in s to vrednostjo povečujemo / zmanjšujemo višino vseh točk.

Do zdaj risamo na zaznani površini ob predpostavki, da je navidezno pero v središču zaslona. Zdaj pa zabaven del - zaznavanje uporabnikovega prsta in uporaba namesto na sredini zaslona.

Zaznavanje uporabnikovega prsta

Ena izmed kul knjižnic, ki jo je Apple predstavil v iOS 11, je Vision Framework. Ponuja nekatere tehnike računalniškega vida na precej priročen in učinkovit način. Zlasti bomo uporabili tehniko sledenja predmetom za vadnico razširjene resničnosti. Sledenje predmetom deluje na naslednji način: najprej mu zagotovimo sliko in koordinate kvadrata znotraj meja slike za objekt, ki mu želimo slediti. Po tem pokličemo neko funkcijo za inicializacijo sledenja. Na koncu vnesemo novo sliko, na kateri se je položaj tega predmeta spremenil in rezultat analize prejšnje operacije. Glede na to nam bo vrnil novo lokacijo predmeta.

Uporabili bomo majhen trik. Uporabnika bomo prosili, naj nasloni roko na mizo, kot da drži pero, in se prepriča, da je njihova sličica obrnjena proti kameri, nato pa naj tapne svojo sličico na zaslonu. Tu je treba natančno razložiti dve točki. Najprej mora imeti sličica dovolj edinstvenih lastnosti, ki jih je mogoče izslediti s kontrastom med belo sličico, kožo in tabelo. To pomeni, da bo temnejši pigment kože privedel do zanesljivejšega sledenja. Drugič, ker uporabnik počiva na mizi in ker mizo že zaznamo kot ravnino, bo projiciranje lokacije sličice iz 2D pogleda v 3D okolje privedlo do skoraj natančne lokacije prsta na tabela.

Naslednja slika prikazuje funkcije, ki jih lahko zazna knjižnica Vision:

Funkcijske točke iOS ARKit zazna knjižnica Vision

Sledenje sličicam bomo inicializirali v potezi z dotikom, kot sledi:

// MARK: Object tracking fileprivate var lastObservation: VNDetectedObjectObservation? var trackImageBoundingBox: CGRect? let trackImageSize = CGFloat(20) @objc private func tapAction(recognizer: UITapGestureRecognizer) { lastObservation = nil let tapLocation = recognizer.location(in: view) // Set up the rect in the image in view coordinate space that we will track let trackImageBoundingBoxOrigin = CGPoint(x: tapLocation.x - trackImageSize / 2, y: tapLocation.y - trackImageSize / 2) trackImageBoundingBox = CGRect(origin: trackImageBoundingBoxOrigin, size: CGSize(width: trackImageSize, height: trackImageSize)) let t = CGAffineTransform(scaleX: 1.0 / self.view.frame.size.width, y: 1.0 / self.view.frame.size.height) let normalizedTrackImageBoundingBox = trackImageBoundingBox!.applying(t) // Transfrom the rect from view space to image space guard let fromViewToCameraImageTransform = self.sceneView.session.currentFrame?.displayTransform(withViewportSize: self.sceneView.frame.size, orientation: UIInterfaceOrientation.portrait).inverted() else { return } var trackImageBoundingBoxInImage = normalizedTrackImageBoundingBox.applying(fromViewToCameraImageTransform) trackImageBoundingBoxInImage.origin.y = 1 - trackImageBoundingBoxInImage.origin.y // Image space uses bottom left as origin while view space uses top left lastObservation = VNDetectedObjectObservation(boundingBox: trackImageBoundingBoxInImage) }

Zgornji del je najtežji del, kako pretvoriti lokacijo pipe iz koordinatnega prostora UIView v koordinatni prostor slike. ARKit nam zagotavlja displayTransform matrika, ki pretvori iz koordinatnega prostora slike v koordinatni prostor vidnega polja, ne pa tudi obratno. Torej, kako lahko naredimo obratno? Z uporabo inverzne matrike. V tej objavi sem res poskušal čim bolj zmanjšati uporabo matematike, vendar se ji v 3D svetu včasih ni mogoče izogniti.

Nato bomo v upodabljalniku podali novo sliko za sledenje nove lokacije prsta:

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { // Track the thumbnail guard let pixelBuffer = self.sceneView.session.currentFrame?.capturedImage, let observation = self.lastObservation else { return } let request = VNTrackObjectRequest(detectedObjectObservation: observation) { [unowned self] request, error in self.handle(request, error: error) } request.trackingLevel = .accurate do { try self.handler.perform([request], on: pixelBuffer) } catch { print(error) } . . . }

Ko je sledenje predmetom končano, bo poklicalo funkcijo povratnega klica, v kateri bomo posodobili lokacijo sličic. Običajno gre za inverzno kodo, zapisano v prepoznavalniku pipe:

fileprivate func handle(_ request: VNRequest, error: Error?) { DispatchQueue.main.async { guard let newObservation = request.results?.first as? VNDetectedObjectObservation else { return } self.lastObservation = newObservation var trackImageBoundingBoxInImage = newObservation.boundingBox // Transfrom the rect from image space to view space trackImageBoundingBoxInImage.origin.y = 1 - trackImageBoundingBoxInImage.origin.y guard let fromCameraImageToViewTransform = self.sceneView.session.currentFrame?.displayTransform(withViewportSize: self.sceneView.frame.size, orientation: UIInterfaceOrientation.portrait) else { return } let normalizedTrackImageBoundingBox = trackImageBoundingBoxInImage.applying(fromCameraImageToViewTransform) let t = CGAffineTransform(scaleX: self.view.frame.size.width, y: self.view.frame.size.height) let unnormalizedTrackImageBoundingBox = normalizedTrackImageBoundingBox.applying(t) self.trackImageBoundingBox = unnormalizedTrackImageBoundingBox // Get the projection if the location of the tracked image from image space to the nearest detected plane if let trackImageOrigin = self.trackImageBoundingBox?.origin { self.lastFingerWorldPos = self.virtualObjectManager.worldPositionFromScreenPosition(CGPoint(x: trackImageOrigin.x - 20.0, y: trackImageOrigin.y + 40.0), in: self.sceneView) } } }

Na koncu bomo uporabili self.lastFingerWorldPos namesto središča zaslona pri risanju in smo končali.

ARKit in prihodnost

V tej objavi smo pokazali, kako je AR lahko navdušujoč z interakcijo s prsti uporabnikov in resničnimi mizami. Z več napredkom v računalniškem vidu in z dodajanjem AR-prijazne strojne opreme na pripomočke (kot so globinske kamere) lahko dobimo dostop do 3D strukture vse več predmetov okoli nas.

Čeprav še ni izpuščen množicam, velja omeniti, kako je Microsoft zelo resen, da je s svojo zmago v AR dirki Naprava Hololens , ki združuje strojno opremo po meri AR in napredne tehnike prepoznavanja 3D okolja. Lahko počakate, da vidite, kdo bo zmagal na tej dirki, ali pa ste del nje, če razvijete resnično imerzivno zdaj razširjene resničnosti ! Toda prosim, storite človeštvu uslugo in ne spreminjajte živih predmetov v zajčke.

Razumevanje osnov

Katere funkcije ponuja Apple ARKit razvijalcem?

ARKit razvijalcem omogoča, da na iPhonu in iPadu ustvarijo izjemne aplikacije za obogateno resničnost z analizo prizora, ki ga predstavlja pogled kamere, in iskanjem vodoravnih ravnin v sobi.

Kako lahko sledimo predmetom s knjižnico Apple Vision?

Knjižnica Apple Vision razvijalcem omogoča sledenje predmetom v video toku. Razvijalci podajo koordinate pravokotnika znotraj začetnega okvirja slike za objekt, ki mu želijo slediti, nato pa se podajo v video okvirje in knjižnica vrne nov položaj za ta predmet.

Kako lahko začnemo z Apple ARKit?

Če želite začeti uporabljati Apple ARKit, prenesite iOS 11 na iPhone 6s ali novejši in ustvarite nov projekt ARKit v meniju Novo> Projekt> Razširjena resničnost. Vzorčno kodo AR, ki jo je priskrbel Apple, lahko preverite tudi tukaj: https://developer.apple.com/arkit/

Kako deluje razširjena resničnost?

Povečana resničnost je postopek prekrivanja digitalnega videa in drugih elementov CGI na resnični video. Ustvarjanje kakovostnega prekrivnega CGI na video posnetku s kamero zahteva uporabo številnih senzorjev in programskih rešitev.

Kakšna je korist od razširjene resničnosti?

Povečana resničnost ima številne potencialne aplikacije v različnih panogah. AR se lahko uporablja za usposabljanje v virtualnih nastavitvah, ki bi jih sicer težko ustvarili za namene usposabljanja, npr. vesoljski leti, medicinska industrija, nekateri inženirski projekti.

Kakšna je razlika med VR in AR?

Medtem ko AR temelji na konceptu prekrivanja CGI na resnični video, VR ustvarja popolnoma sintetično 3D okolje brez elementov iz resničnega življenja. Kot rezultat, je VR ponavadi bolj poglobljen, medtem ko AR ponuja uporabniku nekoliko več prilagodljivosti in svobode.

Kako hitro pretvoriti dolgočasne ikone v izvirne mojstrovine

Ui Design

Kako hitro pretvoriti dolgočasne ikone v izvirne mojstrovine
Računalniška geometrija v Pythonu: od teorije do aplikacije

Računalniška geometrija v Pythonu: od teorije do aplikacije

Tehnologija

Priljubljene Objave
Sprostitev moči večgeneracijske delovne sile, 1. del: Ali je starost pomembna?
Sprostitev moči večgeneracijske delovne sile, 1. del: Ali je starost pomembna?
Praznovanje 25 let razvoja jedra Linuxa
Praznovanje 25 let razvoja jedra Linuxa
Številni tolmači in časi izvajanja programskega jezika Ruby
Številni tolmači in časi izvajanja programskega jezika Ruby
Štiri pasti natančnosti analize sentimenta
Štiri pasti natančnosti analize sentimenta
Finančne posledice tehničnega dolga
Finančne posledice tehničnega dolga
 
Štiri pasti natančnosti analize sentimenta
Štiri pasti natančnosti analize sentimenta
Init.js: Vodnik za Zakaj in kako celotnega sklada JavaScript
Init.js: Vodnik za Zakaj in kako celotnega sklada JavaScript
Oblikovanje uporabniškega vmesnika TV: Delo s presledkom
Oblikovanje uporabniškega vmesnika TV: Delo s presledkom
Zdravljenje prekinjenih oskrbovalnih verig: proizvodnja zunaj Kitajske
Zdravljenje prekinjenih oskrbovalnih verig: proizvodnja zunaj Kitajske
Vadnica za skripte za Google Apps za obvladovanje makrov
Vadnica za skripte za Google Apps za obvladovanje makrov
Priljubljene Objave
  • to načelo oblikovanja naredi en del dela prevladujoč nad drugimi deli.
  • kaj ni ranljivost, ki lahko vpliva na spletno mesto spletnega podjetja?
  • kakšna družba je doo
  • večina zalednih baz podatkov lahko razlaga ukaze html.
  • kateri od naslednjih korakov je sprejet za obvladovanje valutnega tveganja?
Kategorije
  • Inovacije
  • Agile Talent
  • Prihodki In Rast
  • Spletno Mesto
  • © 2022 | Vse Pravice Pridržane

    portaldacalheta.pt