图漾相机——C++语言属性设置

文章目录

  • 前言
  • 1.SDK API功能介绍
    • 1.1 Device组件下的API测试
      • 1.1.1 相机工作模式设置(TY_TRIGGER_PARAM_EX)
      • 1.1.2 TY_INT_FRAME_PER_TRIGGER
      • 1.1.3 TY_INT_PACKET_DELAY
      • 1.1.4 TY_INT_PACKET_SIZE
      • 1.1.5 TY_BOOL_GVSP_RESEND
      • 1.1.6 TY_BOOL_TRIGGER_OUT_IO
      • 1.1.7 TY_BOOL_KEEP_ALIVE_ONOFF
      • 1.1.8 TY_INT_KEEP_ALIVE_TIMEOUT
      • 1.1.9 TY_INT_TRIGGER_DELAY_US
      • 1.1.10 TY_INT_TRIGGER_DURATION_US
      • 1.1.11 TY_ENUM_STREAM_ASYNC
      • 1.1.12 TY_INT_CAPTURE_TIME_US
      • 1.1.13 TY_ENUM_TIME_SYNC_TYPE
      • 1.1.14 TY_BOOL_TIME_SYNC_READY
      • 1.1.15 TY_BOOL_CMOS_SYNC
      • 1.1.16 TY_INT_ACCEPTABLE_PERCENT
      • 1.1.17 TY_STRUCT_CAM_STATISTICS
      • 1.1.18 IP设置
    • 1.2 Laser组件下的API测试
      • 1.2.1 TY_BOOL_LASER_AUTO_CTRL
      • 1.2.2 TY_INT_LASER_POWER
      • 1.2.3 TY_BOOL_IR_FLASHLIGHT
      • 1.2.4 TY_BOOL_RGB_FLASHLIGHT
      • 1.2.5 TY_INT_IR_FLASHLIGHT_INTENSITY
      • 1.2.6 TY_INT_RGB_FLASHLIGHT_INTENSITY
    • 1.3 Depth组件下的API测试
      • 1.3.1 TY_FLOAT_SCALE_UNIT
      • 1.3.2 TY_INT_SGBM_IMAGE_NUM
      • 1.3.3 TY_INT_SGBM_DISPARITY_NUM
      • 1.3.4 TY_INT_SGBM_DISPARITY_OFFSET
      • 1.3.5 TY_INT_SGBM_MATCH_WIN_HEIGHT
      • 1.3.6 TY_INT_SGBM_MATCH_WIN_WIDTH
      • 1.3.7 TY_INT_SGBM_SEMI_PARAM_P1
      • 1.3.8 TY_INT_SGBM_SEMI_PARAM_P1_SCALE
      • 1.3.9 TY_INT_SGBM_SEMI_PARAM_P2
      • 1.3.10 TY_INT_SGBM_UNIQUE_FACTOR
      • 1.3.11 TY_INT_SGBM_UNIQUE_ABSDIFF
      • 1.3.12 TY_BOOL_SGBM_HFILTER_HALF_WIN
      • 1.3.13 TY_BOOL_SGBM_MEDFILTER
      • 1.3.14 TY_INT_SGBM_MEDFILTER_THRESH
      • 1.3.15 TY_BOOL_SGBM_LRC
      • 1.3.16 TY_INT_SGBM_LRC_DIFF
      • 1.3.17 TY_ENUM_DEPTH_QUALITY
      • 1.3.18 TY_INT_TOF_MODULATION_THRESHOLD
      • 1.3.19 TY_INT_TOF_JITTER_THRESHOLD
      • 1.3.20 TY_INT_FILTER_THRESHOLD
      • 1.3.21 TY_INT_TOF_CHANNEL
      • 1.3.22 TY_INT_TOF_HDR_RATIO
      • 1.3.23 TY_INT_TOF_ANTI_SUNLIGHT_INDEX
      • 1.3.24 TY_INT_MAX_SPECKLE_DIFF
      • 1.3.25 TY_INT_MAX_SPECKLE_SIZE
      • 1.3.26 TY_BOOL_TOF_ANTI_INTERFERENCE
      • 1.3.27 TY_ENUM_CONFIG_MODE
      • 1.4 RGB组件下的API测试
      • 1.4.1 TY_INT_ANALOG_GAIN
      • 1.4.2 TY_INT_R_GAIN
      • 1.4.3 TY_INT_G_GAIN
      • 1.4.4 TY_INT_B_GAIN
      • 1.4.5 TY_INT_EXPOSURE_TIME
      • 1.4.6 TY_INT_AE_TARGET_Y
      • 1.4.7 TY_STRUCT_AEC_ROI
      • 1.4.8 TY_BOOL_AUTO_EXPOSURE
      • 1.4.9 TY_BOOL_AUTO_AWB
      • 1.4.10 AUTO_ISP
    • 1.5 IR组件下的API测试
      • 1.5.1 TY_INT_EXPOSURE_TIME
      • 1.5.2 TY_INT_ANALOG_GAIN
      • 1.5.3 TY_INT_GAIN
      • 1.5.4 TY_BOOL_UNDISTORTION
      • 1.5.5 TY_BOOL_HDR
      • 1.5.6 TY_BYTEARRAY_HDR_PARAMETER
    • 1.6 Storage组件下的API测试
      • 1.6.1 TY_BYTEARRAY_CUSTOM_BLOCK
      • 1.6.2 TY_BYTEARRAY_ISP_BLOCK
    • 1.7 其他常用API测试
      • 1.7.1 TYHasFeature()
      • 1.7.2 TYGetFeatureInfo()
      • 1.7.3 TYGetDeviceFeatureNumber()
      • 1.7.4 TYGetDeviceFeatureInfo()
      • 1.7.5 write_parameters_to_storage()
      • 1.7.6 load_parameters_from_storage()
      • 1.7.7 clear_storage()
      • 1.7.8 selectDevice()
      • 1.7.9 TYOpenInterface()
      • 1.7.10 TYOpenDevice()
      • 1.7.11 parse_firmware_errcode()
      • 1.7.12 TYGetDeviceXMLSize()
      • 1.7.13 TYGetDeviceXML()
      • 1.7.14 TYImageMode2
    • 1.8 图像格式及分辨率测试
      • 1.8.1 Depth图像支持的格式及分辨率
      • 1.8.2 RGB图像支持的格式及分辨率
      • 1.8.3 IR图像分辨率测试
    • 1.9 RGBD对齐测试
      • 1.9.1图像对齐
      • 1.9.2 RGBD点云对齐测试
      • 1.9.3 视差参数
    • 1.10 获取相机标定参数API
      • 1.10.1 TY_STRUCT_CAM_INTRINSIC
      • 1.10.2 TY_STRUCT_EXTRINSIC_TO_DEPTH
      • 1.10.3 TY_STRUCT_CAM_DISTORTION
      • 1.10.4 TY_STRUCT_CAM_RECTIFIED_INTRI
      • 1.11 图像处理加速功能

前言

请参考图漾官网的在线文档:http://doc.percipio.xyz/cam/latest/apiguides/api_description.html
因为所有SDK都是基于C++代码,所以以C++为例。
在这里插入图片描述

测试相机列表

1.SDK API功能介绍

1.1 Device组件下的API测试

1.1.1 相机工作模式设置(TY_TRIGGER_PARAM_EX)

图漾相机包含多种工作模式设置

TY_TRIGGER_MODE_OFF:自由采集模式
TY_TRIGGER_MODE_SLAVE:软触发/硬触发模式
TY_TRIGGER_MODE_SIG_LASER:定制的工作模式,已弃用
TY_TRIGGER_MODE_M_SIG:相机接收到软触发信号后,自身触发的同时,在OutPut引脚输出信号,以触发从设备。

上述工作模式设置方法统一如下:

TY_TRIGGER_PARAM_EX trigger;
trigger.mode = TY_TRIGGER_MODE_OFF;//根据需要的工作模式进行配置
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, &trigger, sizeof(trigger)));

TY_TRIGGER_MODE_M_PER:相机按照特定的帧率触发,同时在OutPut引脚输出信号,以触发从设备。设置方法如下:

