迁移指南(从2.1.0版本到2.2.0版本)
导入模块
Mech-Eye API 2.2.0中,导入模块的语句发生以下变更:
2.1.0 | 2.2.0 |
---|---|
|
|
创建相机对象
Mech-Eye API 2.2.0中,创建一个代表相机的对象的语句发生以下变更:
2.1.0 | 2.2.0 |
---|---|
|
|
发现与连接相机
Mech-Eye API 2.2.0中,发现与连接相机的语句发生以下变更:
2.1.0 | 2.2.0 |
---|---|
|
|
管理参数组
Mech-Eye API 2.2.0通过类对参数组和参数相关功能进行了分类和层级划分,详见类的功能层级。此处列举出常用功能的变更。
2.1.0 | 2.2.0 |
---|---|
|
|
设置与获取参数值
Mech-Eye API 2.2.0通过类对参数组和参数相关功能进行了分类和层级划分,详见类的功能层级。
同时,Mech-Eye API 2.2.0按照参数的数据类型提供通用的方法,用于设置与获取参数值。
Mech-Eye API 2.2.0区分了以下参数数据类型:
-
_Int
-
_Float
-
_Bool
-
_Enum
-
_Roi
-
_Range
-
_FloatArray
以下小节给出各数据类型的示例。
_Int类型
以点云后处理分组下的条纹对比度阈值参数为例。
2.1.0 | 2.2.0 |
---|---|
|
|
_Float类型
以2D参数分组下的曝光时间参数为例。
2.1.0 | 2.2.0 |
---|---|
|
|
_Bool类型
以2D参数分组下的色调映射参数为例。
2.1.0 | 2.2.0 |
---|---|
|
|
_Enum类型
以点云后处理分组中的表面平滑参数为例。
2.1.0 | 2.2.0 |
---|---|
|
|
_Roi类型
以感兴趣区域参数为例。
2.1.0 | 2.2.0 |
---|---|
|
|
_Range类型
以深度范围参数为例。
2.1.0 | 2.2.0 |
---|---|
|
|
_FloatArray类型
以3D参数分组中的多个曝光时间为例。
2.1.0 | 2.2.0 |
---|---|
|
|
采集数据
Mech-Eye API 2.2.0中,采集数据的语句发生以下变更:
采集2D图
2.1.0 | 2.2.0 |
---|---|
|
|
采集深度图
2.1.0 | 2.2.0 |
---|---|
|
|
采集无纹理点云
2.1.0 | 2.2.0 |
---|---|
|
|
采集纹理点云
2.1.0 | 2.2.0 |
---|---|
|
|
获取相机的信息和属性
Mech-Eye API 2.2.0通过类对相机的各类信息和属性进行了分类。详见类的功能层级。
获取相机信息
2.1.0 | 2.2.0 |
---|---|
|
|
获取相机温度
2.1.0 | 2.2.0 |
---|---|
|
|
获取图像分辨率
2.1.0 | 2.2.0 |
---|---|
|
|
获取相机内参
2.1.0 | 2.2.0 |
---|---|
|
|
新增功能
Mech-Eye API 2.2.0新增了多个便捷的新功能。
如需使用以下新增功能,则必须参考本章修改客户端程序,以应用2.2.0版本的Mech-Eye API。 |
计算点云法向量
调用以下新增方法,可直接获取包含法向量的3D数据,减少后续数据处理的工作量。
获取带法向量的无纹理点云
-
C++
-
C#
-
Python
mmind::eye::Frame3D frame3D;
camera.capture3DWithNormal(frame3D);
PointCloudWithNormals pointCloud = frame3D.getUntexturedPointCloudWithNormals();
var frame3D = new Frame3D();
camera.Capture3DWithNormal(ref frame3D);
var pointCloud = frame3D.GetUntexturedPointCloudWithNormals();
frame_3d = Frame3D()
camera.capture_3d_with_normal(frame_3d)
point_cloud = frame_3d.get_untextured_point_cloud_with_normals()
获取带法向量的纹理点云
-
C++
-
C#
-
Python
mmind::eye::Frame2DAnd3D frame2DAnd3D;
camera.capture2DAnd3DWithNormal(frame2DAnd3D);
TexturedPointCloudWithNormals pointCloud = frame2DAnd3D.getTexturedPointCloudWithNormals();
var frame2DAnd3D = new Frame2DAnd3D();
camera.Capture2DAnd3DWithNormal(ref frame2DAnd3D);
var pointCloud = frame2DAnd3D.GetTexturedPointCloudWithNormals();
frame_2d_and_3d = Frame2DAnd3D()
camera.capture_2d_and_3d_with_normal(frame_2d_and_3d)
point_cloud = frame_2d_and_3d.get_textured_point_cloud_with_normals()
保存点云
调用以下新增方法,可直接保存PLY、PCD或CSV格式的点云,无需依赖第三方软件库。
保存无纹理点云
-
C++
-
C#
-
Python
mmind::eye::Frame3D frame3D;
camera.capture3D(frame3D);
frame3D.saveUntexturedPointCloud(mmind::eye::FileFormat::PLY, "PointCloud.ply");
var frame3D = new frame3D();
camera.Capture3D(ref frame3D);
frame3D.SaveUntexturedPointCloud(FileFormat.PLY, "PointCloud.ply");
frame_3d = Frame3D()
camera.capture_3d(frame_3d)
frame_3d.save_untextured_point_cloud(FileFormat_PLY, "PointCloud.ply")
保存纹理点云
-
C++
-
C#
-
Python
mmind::eye::Frame2DAnd3D frame2DAnd3D;
camera.capture2DAnd3D(frame2DAnd3D);
frame2DAnd3D.saveTexturedPointCloud(mmind::eye::FileFormat::PLY, "TexturedPointCloud.ply");
var frame2DAnd3D = new Frame2DAnd3D();
camera.Capture2DAnd3D(ref frame2DAnd3D);
frame2DAnd3D.SaveTexturedPointCloud(FileFormat.PLY, "TexturedPointCloud.ply");
frame_2d_and_3d = Frame2DAnd3D()
camera.capture_2d_and_3d(frame_2d_and_3d)
frame_2d_and_3d.save_textured_point_cloud(FileFormat_PLY, "TexturedPointCloud.ply")
导入与导出参数组
调用以下新增方法,可将所有参数组保存为JSON文件,或从JSON文件导入并替换所有参数组。
导入参数组
-
C++
-
C#
-
Python
camera.userSetManager().loadFromFile("camera_config.json");
camera.UserSetManager().LoadFromFile("camera_config.json");
camera.user_set_manager().load_from_file("camera_config.json")
-
C++
-
C#
-
Python
camera.userSetManager().saveToFile("camera_config.json");
camera.UserSetManager().SaveToFile("camera_config.json");
camera.user_set_manager().save_to_file("camera_config.json")
检测相机连接状态
新增心跳信号发送机制,可用于检测相机断开连接的问题。
设置心跳信号的频率
通过以下方法可设置心跳信号的频率:
-
C++
-
C#
-
Python
camera.setHeartbeatInterval(1000);
camera.SetHeartbeatInterval(1000);
camera.set_heartbeat_interval(1000)
注册回调函数
通过以下方法注册回调函数,可自动检测到相机断开连接的情况并提供报错:
-
C++
-
C#
-
Python
mmind::eye::CameraEvent::EventCallback callback = [](mmind::eye::CameraEvent::Event event, void* pUser) {
std::cout << "A camera event has occurred. The event ID is " << event << "." << std::endl;
};
mmind::eye::CameraEvent::registerCameraEventCallback(camera, callback, nullptr, mmind::eye::CameraEvent::CAMERA_EVENT_DISCONNECTED);
private static void CallbackFunc(CameraEvent.Event cameraEvent, IntPtr pUser)
{
Console.WriteLine("A camera event has occurred. The event ID is {0}.", cameraEvent);
}
Utils.ShowError(CameraEvent.RegisterCameraEventCallback(ref camera, CallbackFunc, IntPtr.Zero, (uint)CameraEvent.Event.CAMERA_EVENT_DISCONNECTED));
class CustomCallback(EventCallbackBase):
def __init__(self):
super().__init__()
def run(self, event):
print("A camera event has occurred. The event ID is {0}.".format(event))
camera_event = CameraEvent()
callback = CustomCallback()
show_error(camera_event.register_camera_event_callback(camera, callback, CameraEvent.CAMERA_EVENT_ALL))