Фреймворки Vision и ARKit в проекте Xcode - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу создать приложение ARKit, используя Xcode.Я хочу, чтобы он распознавал общий прямоугольник без нажатия кнопки и чтобы впоследствии прямоугольник выполнял определенную функцию.

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вам не нужно ARKit для распознавания прямоугольников, только Vision.

Для распознавания общих прямоугольников используйте VNDetectRectanglesRequest.

0 голосов
/ 07 декабря 2018

Как вы правильно написали, вам нужно использовать Vision или CoreML фреймворки в вашем проекте вместе с ARKit.Также вам необходимо создать предварительно обученную модель машинного обучения (файл .mlmodel), чтобы классифицировать входные данные для распознавания вашего общего прямоугольника.

Для создания модели обучения используйте один из следующих ресурсов: TensorFlow , Тури , Кафе или Керас .

Используя .mlmodel с тегами классификации внутри него, Vision запрашивает результаты возврата в виде VNRecognizedObjectObservation объектов, которые идентифицируют объекты, найденные в захваченной сцене.Таким образом, если соответствующий тег изображения доступен через процесс распознавания в ARSKView, то будет создан ARAnchor (и объект SK / SCN может быть помещен в этот ARAnchor).

Вотфрагмент кода на тему «как это работает»:

import UIKit
import ARKit
import Vision
import SpriteKit

.................................................................

// file – ARBridge.swift
class ARBridge {
    static let shared = ARBridge()
    var anchorsToIdentifiers = [ARAnchor : String]()
}

.................................................................

// file – Scene.swift
DispatchQueue.global(qos: .background).async {
    do {
        let model = try VNCoreMLModel(for: Inceptionv3().model)
        let request = VNCoreMLRequest(model: model, completionHandler: { (request, error) in

             DispatchQueue.main.async {
                 guard let results = request.results as? [VNClassificationObservation], let result = results.first else {
                     print ("No results.")
                     return
                 }
                 var translation = matrix_identity_float4x4
                 translation.columns.3.z = -0.75
                 let transform = simd_mul(currentFrame.camera.transform, translation)
                 let anchor = ARAnchor(transform: transform)
                 ARBridge.shared.anchorsToIdentifiers[anchor] = result.identifier
                 sceneView.session.add(anchor: anchor)
             }
         }
         let handler = VNImageRequestHandler(cvPixelBuffer: currentFrame.capturedImage, options: [:])
         try handler.perform([request])
     } catch { 
         print(error) 
     }
}

.................................................................

// file – ViewController.swift
func view(_ view: ARSKView, nodeFor anchor: ARAnchor) -> SKNode? {
    guard let identifier = ARBridge.shared.anchorsToIdentifiers[anchor] else {
        return nil
    }
    let labelNode = SKLabelNode(text: identifier)
    labelNode.horizontalAlignmentMode = .center
    labelNode.verticalAlignmentMode = .center
    labelNode.fontName = UIFont.boldSystemFont(ofSize: 24).fontName
    return labelNode
}

И вы можете скачать два проекта Apple ( пример кода ), написанных инженерами Vision:

Распознавание объектов в режиме реального времени захвата

Классификация изображений с помощью Vision и Core ML

Надеюсь, это поможет.

...