TY_TRIGGER_PARAM_EX param; 
param.mode = TY_TRIGGER_MODE_M_PER;
param.fps = 5;
ASSERT_OK(TYSetStruct(cams[count].hDev, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, (void*)&param, sizeof(param)));

注意:TY_TRIGGER_MODE_M_SIG和TY_TRIGGER_MODE_M_PER固件版本需大于3.13.68,否则使用TY_TRIGGER_PARAM进行设置

TY_TRIGGER_MODE_SIG:工作模式18,已弃用
TY_TRIGGER_MODE_PER:工作模式19,已弃用
TY_TRIGGER_MODE_TIMER_LIST:列表触发模式,定制功能,普通产品不建议使用

根据设置的触发开始时间(start_time_us)、每两帧的时间间隔数组(offset_us_list[])和触发次数(offset_us_count),相机定时采集(1 +offset_us_count)帧图像并输出图像数据。启用此⼯作模式要求相机先启动 PTP 对时,且 offset_us_count≤ 50。

设置方法如下:

TY_TRIGGER_PARAM_EX trigger;
trigger.mode = TY_TRIGGER_MODE_TIMER_LIST;
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, &trigger, sizeof(trigger)));
TY_TRIGGER_TIMER_LIST list_timer;
list_timer.start_time_us = (getSystemTime() + 3000) * 1000;
list_timer.offset_us_count = 4;
list_timer.offset_us_list[0] = 1000000;
list_timer.offset_us_list[1] = 1000000;
list_timer.offset_us_list[2] = 1000000;
list_timer.offset_us_list[3] = 1000000;
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_TIMER_LIST, &list_timer, sizeof(list_timer)));

TY_TRIGGER_MODE_TIMER_PERIOD:周期触发模式,定制功能,不建议使用

根据设置的触发开始时间(start_time_us)、触发次数(trigger_count)和触发时间间隔(peroid_us),相机每间隔
peroid_us 采集⼀帧图像,共采集 trigger_count 帧图像并输出图像数据。
此工作模式要求相机先启动 PTP 对时

设置方法如下:

TY_TRIGGER_PARAM_EX trigger;
trigger.mode = TY_TRIGGER_MODE_TIMER_PERIOD;
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, &trigger, sizeof(trigger)));
TY_TRIGGER_TIMER_PERIOD period_timer;
period_timer.start_time_us = (getSystemTime() + 3000) * 1000;
period_timer.trigger_count = 10;
period_timer.period_us = 1000000;
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_TIMER_PERIOD, &period_timer, sizeof(period_timer)));

TY_TRIGGER_MODE28:定制功能,不建议使用

在此工作模式下,相机接收到软触发/硬触发信号后,输出一帧深度图像和左ir图像(带泛光)。同时在OutPut引脚输出触发信号。

设置方法如下:

TY_TRIGGER_PARAM_EX trigger;
trigger.mode = TY_TRIGGER_MODE28;
trigger.led_expo = 1088;    // [3, 1088]
trigger.led_gain = 32;      // [0, 255]
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, &trigger, sizeof(trigger)));

TY_TRIGGER_MODE29:定制功能,不建议使用

在此工作模式下,相机按照特定的帧率,输出一帧深度图像和左ir图像(带泛光)。同时在OutPut引脚输出触发信号。

设置方法如下:

TY_TRIGGER_PARAM_EX trigger;
trigger.mode = TY_TRIGGER_MODE29;
trigger.fps = 5;           // [1, 10]
trigger.led_expo = 1088;    // [3,1088]
trigger.led_gain = 32;      // [0, 255]
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, &trigger, sizeof(trigger)));

TY_TRIGGER_WORK_MODE31:定制功能,不建议使用
设置方法如下:

TY_TRIGGER_PARAM_EX trigger;
trigger.mode = TY_TRIGGER_WORK_MODE31;
trigger.ir_gain[0] = 50;
trigger.ir_gain[1] = 100;
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_TRIGGER_PARAM_EX, &trigger, sizeof(trigger)));

1.1.2 TY_INT_FRAME_PER_TRIGGER

该功能可以设置相机在接收到一次软触发/硬触发后的出图数量,相机默认接收一次信号后只出一帧图像,此功能不建议使用。

设置方法如下:

int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_FRAME_PER_TRIGGER, value));

验证方法:

if (index % (value +1) == 0) 
{
LOGD("send soft trigger");
while (TY_STATUS_BUSY == TYSendSoftTrigger(hDevice));
}

一次触发后,上位机只可以拿到2帧图像。

1.1.3 TY_INT_PACKET_DELAY

该功能用于设置相机数据包传输时包与包之间延迟时间,用于网络环境不理想的情况下。

设置方法:

int32_t value = 10000;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_PACKET_DELAY, value));

验证方法:

观察相机帧率,TY_INT_PACKET_DELAY越大,相机帧率越低

1.1.4 TY_INT_PACKET_SIZE

该功能用于设置相机数据包的大小,用于网络环境不理想的情况下
设置方法:

int32_t value = 100;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_PACKET_SIZE, value));

验证方法:

观察相机帧率,TY_INT_PACKET_SIZE越小,相机帧率越低。

1.1.5 TY_BOOL_GVSP_RESEND

网络相机图像重传功能

设置方法

ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_GVSP_RESEND, true));

验证方法:

网络相机默认为未开启,图像重传模式(False),设置为True以后,开启重传,有效减少上位机无法获取到图像的概率。

在这里插入图片描述
不设置丢包重传会导致会存在如下常见问题:

1.Percipioview的连续模式可以正常取图,SDK打开后无法取图
2.连续模式的帧率与percipioview不一致
3.触发取图没有图像返回

1.1.6 TY_BOOL_TRIGGER_OUT_IO

该功能用于反转trigger_out的输出电平
设置方法:

ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_TRIGGER_OUT_IO, false));

验证方法:
相机进行trigger供电后,将示波器探头接在相机trigger_out引脚上

TY_BOOL_TRIGGER_OUT_IO = true;电平反转
TY_BOOL_TRIGGER_OUT_IO = false;电平不反转

1.1.7 TY_BOOL_KEEP_ALIVE_ONOFF

SDK 与相机维持通信状态保持机制,默认为 true。表示通讯保持。
设置方法:

ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_KEEP_ALIVE_ONOFF, false));

验证方法:

将此属性设置为false后,运行相机,以“ctrl+c”的方式异常终止SDK采图,相机激光器常亮,SDK无法再次打开相机

1.1.8 TY_INT_KEEP_ALIVE_TIMEOUT

SDK与相机维持通信状态保持时间,usb默认15000ms,网络相机默认3000ms。单位:ms
设置方法

int32_t value = 30000;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_KEEP_ALIVE_TIMEOUT, value));

验证方法

运行相机,以“ctrl+c”的方式异常终止SDK采图,相机激光器在常亮30000ms后熄灭

1.1.9 TY_INT_TRIGGER_DELAY_US

软/硬触发延迟时间设置。相机在收到硬触发信号后,延迟一段时间后出图。单位:us
设置方法:

int32_t value = 1300000;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_TRIGGER_DELAY_US, value));

验证方法:

设置后,相机在收到硬触发信号后,延迟 1300000us(1.3s)后出图

1.1.10 TY_INT_TRIGGER_DURATION_US

输出信号的电平保持时间,单位:us
设置方法:

int32_t value = 100000;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_TRIGGER_DURATION_US, value));

验证方法:

1.相机进行trigger供电后,将示波器探头接在相机trigger_out引脚上。
2.设置相机工作模式为:TY_TRIGGER_MODE_M_SIG
对于输出默认为高电平的相机,则信号低电平保持时间为100000us;
对于输出默认为低电平的相机,则信号高电平保持时间为100000us

注意:很少使用

1.1.11 TY_ENUM_STREAM_ASYNC

数据流异步功能
TY_STREAM_ASYNC_OFF:数据流同步 TY_STREAM_ASYNC_DEPTH:depth数据流异步
TY_STREAM_ASYNC_RGB:RGB数据流异步 TY_STREAM_ASYNC_DEPTH_RGB:depth和RGB数据流异步
TY_STREAM_ASYNC_ALL:所有数据流都异步

