当前位置: 首页 > news >正文

图漾相机——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占用率。

相关文章:

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

文章目录 前言1.SDK API功能介绍1.1 Device组件下的API测试1.1.1 相机工作模式设置&#xff08;TY_TRIGGER_PARAM_EX&#xff09;1.1.2 TY_INT_FRAME_PER_TRIGGER1.1.3 TY_INT_PACKET_DELAY1.1.4 TY_INT_PACKET_SIZE1.1.5 TY_BOOL_GVSP_RESEND1.1.6 TY_BOOL_TRIGGER_OUT_IO1.1.…...

如何在Windows、Linux和macOS上安装Rust并完成Hello World

如何在Windows、Linux和macOS上安装Rust并完成Hello World 如果你刚刚开始学习Rust&#xff0c;第一步就是安装Rust并运行你的第一个程序&#xff01;本文将详细介绍如何在Windows、Linux和macOS上安装Rust&#xff0c;并编写一个简单的“Hello, World!”程序。 1. 安装Rust …...

基于VMware的ubuntu与vscode建立ssh连接

1.首先安装openssh服务 sudo apt update sudo apt install openssh-server -y 2.启动并检查ssh服务状态 到这里可以按q退出 之后输入命令 &#xff1a; ip a 红色挡住的部分就是我们要的地址&#xff0c;这里就不展示了哈 3.配置vscode 打开vscode 搜索并安装&#xff1a;…...

Redis 集合(Set)

Redis 集合(Set) 引言 Redis 是一款高性能的键值存储数据库,其支持多种数据结构,其中包括集合(Set)。集合是一个无序的、元素唯一的集合数据结构,它非常适合存储需要去重和高效检索的数据。本文将详细介绍 Redis 集合的数据结构、操作方法以及应用场景。 Redis 集合数…...

(笔记+作业)书生大模型实战营春节卷王班---L0G2000 Python 基础知识

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld 课程视频&#xff1a;https://www.bilibili.com/video/BV13U1VYmEUr/ 课程文档&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python 关卡作业&#xff1a;htt…...

stm32硬件实现与w25qxx通信

使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接 根据stm32f103c8t6引脚手册&#xff0c;采用B12-B15四个引脚与W25Q64连接&#xff0c;实现SPI通信。 W25Q64SCK&#xff08;CLK&#xff09;PB13MOSI&#xff08;DI&#xff09;PB15MISO(DO)PB14CS&#xff08…...

群晖Alist套件无法挂载到群晖webdav,报错【连接被服务器拒绝】

声明&#xff1a;我不是用docker安装的 在套件中心安装矿神的Alist套件后&#xff0c;想把夸克挂载到群晖上&#xff0c;方便复制文件的&#xff0c;哪知道一直报错&#xff0c;最后发现问题出在两个地方&#xff1a; 1&#xff09;挂载的路径中&#xff0c;直接填 dav &…...

MySQL 如何深度分页问题

在实际的数据库应用场景中&#xff0c;我们常常会遇到需要进行分页查询的需求。对于少量数据的分页查询&#xff0c;MySQL 可以轻松应对。然而&#xff0c;当我们需要进行深度分页&#xff08;即从大量数据的中间位置开始获取少量数据&#xff09;时&#xff0c;就会面临性能严…...

科技快讯 | OpenAI首次向免费用户开放推理模型;特朗普与黄仁勋会面;雷军回应“10后小学生深情表白小米SU7”

不用开口&#xff1a;谷歌 AI 帮你致电商家&#xff0c;价格、预约一键搞定 谷歌在1月30日推出Search Labs中的“Ask for Me”实验性功能&#xff0c;用户可利用AI代替自己致电商家咨询价格和服务。该功能已与美汽车修理厂和美甲沙龙店合作&#xff0c;用户需加入Search Labs并…...

2.1刷题日记

1.338. 比特位计数 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> countBits(int n) {vector<int>ans(n1,0);ans[0]0;for(int i1;i<n;i){if(i%21){ans[i]ans[i-1]1;}else{ans[i]ans[i/2];}}return ans;} }; 利用奇数与偶数来进…...

