图漾相机搭配VisionPro使用简易教程

1.下载并安装VisionPro软件

请自行下载VisonPro软件。

VisionPro 9.0/9.5/9.6版本经测试,可正常打开图漾相机,建议使用图漾测试过的版本。

2.下载PercipioCameraForVisionPro软件包

使用浏览器下载:https://gitee.com/percipioxyz/camport3_visionpro

使用 git 指令获取本地副本:打开终端,切换到需存放 SDK 的工作目录下,输入 git clone 命令克隆远程仓库。

cpp 复制代码
git clone https://gitee.com/percipioxyz/camport3_visionpro.git

3.软件部署

1.将 PercipioCamera.dll、PercipioCameraExtern.dll、tycam.dll 、opencv_world460.dll拷贝到 VisionPro 的 bin 目录,如果是默认安装,路径位于 C:\ProgramFiles\Cognex\VisionPro\bin

2.将 PercipioCameraToolBlock.vtt 拷贝到 VisonPro 工具模板目录。如果是默认安装,路径位于 C:\ProgramFiles\Cognex\VisionPro\bin\Templates\Tools

3.进入VisionPro后,依次点击下图中的位置,调PercipioCameraToolBlock工具。

4.点击PercipioCameraToolBlock界面的"输入/输出"

PercipioCameraToolBlock的输入参数说明:

1.CameraId:需要打开的相机序列号。

2.Z:相机与投影平面在 Z 方向的距离,单位 mm,将深度图向此投影平面做正交投影。结合该距离下的相机视野和深度图分辨率,可以求出单个像素大小 (mm) ,用于后续计算。

3.ScaleUnit:配置相机的ScaleUnit,以输出不同精度的深度值。

4.RegistrationMode:RGBD对齐开关。0:不对齐;1:rgb2depth;2:depth2rgb。

4.测试流程

4.1 遍历VisionPro SDK支持的参数

以PS800-E1相机测试为主,测试项及其测试方法和结果如下表所示

4.2 设置示例

4.2.1_cameraSingle.SetTriggerMode

设置触发模式

csharp 复制代码
int triggermode = (int) En_TRIGGER_MODE.TY_TRIGGER_MODE_SLAVE;
int set_trigger_mode = _cameraSingle.SetTriggerMode(ref triggermode);
if (set_trigger_mode != 0) 
{
	_cameraSingle.close();
	NativeMethods.deinitLib();
	_cameraSingle = null;
	throw new Exception("set trigger mode  failed, error code: " 
	 +set_trigger_mode);
}

如果设置成软触发工作模式,还需再start capture之后添加以下代码,发送软触发信号:

csharp 复制代码
if(triggermode == (int) En_TRIGGER_MODE.TY_TRIGGER_MODE_SLAVE)
{
int sendsofttrigger = _cameraSingle.sendSoftTrigger();
if(sendsofttrigger != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("send soft trigger  failed, error code: " +sendsofttrigger);
	}
}

4.2.2 _cameraSingle.SetRegistration

设置对齐模式

csharp 复制代码
_cameraSingle.SetRegistration(0);

也可以直接在PercipioCameraToolBlock页面设置输入参数RegistrationMode,无需写代码。

4.2.3_cameraSingle.SetInt

csharp 复制代码
int set_exp = _cameraSingle.SetInt((int)EnDeviceComponent.TY_COMPONENT_RGB_CAM,(int)En_FEATURE_ID.TY_INT_EXPOSURE_TIME,1088);
if(set_exp != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
	throw new Exception("set exp failed, error code: " + set_exp);
}

4.2.4 _cameraSingle.GetInt

csharp 复制代码
int exp = 0;
int get_exp = _cameraSingle.GetInt((int) EnDeviceComponent.TY_COMPONENT_RGB_CAM, (int) En_FEATURE_ID.TY_INT_EXPOSURE_TIME, ref exp);
if(get_exp != 0)
{
	_cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("get exp failed, error code: " + get_exp);
}
else
{
      //待补充
}

4.2.5 _cameraSingle.SetBool

csharp 复制代码
int set_aec = _cameraSingle.SetBool((int)EnDeviceComponent.TY_COMPONENT_RGB_CAM,(int)En_FEATURE_ID.TY_BOOL_AUTO_EXPOSURE,false );
if(set_aec != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
     _cameraSingle = null;
    throw new Exception("set aec failed, error code: " +set_aec);
}

4.2.6 _cameraSingle.GetBool