设置方法

ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_STREAM_ASYNC, TY_STREAM_ASYNC_RGB));

验证方法

观察程序运行log,以TY_STREAM_ASYNC_RGB为例,上位机先拿到一帧RGB图像,然后拿到一帧depth和ir图。depth和ir的时间戳一致,RGB的时间戳与depth和ir的不一致,根据使用的相机或早或晚的情况都存在。但是同一台相机不会出现有早有晚的情况。

1.1.12 TY_INT_CAPTURE_TIME_US

读取深度计算的时间,仅适用于触发模式下,单位us 自由采集模式下,读取的深度计算时间为0。
使用方法:

int32_t default_value=0;
ASSERT_OK(TYGetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_CAPTURE_TIME_US, &default_value));

验证方法:

与开发描述的深度计算时间统一

1.1.13 TY_ENUM_TIME_SYNC_TYPE

相机的对时功能

TY_TIME_SYNC_TYPE_NONE:不进行对时。 TY_TIME_SYNC_TYPE_HOST:相机与上位机对时
TY_TIME_SYNC_TYPE_NTP:相机与NTP服务器对时 TY_TIME_SYNC_TYPE_PTP:相机与PTP服务器对时
TY_TIME_SYNC_TYPE_CAN:相机与can网络对时,仅定制相机支持
TY_TIME_SYNC_TYPE_PTP_MASTER:设置相机为PTP服务器

设置方法:

ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_TIME_SYNC_TYPE, TY_TIME_SYNC_TYPE_HOST));
while (1) 
{
bool sync_ready;
ASSERT_OK(TYGetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_TIME_SYNC_READY, &sync_ready));
if (sync_ready) 
{
break;
}
MSLEEP(10);
}

验证方法:

TY_TIME_SYNC_TYPE_NONE:图像时间戳位数较短 。
TY_TIME_SYNC_TYPE_HOST:图像时间戳与上位机一致,修改上位机时间后,相机时间戳自动发生变化 。
TY_TIME_SYNC_TYPE_NTP:图像时间戳与NTP服务器一致,修改上位机时间后,时间戳不会发生变化。
TY_TIME_SYNC_TYPE_PTP:图像时间戳与PTP服务器一致,定制功能,不建议使用。
TY_TIME_SYNC_TYPE_CAN:图像时间戳与can网络服务器一致,定制相机,不建议使用。
TY_TIME_SYNC_TYPE_PTP_MASTER:相机自身作为PTP服务器,其他相机可以与其进行对时,定制功能,不建议使用。

对于NTP对时,需要额外验证指定服务器ip后的对时情况。
方法如下:

const char* ntp_ip = " 119.29.26.206 ";
int32_t ip_i[4];
uint8_t ip_b[4];
int32_t ip32;
sscanf(ntp_ip, "%d.%d.%d.%d", &ip_i[0], &ip_i[1], &ip_i[2], &ip_i[3]);
ip_b[0] = ip_i[0]; ip_b[1] = ip_i[1]; ip_b[2] = ip_i[2]; ip_b[3] = ip_i[3];
ip32 = TYIPv4ToInt(ip_b);
LOGI("Set persistent IP 0x%x(%d.%d.%d.%d)", ip32, ip_b[0], ip_b[1], ip_b[2], ip_b[3]);
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_NTP_SERVER_IP, ip32));
ASSERT_OK(TYGetInt(hDevice, TY_COMPONENT_DEVICE,TY_INT_NTP_SERVER_IP, &ip32));
TYIntToIPv4(ip32, ip_b);
LOGD("%d %d %d %d", ip_b[0], ip_b[1], ip_b[2], ip_b[3]);
LOGD("Set type of time sync mechanism");
ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_TIME_SYNC_TYPE, TY_TIME_SYNC_TYPE_NTP));
LOGD("Wait for time sync ready");
while (1) 
{
bool sync_ready;
ASSERT_OK(TYGetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_TIME_SYNC_READY, &sync_ready));
if (sync_ready) 
{
break;
}
MSLEEP(10);
}

1.1.14 TY_BOOL_TIME_SYNC_READY

对时是否成功判断API
使用方法:

bool sync_ready;
ASSERT_OK(TYGetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_TIME_SYNC_READY, &sync_ready));

验证方法:

设置相机为NTP对时,每隔1s打印一次对时是否成功的状态。
当对时尚未成功时,返回结果为false。
当对时成功时,返回结果为true。

1.1.15 TY_BOOL_CMOS_SYNC

左右ir异步曝光开关。true:同步曝光;false:异步曝光
设置方法:

ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEVICE, TY_BOOL_CMOS_SYNC, false));

验证方法:

使用FM851-E2相机,对比开启和关闭TY_BOOL_CMOS_SYNC后,深度图像的帧率, TY_BOOL_CMOS_SYNC =false时帧率比TY_BOOL_CMOS_SYNC = true时高。

1.1.16 TY_INT_ACCEPTABLE_PERCENT

网络数据包丢包容忍度,上位机接收到的图像数据包百分比低于此阈值的图像将被丢弃, 单位:%
设置方法:

ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEVICE, TY_INT_ACCEPTABLE_PERCENT, 90));

验证方法:

关闭网络重传后,将TY_INT_ACCEPTABLE_PERCENT设置成较小的数值时,在一台电脑上运行多台相机,观察各个相机的输出图像。当此值较小时,上位机将收到破损的图像(如:RGB上有大面积的绿色)

1.1.17 TY_STRUCT_CAM_STATISTICS

获取网络相机的传图情况。
设置方法:

TY_CAMERA_STATISTICS st;
   ASSERT_OK( TYGetStruct(hDevice, TY_COMPONENT_DEVICE, TY_STRUCT_CAM_STATISTICS, &st, sizeof(st)) );
  LOGI("Statistics:");
  LOGI("  packetReceived: %" PRIu64 " ", st.packetReceived);
  LOGI("  packetLost    : %" PRIu64 " ", st.packetLost);
  LOGI("  imageOutputed : %" PRIu64 " ", st.imageOutputed);
  LOGI("  imageDropped  : %" PRIu64 " ", st.imageDropped);

验证方法:

packetReceived:上位机共收到的数据包数量
packetLost:上位机共未收到的数据包数量
imageOutputed:上位机收到的图像数量(与数据流个数成整倍数关系)
imageDropped:上位机总的未收到的图像数量

1.1.18 IP设置

ip设置涉及3个API:

IP设置API:TY_INT_PERSISTENT_IP
子网掩码设置API:TY_INT_PERSISTENT_SUBMASK
网关设置API:TY_INT_PERSISTENT_GATEWAY

验证方法:

1.使用ForceDeviceIP设置合法的ip地址(动态、静态、临时ip)
2.使用ForceDeviceIP设置非法的ip地址(动态、静态、临时ip),设置静态ip后,相机上电重启,ip保持不变。可以在进行跨网段发现及跨网清除ip。

1.2 Laser组件下的API测试

1.2.1 TY_BOOL_LASER_AUTO_CTRL

激光自动控制开关

并不是根据光线亮度,自动调整激光器的亮度的意思!!!

设置方法:

ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_LASER, TY_BOOL_LASER_AUTO_CTRL, false));

验证方法:

1.对于主动双目结构光相机:
TY_BOOL_LASER_AUTO_CTRL=false时,出任意数据流,只要laser_power≠0,激光器都被点亮,ir为散斑图。
TY_BOOL_LASER_AUTO_CTRL = true时,只有出深度时,激光器才被点亮,ir出sobel图。

2.对于主动双目条纹光相机:
TY_BOOL_LASER_AUTO_CTRL =false时,出任意数据流,只要laser_power≠0,条纹光投射器都将被点亮。
TY_BOOL_LASER_AUTO_CTRL = true时,只有出深度时,条纹光投射器才会被点亮。

1.2.2 TY_INT_LASER_POWER

用于设置激光/条纹光投射器光源强度
设置方法:

int32_t value = 0;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_LASER, TY_INT_LASER_POWER, value));

验证方法:

TY_INT_LASER_POWER值越大,激光/条纹光投射器投射的光越亮

1.2.3 TY_BOOL_IR_FLASHLIGHT

