84 lines
2.1 KiB
Python
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)
|
|
|
|
|
|
|