Slide 1

Slide 1 text

Providing Be,er Feedback in Real-&me Object Detec&on Apps try! Swi) Tokyo 2017 Lightning Talk shingt (Shinichi Goto) @ Wantedly, Inc. ɹ

Slide 2

Slide 2 text

Object Detec)on

Slide 3

Slide 3 text

Wantedly People

Slide 4

Slide 4 text

Goal and Problem

Slide 5

Slide 5 text

Assump&on: We already have detec&on logic

Slide 6

Slide 6 text

struct CardFeature { let coordinates: [CGPoint] ... }

Slide 7

Slide 7 text

extension DetectionViewController: AVCaptureVideoDataOutputSampleBufferDelegate { func captureOutput( _ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, ...) { ... guard let frame = sampleBuffer.toUIImage() else { return } let cardFeatures = detector.cardFeatures(in: frame) updateCircleLayersView(with: cardFeatures) ... } }

Slide 8

Slide 8 text

extension DetectionViewController: AVCaptureVideoDataOutputSampleBufferDelegate { func captureOutput( _ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, ...) { ... guard let frame = sampleBuffer.toUIImage() else { return } let cardFeatures = detector.cardFeatures(in: frame) ! // Detect cards updateCircleLayersView(with: cardFeatures) ... } }

Slide 9

Slide 9 text

extension DetectionViewController: AVCaptureVideoDataOutputSampleBufferDelegate { func captureOutput( _ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, ...) { ... guard let frame = sampleBuffer.toUIImage() else { return } let cardFeatures = detector.cardFeatures(in: frame) updateCircleLayersView(with: cardFeatures) ! // Add CALayers ... } }

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

One object

Slide 12

Slide 12 text

One object

Slide 13

Slide 13 text

Mul$ple objects

Slide 14

Slide 14 text

Mul$ple objects

Slide 15

Slide 15 text

What we want

Slide 16

Slide 16 text

Tracking • Assigning consistent labels to objects in videos • Generic trackers available in OpenCV • e.g. TLD, KCF, etc. • Performance issues on older iOS devices

Slide 17

Slide 17 text

Tracking (our case) • Combina)on of lightweight informa)on: • dHash (perceptual hash based on gradient) • Posi)on • Op)cal flow

Slide 18

Slide 18 text

struct CardFeature { let coordinates: [CGPoint] let trackingID: Int ! ... }

Slide 19

Slide 19 text

extension DetectionViewController: AVCaptureVideoDataOutputSampleBufferDelegate { func captureOutput( _ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, ...) { ... guard let frame = sampleBuffer.toUIImage() else { return } let cardFeatures = detector.cardFeatures(in: frame) // // Now we can animate circle layers // from previous positions to current positions // updateCircleLayersView(with: cardFeatures) ! ... } }

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Face Tracking using CoreImage open class CIFaceFeature : CIFeature { open var bounds: CGRect { get } open var trackingID: Int32 { get } ! ... }

Slide 24

Slide 24 text

Face Tracking using CoreImage open class CIFaceFeature : CIFeature { open var bounds: CGRect { get } open var trackingID: Int32 { get } ! ... } Sample including anima.on: h2ps:/ /github.com/shingt/FaceTracker- sample (Instead of our product code)

Slide 25

Slide 25 text

Summary • In real-*me object detec*on apps • Difficulty in giving feedback differs depending a situa*on • Tracking can improve feedback in some cases

Slide 26

Slide 26 text

Thank you!