用于开启IR的泛光灯源(FM855-E1-G)
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_LASER, TY_BOOL_IR_FLASHLIGHT, value));

验证方法:

将此属性设置为true以后,ir的泛光灯源被点亮 。
ir泛光灯源与RGB泛光灯源、激光器不可同时被点亮。
当相机出深度图时,ir泛光灯不可被点亮。

1.2.4 TY_BOOL_RGB_FLASHLIGHT

用于开启RGB的泛光灯源(FM855-E1-G)
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_LASER, TY_BOOL_RGB_FLASHLIGHT, value));

验证方法:

将此属性设置为true以后,RGB的泛光灯源被点亮。

1.2.5 TY_INT_IR_FLASHLIGHT_INTENSITY

用于设置IR泛光亮度强度(FM855-E1-G)
设置方法:

int32_t value = 0;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_LASER, TY_INT_IR_FLASHLIGHT_INTENSITY, value));

验证方法:

开启IR泛光后,设置的强度越大,灯越亮,IR图像越亮。

1.2.6 TY_INT_RGB_FLASHLIGHT_INTENSITY

用于设置RGB泛光亮度强度(FM855-E1-G)
设置方法:

int32_t value = 0;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_LASER, TY_INT_RGB_FLASHLIGHT_INTENSITY, value));

验证方法:

开启RGB泛光后,设置的强度越大,灯越亮,RGB图像越亮。

1.3 Depth组件下的API测试

1.3.1 TY_FLOAT_SCALE_UNIT

深度数值单位
设置方法:

float value = 0.25;
ASSERT_OK(TYSetFloat(hDevice, TY_COMPONENT_DEPTH_CAM, TY_FLOAT_SCALE_UNIT,value));

验证方法:

设置后,鼠标点击深度图,观察程序打印的深度值单位。如设置为0.25,则深度值为1000.5, 1000.8(打印数据精度的问题)

1.3.2 TY_INT_SGBM_IMAGE_NUM

SGBM计算深度时需要的ir图像数量
设置方法:

int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_IMAGE_NUM, value));

验证方法:

改变TY_INT_SGBM_IMAGE_NUM值,深度有效像素有明显差异,该参数越小,帧率越高

1.3.3 TY_INT_SGBM_DISPARITY_NUM

SGBM计算深度时的视差搜索范围
设置方法:

int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_DISPARITY_NUM, value));

验证方法:

改变TY_INT_SGBM_DISPARITY_NUM值,深度有效像素有明显差异

1.3.4 TY_INT_SGBM_DISPARITY_OFFSET

SGBM计算深度时开始搜索的视差值
设置方法:

int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_DISPARITY_OFFSET, value));

验证方法:

改变TY_INT_SGBM_DISPARITY_OFFSET值,深度有效像素有明显差异

1.3.5 TY_INT_SGBM_MATCH_WIN_HEIGHT

SGBM计算深度时匹配窗口的高
设置方法:

int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_MATCH_WIN_HEIGHT, value));

验证方法:

改变TY_INT_SGBM_MATCH_WIN_HEIGHT值,深度有效像素有明显差异。
TY_INT_SGBM_MATCH_WIN_HEIGHTTY_INT_SGBM_IMAGE_NUM存在约束关系,约束关系以相机config文件中的约束为准。

1.3.6 TY_INT_SGBM_MATCH_WIN_WIDTH

SGBM计算深度时匹配窗口的高
设置方法:

int32_t value = 10;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_MATCH_WIN_WIDTH, value));

验证方法:

改变TY_INT_SGBM_MATCH_WIN_WIDTH值,深度有效像素有明显差异

1.3.7 TY_INT_SGBM_SEMI_PARAM_P1

相邻像素 (+/-1) 约束惩罚参数
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_SEMI_PARAM_P1, value));

验证方法:

P1越小,深度上细小的黑洞就越多

1.3.8 TY_INT_SGBM_SEMI_PARAM_P1_SCALE

相邻像素 (+/-1) 约束惩罚参数 P1_scale
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_SEMI_PARAM_P1_SCALE, value));

验证方法:

P1_Scale参数越大,深度黑洞越多

1.3.9 TY_INT_SGBM_SEMI_PARAM_P2

周围像素约束惩罚参数 P2
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_SEMI_PARAM_P2, value));

验证方法:

调整P2,深度图有效像素及深度效果有明显变化

1.3.10 TY_INT_SGBM_UNIQUE_FACTOR

唯一性检查参数 2,即最优与次优匹配点的差值
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_UNIQUE_FACTOR, value));

验证方法:

唯一性百分比参数越大,深度黑洞越多

1.3.11 TY_INT_SGBM_UNIQUE_ABSDIFF

唯一性检查参数 1,即最优与次优匹配点的百分比
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_UNIQUE_FACTOR, value));

验证方法:

唯一性差值参数越大,深度黑洞越多

1.3.12 TY_BOOL_SGBM_HFILTER_HALF_WIN

搜索滤波开关。用于进一步优化深度图,去除噪声和不连续性,对物体边缘点云更友好
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEPTH_CAM, TY_BOOL_SGBM_HFILTER_HALF_WIN, value));

验证方法:

关闭搜索滤波后,深度黑洞变少,错误匹配点增多

1.3.13 TY_BOOL_SGBM_MEDFILTER

中值滤波开关,用于消除孤立的噪声点,同时尽可能地保留图像的边缘信息
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEPTH_CAM, TY_BOOL_SGBM_MEDFILTER, value));

验证方法:

开启中值滤波后,平面拟合的均方根误差变小(可以用PV进行辅证)

1.3.14 TY_INT_SGBM_MEDFILTER_THRESH

中值滤波阈值。设定值越大,过滤的噪点越多,但也可能会导致深度图的细节信息丢失
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_MEDFILTER_THRESH, value));

验证方法:

开启中值滤波后,中值滤波阈值参数越大,平面拟合的均方根误差越小(可以用PV进行辅证)

1.3.15 TY_BOOL_SGBM_LRC

左右一致性检查开关
设置方法:

bool value = false;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEPTH_CAM, TY_BOOL_SGBM_LRC, value));

验证方法:
关闭左右一致性检查后,错误匹配点变多

1.3.16 TY_INT_SGBM_LRC_DIFF

中值滤波阈值。设定值越大,过滤的噪点越多,但也可能会导致深度图的细节信息丢失
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_LRC_DIFF, value));

验证方法:

开启左右一致性检查后,一致性检查参数越大,错误匹配点越多

1.3.17 TY_ENUM_DEPTH_QUALITY

tof相机的深度图像质量
设置方法:

uint32_t value = 0;
ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEPTH_CAM, feature_id, value));

验证方法:

比较不同的图像质量下,深度图的帧率

1.3.18 TY_INT_TOF_MODULATION_THRESHOLD

tof深度相机接收激光调制光强的阈值,小于此阈值的像素点不参与计算深度,即像素点的深度值赋值为0
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_MODULATION_THRESHOLD, value));

验证方法:

参数越大,深度有效像素百分比越低

1.3.19 TY_INT_TOF_JITTER_THRESHOLD

tof 深度相机抖动过滤阈值,阈值设置值越大,深度图边缘抖动的深度数据过滤得越少
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_JITTER_THRESHOLD, value));

验证方法:

参数越小,深度有效像素百分比越低

1.3.20 TY_INT_FILTER_THRESHOLD

tof 深度相机飞点滤波阈值,默认值为 0,即不加滤波。滤波阈值设置越小,过滤的飞点越多
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_FILTER_THRESHOLD, value));

验证方法:

参数越小,深度有效像素百分比越低

1.3.21 TY_INT_TOF_CHANNEL

tof 深度相机调制频道。 不同调制频道的调制频率不同,互不干扰。 如需在同一场景运行多台 tof 深度相机,首先需确保同系列相机的调制频道不同

设置方法

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_CHANNEL, value));

验证方法

1.多台相机使用相同的频率进行对射制造多相机干扰现象;(多相机深度异常)
2.多台相机使用不同的频率进行对射制造多相机干扰现象;(多相机深度不受干扰)

