Forum Archive

Get camera frames in realtime

kairess

I'm trying to get frames from camera but everything I tried was failed.

I want to process frames in realtime. Is there any method?

Thanks!

cvp

@kairess Perhaps start from @JonB 's example

pavlinb

Another good example:

# coding: utf-8

# https://github.com/jsbain/objc_hacks/blob/master/live_camera_view.py

# https://forum.omz-software.com/topic/2062/video-preview-inside-ui-view-beta

from objc_util import *
import ui

class LiveCameraView(ui.View):
    def __init__(self,device=0, *args, **kwargs):
        ui.View.__init__(self,*args,**kwargs)
        self._session=ObjCClass('AVCaptureSession').alloc().init()
        self._session.setSessionPreset_('AVCaptureSessionPresetHigh');
        inputDevices=ObjCClass('AVCaptureDevice').devices()
        self._inputDevice=inputDevices[device]

        deviceInput=ObjCClass('AVCaptureDeviceInput').deviceInputWithDevice_error_(self._inputDevice, None);
        if self._session.canAddInput_(deviceInput):
            self._session.addInput_(deviceInput)
        self._previewLayer=ObjCClass('AVCaptureVideoPreviewLayer').alloc().initWithSession_(self._session)
        self._previewLayer.setVideoGravity_(
        'AVLayerVideoGravityResizeAspectFill')
        rootLayer=ObjCInstance(self).layer()
        rootLayer.setMasksToBounds_(True)
        self._previewLayer.setFrame_(
        CGRect(CGPoint(-70, 0), CGSize(self.height,self.height)))
        rootLayer.insertSublayer_atIndex_(self._previewLayer,0)
        self._session.startRunning()
    def will_close(self):
        self._session.stopRunning()
    def layout(self):
        if not self._session.isRunning():
            self._session.startRunning()

rootview=LiveCameraView(frame=(0,0,576,576))
rootview.present('sheet')