nth_element函数——C++快速选择函数

目录 1. 函数原型 2. 功能描述 3. 算法原理 4. 时间复杂度 5. 空间复杂度 6. 使用示例 8. 注意事项 9. 自定义比较函数 11. 总结 nth_element 是 C 标准库中提供的一个算法&#xff0c;位于 <algorithm> 头文件中&#xff0c;用于部分排序序列。它的主要功能是将…...

C#接口(Interface)

C#中的接口 接口是C#中一种重要的概念&#xff0c;它定义了一组函数成员&#xff0c;但不实现它们。接口提供了一种标准结构&#xff0c;使得实现接口的类或结构在形式上保持一致。接口定义了属性、方法和事件&#xff0c;这些都是接口的成员&#xff0c;但接口只包含成员的声…...

002 mapper代理开发方式-xml方式

文章目录 代理xml方式UserMapper.javaUser.javadb.propertiesSqlMapConfig.xmlUserMapper.xmlUserMapperTest.javapom.xml 代理 此处使用的是JDK的动态代理方式&#xff0c;延迟加载使用的cglib动态代理方式 代理分为静态代理和动态代理。此处先不说静态代理&#xff0c;因为…...

网络原理(3)—— 传输层详解

目录 一. 再谈端口号 二. UDP协议(用户数据报协议) 2.1 UDP协议端格式 2.2 UDP报文长度 2.3 UDP校验和 三. TCP协议(传输控制协议) 3.1 TCP协议段格式 3.2 核心机制 3.2.1 确认应答 —— “感知对方是否收到” 3.2.2 超时重传 3.3.3 连接管理 —— 三次握手与四…...

深度学习 Pytorch 神经网络的学习

本节将从梯度下降法向外拓展&#xff0c;介绍更常用的优化算法&#xff0c;实现神经网络的学习和迭代。在本节课结束将完整实现一个神经网络训练的全流程。 对于像神经网络这样的复杂模型&#xff0c;可能会有数百个 w w w的存在&#xff0c;同时如果我们使用的是像交叉熵这样…...

【机器学习】自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

一、使用pytorch框架实现逻辑回归 1. 数据部分&#xff1a; 首先自定义了一个简单的数据集&#xff0c;特征 X 是 100 个随机样本&#xff0c;每个样本一个特征&#xff0c;目标值 y 基于线性关系并添加了噪声。将 numpy 数组转换为 PyTorch 张量&#xff0c;方便后续在模型中…...

深入理解linux中的文件(上)

1.前置知识&#xff1a; &#xff08;1&#xff09;文章 内容 属性 &#xff08;2&#xff09;访问文件之前&#xff0c;都必须打开它&#xff08;打开文件&#xff0c;等价于把文件加载到内存中&#xff09; 如果不打开文件&#xff0c;文件就在磁盘中 &#xff08;3&…...

分布式微服务系统架构第90集:现代化金融核心系统

#1.1 深化数字化转型&#xff0c;核心面临新挑战 1、架构侧&#xff1a;无法敏捷协同数字金融经营模式转型。 2、需求侧&#xff1a;业务需求传导低效始终困扰金融机构。 3、开发侧&#xff1a;创新产品上市速度低于期望。 4、运维侧&#xff1a;传统面向资源型监控体系难以支撑…...

Vue简介

目录 Vue是什么&#xff1f;为什么要使用Vue&#xff1f;Vue的三种加载方式拓展&#xff1a;什么是渐进式框架&#xff1f; Vue是什么&#xff1f; Vue是一套用于构建用户界面的渐进式 JavaScript (主张最少)框架 &#xff0c;开发者只需关注视图层。另一方面&#xff0c;当与…...

【Linux】从零开始:编写你的第一个Linux进度条小程序

Linux相关知识点可以通过点击以下链接进行学习一起加油&#xff01;初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建GDB调试器与Git版本控制工具 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言专栏&#xff1a;C语言 &am…...