1.3.22 TY_INT_TOF_HDR_RATIO

高动态范围比阈值,需在TY_ENUM_DEPTH_QUALITY=HIGH模式下使用
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_HDR_RATIO, value));

验证方法:

拍摄高反物体,使用不同的参数进行对比

1.3.23 TY_INT_TOF_ANTI_SUNLIGHT_INDEX

tof抗阳光指数
设置方法:

int32_t value = 1;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_TOF_ANTI_SUNLIGHT_INDEX, value));

验证方法:

在太阳光底下,设置该参数后,可以有效减少阳光的干扰

1.3.24 TY_INT_MAX_SPECKLE_DIFF

斑点滤波器聚类阈值,单位:mm。若相邻像素的深度差值小于该阈值,则认为该相邻像素属于同一个聚类斑点
设置方法:

int32_t value = 200;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_MAX_SPECKLE_DIFF, value));

验证方法:

阈值越小,图像滤除的斑点越多,在(max speckle size)较大值时调试diff参数,效果明显

1.3.25 TY_INT_MAX_SPECKLE_SIZE

斑点滤波器面积阈值,单位:像素。面积小于该阈值的聚类斑点会被滤除
设置方法:

int32_t value = 200;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_MAX_SPECKLE_SIZE, value));

验证方法:

阈值越大,图像滤除的斑点越多

1.3.26 TY_BOOL_TOF_ANTI_INTERFERENCE

抗多机干扰开关,适用于场景中dtof相机数量大于tof_channel数量时的场景,可以有效避免多机干扰现象。
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_DEPTH_CAM, TY_BOOL_TOF_ANTI_INTERFERENCE, value));

验证方法:

开启抗多机干扰后,同一场景中的多台dtof相机之间的影响有效减弱

1.3.27 TY_ENUM_CONFIG_MODE

V系列相机预设的参数,不同模式下相机的精度不同
设置方法:

uint32_t value = TY_CONFIG_MODE_PRESET1;
ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEVICE, TY_ENUM_CONFIG_MODE, value));

验证方法:

对比不同模式下,相机的精度、成像效果

1.4 RGB组件下的API测试

1.4.1 TY_INT_ANALOG_GAIN

用于设置RGB模拟增益
设置方法:

int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_ANALOG_GAIN, value));

验证方法:

参数越大,RGB图像越亮

1.4.2 TY_INT_R_GAIN

用于设置RGB红色通道增益
设置方法:

int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_R_GAIN, value));

验证方法:

参数越大,RGB图像越红

1.4.3 TY_INT_G_GAIN

用于设置RGB绿色通道增益
设置方法:

int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_G_GAIN, value));

验证方法:

参数越大,RGB图像越绿

1.4.4 TY_INT_B_GAIN

用于设置RGB蓝色通道增益
设置方法:

int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_B_GAIN, value));

验证方法:

参数越大,RGB图像越蓝

1.4.5 TY_INT_EXPOSURE_TIME

用于设置RGB曝光时间
设置方法:

int32_t value = 100;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_EXPOSURE_TIME, value));

验证方法:

参数越大,RGB图像越亮

1.4.6 TY_INT_AE_TARGET_Y

AEC调节的目标明亮度
设置方法:

int32_t value = 200;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_RGB_CAM, TY_INT_AE_TARGET_Y, value));

验证方法:

开启AEC以后,参数越低,图像越暗;参数越大,图像越亮

1.4.7 TY_STRUCT_AEC_ROI

AEC调节感兴趣区域,设置后,根据感兴趣区域的亮度,自动调整曝光时间
设置方法:

TY_AEC_ROI_PARAM roi;
roi.x = 0;
roi.y = 0;
roi.w = 100;
roi.h = 100;
ASSERT_OK(TYSetStruct(hDevice, TY_COMPONENT_RGB_CAM, TY_STRUCT_AEC_ROI, &roi, sizeof(roi)));

验证方法:

若感兴趣区域内过曝(日光灯),则整幅图像变暗
若感兴趣区域欠曝(黑色物体),则整幅图像变亮

1.4.8 TY_BOOL_AUTO_EXPOSURE

RGB自动曝光开关
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_RGB_CAM, TY_BOOL_AUTO_EXPOSURE, value));

验证方法:

方法1:开启RGB自动曝光后,相机对着日光灯,用手遮住RGB镜头,手移开后,图像会有一个收敛的过程。
方法2:关闭RGB自动曝光后,将曝光时间拉到最低,然后开启RGB自动曝光,图像会变亮

1.4.9 TY_BOOL_AUTO_AWB

RGB自动白平衡功能
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_RGB_CAM, TY_BOOL_AUTO_AWB, value));

验证方法:

使用FM851-E1相机,关闭自动白平衡后,调节RGB三通道增益,使RGB图像偏色,然后开启自动白平衡,图像恢复正常色彩

1.4.10 AUTO_ISP

若图像输出YUYV格式,则相机带有硬件ISP模块。
若图像输出BAYER8GB格式,则相机需要使用软件ISP。

针对RGB镜头无ISP功能,提供的软件isp功能,涉及TYISPCreate()ColorIspInitSetting()TYISPUpdateDevice() 3个API
验证方法:

连接一台FM851-E2相机,运行SimpleView_FetchFrame、SimpleView_TriggerMode1示例程序,对比RGB图像颜色。

启用auto isp后,TY_INT_ANALOG_GAIN会被设置为1

软ISP功能,仅针对BAYER8GB格式彩色相机,开启后可实现一定程度的自动白平衡和自动曝光,但会降低帧率。

1.5 IR组件下的API测试

1.5.1 TY_INT_EXPOSURE_TIME

用于设置左右IR曝光时间
设置方法:

int32_t value = 100;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_INT_EXPOSURE_TIME, value));

验证方法:

参数越大,IR图像越亮

1.5.2 TY_INT_ANALOG_GAIN

用于设置左右IR模拟增益
设置方法:

int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_INT_ANALOG_GAIN, value));

验证方法:

参数越大,IR图像越亮

1.5.3 TY_INT_GAIN

用于设置左右IR增益
设置方法:

int32_t value = 2;
ASSERT_OK(TYSetInt(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_INT_GAIN, value));

验证方法:

参数越大,IR图像越亮

1.5.4 TY_BOOL_UNDISTORTION

左右IR畸变校正开关,开启则表示进行校正,默认为不开启状态
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BOOL_UNDISTORTION, value));

验证方法:

拍摄天花板,开启畸变校正后,天花板上的缝隙拉直(与人眼看到的一样) 左右ir为绑定状态,要开一起开,要关一起关。以“后设置”的为准

1.5.5 TY_BOOL_HDR

左右IR HDR开关
设置方法:

bool value = true;
ASSERT_OK(TYSetBool(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BOOL_HDR, value));

验证方法:

开启HDR后,ir图像变的有“朦胧感”

1.5.6 TY_BYTEARRAY_HDR_PARAMETER

HDR曝光比参数
设置方法:
1.读取HDR数组的大小

uint32_t hdr_size;
ASSERT_OK(TYGetByteArraySize(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BYTEARRAY_HDR_PARAMETER, &hdr_size));
printf("hdr_size %d\n", hdr_size);

2.读取默认的HDR参数

uint32_t hdr_param[8];
hdr_param[0] = -1;
hdr_param[1] = -1;
ASSERT_OK(TYGetByteArray(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BYTEARRAY_HDR_PARAMETER, (uint8_t*)&hdr_param[0], hdr_size));
printf("default %d  %d\n", hdr_param[0], hdr_param[1]);

3.设置HDR参数

hdr_param[0] = 0;
hdr_param[1] = 0;
ASSERT_OK(TYSetByteArray(hDevice, TY_COMPONENT_IR_CAM_LEFT, TY_BYTEARRAY_HDR_PARAMETER, (uint8_t*)&hdr_param[0], hdr_size));

验证方法:

HDR参数范围[0,2],开启HDR后,参数越小,图像越亮

1.6 Storage组件下的API测试

操作存储空间,请使用API进行操作,切勿进入相机底层,通过echo的方式写入内容!!!

操作存储空间的方法请见DeviceStorage示例程序或SimpleView_SaveLoadConfigSaveLoadConfig_v2

