import cv2 as cv
import numpy as np
class Camera :
def __init__ ( self , cam_type_state , stream_type , camera_id ) :
try :
camera_id = int ( camera_id )
except ValueError : # allow strings, ex: /dev/video0
pass
self . cam_type_state = cam_type_state
self . stream_type = stream_type
self . cur_frame_id = 0
self . cap = cv . VideoCapture ( camera_id )
self . W = self . cap . get ( cv . CAP_PROP_FRAME_WIDTH )
self . H = self . cap . get ( cv . CAP_PROP_FRAME_HEIGHT )
@classmethod
def bgr2nv12 ( self , bgr ) :
yuv = cv . cvtColor ( bgr , cv . COLOR_BGR2YUV_I420 )
uv_row_cnt = yuv . shape [ 0 ] / / 3
uv_plane = np . transpose ( yuv [ uv_row_cnt * 2 : ] . reshape ( 2 , - 1 ) , [ 1 , 0 ] )
yuv [ uv_row_cnt * 2 : ] = uv_plane . reshape ( uv_row_cnt , - 1 )
return yuv
def read_frames ( self ) :
while True :
sts , frame = self . cap . read ( )
if not sts :
break
yuv = Camera . bgr2nv12 ( frame )
yield yuv . data . tobytes ( )
self . cap . release ( )