FFmpeg工具使用基础

一、FFmpeg工具介绍 FFmpeg命令行工具主要包括以下几个部分: ‌ffmpeg‌:编解码工具‌ffprobe‌:多媒体分析器‌ffplay‌:简单的音视频播放器这些工具共同构成了FFmpeg的核心功能,支持各种音视频格式的处理和转换‌ 二、在Ubuntu18.04上安装FFmpeg工具 1、sudo apt-upda…...

数据库管理-第287期 Oracle DB 23.7新特性一览(20250124)

数据库管理287期 2025-01-24 数据库管理-第287期 Oracle DB 23.7新特性一览&#xff08;20250124&#xff09;1 AI向量搜索&#xff1a;算术和聚合运算2 更改Compatible至23.6.0&#xff0c;以使用23.6或更高版本中的新AI向量搜索功能3 Cloud Developer包4 DBMS_DEVELOPER.GET_…...

快速提升网站收录:利用网站FAQ页面

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/48.html 利用网站FAQ&#xff08;FrequentlyAskedQuestions&#xff0c;常见问题解答&#xff09;页面是快速提升网站收录的有效策略之一。以下是一些具体的方法和建议&#xff0c;以帮助你…...

AtCoder Beginner Contest 391(ABCDE)

A - Lucky Direction 翻译&#xff1a; 给你一个字符串 D&#xff0c;代表八个方向&#xff08;北、东、西、南、东北、西北、东南、西南&#xff09;之一。方向与其代表字符串之间的对应关系如下。 北&#xff1a; N东&#xff1a; E西&#xff1a; W南&#xff1a; S东…...

解决Django非ORM模型提示初始化request问题

提问 Django在DRF时候自定义显示一些非model的字段提示TypeError: Field.__init__() got an unexpected keyword argument request 解答1 错误提示 TypeError: Field.__init__() got an unexpected keyword argument request 显示在创建序列化器实例时&#xff0c;传递了一个…...

【机器学习】自定义数据集 使用scikit-learn中svm的包实现svm分类