1.6.1 TY_BYTEARRAY_CUSTOM_BLOCK

用于获取custom_block.bin存储空间大小
使用方法:
uint32_t block_size;

ASSERT_OK( TYGetByteArraySize(hDevice, TY_COMPONENT_STORAGE, TY_BYTEARRAY_CUSTOM_BLOCK, &block_size) );
LOGD("custom block bin size %d", block_size);

1.结构光相机文件内容一般为0xFF,ToF相机的内容一般为NUL。
2.对于结构光相机,自R3.13.81版本开始,custom_block.bin文件大小由原来的4kb变更为64kb。

1.6.2 TY_BYTEARRAY_ISP_BLOCK

用于获取isp_block.bin存储空间大小
使用方法:

uint32_t block_size;
ASSERT_OK(TYGetByteArraySize(hDevice, TY_COMPONENT_STORAGE, TY_BYTEARRAY_ISP_BLOCK, &block_size));
LOGD("isp block bin size %d", block_size);

1.7 其他常用API测试

1.7.1 TYHasFeature()

用于判断相机是否具备该功能
使用方法:

bool has_feature = false;
ASSERT_OK(TYHasFeature(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_SEMI_PARAM_P1, &has_feature));

验证方法:

1.若相机具有此功能,则返回结果为true,反之则返回false。
2.没有对应的Component,TYHasFeature上报-1008错误(TY_STATUS_INVALID_COMPONENT)

1.7.2 TYGetFeatureInfo()

用于获取功能的属性,如:isValid、accessMode、writableAtRun、componentID、featureID等
使用方法:

TY_FEATURE_INFO feature_info;
int32_t err = (TYGetFeatureInfo(hDevice, TY_COMPONENT_DEPTH_CAM, TY_INT_SGBM_SEMI_PARAM_P1, &feature_info));
printf("API return %d ,  isValid %d , accessMode %d  writeableatrun %d ,\n", err,feature_info.isValid, feature_info.accessMode, feature_info.writableAtRun);

验证方法:

若相机具有此功能,则API返回结果为0,isValid=true,其他描述与相机config一致。

1.7.3 TYGetDeviceFeatureNumber()

用于获取组件下feature的数量
使用方法:

uint32_t feature_number = 0;
ASSERT_OK(TYGetDeviceFeatureNumber(hDevice, TY_COMPONENT_DEPTH_CAM, &feature_number));
LOGD("feature_number %d", feature_number);

验证方法:

获取的feature数量与config文件中描述的数量进行比对(获取的比config文件中多一个,是calib info)

1.7.4 TYGetDeviceFeatureInfo()

和TYGetDeviceFeatureNumber搭配使用,可以获取组件下全部的feature信息
使用方法:

uint32_t feature_number = 0;
ASSERT_OK(TYGetDeviceFeatureNumber(hDevice, TY_COMPONENT_STORAGE, &feature_number));
LOGD("feature_number %d", feature_number);

std::vector <TY_FEATURE_INFO> feature_info(feature_number);
uint32_t entry_count = 0;
ASSERT_OK(TYGetDeviceFeatureInfo(hDevice, TY_COMPONENT_STORAGE, &feature_info[0], feature_number, &entry_count));
for (uint i = 0; i < feature_number; i++) 
{
LOGD("feature name [%s], writebleAtRun[%d], TY_FEATURE_ID [%x]", feature_info[i].name, feature_info[i].writableAtRun, feature_info[i].featureID);
}

验证方法:

与config文件的描述进行比对

1.7.5 write_parameters_to_storage()

SDK 3.6.51及以上版本新增功能,用于将PV导出的json文件写入相机custom_block.bin文件。
使用方法:

1.使用PV2.5.0版本及以上,生成一份当前相机参数的json文件(只保存打开相机后调整过的参数)
2.运行SimpleView_SaveLoadConfig -id 相机序列号 -s xxxx.json 该步骤会将json文件写入相机

验证方法:

1.相机断电重启后,使用PV直接加载参数,观察参数是否发生变化
2.SDK3.6.65及其之后,写入参数时会使用哈夫曼压缩方法,故通过直接查看文件为乱码,需要通过加载的方式验证。

1.7.6 load_parameters_from_storage()

SDK 3.6.51及以上版本新增功能,用于从custom_block.bin文件加载参数,并将其保存至本地文件
使用方法:

运行SimpleView_SaveLoadConfig -id 相机序列号 -o xxxxxxx.json
该步骤会从custom_block.bin加载参数并将参数输出至程序目录下的xxxxxxx.json文件中

验证方法:

有以下2种方法进行验证:
1.加载相机参数后, 查看相机图像变化与设置的参数是否一致。
2.在加载完成后,调用SDK API,读取被加载的参数,与文件内容进行比较。

1.7.7 clear_storage()

清除相机custom_block.bin存储区域的内容
使用方法:

 ASSERT_OK(clear_storage(hDevice));

验证方法:

custom_block.bin文件拷贝至本地,使用notepade++打开,文件内容显示为NUL或调用load_parameters_from_storage(),打印“The CRC check code is empty ”,接口返回错误-1001。

1.7.8 selectDevice()

该API可以使用指定的接口,根据id或者ip打开图漾相机
使用方法:
1.指定使用网络接口,打开图漾相机

std::vector<TY_DEVICE_BASE_INFO> selected;
    ASSERT_OK( selectDevice(TY_INTERFACE_ETHERNET, ID, IP, 1, selected) );

2.使用指定ID或IP打开相机

// ID = "207000149647";
IP = "192.168.6.150";
std::vector<TY_DEVICE_BASE_INFO> selected;
ASSERT_OK( selectDevice(TY_INTERFACE_ETHERNET, ID, IP, 1, selected) );

验证方法:

1.指定使用网络接口,打开图漾相机:当相机是usb相机时,无法打开相机。
2.使用指定ID或IP打开相机:无需输入序列号,每次运行程序都能打开指定的相机。
3.指定网络或usb接口列表中没有的相机—— >返回-1001

1.7.9 TYOpenInterface()

该API可以打开指定的网络接口

1.如网卡MAC地址为:88-a4-c2-b1-35-e3(ipconfig /all查看)
2.Ip地址为:192.168.6.45(对应16进制的小端存储为2d06a8c0)
3.则指定网卡时需要写成“eth-88-a4-c2-b1-35-e32d06a8c0”(注意大小写,需要做区分)。

使用方法:

char* iface_id = "eth-88-a4-c2-b1-35-e32d06a8c0";
ASSERT_OK(TYOpenInterface(iface_id, &hIface));

验证方法:

1.网卡MAC地址大写,接口报错-1023
2.网卡ip地址错误,接口报错-1023

1.7.10 TYOpenDevice()

该API用于打开图漾相机,若相机能够正常打开,则API返回结果为0。其他返回结果均为异常
测试方法:

1.跨网段打开相机 ——> -1005
2.打开正在采集图像的相机——>网络(-1014),usb(-1005)
3.打开初始化错误的相机——> -1024

1.7.11 parse_firmware_errcode()

用于打印-1024错误对应的错误码
使用方法:

TY_FW_ERRORCODE err_code;
int32_t TYOpenDevice_err = ( TYOpenDevice(hIface, selectedDev.id, &hDevice ,&err_code) );
printf("TYOpenDevice_err %d\n", TYOpenDevice_err);
parse_firmware_errcode(err_code);

验证方法:

使用打开相机时报错-1024的相机进行验证。parse_firmware_errcode(err_code);打印的错误与错误码表征的一致

1.7.12 TYGetDeviceXMLSize()

SDK3.6.52版本上首次加入此API,用以获取相机xml文件的大小
使用方法:

uint32_t size;
TYGetDeviceXMLSize(hDevice, &size);
LOGD("XML size %d", size);  

验证方法:

将读取的值与fetch_config.xml文件大小进行比较,读取到的值应比fetch_config.xml多1个字节(结束符)

1.7.13 TYGetDeviceXML()

SDK3.6.52版本首次加入,用以获取相机的xml文件
使用方法:

