API 详解 (C#)
ListDevice
该接口用于枚举与电脑连接的所有相机,示例如下:
DeviceInfoVector dev_list= cl.ListDevice();
Open
该接口用于打开指定 SN 号的相机,示例如下:
System.IntPtr handle =cl.Open("207000145055");
// 207000145055 为相机 SN 号。
OpenDeviceByIP
该接口用于打开指定 IP 的相机,示例如下:
System.IntPtr handle =cl.OpenDeviceByIP("192.168.6.85");
// 192.168.6.85 为相机 IP 地址。
Close
该接口用于关闭相机,示例如下:
cl.Close(handle);
DeviceStreamEnable
该接口用于使能数据流。使能 Color 和 Depth 数据流的示例如下:
cl.DeviceStreamEnable(handle, PERCIPIO_STREAM_COLOR | PERCIPIO_STREAM_DEPTH);
DeviceStreamFormatDump
该接口用于列举数据流的分辨率和图像格式。以 Color 数据流为例,示例如下:
EnumEntryVector color_fmt_list = cl.DeviceStreamFormatDump(handle, PERCIPIO_STREAM_COLOR);
DeviceStreamFormatConfig
该接口用于配置数据流的分辨率,与 DeviceStreamFormatDump 联合使用,示例如下:
EnumEntryVector color_fmt_list = cl.DeviceStreamFormatDump(handle, PERCIPIO_STREAM_COLOR);
cl.DeviceStreamFormatConfig(handle, PERCIPIO_STREAM_COLOR, color_fmt_list[0]);
// 0 表示配置列表中的第一个分辨率。
DeviceReadCurrentEnumData
该接口用于读取当前数据流所用的分辨率,以 Color 数据流为例,示例如下:
TY_ENUM_ENTRY color_enum_desc = new TY_ENUM_ENTRY();
cl.DeviceReadCurrentEnumData(handle, PERCIPIO_STREAM_COLOR, color_enum_desc);
Console.WriteLine($"current color image mode{cl.Width(color_enum_desc)} x {cl.Height(color_enum_desc)}-{color_enum_desc.getDesc()}");
DeviceReadCalibData
该接口用于读取数据流的标定参数,以 Color 数据流为例,示例如下:
PercipioCalibData color_calib_data = cl.DeviceReadCalibData(handle, PERCIPIO_STREAM_COLOR);
int color_calib_width = color_calib_data.Width();
int color_calib_height = color_calib_data.Height();
CalibDataVector color_calib_intr = color_calib_data.Intrinsic();
CalibDataVector color_calib_extr = color_calib_data.Extrinsic();
CalibDataVector color_calib_dis = color_calib_data.Distortion();
DeviceStreamOn
开启数据流,示例如下:
cl.DeviceStreamOn(handle);
DeviceStreamOff
关闭数据流,示例如下:
cl.DeviceStreamOff(handle);
DeviceStreamRead
读取相机的传送的数据,示例如下:
FrameVector frames = cl.DeviceStreamRead(handle, 5000);
DeviceStreamDepthRender
该接口用于解析和渲染 Depth 图,示例如下:
image_data depth = new image_data();
cl.DeviceStreamDepthRender(frames[i], depth);
IntPtr pt = depth.buffer.getCPtr();
Bitmap bmp_depth = new Bitmap(depth.width, depth.height, depth.width * 3, PixelFormat.Format24bppRgb, pt);
pictureBox1.Image = (Image)(new Bitmap(bmp_depth, new Size(640, 480))).Clone();
DeviceStreamImageDecode
该接口用于解析 RGB 图,示例如下:
image_data bgr = new image_data();
cl.DeviceStreamImageDecode(frames[i], bgr);
IntPtr pt = bgr.buffer.getCPtr();
Bitmap bmp_color = new Bitmap(bgr.width, bgr.height, bgr.width * 3, PixelFormat.Format24bppRgb, pt);
pictureBox2.Image = (Image)(new Bitmap(bmp_color, new Size(640, 480))).Clone();
DeviceStreamIRRender
该接口用于解析 IR 图像,示例如下:
image_data rightIR = new image_data();
cl.DeviceStreamIRRender(frames[i], rightIR);
IntPtr pt = rightIR.buffer.getCPtr();
Bitmap rightIR_BMP = new Bitmap(rightIR.width, rightIR.height, 3*rightIR.width, PixelFormat.Format24bppRgb, pt);
pictureBox2.Image = (Image)(new Bitmap(rightIR_BMP, new Size(640, 480))).Clone();
DeviceControlLaserPowerAutoControlEnable
该接口用于使能/失能 TY_BOOL_LASER_AUTO_CTRL 属性。用于需要分析 IR 散斑图时,点亮激光器。示例如下:
cl.DeviceControlLaserPowerAutoControlEnable(handle, false);
DeviceControlLaserPowerConfig
该接口用于调整激光器亮度,示例如下:
cl.DeviceControlLaserPowerConfig(handle, 80);
DeviceColorStreamIspEnable
该接口用于打开/关闭软件 ISP,示例如下:
cl.DeviceColorStreamIspEnable(handle, true);
DeviceStreamMapDepthImageToColorCoordinate
该接口用于将 Depth 图对齐到 Color 图。示例如下,可参考 fetch_registration.cs
:
cl.DeviceStreamMapDepthImageToColorCoordinate(depth_calib.data(),depth.width,depth.height,scale_unit,depth,color_calib.data(),undsitortion_color.width,undsitortion_color.height,registration_depth);
DeviceStreamDoUndistortion
该接口用于对 Color 图做畸变校正。示例如下,可参考 fetch_registration.cs
:
cl.DeviceStreamDoUndistortion(color_calib.data(), color, undsitortion_color);
DeviceControlTriggerModeEnable
该接口用于设置相机的工作模式,0 代表 TY_TRIGGER_MODE_OFF,1 代表 TY_TRIGGER_MODE_SLAVE。示例如下:
cl.DeviceControlTriggerModeEnable(handle, 1);
DeviceControlTriggerModeSendTriggerSignal
该接口用于给相机发送软触发命令,示例如下:
cl.DeviceControlTriggerModeSendTriggerSignal(handle);
DeviceStreamMapDepthImageToPoint3D
该接口用于将 Depth 图转换成点云数据。示例如下,可参考 fetch_point3d.cs
:
cl.DeviceStreamMapDepthImageToPoint3D(image, depth_calib_data, f_depth_scale, p3d_list);
DevParamFrom
DevParamFromInt 接口用于定义 Int、Enum 型的变量,示例如下:
Int型
DevParam param = cl.DevParamFromInt(4096);
Enum型
DevParam param = cl.DevParamFromInt(TY_DEPTH_QUALITY_BASIC);
DevParamFromBool 接口用于定义 Bool 型变量,用于设置 Bool 类型的属性,示例如下:
DevParam param = cl.DevParamFromBool(true);
DevParamFromFloat 接口用于定义 Float 型变量,用于设置 Float 类型的属性,示例如下:
DevParam param = cl.DevParamFromFloat(1);
DeviceSetParameter/DeviceGetParameter
DeviceSetParameter 接口用于设置相机参数,可以设置 Int、Enum、Bool、Float、ByteArray 型参数。
DeviceGetParameter 接口用于读取相机参数,可以读取 Int、Enum、Bool、Float、ByteArray 型参数。
DeviceSetParameter 与 DeviceGetParameter 的示例代码如下:
Int 型
DevParam param = cl.DevParamFromInt(1088); cl.DeviceSetParameter(handle, TY_COMPONENT_RGB_CAM, TY_INT_EXPOSURE_TIME, param); DevParam read_param = cl.DeviceGetParameter(handle, TY_COMPONENT_RGB_CAM, TY_INT_EXPOSURE_TIME); int m_read_param = read_param.toInt(); Console.WriteLine($"current value {m_read_param}"); int min = read_param.mMin(); int max = read_param.mMax(); int inc = read_param.mInc(); Console.WriteLine($"min :{min},max:{max},inc:{inc}");
Enum 型
DevParam param = cl.DevParamFromInt(TY_TIME_SYNC_TYPE_HOST); cl.DeviceSetParameter(handle, TY_COMPONENT_DEVICE, TY_ENUM_TIME_SYNC_TYPE, param); DevParam read_param = cl.DeviceGetParameter(handle, TY_COMPONENT_DEVICE, TY_ENUM_TIME_SYNC_TYPE); int m_read_param = read_param.toInt(); Console.WriteLine($"current value {m_read_param}"); EnumEntryVector m_read_param2 = read_param.eList(); for (int i=0;i< m_read_param2.Count(); i++){ Console.WriteLine($"{ m_read_param2[i].value}");
Bool 型
DevParam param = cl.DevParamFromBool(false); cl.DeviceSetParameter(handle, TY_COMPONENT_RGB_CAM, TY_BOOL_AUTO_EXPOSURE, param); DevParam status = cl.DeviceGetParameter(handle, TY_COMPONENT_RGB_CAM, TY_BOOL_AUTO_EXPOSURE); bool m_status = status.toBool(); Console.WriteLine($"current value {m_status}");
Float 型
DevParam param = cl.DevParamFromFloat(0.0125f); cl.DeviceSetParameter(handle, TY_COMPONENT_DEPTH_CAM, TY_FLOAT_SCALE_UNIT, param); DevParam read_param = cl.DeviceGetParameter(handle, TY_COMPONENT_DEPTH_CAM, TY_FLOAT_SCALE_UNIT); float m_read_param = read_param.toFloat(); Console.WriteLine($"current value {m_read_param}"); float min = read_param.fMin(); float max = read_param.fMax(); float inc = read_param.fInc(); Console.WriteLine($"min :{min},max:{max},inc:{inc}");
ByteArray 型
ByteArrayVector array = new ByteArrayVector { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 14, 0, 0, 0 }; DevParam arr = cl.DevParamFromByteArray(array); cl.DeviceSetParameter(handle, TY_COMPONENT_IR_CAM_LEFT, TY_BYTEARRAY_HDR_PARAMETER,arr); DevParam hdr_arry = cl.DeviceGetParameter(handle, TY_COMPONENT_IR_CAM_LEFT, TY_BYTEARRAY_HDR_PARAMETER); ByteArrayVector hdr_arry_1 = hdr_arry.toByteArray(); for (int i = 0; i < hdr_arry_1.Count(); i++) { Console.Write($",{hdr_arry_1[i]}"); }
Struct(roi) 型
PercipioAecROI roi = new PercipioAecROI(0, 0, 640, 480); DevParam param = cl.DevParamFromPercipioAecROI(roi); cl.DeviceSetParameter(handle, TY_COMPONENT_RGB_CAM, TY_STRUCT_AEC_ROI, param); DevParam readParam = cl.DeviceGetParameter(handle, TY_COMPONENT_RGB_CAM, TY_STRUCT_AEC_ROI); ArrayVector mReadParam = readParam.toArray(); Console.WriteLine("aec roi: " + string.Join(",", mReadParam));
get_netinfo
该接口可用于获取打开的网络相机的设备信息,如 IP、MAC、Netmask、Gateway。
IP 的获取示例如下:
handle = cl.Open(dev_list[select].id);
Console.WriteLine("ip {0}", dev_list[select].get_netinfo().ip());
DeviceLoadDefaultParameters
该接口用于加载相机的配置文件(custom_block.bin 文件中保存了相机参数)。
int err = cl.DeviceLoadDefaultParameters(handle);
if (err != TY_STATUS_OK)
Console.WriteLine(string.Format("Load default parameters fail: {0}!", err));
else
Console.WriteLine(string.Format("Load default parameters successful!"));
支持加载的参数类型有 Int、Float、Enum、Bool、ByteArray。