Files
ascendhuawei a61dda4612 upload
2020-09-16 11:50:53 -07:00

84 lines
2.1 KiB
Python

# !/usr/bin/env python
# -*- coding:utf-8 -*-
#
from ctypes import *
import os
import time
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(BASE_DIR)
from lib.atlasutil_so import libatlas
from constants import *
from acl_image import AclImage
CAMERA_OK = 0
CAMERA_ERROR = 1
CAMERA_CLOSED = 0
CAMERA_OPENED = 1
INVALID_IMAGE_PTR = 0
class CameraOutputC(Structure):
_fields_ = [
('size', c_int),
('data', POINTER(c_ubyte))
]
class Camera():
def __init__(self, id, fps=20, size=(1280, 720)):
self._id = id
self._fps = fps
self._width = size[0]
self._height = size[1]
self._size = int(self._width * self._height * 3 / 2)
self._status = CAMERA_CLOSED
if CAMERA_OK == self._open():
self._status = CAMERA_OPENED
else:
print("Open camera %d failed"%(id))
def _open(self):
ret = libatlas.OpenCameraEx(self._id, self._fps,
self._width, self._height)
print(ret)
if (ret != CAMERA_OK):
print("ERROR:Open camera %d failed ,ret = %d"%(self._id, ret))
return CAMERA_ERROR
self._status = CAMERA_OPENED
return CAMERA_OK
def is_opened(self):
return (self._status == CAMERA_OPENED)
def read(self):
frame_data = CameraOutputC()
ret = libatlas.ReadCameraFrame(self._id, byref(frame_data))
if (ret != CAMERA_OK):
print("ERROR:Read camera %d failed"%(self._id))
return None
return AclImage(addressof(frame_data.data.contents),
self._width, self._height, self._size, MEMORY_DVPP)
def close(self):
print("Close camera ", self._id)
libatlas.CloseCameraEx(self._id)
def __del__(self):
self.close()
if __name__ == "__main__":
cap = Camera(id=0, fps=20, size=(1280, 720))
start = time.time()
for i in range(0,100):
image = cap.read()
print("Read 100 frame exhaust ", time.time() - start)