一、支持向量机(support vector machines. &#xff0c;SVM)概念 1. SVM 绪论 支持向量机&#xff08;SVM&#xff09;的核心思想是找到一个最优的超平面&#xff0c;将不同类别的数据点分开。SVM 的关键特点包括&#xff1a; ① 分类与回归&#xff1a; SVM 可以用于分类&a…...

hunyuan 混元学习

使用了5个subset,也是用了text-image和text-video进行训练的 也是进行了复杂的视频选择。同movie gen. 也进行了模型切断&#xff0c;用拉普拉斯算子找到最清晰的一帧作为训练的起始 训练了不同的模型去选择数据&#xff0c;比如用Dover去选择美观度比较好的数据&#xff0c…...

.Net / C# 繁体中文 与 简体中文 互相转换, 支持地方特色词汇

版本号 Nuget 搜索 “OpenCCNET”, 注意别找错, 好多库的名字都差不多 支持 “繁,简” 的互相转换, 支持多个地区常用词汇的转换, 还支持 日文的新旧转换. OpenCC 在 .Net 中的实现 https://github.com/CosineG/OpenCC.NET <PackageReference Include"OpenCCNET"…...

仿真设计|基于51单片机的温湿度、一氧化碳、甲醛检测报警系统

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现&#xff08;protues8.7&#xff09; 程序&#xff08;Keil5&#xff09; 全部内容 资料获取 具体实现功能 &#xff08;1&#xff09;温湿度传感器、CO传感器、甲醛传感器实时检测温湿度值、CO值和甲醛值进…...

Vue- 组件通信2

一、props props 是使用频率最高的一种通信方式&#xff0c;常用于&#xff1a;父 ↔ 子 若 父传子&#xff1a;属性值是非函数&#xff1b;若 子传父&#xff1a;属性值是函数。 Props: 指的是传递给子组件的属性。子组件通过 props 接收数据。单向数据流: 数据通过 props…...

春晚舞台上的人形机器人:科技与文化的奇妙融合

文章目录 人形机器人Unitree H1的“硬核”实力传统文化与现代科技的创新融合网友热议与文化共鸣未来展望&#xff1a;科技与文化的更多可能结语 2025 年央视春晚的舞台&#xff0c;无疑是全球华人目光聚焦的焦点。就在这个盛大的舞台上&#xff0c;一场名为《秧BOT》的创意融合…...

向上调整算法(详解)c++

算法流程&#xff1a; 与⽗结点的权值作⽐较&#xff0c;如果⽐它⼤&#xff0c;就与⽗亲交换&#xff1b; 交换完之后&#xff0c;重复 1 操作&#xff0c;直到⽐⽗亲⼩&#xff0c;或者换到根节点的位置 这里为什么插入85完后合法&#xff1f; 我们插入一个85&#xff0c;…...

Python之Excel操作 - 写入数据

我们将使用 openpyxl 库&#xff0c;它是一个功能强大且易于使用的库&#xff0c;专门用于处理 Excel 文件。 1. 安装 openpyxl 首先&#xff0c;你需要安装 openpyxl 库。你可以使用 pip 命令进行安装&#xff1a; pip install openpyxl创建一个文件 example.xlsx&#xff…...

MYSQL--一条SQL执行的流程,分析MYSQL的架构

文章目录 第一步建立连接第二部解析 SQL第三步执行 sql预处理优化阶段执行阶段索引下推 执行一条select 语句中间会发生什么&#xff1f; 这个是对 mysql 架构的深入理解。 select * from product where id 1;对于mysql的架构分层: mysql 架构分成了 Server 层和存储引擎层&a…...

【开源免费】基于Vue和SpringBoot的流浪宠物管理系统(附论文)

本文项目编号 T 182 &#xff0c;文末自助获取源码 \color{red}{T182&#xff0c;文末自助获取源码} T182&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

您与此网站之间建立的连接不安全

网站建立好后&#xff0c;用360浏览器打开后地址栏有一个灰色小锁打着红色叉点击后显示“您与此网站之间建立的连接不安全”“请勿在此网站上输入任何敏感信息&#xff08;例如密码或信用卡信息&#xff09;&#xff0c;因为攻击者可能会盗取这些信息。” 出现这个提示的主要原…...

kamailio-ACC模块介绍【kamailio6.0. X】

Acc 模块 作者 Jiri Kuthan iptel.org jiriiptel.org Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Ramona-Elena Modroiu rosdev.ro ramonarosdev.ro 编辑 Bogdan-Andrei Iancu Voice Sistem SRL bogdanvoice-system.ro Sven Knoblich 1&1 Internet …...

图漾相机——Sample_V1示例程序

文章目录 1.SDK支持的平台类型1.1 Windows 平台1.2 Linux平台 2.SDK基本知识2.1 SDK目录结构2.2 设备组件简介2.3 设备组件属性2.4 设备的帧数据管理机制2.5 SDK中的坐标系变换 3.Sample_V1示例程序3.1 DeviceStorage3.2 DumpCalibInfo3.3 NetStatistic3.4 SimpleView_SaveLoad…...

谈谈你所了解的AR技术吧!

深入探讨 AR 技术的原理与应用 在科技飞速发展的今天&#xff0c;AR&#xff08;增强现实&#xff09;技术已经悄然改变了我们与周围世界互动的方式。你是否曾想象过如何能够通过手机屏幕与虚拟物体进行实时互动&#xff1f;在这篇文章中&#xff0c;我们将深入探讨AR技术的原…...

C++计算特定随机操作后序列元素乘积的期望

有一个长度为 n n n的序列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1​,a2​,...,an​。初始序列的所有元素均为 0 0 0。再给定正整数 m m m、 c c c和 ( n − m 1 ) (n-m1) (n−m1)个正整数 b 1 , b 2 , . . . , b n − m 1 b_1,b_2,...,b_{n-m1} b1​,b2​,...,bn−m1​…...

【机器学习理论】朴素贝叶斯网络

基础知识&#xff1a; 先验概率&#xff1a;对某个事件发生的概率的估计。可以是基于历史数据的估计&#xff0c;可以由专家知识得出等等。一般是单独事件概率。 后验概率&#xff1a;指某件事已经发生&#xff0c;计算事情发生是由某个因素引起的概率。一般是一个条件概率。 …...

NPM 使用介绍

NPM 使用介绍 引言 NPM(Node Package Manager)是Node.js生态系统中的一个核心工具,用于管理JavaScript项目的依赖包。无论是开发一个小型脚本还是构建大型应用程序,NPM都能极大地提高开发效率。本文将详细介绍NPM的使用方法,包括安装、配置、依赖管理、包发布等,帮助您…...

langchain 实现多智能体多轮对话

这里写目录标题 工具定义模型选择graph节点函数定义graph 运行 工具定义 import random from typing import Annotated, Literalfrom langchain_core.tools import tool from langchain_core.tools.base import InjectedToolCallId from langgraph.prebuilt import InjectedSt…...

网络攻防实战指北专栏讲解大纲与网络安全法

专栏 本专栏为网络攻防实战指北&#xff0c;大纲如下所示 进度&#xff1a;目前已更完准备篇、HTML基础 计划&#xff1a;所谓基础不牢&#xff0c;地动山摇。所以下一步将持续更新基础篇内容 讲解信息安全时&#xff0c;结合《中华人民共和国网络安全法》&#xff08;以下简…...

四、jQuery笔记

(一)jQuery概述 jQuery本身是js的一个轻量级的库,封装了一个对象jQuery,jquery的所有语法都在jQuery对象中 浏览器不认识jquery,只渲染html、css和js代码,需要先导入jQuery文件,官网下载即可 jQuery中文说明文档:https://hemin.cn/jq/ (二)jQuery要点 1、jQuery对象 …...

解锁微服务:五大进阶业务场景深度剖析

目录 医疗行业&#xff1a;智能诊疗的加速引擎 电商领域&#xff1a;数据依赖的破局之道 金融行业&#xff1a;运维可观测性的提升之路 物流行业&#xff1a;智慧物流的创新架构 综合业务&#xff1a;服务依赖的优化策略 医疗行业&#xff1a;智能诊疗的加速引擎 在医疗行业迈…...

C++:虚函数与多态性习题2

题目内容&#xff1a; 编写程序&#xff0c;声明抽象基类Shape&#xff0c;由它派生出3个派生类&#xff1a;Circle、Rectangle、Triangle&#xff0c;用虚函数分别计算图形面积&#xff0c;并求它们的和。要求用基类指针数组&#xff0c;使它每一个元素指向一个派生类对象。 …...

开源软件协议介绍

一、可以闭源使用/不具传染性的协议 允许商业使用和分发 1、BSD&#xff1a;详细介绍 2、LGPL许可证&#xff1a;详细介绍 3、MPL2.0&#xff1a;详细介绍 二、具有传染性/使用后需要开源自身软件的协议 不建议商业使用 1、GPL许可证&#xff1a;详细介绍...

MapReduce简单应用(一)——WordCount

目录 1. 执行过程1.1 分割1.2 Map1.3 Combine1.4 Reduce 2. 代码和结果2.1 pom.xml中依赖配置2.2 工具类util2.3 WordCount2.4 结果 参考 1. 执行过程 假设WordCount的两个输入文本text1.txt和text2.txt如下。 Hello World Bye WorldHello Hadoop Bye Hadoop1.1 分割 将每个文…...

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)

目录 1 -> 生命周期 1.1 -> 应用生命周期 1.2 -> 页面生命周期 2 -> 资源限定与访问 2.1 -> 资源限定词 2.2 -> 资源限定词的命名要求 2.3 -> 限定词与设备状态的匹配规则 2.4 -> 引用JS模块内resources资源 3 -> 多语言支持 3.1 -> 定…...