uint32_t size;
ASSERT_OK(TYGetDeviceXMLSize(hDevice, &size));
LOGD("XML size %d", size);  
std::vector<char> xmlBuffer(size);
ASSERT_OK(TYGetDeviceXML(hDevice, xmlBuffer.data(),size,&size));

1.API内容全部打印的方法:

std::cout << std::string(xmlBuffer.data(), size) << std::endl;

2.打印指定行的内容:

int32_t lineCount = 0;
size_t start = 0;
size_t end = 0;
while (lineCount < 50 && end != std::string::npos) 
{
end = std::string(xmlBuffer.data(), size).find('\n', start);
if (end != std::string::npos) 
{
lineCount++;
if (lineCount == 49) 
{
std::string line(xmlBuffer.data() + start, end - start);
printf("The firmware version is: %s\n", line.c_str());
break;
}
start = end + 1;
}
}

验证方法:
将API获取的内容打印出来,与fetch_config.xml文件进行比对。

1.7.14 TYImageMode2

1.在TY_RESOLUTION_MODE_LIST中,没有对1024x768这个分辨率进行定义,故TY_IMAGE_MODE_DEPTH16_1024x768为未定义的标识符。
2.在这种情况下,则需要通过**TYImageMode2()**接口,构造一个参数。

使用方法:

   TY_IMAGE_MODE ImageMode = TYImageMode2(TY_PIXEL_FORMAT_DEPTH16, 1024, 736);
   ASSERT_OK(TYSetEnum(hDevice, TY_COMPONENT_DEPTH_CAM, TY_ENUM_IMAGE_MODE, ImageMode));

用法不限于深度图分辨率,可以扩展到RGB和IR分辨率上

1.8 图像格式及分辨率测试

1.8.1 Depth图像支持的格式及分辨率

Depth图像格式具有depth16和xyz48两种格式,测试情况如下:
在这里插入图片描述

1.8.2 RGB图像支持的格式及分辨率

RGB具有多种图像格式,测试情况如下:
在这里插入图片描述

1.8.3 IR图像分辨率测试

IR具有多种图像格式,测试情况如下:
在这里插入图片描述

1.9 RGBD对齐测试

1.9.1图像对齐

图漾相机支持RGBD对齐,其中RGBD对齐分为Depth2RGB和RGB2Depth。
测试方法:
1.RGB2Depth

直接运行SimpleView_Registration,将相机固定后拍摄箱体,观察图像是否对齐。

2.Depth2RGB

修改宏:#define MAP_DEPTH_TO_COLOR 1后,运行SimpleView_Registration,将相机固定后拍摄箱体,观察图像是否对齐。

1.9.2 RGBD点云对齐测试

图漾SDK支持将相机输出的深度图和点云图做对齐后转化为点云数据。其中RGBD对齐分为Depth2RGB和RGB2Depth
测试方法:

1.RGB2Depth:直接运行SimpleView_Point3D,将相机固定后拍摄箱体,观察点云是否对齐。
2.Depth2RGB:运行SimpleView_Point3D -dep2rgb,将相机固定后拍摄箱体,观察点云是否对齐

1.9.3 视差参数

当RGB和DEPTH存在视差,导致RGBD对齐(rgb2dep)有大量黑洞或者存在错误匹配的情况,可适当调节此参数。文件位于include文件夹下的TYCoordinateMapper.h

在这里插入图片描述

delt值是用来过滤视差的,值越小,过滤越狠,会影响大斜面的对齐(RGB信息缺失)。
在这里插入图片描述

1.10 获取相机标定参数API

1.10.1 TY_STRUCT_CAM_INTRINSIC

获取相机内参API,可用于获取depth、color、ir_left、right_ir的内参。
使用方法:

TY_COMPONENT_ID componentID;
TY_FEATURE_ID featureID;
componentID = TY_COMPONENT_RGB_CAM;
featureID = TY_STRUCT_CAM_INTRINSIC;
TY_CAMERA_INTRINSIC intri;
ASSERT_OK(TYGetStruct(hDevice, componentID, featureID, &intri, sizeof(TY_CAMERA_INTRINSIC)));
LOGD("===%23s%f %f %f", "", intri.data[0], intri.data[1], intri.data[2]);
LOGD("===%23s%f %f %f", "", intri.data[3], intri.data[4], intri.data[5]);
LOGD("===%23s%f %f %f", "", intri.data[6], intri.data[7], intri.data[8]);

验证方法:

1.读取的内参与config文件中的一致,若分辨率与标定时使用的图像分辨率不一致,则等比例的进行放大和缩小。

TY_STRUCT_CAM_CALIB_DATA读取的内参与TY_STRUCT_CAM_INTRINSIC的内参区别
TY_STRUCT_CAM_CALIB_DATA内参是相机最大分辨率的内参
TY_STRUCT_CAM_INTRINSIC内参是相机当前分辨率的内参

1.10.2 TY_STRUCT_EXTRINSIC_TO_DEPTH

获取ir_right/rgb到左ir的外参。
使用方法:

TY_COMPONENT_ID componentID;
TY_FEATURE_ID featureID;
componentID = TY_COMPONENT_IR_CAM_RIGHT;
featureID = TY_STRUCT_EXTRINSIC_TO_DEPTH;
TY_CAMERA_EXTRINSIC extri;
ASSERT_OK(TYGetStruct(hDevice, componentID, featureID, &extri, sizeof(TY_CAMERA_EXTRINSIC)));
LOGD("===%23s%f %f %f %f", "", extri.data[0], extri.data[1], extri.data[2], extri.data[3]);
LOGD("===%23s%f %f %f %f", "", extri.data[4], extri.data[5], extri.data[6], extri.data[7]);
LOGD("===%23s%f %f %f %f", "", extri.data[8], extri.data[9], extri.data[10], extri.data[11]);
LOGD("===%23s%f %f %f %f", "", extri.data[12], extri.data[13], extri.data[14], extri.data[15]);

验证方法:

读取的参数与config中的一致,获取的参数不随分辨率切换而变化。

1.10.3 TY_STRUCT_CAM_DISTORTION

畸变参数,可用于rgb、ir_left、ir_right的畸变校正
使用方法:

TY_COMPONENT_ID componentID;
TY_FEATURE_ID featureID;
componentID = TY_COMPONENT_RGB_CAM;
featureID = TY_STRUCT_CAM_DISTORTION;
TY_CAMERA_DISTORTION dist;
ASSERT_OK(TYGetStruct(hDevice, componentID, featureID, &dist, sizeof(TY_CAMERA_DISTORTION)));
LOGD("===%23s%f %f %f %f", "", dist.data[0], dist.data[1], dist.data[2], dist.data[3]);
LOGD("===%23s%f %f %f %f", "", dist.data[4], dist.data[5], dist.data[6], dist.data[7]);
LOGD("===%23s%f %f %f %f", "", dist.data[8], dist.data[9], dist.data[10], dist.data[11]);

验证方法:

读取的参数与config中的一致,获取的参数不随分辨率切换而变化

1.10.4 TY_STRUCT_CAM_RECTIFIED_INTRI

获取校正后的ir_left/ir_right内参。
使用方法:

TY_COMPONENT_ID componentID;
TY_FEATURE_ID featureID;
componentID = TY_COMPONENT_IR_CAM_LEFT;
featureID = TY_STRUCT_CAM_RECTIFIED_INTRI;
TY_CAMERA_INTRINSIC intri;
ASSERT_OK(TYGetStruct(hDevice, componentID, featureID, &intri, sizeof(TY_CAMERA_INTRINSIC)));
LOGD("===%23s%f %f %f", "", intri.data[0], intri.data[1], intri.data[2]);
LOGD("===%23s%f %f %f", "", intri.data[3], intri.data[4], intri.data[5]);
LOGD("===%23s%f %f %f", "", intri.data[6], intri.data[7], intri.data[8]);

验证方法:

读取的参数与config中的一致

1.11 图像处理加速功能

开启OpenMP功能后,SDK运行时采用多核处理图像,CPU占用率高,处理图像快。
使用方法:
代码引用头文件“TYImageProc.h”并在代码中进行如下设置

TYImageProcesAcceEnable(true);
true:表示启用图像加速处理功能;false:表示不启用

