Получение черного экрана - PullRequest
0 голосов
/ 28 марта 2020

Итак, я начинающий, и я следую онлайн-учебник. Я скопировал код и не получаю ошибок, но моя программа, похоже, ничего не делает. Это код:

import UIKit
import AVKit
import Vision

class viewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate {

override func viewDidLoad(){
    super.viewDidLoad()

    let captureSession = AVCaptureSession()
    captureSession.sessionPreset = .photo

    guard let captureDevice = AVCaptureDevice.default(for: .video) else{ return }
    guard let input = try? AVCaptureDeviceInput(device: captureDevice)else{ return }
    captureSession.addInput(input)

    captureSession.startRunning()


    let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
    view.layer.addSublayer(previewLayer)
    previewLayer.frame = view.frame

    let dataOutput = AVCaptureVideoDataOutput()
    dataOutput.setSampleBufferDelegate(self , queue: DispatchQueue(label: "videoQueue"))
    captureSession.addOutput(dataOutput)

   guard  let model  = try?VNCoreMLModel(for: SqueezeNet().model)else { return }
     let request = VNCoreMLRequest(model: model)
     {  (finishedReq, err) in

        //print(finishedReq.results)
        guard let results = finishedReq.results as? [VNClassificationObservation] else { return }

        guard let firstObservation = results.first else { return }
        print (firstObservation.identifier, firstObservation.confidence)


    }
    //VNImageRequestHandler(cgImage: <#T##CGImage#>, options: [:]).perform(requests: [VNRequest])


func captureOutput(_ output: AVCaptureOutput, didDrop sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
     //print("Camera was able to capture a frame:", Date())
    guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)else { return }
   try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])

}

}}

1 Ответ

1 голос
/ 28 марта 2020

Одна вещь, которую вы забыли, спрашивает разрешение на использование камеры.

Что-то вроде:

AVCaptureDevice.requestAccess(for: AVMediaType.video)
{ response in
    if response
    {
        // Access granted. You can continue.
    }
    else
    {
        // Tell the user.
    }
}

Кроме того, у вас есть AVCaptureSession как локальная / автоматическая c переменная , Это будет освобождено, оставляя viewDidLoad(). Вы должны иметь переменную экземпляра. Документация iOS даже показывает это.

Сделав, по крайней мере, две простые ошибки, я советую вам следовать руководству по основам. Затем, когда вы все правильно поняли и увидели что-то на экране, добавьте ML-материал.

Удачи, это кажется очень хорошим предметом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...