csharp 复制代码
bool aec_status = true;
int get_aec = _cameraSingle.GetBool((int) EnDeviceComponent.TY_COMPONENT_RGB_CAM, (int) En_FEATURE_ID.TY_BOOL_AUTO_EXPOSURE, ref aec_status);
if(get_aec != 0)
{
	_cameraSingle.close();
	NativeMethods.deinitLib();
	_cameraSingle = null;
	throw new Exception("get_aec failed, error code: " + get_aec);
}

4.2.7 _cameraSingle.SetEnum

csharp 复制代码
int resolution = CameraSingle.ImageMode(TY_PIXEL_FORMAT_LIST.TY_PIXEL_FORMAT_DEPTH16, TY_RESOLUTION_MODE_LIST.TY_RESOLUTION_MODE_1280x960);
int set_depth_resolution = _cameraSingle.SetEnum((int) EnDeviceComponent.TY_COMPONENT_DEPTH_CAM, (int) En_FEATURE_ID.TY_ENUM_IMAGE_MODE, resolution);
if(set_depth_resolution != 0)
{
	_cameraSingle.close();
	NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("set depth resolution failed, error code: " +  set_depth_resolution); 
}

4.2.8 _cameraSingle.GetEnum

csharp 复制代码
int resolution_value = 0;
int get_depth_resolution = _cameraSingle.GetEnum((int) EnDeviceComponent.TY_COMPONENT_DEPTH_CAM, (int) En_FEATURE_ID.TY_ENUM_IMAGE_MODE, ref resolution_value);
if(get_depth_resolution != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("get depth resolution failed, error code: " + get_depth_resolution); 
}

4.2.9 _cameraSingle.SetFloat

csharp 复制代码
int set_unit = _cameraSingle.SetFloat((int) EnDeviceComponent.TY_COMPONENT_DEPTH_CAM, (int) En_FEATURE_ID.TY_FLOAT_SCALE_UNIT, 5f);

4.2.10 _cameraSingle.GetFloat

csharp 复制代码
float scale_unit= 0;
int get_unit = _cameraSingle.GetFloat((int) EnDeviceComponent.TY_COMPONENT_DEPTH_CAM, (int) En_FEATURE_ID.TY_FLOAT_SCALE_UNIT, ref scale_unit);

4.2.11 _cameraSingle.SetScaleUnit

csharp 复制代码
float scaleUnit = 0.25f;
int ret = _cameraSingle.SetScaleUnit(scaleUnit);    
if(ret != 0)
{
    _cameraSingle.close();
    NativeMethods.deinitLib();
    _cameraSingle = null;
    throw new Exception("Set ScaleUnit Failure!");
}

可以直接在界面上输入,无需写代码。

4.2.12 _cameraSingle.GetScaleUnit

csharp 复制代码
float get_scale = _cameraSingle.GetScaleUnit();

5.常见FAQ

1.每次运行只能采一张图,再次点击运行时会报错-1016。

2.使用图漾PercipioViewer软件保存的Png图片,是16位灰度图,可以使用Cog3DImageConvertTool 这个Vtt文件,将16位灰度图转换成CogImage16Range,之后供VisionPro的3D工具应用。

3.图漾官网上下载的VisionPro的SDK,是旧的版本,建议使用链接上的V1.0.4版本的SDK。

4.切记使用图漾TOF相机,使用改插件,会有一些问题,有问题,请及时联系图漾技术。

相关推荐
chen_jared8 小时前
slam十四讲第五章习题:相机内参变化与SLAM快门选择
数码相机·slam·标定
8K超高清14 小时前
回望2025,纷呈超清智能科技影像世界
网络·人工智能·科技·数码相机·智能硬件
ballball~~16 小时前
ISP-AWB(Auto White Balance 白平衡)
图像处理·数码相机·算法
JMchen12317 小时前
Android CameraX深度解析:从Camera1到CameraX的相机架构演进
android·java·数码相机·架构·kotlin·移动开发·android-studio
PHOSKEY1 天前
光子精密3D工业相机实现3C/汽车/半导体连接器pin针高效质检
数码相机·3d·汽车
Piar1231sdafa2 天前
【计算机视觉 01】传送带煤炭识别与计量:基于RPN-X101-FPN模型的输煤量检测系统_1
人工智能·数码相机·计算机视觉
一起养小猫2 天前
Flutter for OpenHarmony多媒体功能开发完全指南
数码相机·flutter
labview_自动化2 天前
线扫相机记录
数码相机
gaosushexiangji2 天前
基于 sCMOS 相机的单分子荧光成像及双螺旋布朗运动追踪研究
数码相机
_李小白2 天前
【Android 美颜相机】第二十一天:GPUImageChromaKeyBlendFilter (颜色加深混合滤镜)
android·数码相机