验证方法:

在对齐程序中,打印做RGB畸变校正所花的时间,并观察上位机在运行对齐程序时的cpu占用率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/961598.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NoSQL与SQL比较

1.认识NoSQL NoSql可以翻译做Not Only Sql&#xff08;不仅仅是SQL&#xff09;&#xff0c;或者是No Sql&#xff08;非Sql的&#xff09;数据库。是相对于传统关系型数据库而言&#xff0c;有很大差异的一种特殊的数据库&#xff0c;因此也称之为非关系型数据库。 1.1.结构…

【Unity教程】零基础带你从小白到超神part3

粒子系统 在创建粒子系统之前&#xff0c;需要先添加一些粒子样式&#xff0c;这可以在资源商店中通过导入官方提供的StandardAssets资源包得到。完成资源的导入后&#xff0c;该资源包中的StandardAssets>ParticleSystems>Prefabs文件夹下包含多种成品粒子效果&#xf…

FastExcel使用详解

文章目录 FastExcel使用详解一、引言二、环境准备与依赖引入1、Maven 依赖引入2、实体类定义 三、核心操作&#xff1a;读写 Excel1、读取 Excel1.1 自定义监听器1.2 读取文件 2、写入 Excel2.1 简单写入2.2 模板写入 四、Spring Boot 集成示例1、文件上传&#xff08;导入&…

智能调度体系与自动驾驶技术优化运输配送效率的研究——兼论开源AI智能名片2+1链动模式S2B2C商城小程序的应用潜力

摘要&#xff1a;随着全球化和数字化进程的加速&#xff0c;消费者需求日益呈现出碎片化和个性化的趋势&#xff0c;这对物流运输行业提出了前所未有的挑战。传统的物流调度体系与调度方式已难以满足当前复杂多变的物流需求&#xff0c;因此&#xff0c;物流企业必须积极引入大…

数据结构与算法分析:专题内容——人工智能中的寻路4之A*搜索(代码详解)

一、算法描述 广度优先搜索能够找到一个最优解&#xff08;如果存在&#xff09;&#xff0c;但是可能需要访问大量的节点&#xff0c;因为我们可以看到&#xff0c;它并没有尝试对候选走法进行排序。相反&#xff0c;深度优先搜索却是尽可能多地向前探测路径&#xff0c;不过…

vue3相关知识点

title: vue_1 date: 2025-01-28 12:00:00 tags:- 前端 categories:- 前端vue3 Webpack ~ vite vue3是基于vite创建的 vite 更快一点 一些准备工作 准备后如图所示 插件 Main.ts // 引入createApp用于创建应用 import {createApp} from vue // 引入App根组件 import App f…

零基础Vue入门4——Vue3基础核心

本节重点&#xff1a; vue3最佳实践 ref reactive computed watch、watchEffect 讲解重点之后下面会带大家开发一个页面&#xff08;表单表格&#xff09;&#xff0c;之后会有一个TodoList的小练习&#xff0c;文末附有小练习的代码参考。跟着练习一定带你可以上手开发vu…

文件上传2

BUUCTF 你传你&#x1f40e;呢 先上传.htaccess 修改格式 即可上传成功 返回上传图片格式的木马 用蚁剑连接 5ecf1cca-59a1-408b-b616-090edf124db5.node5.buuoj.cn:81/upload/7d8511a847edeacb5385299396a96d91/rao.jpg 即可得到flag [GXYCTF2019]BabyUpload

网安加·百家讲坛 | 樊山:数据安全之威胁建模

作者简介&#xff1a;樊山&#xff0c;锦联世纪教育能源工业互联网数字安全CSM(新能源运维师)课程特聘培训讲师&#xff0c;哈尔滨工业大学&#xff08;深圳&#xff09;信飞合创数据合规联合实验室特聘专家&#xff0c;武汉赛博网络安全人才研究中心资深专家&#xff1b;近24年…

联想Y7000+RTX4060+i7+Ubuntu22.04运行DeepSeek开源多模态大模型Janus-Pro-1B+本地部署

直接上手搓了&#xff1a; conda create -n myenv python3.10 -ygit clone https://github.com/deepseek-ai/Janus.gitcd Januspip install -e .pip install webencodings beautifulsoup4 tinycss2pip install -e .[gradio]pip install pexpect>4.3python demo/app_januspr…

冬天适合养什么鱼?

各位鱼友们&#xff0c;冬天来了&#xff0c;是不是还在为养什么鱼而烦恼&#xff1f;别担心&#xff0c;今天就来给大家好好推荐一些适合冬天养的鱼&#xff0c;让你的水族箱在寒冷的冬天也能生机勃勃&#xff01; 一、金鱼&#xff1a;冬日里的“小暖男” 金鱼绝对是冬季养鱼…

2024年终总结

回顾 今年过年没回老家&#xff0c;趁着有时间&#xff0c;总结一下24年吧。 我把23年看做是打基础的一年&#xff0c;而24年主要是忙于项目的一年&#xff0c;基本上大部分时间都是忙着交付软件&#xff0c;写的一些文章也大部分都是项目中遇到的问题和解决方案&#xff0c;虽…

安宝特方案 | 智能培训:安宝特AR如何提升企业技能培训的效率与互动性

随着企业不断推进数字化转型&#xff0c;传统培训方式已无法满足现代企业对高效、灵活培训的需求。尤其在技术更新频繁、工艺流程复杂、员工流动性大的环境中&#xff0c;传统培训模式的局限性愈加明显。为了提升培训质量、降低培训成本&#xff0c;并帮助员工迅速掌握新技能&a…

1.27补题 回训练营

E 智乃的小球 题目描述 在一条无限长的水平直线上&#xff0c;有 n 个小球&#xff0c;每个小球的质量相同&#xff0c;体积可以忽略不计。这些小球初始时位于直线上的不同位置&#xff0c;并且每个小球有一个初始速度&#xff0c;速度为 -1 m/s 或 1 m/s。速度为 -1 m/s 表示…

Spring Boot 实现文件上传和下载

文章目录 Spring Boot 实现文件上传和下载一、引言二、文件上传1、配置Spring Boot项目2、创建文件上传控制器3、配置文件上传大小限制 三、文件下载1、创建文件下载控制器 四、使用示例1、文件上传2、文件下载 五、总结 Spring Boot 实现文件上传和下载 一、引言 在现代Web应…

CTFSHOW-WEB入门-命令执行39-53

题目&#xff1a;web 39 题目&#xff1a;解题思路&#xff1a;分析代码可以知道题目要求get一个c的参数&#xff0c;并且过滤了flag&#xff0c;大小写均过滤&#xff0c;于是可以想到使用&#xff1f;或者*通配符绕过。这里有include函数&#xff0c;由于include是个漏洞函数…

OpenCSG月度更新2025.1

1月的OpenCSG取得了一些亮眼的成绩 在2025年1月&#xff0c;OpenCSG在产品和社区方面继续取得了显著进展。产品方面&#xff0c;推出了AutoHub浏览器自动化助手&#xff0c;帮助用户提升浏览体验&#xff1b;CSGHub企业版功能全面升级&#xff0c;现已开放试用申请&#xff0c…

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…

二叉树-堆(补充)

二叉树-堆 1.二叉树的基本特性2.堆2.1.堆的基本概念2.2.堆的实现2.2.1.基本结构2.2.2.堆的初始化2.2.3.堆的销毁2.2.4.堆的插入2.2.5.取出堆顶的数据2.2.6.堆的删除2.2.7.堆的判空2.2.8.堆的数据个数2.2.9.交换2.2.10.打印堆数据2.2.11.堆的创建2.2.12.堆排序2.2.13.完整代码 3…

JVM01_概述、跨平台原理、分类、三大商业虚拟机

①. 什么是JVM&#xff1f; ①. JVM 是 java虚拟机&#xff0c;是用来执行java字节码(二进制的形式)的虚拟计算机 ②. jvm是运行在操作系统之上的&#xff0c;与硬件没有任何关系 ②. Java的跨平台及原理 ①. 跨平台&#xff1a;由Java编写的程序可以在不同的操作系统上运行&am…