文章目錄
- 前言
- 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*)¶m, 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_HEIGHT和TY_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_SaveLoadConfig或SaveLoadConfig_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占用率。