测试完成代码
This commit is contained in:
157
Vision/tool/tuyang/frame_registration.py
Normal file
157
Vision/tool/tuyang/frame_registration.py
Normal file
@ -0,0 +1,157 @@
|
||||
'''
|
||||
Description:
|
||||
Author: zxy
|
||||
Date: 2023-07-14 09:48:00
|
||||
LastEditors: zxy
|
||||
LastEditTime: 2024-01-02 11:36:57
|
||||
'''
|
||||
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
|
||||
if len(dev_list) == 1:
|
||||
selected_idx = 0
|
||||
else:
|
||||
selected_idx = int(input('select a device:'))
|
||||
if selected_idx < 0 or selected_idx >= len(dev_list):
|
||||
return
|
||||
|
||||
sn = dev_list[selected_idx].id
|
||||
|
||||
handle = cl.Open(sn)
|
||||
if not cl.isValidHandle(handle):
|
||||
err = cl.TYGetLastErrorCodedescription()
|
||||
print('no device found : ', end='')
|
||||
print(err)
|
||||
return
|
||||
|
||||
event = PythonPercipioDeviceEvent()
|
||||
cl.DeviceRegiststerCallBackEvent(event)
|
||||
|
||||
color_fmt_list = cl.DeviceStreamFormatDump(handle, PERCIPIO_STREAM_COLOR)
|
||||
if len(color_fmt_list) == 0:
|
||||
print ('device has no color stream.')
|
||||
return
|
||||
|
||||
print ('color image format list:')
|
||||
for idx in range(len(color_fmt_list)):
|
||||
fmt = color_fmt_list[idx]
|
||||
print ('\t{} -size[{}x{}]\t-\t desc:{}'.format(idx, cl.Width(fmt), cl.Height(fmt), fmt.getDesc()))
|
||||
cl.DeviceStreamFormatConfig(handle, PERCIPIO_STREAM_COLOR, color_fmt_list[0])
|
||||
|
||||
depth_fmt_list = cl.DeviceStreamFormatDump(handle, PERCIPIO_STREAM_DEPTH)
|
||||
if len(depth_fmt_list) == 0:
|
||||
print ('device has no depth stream.')
|
||||
return
|
||||
|
||||
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, PERCIPIO_STREAM_DEPTH, depth_fmt_list[0])
|
||||
|
||||
err = cl.DeviceLoadDefaultParameters(handle)
|
||||
if err:
|
||||
print('Load default parameters fail: ', end='')
|
||||
print(cl.TYGetLastErrorCodedescription())
|
||||
else:
|
||||
print('Load default parameters successful')
|
||||
|
||||
scale_unit = cl.DeviceReadCalibDepthScaleUnit(handle)
|
||||
print ('depth image scale unit :{}'.format(scale_unit))
|
||||
|
||||
depth_calib = cl.DeviceReadCalibData(handle, PERCIPIO_STREAM_DEPTH)
|
||||
color_calib = cl.DeviceReadCalibData(handle, PERCIPIO_STREAM_COLOR)
|
||||
|
||||
err = cl.DeviceStreamEnable(handle, PERCIPIO_STREAM_COLOR | PERCIPIO_STREAM_DEPTH)
|
||||
if err:
|
||||
print('device stream enable err:{}'.format(err))
|
||||
return
|
||||
|
||||
print ('{} -- {} \t'.format(0,"Map depth to color coordinate(suggest)"))
|
||||
print ('{} -- {} \t'.format(1,"Map color to depth coordinate"))
|
||||
registration_mode = int(input('select registration mode(0 or 1):'))
|
||||
if selected_idx < 0 or selected_idx >= 2:
|
||||
registration_mode = 0
|
||||
|
||||
cl.DeviceStreamOn(handle)
|
||||
img_registration_depth = image_data()
|
||||
img_registration_render = image_data()
|
||||
img_parsed_color = image_data()
|
||||
img_undistortion_color = image_data()
|
||||
img_registration_color = image_data()
|
||||
while True:
|
||||
if event.IsOffline():
|
||||
break
|
||||
image_list = cl.DeviceStreamRead(handle, 2000)
|
||||
if len(image_list) == 2:
|
||||
for i in range(len(image_list)):
|
||||
frame = image_list[i]
|
||||
if frame.streamID == PERCIPIO_STREAM_DEPTH:
|
||||
img_depth = frame
|
||||
if frame.streamID == PERCIPIO_STREAM_COLOR:
|
||||
img_color = frame
|
||||
|
||||
if 0 == registration_mode:
|
||||
cl.DeviceStreamMapDepthImageToColorCoordinate(depth_calib, img_depth, scale_unit, color_calib, img_color.width, img_color.height, img_registration_depth)
|
||||
|
||||
cl.DeviceStreamDepthRender(img_registration_depth, img_registration_render)
|
||||
mat_depth_render = img_registration_render.as_nparray()
|
||||
cv2.imshow('registration', mat_depth_render)
|
||||
|
||||
cl.DeviceStreamImageDecode(img_color, img_parsed_color)
|
||||
cl.DeviceStreamDoUndistortion(color_calib, img_parsed_color, img_undistortion_color)
|
||||
mat_undistortion_color = img_undistortion_color.as_nparray()
|
||||
cv2.imshow('undistortion rgb', mat_undistortion_color)
|
||||
else:
|
||||
cl.DeviceStreamImageDecode(img_color, img_parsed_color)
|
||||
cl.DeviceStreamDoUndistortion(color_calib, img_parsed_color, img_undistortion_color)
|
||||
|
||||
cl.DeviceStreamMapRGBImageToDepthCoordinate(depth_calib, img_depth, scale_unit, color_calib, img_undistortion_color, img_registration_color)
|
||||
|
||||
cl.DeviceStreamDepthRender(img_depth, img_registration_render)
|
||||
mat_depth_render = img_registration_render.as_nparray()
|
||||
cv2.imshow('depth', mat_depth_render)
|
||||
|
||||
mat_registration_color = img_registration_color.as_nparray()
|
||||
cv2.imshow('registration rgb', mat_registration_color)
|
||||
|
||||
k = cv2.waitKey(10)
|
||||
if k==ord('q'):
|
||||
break
|
||||
|
||||
cl.DeviceStreamOff(handle)
|
||||
cl.Close(handle)
|
||||
pass
|
||||
|
||||
if __name__=='__main__':
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user