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);

DeviceStreamMapRGBImageToDepthCoordinate

该接口用于将 Color 图坐标映射到 Depth 图,示例如下:

cl.DeviceStreamMapRGBImageToDepthCoordinate(depth_calib,depth,scale_unit,color_calib, undsitortion_color,registration_color);

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 型的变量,示例如下:

DevParam param =  cl.DevParamFromInt(4096);
  • DevParamFromEnum 接口用于定义 Enum 型的变量,实例如下:

DevParam param =  cl.DevParamFromEnum(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 的示例代码如下:

  1. 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}");
  1. Enum 型

DevParam param = cl.DevParamFromEnum(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);
uint m_read_param = read_param.toEnum();
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}");
}
  1. 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}");
  1. 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}");
  1. 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]}");
}
  1. 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());

DeviceWriteDefaultParametersFromJSFile

该接口用于将本地 json 文件中保存的参数内容写入相机 custom_block.bin 区,示例如下:

string filePath = @"C:\Users\G\Desktop\1.json";
cl.DeviceWriteDefaultParametersFromJSFile(handle, filePath);

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。

DeviceClearDefaultParameters

该接口用于清除相机内部存储区中的内容。

cl.DeviceClearDefaultParameters(handle);

DeviceHasStream

该接口用于判断相机是否具有特定的数据流,返回值为 Bool 型。

示例:判断相机是否具有 Color 数据流。

bool has_stream = false;
has_stream = cl.DeviceHasStream(handle, PERCIPIO_STREAM_IR_RIGHT);
Console.WriteLine($"has right ir {has_stream}");