Files
AutoControlSystem-G/Vision/tool/tuyang/multidevice_fetch.py

107 lines
2.9 KiB
Python
Raw Permalink Normal View History

2025-07-29 13:16:30 +08:00
import pcammls
from pcammls import *
import cv2
import numpy
import sys
import os
class PythonPercipioDeviceEvent(pcammls.DeviceEvent):
Offline = False
def __init__(self):
pcammls.DeviceEvent.__init__(self)
def run(self, handle, eventID):
if eventID==TY_EVENT_DEVICE_OFFLINE:
print('=== Event Callback: Device Offline!')
self.Offline = True
return 0
def IsOffline(self):
return self.Offline
def main():
cl = PercipioSDK()
dev_list = cl.ListDevice()
for idx in range(len(dev_list)):
dev = dev_list[idx]
print ('{} -- {} \t {}'.format(idx,dev.id,dev.iface.id))
if len(dev_list)==0:
print ('no device')
return
#register offline event
event = PythonPercipioDeviceEvent()
cl.DeviceRegiststerCallBackEvent(event)
#sn list init
sn = [0] * len(dev_list)
for idx in range(len(dev_list)):
sn[idx] = dev_list[idx].id
#open device
handle = [0] * len(dev_list)
for i in range(len(dev_list)):
handle[i] = cl.Open(sn[i])
if not cl.isValidHandle(handle[i]):
err = cl.TYGetLastErrorCodedescription()
print('no device found : ', end='')
print(err)
return
#device stream config
for i in range(len(dev_list)):
depth_fmt_list = cl.DeviceStreamFormatDump(handle[i], PERCIPIO_STREAM_DEPTH)
print ('depth image format list:')
for idx in range(len(depth_fmt_list)):
fmt = depth_fmt_list[idx]
print ('\t{} -size[{}x{}]\t-\t desc:{}'.format(idx, cl.Width(fmt), cl.Height(fmt), fmt.getDesc()))
cl.DeviceStreamFormatConfig(handle[i], PERCIPIO_STREAM_DEPTH, depth_fmt_list[0])
err = cl.DeviceLoadDefaultParameters(handle[i])
if err:
print('Load default parameters fail: ', end='')
print(cl.TYGetLastErrorCodedescription())
else:
print('Load default parameters successful')
err = cl.DeviceStreamEnable(handle[i], PERCIPIO_STREAM_DEPTH)
if err:
print('device stream enable err:{}'.format(err))
return
cl.DeviceStreamOn(handle[i])
depth_render = [0] * len(dev_list)
for i in range(len(dev_list)):
depth_render[i] = image_data()
while True:
if event.IsOffline():
break
for m in range(len(dev_list)):
image_list = cl.DeviceStreamRead(handle[m], -1)
for i in range(len(image_list)):
frame = image_list[i]
if frame.streamID == PERCIPIO_STREAM_DEPTH:
cl.DeviceStreamDepthRender(frame, depth_render[m])
arr = depth_render[m].as_nparray()
cv2.imshow(sn[m],arr)
k = cv2.waitKey(10)
if k==ord('q'):
break
for i in range(len(dev_list)):
cl.DeviceStreamOff(handle[i])
for i in range(len(dev_list)):
cl.Close(handle[i])
pass
if __name__=='__main__':
main()