Git Product home page Git Product logo

coreml-in-arkit's Introduction

CoreML-in-ARKit

This simple project detects objects in Augmented Reality and displays 3D labels on top of them. This serves as a basic template for an ARKit project to use CoreML.

image of scene with 3d labels on objects

Demo Video - on Youtube

Model: Inception V3

Language: Swift 4.0

Written in: Xcode 9.0 GM (9A235) (Updated) XCode 9 beta 3 (9M174d)

Content Technology: SceneKit

Tested on iPhone 7 plus running iOS 11 beta 3 (15A5318g)

Note: SceneKit can achieve a 60 FPS on iPhone7+ - though when it gets hot, it'll drop to 30 FPS.

Instructions

You'll have to download "Inceptionv3.mlmodel" from Apple's Machine Learning page, and copy it into your XCode project. (As depicted in the following gif)

Gif to show dragging and dropping of model into XCode

(Gif via Atomic14)

If you're having issues, double check that the model is part of a target (source: stackoverflow).

Footnotes

  • SceneKit Text Labels are expensive to render. Too many polygons (too much text, smoothness, characters) - can cause crashes. In future, SpriteKit would be more efficient for text-labels.

  • Not entirely certain if the code is actually transferring RGB data to the Vision Model (as opposed to YUV). Proof-of-concept-wise, it appears to work just fine with the Inception V3 model for now.

  • Whilst ARKit's FPS , is displayed - CoreML's speed is not. However, it does appear sufficiently fast for real-time ARKit applications.

  • Placement of the label is simply determined by the raycast screen centre-point to a ARKit feature-point. This could be altered for more stable placement.

Building Blocks (Overview)

Get CoreML running in real time in ARKit

  • There are some good tutorials / sample projects for getting CoreML running. See: [ 1 ] [ 2 ] [ 3 ]

  • What we do differently here is we're using ARKit's ARFrame as the image to be fed into CoreML.

let pixbuff : CVPixelBuffer? = (sceneView.session.currentFrame?.capturedImage)
  • We also use Threading to continuously run requests to CoreML in realtime, and without disturbing ARKit / SceneView
let dispatchQueueML = DispatchQueue(label: "com.hw.dispatchqueueml")
...
loopCoreMLUpdate() // on viewLoad
...
func loopCoreMLUpdate() {
    dispatchQueueML.async {
        // 1. Run Update.
        self.updateCoreML()
        // 2. Loop this function.
        self.loopCoreMLUpdate()
    }
}

Add 3D Text

  • Add a Tap Gesture.
  • On Tap. Get the raycast centre point, translating it to appropriate coordinates.
  • Render 3D text at that location. Use the most likely object.

coreml-in-arkit's People

Contributors

hanleyweng avatar nagam11 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

coreml-in-arkit's Issues

this code creates a leak

I realised that using the continuous vision request creates a leak when the arviewcontroller is dismissed, it stays in the heap.

adding textview to storyboard

Hi mate, how did you manage to add a textview to the storyboard without deleting the scene?
Really curious about that.

Licence

Hey Hanley,
the code is currently under no open-source license.
Would be great, if you could specify one.

Thanks
Michael

Incorrect distance on object placement

I was using an iPhone 12. Sometimes, when I tap the screen, the AR dot and text gets placed right at the camera instead of in the object.

Any idea why?

Image Confidence?

Hi, how could I get the percentage of confidence or accuracy of the prediction?

Thanks

200mb+ CoreML Models causes ARKit hiccups

Hi @hanleyweng
I'm doing a same thing as your project and I'm dealing with a big performance problem when running with a bigger coreml model 200mb. Whenever the coreml perform its request the arkit camera previewer get a flick. It seems like the coreml performing is blocked the rendering for a few milliseconds. I tried to run the bigger model on your project as well and there was.the same issues ! do you have any idea ?

something wrong with inceptionv3.mlmodel

I already copy the inceptionv3.mlmodel into project.but when i click Inceptionv3.mlmodel,it shows " Interface generation only available with valid target",which dont like the gif of yours.

dyld: Library not loaded - Error while running on iphone x

Xcode Version: 9.2 (9C40b)
Phone: iphone x

I am getting the following error message while running. Followed a few instructions on StackOverflow with no help. I have (1) my developer certificate set to always trust and (2) "Always embed swift standard libraries" set to Yes in Build Settings as suggested by some threads on StackOverflow. Also, tried running after cleaning build folder.

Error message:

dyld: Library not loaded: @rpath/libswiftARKit.dylib
  Referenced from: /var/containers/Bundle/Application/5CE8F604-58A4-48E3-8172-7C615161D3ED/CoreML in ARKit.app/CoreML in ARKit
  Reason: no suitable image found.  Did find:
	/private/var/containers/Bundle/Application/5CE8F604-58A4-48E3-8172-7C615161D3ED/CoreML in ARKit.app/Frameworks/libswiftARKit.dylib: code signing blocked mmap() of '/private/var/containers/Bundle/Application/5CE8F604-58A4-48E3-8172-7C615161D3ED/CoreML in ARKit.app/Frameworks/libswiftARKit.dylib'

Screenshot:
screen shot 2018-01-29 at 12 01 37 pm

How is the Label move as i move the object?

I tried running the project in iPhone 7 plus and it is working fine. I noticed as i move the object slowly, even the label moves. But in source code position updation of the node is not happening. Then how come, the text node is moving as i move the object slowly?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.