First version.
This commit is contained in:
commit
114ab8d44e
24 changed files with 22859 additions and 0 deletions
125
escapi.py
Normal file
125
escapi.py
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
"""
|
||||
A simple python wrapper around escapi
|
||||
|
||||
Usage:
|
||||
|
||||
from camera import Device
|
||||
|
||||
device = Deveice.connect(0, 500, 500)
|
||||
image = device.get_image()
|
||||
"""
|
||||
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
from ctypes import *
|
||||
from PIL import Image
|
||||
import numpy as np
|
||||
import cv2
|
||||
|
||||
def resolve(name):
|
||||
f = os.path.join(os.path.dirname(__file__), name)
|
||||
return f
|
||||
|
||||
|
||||
class CAPTURE_PROPETIES:
|
||||
CAPTURE_BRIGHTNESS = 1,
|
||||
CAPTURE_CONTRAST = 2,
|
||||
CAPTURE_HUE = 3,
|
||||
CAPTURE_SATURATION = 4,
|
||||
CAPTURE_SHARPNESS = 5,
|
||||
CAPTURE_GAMMA = 6,
|
||||
CAPTURE_COLORENABLE = 7,
|
||||
CAPTURE_WHITEBALANCE = 8,
|
||||
CAPTURE_BACKLIGHTCOMPENSATION = 9,
|
||||
CAPTURE_GAIN = 10,
|
||||
CAPTURE_PAN = 11,
|
||||
CAPTURE_TILT = 12,
|
||||
CAPTURE_ROLL = 13,
|
||||
CAPTURE_ZOOM = 14,
|
||||
CAPTURE_EXPOSURE = 15,
|
||||
CAPTURE_IRIS = 16,
|
||||
CAPTURE_FOCUS = 17,
|
||||
CAPTURE_PROP_MAX = 18,
|
||||
|
||||
|
||||
class SimpleCapParms(Structure):
|
||||
_fields_ = [
|
||||
("buffer", POINTER(c_int)),
|
||||
("width", c_int),
|
||||
("height", c_int),
|
||||
("fps", c_int),
|
||||
]
|
||||
|
||||
|
||||
lib = None
|
||||
|
||||
|
||||
def init():
|
||||
global lib
|
||||
if platform.architecture()[0] == '32bit':
|
||||
dll_path = resolve(os.path.join("escapi", "escapi_x86.dll"))
|
||||
lib = cdll.LoadLibrary(dll_path)
|
||||
else:
|
||||
dll_path = resolve(os.path.join("escapi", "escapi_x64.dll"))
|
||||
lib = cdll.LoadLibrary(dll_path)
|
||||
if lib is None or lib.ESCAPIVersion() != 0xfff001:
|
||||
print("Invalid ESCAPI DLL found.")
|
||||
sys.exit(1)
|
||||
lib.initCapture.argtypes = [c_int, POINTER(SimpleCapParms)]
|
||||
lib.initCapture.restype = c_int
|
||||
lib.initCOM()
|
||||
|
||||
def count_capture_devices():
|
||||
return lib.countCaptureDevices()
|
||||
|
||||
def device_name(device):
|
||||
"""
|
||||
Get the device name for the given device
|
||||
:param device: The number of the device
|
||||
:return: The name of the device
|
||||
"""
|
||||
namearry = (c_char * 256)()
|
||||
lib.getCaptureDeviceName(device, namearry, 256)
|
||||
camearaname = namearry.value
|
||||
return camearaname
|
||||
|
||||
def init_camera(device, width, height, fps):
|
||||
global devices
|
||||
array = (width * height * c_int)()
|
||||
options = SimpleCapParms()
|
||||
options.width = width
|
||||
options.height = height
|
||||
options.fps = fps
|
||||
options.buffer = array
|
||||
lib.initCapture(device, byref(options))
|
||||
return array
|
||||
|
||||
def do_capture(device):
|
||||
lib.doCapture(device)
|
||||
|
||||
def is_capture_done(device):
|
||||
return lib.isCaptureDone(device)
|
||||
|
||||
def read(device, width, height, array):
|
||||
if is_capture_done(device):
|
||||
img = Image.frombuffer('RGBA', (width, height), array, 'raw', 'BGRA', 0, 1)
|
||||
img = np.array(img)
|
||||
img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR);
|
||||
return img
|
||||
else:
|
||||
return None
|
||||
|
||||
def get_image(device, width, height, array):
|
||||
lib.doCapture(device)
|
||||
|
||||
while lib.isCaptureDone(device) == 0:
|
||||
pass
|
||||
|
||||
img = Image.frombuffer('RGBA', (width, height), array, 'raw', 'BGRA', 0, 0)
|
||||
img = np.array(img)
|
||||
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR);
|
||||
return img
|
||||
|
||||
def deinit_camera(device):
|
||||
lib.deinitCapture(device)
|
||||
Loading…
Add table
Add a link
Reference in a new issue