添加蓝芯tof相机

master
zhou.mengjia 2 years ago
parent 345f8216ae
commit 0b11a26c29

Binary file not shown.

Binary file not shown.

@ -18,7 +18,8 @@
"frame_rate": 9.3, "frame_rate": 9.3,
"gain": 2, "gain": 2,
"height": 1200, "height": 1200,
"id": 2, "id": 1,
"location": 1,
"loop": 1, "loop": 1,
"mac_address": "", "mac_address": "",
"offset_x": 0, "offset_x": 0,
@ -54,7 +55,8 @@
"frame_rate": 9.3, "frame_rate": 9.3,
"gain": 2, "gain": 2,
"height": 3072, "height": 3072,
"id": 1, "id": 2,
"location": 2,
"loop": 1, "loop": 1,
"mac_address": "", "mac_address": "",
"offset_x": 0, "offset_x": 0,
@ -71,14 +73,24 @@
"type": 140, "type": 140,
"width": 2048, "width": 2048,
"zoom": 1 "zoom": 1
}
},
"top": {
"startID": 0,
"endID": 0
}, },
"side": { "Eagle-M4 F83A01121812": {
"startID": 1, "id": 3,
"endID": 2 "exposure": 10000,
"location": 1,
"save_img_suffix": ".BMP",
"basic_file": ".\\config\\right.ini",
"height": 3072,
"width": 2048,
"type": 210
} }
},
"top": {
"startID": 0,
"endID": 0
},
"side": {
"startID": 1,
"endID": 3
}
} }

@ -0,0 +1,4 @@
0 -1276.05 270.764
1 -416.796 261.033
2 1288 2124.25
0.402597 -0.00195196 0.915375 -1310.13

Binary file not shown.

@ -11,7 +11,8 @@
enum CameraType { enum CameraType {
Virtual = 100, // 虚拟相机 Virtual = 100, // 虚拟相机
Hik = 140, Hik = 140,
Basler = 190 // 巴斯勒相机 Basler = 190, // 巴斯勒相机
LXTof = 210 //蓝芯tof相机
}; };
enum CameraTriggerMode { enum CameraTriggerMode {
@ -31,7 +32,7 @@ public:
virtual bool startCamera() = 0; // 开始工作 virtual bool startCamera() = 0; // 开始工作
virtual bool stopCamera() = 0; // 停止工作 virtual bool stopCamera() = 0; // 停止工作
virtual bool setTriggerSource(int) = 0; //设置触发源 virtual bool setTriggerSource(int) = 0; //设置触发源
virtual bool takeAPic(cv::Mat& imgMat) = 0; // 获取当前图像 virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D) = 0; // 获取当前图像
void start() { m_timer->start(); } void start() { m_timer->start(); }
void stop() { m_timer->stop(); } void stop() { m_timer->stop(); }

File diff suppressed because it is too large Load Diff

@ -3,6 +3,7 @@
#include <QMap> #include <QMap>
#include "HikCamera.h" #include "HikCamera.h"
#include "LXCamera.h"
#include "commonDefine.h" #include "commonDefine.h"
struct CameraInfo struct CameraInfo
@ -16,8 +17,10 @@ struct CameraInfo
int imageWidth; //宽度 int imageWidth; //宽度
int imageHeight; //高度 int imageHeight; //高度
int rotationAngle{ 0 }; //旋轉角度 int rotationAngle{ 0 }; //旋轉角度
int location = 0; //相机安装位置(对应货物在堆垛机的位置), 1左2右, 0保留为之前规则
QString calibFile = ""; //标定文件地址 QString calibFile = ""; //标定文件地址
QString basicFile = ""; //3D相机做的基准文件地址
QString saveImgSuffix = ".bmp" ; //保存的图像格式 QString saveImgSuffix = ".bmp" ; //保存的图像格式
}; };
@ -32,6 +35,7 @@ struct FileInfo
struct ImageInfo struct ImageInfo
{ {
cv::Mat image; cv::Mat image;
cv::Mat image3D;
ILImagePtr imageOrigin; ILImagePtr imageOrigin;
ILImagePtr imageFixed; ILImagePtr imageFixed;
QString cameraSn; QString cameraSn;
@ -62,7 +66,7 @@ public:
bool setSoftwareTrigger(const QString& serialNumber); bool setSoftwareTrigger(const QString& serialNumber);
Q_SLOT void onCapture(int cameraLocation,int cameraID); Q_SLOT void onCapture(int cameraLocation,int location);
signals: signals:
void sgCapturedImage(const QVector<ImageInfo>& vecImageInfo, int cameraLocation); void sgCapturedImage(const QVector<ImageInfo>& vecImageInfo, int cameraLocation);
private: private:
@ -70,13 +74,14 @@ private:
bool getSaveImgNameInfo(QString serialNumber, FileInfo& fileInfo); bool getSaveImgNameInfo(QString serialNumber, FileInfo& fileInfo);
void capture(const QStringList& serialNumberList); void capture(const QStringList& serialNumberList);
cv::Mat capture(const QString& serialNumber); bool capture(const QString& serialNumber, cv::Mat& img, cv::Mat& img3D);
void flipImg(const cv::Mat& imgSrc, cv::Mat& imgDst, int rotationAngle); void flipImg(const cv::Mat& imgSrc, cv::Mat& imgDst, int rotationAngle);
QMap<int, CameraInfo> m_mapIdCameraInfoTop; QMap<int, CameraInfo> m_mapIdCameraInfoTop;
QMap<int, CameraInfo> m_mapIdCameraInfoSide; QMap<int, CameraInfo> m_mapIdCameraInfoSide;
QMap<QString, int> m_mapSerialNumberIdTop; QMap<QString, int> m_mapSerialNumberIdTop;
QMap<QString, int> m_mapSerialNumberIdSide; QMap<QString, int> m_mapSerialNumberIdSide; // QString:相机SN码int:相机ID
QMap<QString,int> m_cameraStockLocation; // QString:相机SN码, int:相机相对货物的Location
QVector<Camera*> m_vecPCamera; QVector<Camera*> m_vecPCamera;
QMap<QString, int> m_mapSNIndex; QMap<QString, int> m_mapSNIndex;
bool m_bCamerasInit{ false }; bool m_bCamerasInit{ false };

@ -238,7 +238,7 @@ bool HikCamera::setTriggerSource(int mode)
return setCameraProperty(TriggerMode, mode); return setCameraProperty(TriggerMode, mode);
} }
bool HikCamera::takeAPic(cv::Mat& imgMat) bool HikCamera::takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D)
{ {
if (m_pDevHandle == NULL) if (m_pDevHandle == NULL)
{ {

@ -28,7 +28,7 @@ public:
virtual bool closeCamera() override; virtual bool closeCamera() override;
virtual bool startCamera() override; virtual bool startCamera() override;
virtual bool stopCamera() override; virtual bool stopCamera() override;
virtual bool takeAPic(cv::Mat& imgMat) override; virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D) override;
virtual bool setTriggerSource(int mode) override; virtual bool setTriggerSource(int mode) override;
static int EnumDevices(unsigned int nTLayerType, MV_CC_DEVICE_INFO_LIST* pstDevList); static int EnumDevices(unsigned int nTLayerType, MV_CC_DEVICE_INFO_LIST* pstDevList);

@ -0,0 +1,157 @@
#include "LXCamera.h"
#include <iostream>
#include <thread>
#include <sstream>
#include "lxCamera/lx_camera_api.h"
#pragma comment(lib,"LxCameraApi.lib")
static char wait_key = '0';
static DcHandle handle = 0;
#define checkTC(state) {LX_STATE val=state; \
if(val != LX_SUCCESS){ \
if(val == LX_E_RECONNECTING){ \
qDebug()<< " device reconnecting";} \
else if(val == LX_E_NOT_SUPPORT){ \
qDebug()<< " not support";} \
else{ \
qDebug()<< DcGetErrorString(val); \
DcCloseDevice(handle); \
} \
} \
}
LXCamera::~LXCamera()
{
destroyCamera();
}
bool LXCamera::initCamera(const QString& serialNumber)
{
int device_num = 0;
LxDeviceInfo* p_device_list = NULL;
checkTC(DcGetDeviceList(&p_device_list, &device_num));
if (device_num <= 0)
{
qDebug() << "Not found any tof device.";
return false;
}
m_handle = serialNumber.toStdString();
qDebug() << "Find tof device: " << p_device_list;
return true;
}
void LXCamera::destroyCamera()
{
stopCamera();
closeCamera();
}
bool LXCamera::openCamera()
{
LxDeviceInfo device_info;
LX_STATE lx_state = DcOpenDevice(LX_OPEN_MODE::OPEN_BY_ID, m_handle.c_str(), &handle, &device_info);
if (LX_SUCCESS != lx_state) {
QString str = QString("open device failed, open_param: %1").arg(m_handle.c_str());
qDebug() << str;
return false;
}
return true;
}
bool LXCamera::closeCamera()
{
return DcCloseDevice(handle);
}
bool LXCamera::startCamera()
{
//设置数据流
bool test_depth = false, test_rgb = false;
checkTC(DcGetBoolValue(handle, LX_BOOL_ENABLE_3D_DEPTH_STREAM, &test_depth));
checkTC(DcGetBoolValue(handle, LX_BOOL_ENABLE_2D_STREAM, &test_rgb));
//开启数据流
checkTC(DcStartStream(handle));
std::thread pthread = std::thread();
//pthread.detach();
//auto _time = std::chrono::system_clock::now();
//更新数据
auto ret = DcSetCmd(handle, LX_CMD_GET_NEW_FRAME);
if (LX_SUCCESS != ret)
{
if (LX_E_RECONNECTING == ret) {
std::cout << "device reconnecting" << std::endl;
}
std::this_thread::sleep_for(std::chrono::seconds(1));
qDebug() << "TofCamera Open Failed!";
return false;
}
qDebug() << "TofCamera Open Succeed!";
return true;
}
bool LXCamera::stopCamera()
{
return DcStopStream(handle);
}
bool LXCamera::setTriggerSource(int mode)
{
return true;
}
bool LXCamera::takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D)
{
//更新数据
auto ret = DcSetCmd(handle, LX_CMD_GET_NEW_FRAME);
if (LX_SUCCESS != ret)
{
if (LX_E_RECONNECTING == ret) {
qDebug() << "device reconnecting";
}
std::this_thread::sleep_for(std::chrono::seconds(1));
//continue;
}
FrameInfo* frame_ptr = nullptr;
checkTC(DcGetPtrValue(handle, LX_PTR_FRAME_DATA, (void**)&frame_ptr));
if (!frame_ptr || frame_ptr->frame_state != LX_SUCCESS) {
qDebug() << "new frame not correct";
return false;
}
//Depth
if (frame_ptr->depth_data.frame_data != nullptr)
{
auto depth_data = frame_ptr->depth_data;
cv::Mat depth_image = cv::Mat(depth_data.frame_height, depth_data.frame_width,
CV_MAKETYPE(depth_data.frame_data_type, depth_data.frame_channel), depth_data.frame_data);
//cv::Mat show;
depth_image.convertTo(imgMat, CV_8U, 1.0 / 16);
//applyColorMap(show, show, COLORMAP_JET);
//cv::namedWindow("depth", 0);
//cv::resizeWindow("depth", 640, 480);
//cv::imshow("depth", show);
}
//RGB
if (frame_ptr->rgb_data.frame_data != nullptr)
{
auto rgb_data = frame_ptr->rgb_data;
imgMat3D = cv::Mat(rgb_data.frame_height, rgb_data.frame_width,
CV_MAKETYPE(rgb_data.frame_data_type, rgb_data.frame_channel), rgb_data.frame_data);
//cv::namedWindow("rgb", 0);
//cv::resizeWindow("rgb", 640, 480);
//cv::imshow("rgb", rgb_image);
}
}

@ -0,0 +1,28 @@
#pragma once
#include "camera.h"
#include "commonDefine.h"
class LXCamera : public Camera
{
Q_OBJECT
public:
~LXCamera();
virtual bool initCamera(const QString& serialNumber) override;
virtual void destroyCamera() override;
virtual bool openCamera() override;
virtual bool closeCamera() override;
virtual bool startCamera() override;
virtual bool stopCamera() override;
virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D) override;
virtual bool setTriggerSource(int mode) override;
CameraType getCameraType() { return m_type; }
private:
CameraType m_type = CameraType::LXTof;
std::string m_handle;
};

@ -19,8 +19,8 @@ SmokeBoxIdentification::SmokeBoxIdentification(QWidget *parent)
QString applicationDirPath = QCoreApplication::applicationDirPath(); QString applicationDirPath = QCoreApplication::applicationDirPath();
QtConcurrent::run([=]() QtConcurrent::run([=]()
{ {
if (decodeSmokeInfoCsv(applicationDirPath + SMOKEINFO_XLSX_CONFIG)) //if (decodeSmokeInfoCsv(applicationDirPath + SMOKEINFO_XLSX_CONFIG))
matchSmokeNameAndTemplateFolderName(applicationDirPath + NUM_TEMPLATE_PATH); // matchSmokeNameAndTemplateFolderName(applicationDirPath + NUM_TEMPLATE_PATH);
m_pDataProcess = std::make_shared<dataPreProcessing>(); m_pDataProcess = std::make_shared<dataPreProcessing>();
if (m_pDataProcess) if (m_pDataProcess)
@ -151,7 +151,7 @@ void SmokeBoxIdentification::saveImage(const cv::Mat& imgMat, const QString& fil
qDebug() << "Save image: " << filePath; qDebug() << "Save image: " << filePath;
} }
void SmokeBoxIdentification::saveImage(ILImagePtr image, const QString& filePath) void SmokeBoxIdentification::saveImage(ILImagePtr image, const cv::Mat& imgMat3D, const QString& filePath)
{ {
if (image->Void()) if (image->Void())
{ {
@ -161,6 +161,15 @@ void SmokeBoxIdentification::saveImage(ILImagePtr image, const QString& filePath
std::wstring path = filePath.toStdWString(); std::wstring path = filePath.toStdWString();
image->Save(path.c_str(), nullptr); image->Save(path.c_str(), nullptr);
qDebug() << "Save image: " << filePath; qDebug() << "Save image: " << filePath;
if (!imgMat3D.empty())
{
int lastPos = filePath.lastIndexOf('.');
QString pclPath = filePath.left(lastPos);
pclPath.append(".pcd");
cv::imwrite(filePath.toStdString(), imgMat3D);
qDebug() << "Save PointCould: " << filePath;
}
} }
void SmokeBoxIdentification::saveImage(const QVector<ImageInfo>& vecImageInfo, int workMode) void SmokeBoxIdentification::saveImage(const QVector<ImageInfo>& vecImageInfo, int workMode)
@ -207,7 +216,7 @@ void SmokeBoxIdentification::saveImage(const QVector<ImageInfo>& vecImageInfo, i
QString filePath = QString("%1\\%2").arg(dataSaveFolderPath).arg(fileInfo.name); QString filePath = QString("%1\\%2").arg(dataSaveFolderPath).arg(fileInfo.name);
#if IMAGEDRAWING == LPV #if IMAGEDRAWING == LPV
saveImage(vecImageInfo.at(i).imageOrigin, filePath); saveImage(vecImageInfo.at(i).imageOrigin, vecImageInfo.at(i).image3D, filePath);
#elif IMAGEDRAWING == OPENCV #elif IMAGEDRAWING == OPENCV
if (workMode == WorkMode::IntoStock) if (workMode == WorkMode::IntoStock)
@ -224,6 +233,10 @@ void SmokeBoxIdentification::saveImage(const QVector<ImageInfo>& vecImageInfo, i
Q_SLOT void SmokeBoxIdentification::onCapturedImage(const QVector<ImageInfo>& vecImageInfo, int cameraLocation) Q_SLOT void SmokeBoxIdentification::onCapturedImage(const QVector<ImageInfo>& vecImageInfo, int cameraLocation)
{ {
if (vecImageInfo.length() <= 0)
{
return;
}
QString serialNumber = vecImageInfo.last().cameraSn; QString serialNumber = vecImageInfo.last().cameraSn;
if (cameraLocation == eCameraLocation::emTop) if (cameraLocation == eCameraLocation::emTop)
{ {
@ -404,9 +417,7 @@ void SmokeBoxIdentification::calculate(int stocketID)
FileInfo fileInfo = imgInfo.saveImgInfo; FileInfo fileInfo = imgInfo.saveImgInfo;
QString fileName = QString("%1_%2_rlt%3").arg(fileInfo.strId) QString fileName = QString("%1_%2_rlt%3").arg(fileInfo.strId)
.arg(m_currtStockCheckInfo.smokeTypeNum).arg(fileInfo.suffix); .arg(m_currtStockCheckInfo.smokeTypeNum).arg(fileInfo.suffix);
qInfo() << "fileName" << fileName;
QString filePath = QString("%1\\%2").arg(dataSaveFolder).arg(fileName); QString filePath = QString("%1\\%2").arg(dataSaveFolder).arg(fileName);
qInfo() << "filePath" << filePath;
m_pCategoryMatcher->saveResultsImage(filePath); m_pCategoryMatcher->saveResultsImage(filePath);
break; break;
} }

@ -97,7 +97,7 @@ private:
void captureSide(int cameraID); void captureSide(int cameraID);
void saveImage(const QVector<ImageInfo>& vecImageInfo, int workMode); void saveImage(const QVector<ImageInfo>& vecImageInfo, int workMode);
void saveImage(const cv::Mat& imgMat, const QString& filePath); void saveImage(const cv::Mat& imgMat, const QString& filePath);
void saveImage(ILImagePtr image, const QString& filePath); void saveImage(ILImagePtr image, const cv::Mat& imgMat3D, const QString& filePath);
bool decodeSmokeInfoCsv(const QString& filePath); bool decodeSmokeInfoCsv(const QString& filePath);
bool matchSmokeNameAndTemplateFolderName(const QString& folderPath); bool matchSmokeNameAndTemplateFolderName(const QString& folderPath);

@ -0,0 +1,8 @@
#include "TofCamera.h"
TofCamera::TofCamera(QObject *parent)
: QObject(parent)
{}
TofCamera::~TofCamera()
{}

@ -0,0 +1,12 @@
#pragma once
#include <QObject>
class TofCamera : public QObject
{
Q_OBJECT
public:
TofCamera(QObject *parent);
~TofCamera();
};

@ -9,6 +9,7 @@
#include <QtGui\qevent.h> #include <QtGui\qevent.h>
#include <QtCore\qtimer.h> #include <QtCore\qtimer.h>
#include <QtWidgets/QApplication> #include <QtWidgets/QApplication>
#include <QDebug>
#include "QZkJsonParser.h" #include "QZkJsonParser.h"
#include "lp_singleton.h" #include "lp_singleton.h"

@ -0,0 +1,172 @@

#ifndef _LX_CAMERA_API_H_
#define _LX_CAMERA_API_H_
#include "lx_camera_define.h"
//功能: 获取API版本号
//参数:[out]version API版本号无需外部分配内存
LX_API_STR DcGetApiVersion();
//功能: 设置打印信息等级
//参数:[in]print_level 0info 所有调试信息
// 1warn 重要及警告类调试信息
// 2error 仅输出错误信息
// [in]enable_screen_print 是否在窗口打印
// [in]log_path log文件保存路径(不包含日志文件名),默认为程序执行路径
LX_API DcSetInfoOutput(int print_level, bool enable_screen_print, const char* log_path);
//功能: 允许用户输出调试信息到log文件
//参数:[in]str 要输出的字符串,'\0'结尾
LX_API DcLog(const char* str);
//功能查找eagle系列所有网口相机,不包含usb相机
//参数 [out]devlist 查找到的相机列表
//参数 [out]devnum 查找到的相机数量
//参数 [in]is_local_loop 是否本地回环, 一般情况下为false, 当SDK也运行在相机内部情况下为true
//内部维护内存,外部无须分配内存, 但因每次搜索前会清空原内容,故需外部保证线程安全
//当SDK与相机端程序运行在同一主机的情况下此接口无需调用, 若依然调用将返回0条
LX_API DcGetDeviceList(LxDeviceInfo** devlist, int* devnum);
//功能:连接设备
//参数:[in]open_mode 打开方式, 具体说明见LX_OPEN_MODE
// [in]param 不同的打开方式,填写不同的参数(当sdk与相机端程序运行在同一主机情况下此处填写"127.0.0.1")
// [out]handle 连接成功后返回的设备句柄,后续所有接口访问都依赖该handle字段
// [out]info 连接成功后返回的相机详细信息
LX_API DcOpenDevice(LX_OPEN_MODE open_mode, const char* param, DcHandle* handle, LxDeviceInfo* info);
//功能: 关闭设备
//参数:[in]handle 设备句柄
LX_API DcCloseDevice(DcHandle handle);
//功能: 打开数据流
//参数:[in]handle 设备句柄
LX_API DcStartStream(DcHandle handle);
//功能: 关闭数据流
//参数:[in]handle 设备句柄
LX_API DcStopStream(DcHandle handle);
//功能: 保存点云,可直接调用
//参数:[in]handle 设备句柄
// [in]filename 文件名支持txt,ply和pcd格式。txt格式按图像顺序保存所有数据ply和pcd仅保存非零数据
LX_API DcSaveXYZ(DcHandle handle, const char* filename);
//功能: 设置相机IP和端口如DcSetCameraIp(index,"192.168.100.18") 或DcSetCameraIp(index,"192.168.100.18", 3956);
// 修改完之后设备列表会变化需重新调用DcGetDeviceList接口重新获取新的设备列表
//参数:[in]handle 设备句柄, (当未连接上设备情况下,需先通过搜索获取)
// [in]ip 设备IP
// [in]netmask 子网掩码(若传空则内部默认"255.255.0.0")
// [in]gateway 网关ip(若传空则内部默认将ip最后网段置为"1"后作为网关)
LX_API DcSetCameraIp(DcHandle handle, const char* ip, const char* netmask, const char* gateway);
//功能设置int类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [in]value 设置参数值
LX_API DcSetIntValue(DcHandle handle, int cmd, int value);
//功能获取int类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数结构体
LX_API DcGetIntValue(DcHandle handle, int cmd, LxIntValueInfo* value);
//功能设置float类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [in]value 设置参数值
LX_API DcSetFloatValue(DcHandle handle, int cmd, float value);
//功能获取float类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数结构体
LX_API DcGetFloatValue(DcHandle handle, int cmd, LxFloatValueInfo* value);
//功能设置bool类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [in]value 设置参数值
LX_API DcSetBoolValue(DcHandle handle, int cmd, bool value);
//功能获取bool类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数
LX_API DcGetBoolValue(DcHandle handle, int cmd, bool* value);
//功能设置string类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [in]value 设置参数值
LX_API DcSetStringValue(DcHandle handle, int cmd, const char* value);
//功能获取string类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数,无需外部分配内存
LX_API DcGetStringValue(DcHandle handle, int cmd, char** value);
//功能:获取指针类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数,无需外部分配内存
LX_API DcGetPtrValue(DcHandle handle, int cmd, void** value);
//功能执行对应CMD类型指令操作
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
LX_API DcSetCmd(DcHandle handle, int cmd);
//功能LX_CAMERA_FEATURE定义之外的特殊操作具体功能和参数由字符串command确定
//参数:[in]handle 设备句柄
// [in]command 指令
// [in][out]value 设置时为对应入参,获取时为对应出参,无需外部分配内存
LX_API DcSpecialControl(DcHandle handle, const char* command, void* value);
//功能设置ROI区域
//参数:[in]handle 设备句柄
// [in]x_offset 起始点水平偏移像素
// [in]value 起始点垂直偏移参数
// [in]type 0-3D图像 1-2D图像
LX_API DcSetROI(DcHandle handle, int offsetx, int offsety, int width, int height, int img_type);
//功能: 注册数据帧回调函数,收到新的数据时自动调用
//参数:[in]handle 设备句柄
// [in]func 回调函数指针
// [in]usr_data 用户自定义参数
LX_API DcRegisterFrameCallback(DcHandle handle, LX_FRAME_CALLBACK func, void* usr_data);
//功能: 取消数据帧注册回调函数
//参数:[in]handle 设备句柄
LX_API DcUnregisterFrameCallback(DcHandle handle);
//功能: 注册相机状态回调函数,相机状态变化时自动调用
//参数:[in]handle 设备句柄
// [in]func 回调函数指针
// [in]usr_data 用户自定义参数
LX_API DcRegisterCameraStatusCallback(DcHandle handle, LX_CAMERA_STATUS_CALLBACK func, void* usr_data);
//功能: 取消相机状态注册回调函数
//参数:[in]handle 设备句柄
LX_API DcUnregisterCameraStatusCallback(DcHandle handle);
//功能:设置参数路径
//参数:[in]handle 设备句柄
// [in]filepath 参数文件路径,不包含文件名(大部分情况不需要调用仅部分相型号机打开时需要参数如M3I2等)
LX_API DcSetParamPath(DcHandle handle, const char* filepath);
//功能: 获取函数返回状态对应的说明
//参数:[in]state 函数接口返回的状态
LX_API_STR DcGetErrorString(LX_STATE state);
#endif

@ -0,0 +1,109 @@

#ifndef _LX_CAMERA_APPLICATION_H_
#define _LX_CAMERA_APPLICATION_H_
#include <stdint.h>
//! 地面平面,满足 ax + by + cz + d = 0
typedef struct {
float a, b, c, d;
} LxGroundPlane;
//2D 点
typedef struct {
float x, y;
} LxPoint2d;
//! 3D 点
typedef struct {
float x, y, z;
uint8_t r, g, b;
} LxPoint3dWithRGB;
//! 6自由度速度
typedef struct {
float linear[3]; //!< 线速度
float angular[3]; //!< 角速度
} LxVelocity;
typedef float LxRotation[9]; //!< 旋转矩阵
typedef float LxTranslation[3]; //!< 平移向量
typedef struct {
LxRotation R; //!< 旋转矩阵
LxTranslation T; //!< 平移向量
uint64_t timestamp; //!< unix时间戳
} LxPose;
//! 障碍物信息
typedef struct {
LxPose pose; //!< 障碍物 Box 中心和旋转矩阵
float width, height, depth; //!< 障碍物 Box 宽、高、深
LxTranslation center; //!< 障碍物质心
int32_t type; //!< 障碍物语义,暂未实现
int64_t id; //!< 障碍物序号,暂未实现
LxVelocity velocity; //!< 障碍物速度,暂未实现
} LxObstacleBox;
typedef enum {
//! 执行成功
LxAvSuccess = 0,
//! 未设置地面先验,请调用 LxAvSetGroundPriorPlane
LxAvGroundPriorNotSet = -1,
//! 未设置输入,请调用 LxAvSetInput_1 或 LxAvSetInput_2
LxAvInputNotSet = -2,
//! 设置的范围内无点云,如需更改检测范围,请调用 LxAvSetRange
LxAvNoPointInRange = -3,
//! 过滤地面后点云为空
LxAvNoPointAfterFilterGround = -4,
/*! 半径滤波后点云为空,通过调用 LxAvSetNoiseSituation 来设置合适的
*/
LxAvNoPointAfterRadiusFilter = -5,
//! 语义功能已开启,但未得到分割结果
LxAvObstaclesNotSegmented = -6,
//! 未定义的错误
LxAvUndefinedError = -99,
} LxAvState;
//! 避障输出结构体
typedef struct {
LxAvState state; //!< 返回状态
LxGroundPlane groundPlane; //!< 检测到的距离最近的地面
uint32_t number_3d; //!< 输出点个数
LxPoint3dWithRGB* cloud_output; //!< 输出点云(已过滤地面与噪声)
uint32_t number_box; //!< 障碍物个数
LxObstacleBox* obstacleBoxs; //!< 障碍物 Box
} LxAvoidanceOutput;
//! 托盘定位结构体
//@Update Since 0.1.2: add return value and a float-array
// extents: 可扩展数据总长度128
// 当前数组置0待扩展// x: 托盘中心距离相机光心距离,负值(叉车插臂方向为后退方向)
// y: 托盘中心距离相机光心右侧偏移距离,一般在(-500, 500)范围
// yaw: 托盘倾斜角度水平为0单位为角度
// extents: 扩展信息(int类型长度为8192)
typedef struct {
int return_val;
float x, y, yaw;
int extents[8192];
} LxPalletPose;
typedef struct {
double x, y, theta;
}LxRelocPose;
typedef struct {
int64_t timestamp;
double x, y, theta;
}LxOdomData;
typedef struct {
int64_t timestamp; //时间戳
int32_t status; //算法返回值:正在加载地图,加载地图错误,正在重定位,重定位错误,初始化错误,参数异常,图像异常,识别异常等
float x, y, theta;
int32_t extents[8192]; //自定义内容,扩展信息
}LxLocation;
#endif

@ -0,0 +1,377 @@
#ifndef _LX_CAMERA_DEFINE_H_
#define _LX_CAMERA_DEFINE_H_
#ifdef WIN32
#ifndef _WIN32
#define _WIN32
#endif
#endif
#ifndef LX_EXPORT
#ifdef _WIN32
#ifdef LX_DC_EXPORTS
#define LX_EXPORT __declspec(dllexport)
#else
#define LX_EXPORT __declspec(dllimport)
#endif
#define LX_STDC __stdcall
#else
#define LX_EXPORT
#if defined(__i386__)
#define LX_STDC __attribute__((stdcall))
#else
#define LX_STDC
#endif
#endif
#endif
#ifndef LX_EXTC
#if defined(__cplusplus)
#define LX_EXTC extern "C"
#else
#define LX_EXTC
#endif
#endif
typedef enum LX_STATE
{
LX_SUCCESS = 0, //成功
LX_ERROR = -1, //未知错误
LX_E_NOT_SUPPORT = -2, //功能不支持
LX_E_NETWORK_ERROR = -3, //网络通讯错误
LX_E_INPUT_ILLEGAL = -4, //入参非法
LX_E_RECONNECTING = -5, //设备重连中
LX_E_DEVICE_ERROR = -6, //设备故障
LX_E_DEVICE_NEED_UPDATE = -7, //设备版本过低,需升级
LX_E_API_NEED_UPDATE = -8, //API版本过低
LX_E_CTRL_PERMISS_ERROR = -9, //独占控制权限失败
LX_E_GET_DEVICEINFO_ERROR = -10,//获取设备信息失败
LX_E_IMAGE_SIZE_ERROR = -11, //图像尺寸不匹配,需重新打开
LX_E_IMAGE_PARTITION_ERROR = -12, //图像解析失败(pixformat不正确),需尝试重新打开
LX_E_DEVICE_NOT_CONNECTED = -13, //相机未连接
LX_E_DEVICE_INIT_FAILED = -14, //相机初始化失败
LX_E_DEVICE_NOT_FOUND = -15, //未找到相机(或未找到匹配的相机)
LX_E_FILE_INVALID = -16, //文件错误(文件名或类型或格式不正确或文件打开失败)
LX_E_CRC_CHECK_FAILED = -17, //文件crc或md5校验失败
LX_E_TIME_OUT = -18, //超时
LX_E_FRAME_LOSS = -19, //漏帧
LX_E_ENABLE_ANYSTREAM_FAILED = -20, //开启任意流失败
LX_E_NOT_RECEIVE_STREAM = -21, //未收到流数据
LX_E_PARSE_STREAM_FAILED = -22, //启流成功但解析流数据失败
LX_E_PROCESS_IMAGE_FAILED = -23, //图像计算处理失败
LX_E_SETTING_NOT_ALLOWED = -24, //常开模式下不允许设置
LX_E_LOAD_DATAPROCESSLIB_ERROR = -25, //加载图像处理算法库错误
LX_E_FUNCTION_CALL_LOGIC_ERROR = -26, //函数调用逻辑错误
LX_E_IPAPPDR_UNREACHABLE_ERROR = -27, //IP不可达或网络配置错误
}LX_STATE;
#define LX_API LX_EXTC LX_EXPORT LX_STATE LX_STDC
#define LX_API_STR LX_EXTC LX_EXPORT const char* LX_STDC
typedef unsigned long long DcHandle;
typedef enum LX_DEVICE_TYPE {
LX_DEVICE_M2 = 1001,
LX_DEVICE_M3,
LX_DEVICE_M4Pro,
LX_DEVICE_M4_MEGA,
LX_DEVICE_M4,
LX_DEVICE_S1 = 2001,
LX_DEVICE_S2,
LX_DEVICE_I1 = 3001,
LX_DEVICE_I2,
LX_DEVICE_T1 = 4001,
LX_DEVICE_T2,
LX_DEVICE_WK = 5001,
LX_DEVICE_V1Pro = 6001,
LX_DEVICE_NULL = 0
}LX_DEVICE_TYPE;
typedef struct LxDeviceInfo
{
DcHandle handle; //设备唯一标识
LX_DEVICE_TYPE dev_type; //设备类型
char id[32]; //设备id
char ip[32]; //设备ip:port
char sn[32]; //设备序列号
char mac[32]; //设备mac地址
char firmware_ver[32]; //设备软件版本号
char algor_ver[32]; //设备算法版本号
char name[32]; //设备名称camera_M3_192.168.11.13_9803
char reserve[32]; //预留字段, 子网掩码 //add at 20231120
char reserve2[32]; //预留字段2, 网关ip //add at 20231120
char reserve3[64]; //预留字段3
char reserve4[128]; //预留字段4
}LxDeviceInfo;
typedef struct LxIntValueInfo
{
bool set_available; //当前值是否可设置, true-可设置false-不可设置
int cur_value; //当前值
int max_value; //最大值
int min_value; //最小值
int reserve[4]; //预留字段
}LxIntValueInfo;
typedef struct LxFloatValueInfo
{
bool set_available; //当前值是否可设置, true-可设置false-不可设置
float cur_value; //当前值
float max_value; //最大值
float min_value; //最小值
float reserve[4]; //预留字段
}LxFloatValueInfo;
typedef enum LX_OPEN_MODE
{
OPEN_BY_INDEX = 0, //按搜索列表中索引下标方式打开,对应的参数为索引号,当搜索到的设备列表发生变化时,选择打开的设备也会不一样
OPEN_BY_IP = 1, //按搜索列表中对应ip方式打开对应的参数为设备ip或ip:port
OPEN_BY_SN = 2, //按搜索列表中对应sn方式打开对应的参数为设备sn
OPEN_BY_ID = 3, //按搜索列表中对应id方式打开对应的参数为设备id
}LX_OPEN_MODE;
//数据格式。3D强度图和深度图有不同的数据格式获取数据指针需要使用对应的feature
typedef enum LX_DATA_TYPE
{
LX_DATA_UNSIGNED_CHAR = 0,
LX_DATA_UNSIGNED_SHORT = 2,
LX_DATA_FLOAT = 5,
LX_DATA_OBSTACLE = 16,
LX_DATA_PALLET = 17,
LX_DATA_LOCATION =18,
}LX_DATA_TYPE;
//2D数据流支持不同的压缩格式
typedef enum LX_STREAM_ENCODE_MODE
{
LX_STREAM_RAW = 0,
LX_STREAM_H264 = 1,
LX_STREAM_H265 = 2,
LX_STREAM_MJPEG = 3,
LX_STREAM_JPEG = 4,
}LX_STREAM_ENCODE_MODE;
typedef enum LX_BINNING_MODE
{
LX_BINNING_1X1 = 0,
LX_BINNING_2X2 = 1,
LX_BINNING_4X4 = 2
}LX_BINNING_MODE;
typedef enum LX_STRUCT_LIGHT_CODE_MODE
{
LX_CODE_NORMAL = 1,//常规
LX_CODE_STATBLE = 2,//稳定
LX_CODE_ENHANCE = 3, //高精度加强
}LX_STRUCT_LIGHT_CODE_MODE;
typedef enum LX_GET_AMPLITUDE_MODE
{
FLASH = 1, //采用投影时的图像
MANUAL_EXPOSURE = 2, //采集环境光图像,需设置固定的曝光时间
AUTO_EXPOSURE = 3, //采集环境光图像,自动曝光,可设置目标亮度
}LX_GET_AMPLITUDE_MODE;
//闪光灯开启模式,部分型号支持
typedef enum LX_STROBE_MODE
{
STROBE_MODE_IN_CLOSE_OUT_CLOSE = 0, //关闭内外部补光灯
STROBE_MODE_IN_FLASH_OUT_CLOSE = 1, //开启内部补光灯闪亮,关闭外部补光灯
STROBE_MODE_IN_OPEN_OUT_CLOSE = 2, //开启内部补光灯常亮,关闭外部补光灯
STROBE_MODE_IN_CLOSE_OUT_FLASH = 3, //关闭内部补光灯,开启外部补光灯闪亮
STROBE_MODE_IN_CLOSE_OUT_OPEN = 4, //关闭内部补光灯,开启外部补光灯常亮
STROBE_MODE_IN_FLASH_OUT_FLASH = 5, //同时开启内外部补光灯闪亮
STROBE_MODE_IN_FLASH_OUT_OPEN = 6, //开启内部补光灯闪亮,开启外部补光灯常亮
STROBE_MODE_IN_OPEN_OUT_FLASH = 7, //开启内部补光灯常亮,开启外部补光灯闪亮
STROBE_MODE_IN_OPEN_OUT_OPEN = 8, //同时开启内外部补光灯常亮
}LX_STROBE_MODE;
typedef enum LX_ALGORITHM_MODE
{
MODE_ALL_OFF = 0, //关闭内置避障算法
MODE_AVOID_OBSTACLE = 1, //内置避障算法
MODE_PALLET_LOCATE = 2, //内置托盘对接算法
MODE_VISION_LOCATION = 3, //内置视觉定位算法
}LX_ALGORITHM_MODE;
typedef enum LX_CAMERA_WORK_MODE
{
MODE_ONLY_GIGE = 0, //正常模式,按需采图,默认为该状态
MODE_COLLECT_FOREVER = 1, //始终采图
}LX_CAMERA_WORK_MODE;
typedef enum LX_TRIGGER_MODE
{
LX_TRIGGER_MODE_OFF, //关闭触发模式,流模式,默认
LX_TRIGGER_SOFTWARE, //软触发模式
LX_TRIGGER_HARDWARE, //硬触发模式
}LX_TRIGGER_MODE;
//图像显示相关信息
typedef struct FrameDataInfo
{
LX_DATA_TYPE frame_data_type;
int frame_width;
int frame_height;
int frame_channel;
void* frame_data;
unsigned long long sensor_timestamp; //sensor出图时间戳
unsigned long long recv_timestamp; //接收完帧数据时的时间戳
}FrameDataInfo;
//数据帧具体信息
typedef struct FrameInfo {
LX_STATE frame_state;
DcHandle handle;
FrameDataInfo depth_data; //深度图
FrameDataInfo amp_data; //强度图
FrameDataInfo rgb_data; //rgb图
FrameDataInfo app_data; //算法输出结果
void* reserve_data; //扩展预留字段
}FrameInfo;
typedef enum LX_CAMERA_STATUS
{
STATUS_CLOSED, //相机未打开或关闭状态
STATUS_OPENED_UNSTARTED, //相机已打开但未启流状态
STATUS_STARTED, //相机打开且已启流状态
STATUS_CONNECTING, //相机断线正在重连状态
STATUS_CONNECT_SUCCESS //相机重连成功
}LX_CAMERA_STATUS;
//相机状态回调信息
typedef struct CameraStatus {
LX_CAMERA_STATUS camera_state;
unsigned long long status_time;
void* reserve_data; //扩展预留字段
}CameraStatus;
//数据帧回调
typedef void(*LX_FRAME_CALLBACK)(FrameInfo*, void*);
//相机状态回调
typedef void(*LX_CAMERA_STATUS_CALLBACK)(CameraStatus*, void*);
typedef enum LX_CAMERA_FEATURE
{
/*int feature*/
LX_INT_FIRST_EXPOSURE = 1001, //默认高积分曝光值单位us, 针对多积分情况为第一个积分的曝光时间
LX_INT_SECOND_EXPOSURE = 1002, //默认低积分曝光值单位us, 针对多积分情况为第二个积分的曝光时间
LX_INT_THIRD_EXPOSURE = 1003, //默认中积分曝光值单位us, 针对多积分情况为第三个积分的曝光时间
LX_INT_FOURTH_EXPOSURE = 1004, //针对多积分情况为第四个积分的曝光时间
LX_INT_GAIN = 1005, //增益,与曝光效果等价。会引入噪声,可适当调节增益防止曝光参数过大
LX_INT_MIN_DEPTH = 1011, //最小深度值
LX_INT_MAX_DEPTH = 1012, //最大深度值
LX_INT_MIN_AMPLITUDE = 1013, //有效信号最小强度值
LX_INT_MAX_AMPLITUDE = 1014, //有效信号最大强度值
LX_INT_CODE_MODE = 1016, //结构光相机编码模式参考LX_STRUCT_LIGHT_CODE_MODE
LX_INT_WORK_MODE = 1018, //工作模式0-按需采图,默认为该状态 1-始终采图
LX_INT_LINK_SPEED = 1019, //协商的网卡网速 100-百兆1000-千兆, 只支持获取,不可设置
//3D图像参数
LX_INT_3D_IMAGE_WIDTH = 1021, //3D图像分辨率宽度,(ROI/Binning/2D对齐后会变化,需重新获取)
LX_INT_3D_IMAGE_HEIGHT = 1022, //3D图像分辨率高度,(ROI/Binning/2D对齐后会变化,需重新获取)
LX_INT_3D_IMAGE_OFFSET_X = 1023, //ROI水平偏移像素ROI设置中WIDTH HEIGHT OFFSET_X OFFSET_Y一起设置, 设置参数请用DcSetROI
LX_INT_3D_IMAGE_OFFSET_Y = 1024, //ROI垂直偏移像素ROI设置中WIDTH HEIGHT OFFSET_X OFFSET_Y一起设置, 设置参数请用DcSetROI
LX_INT_3D_BINNING_MODE = 1025, //3D图像binning参考LX_BINNING_MODE
LX_INT_3D_DEPTH_DATA_TYPE = 1026, //深度图像数据格式只能获取对应的值参考LX_DATA_TYPE
//3D强度图像尺寸与3D深度图一致
LX_INT_3D_AMPLITUDE_CHANNEL = 1031, //3D强度图像通道数单色为1彩色为3
LX_INT_3D_AMPLITUDE_GET_TYPE = 1032, //获取强度图像的方式参考LX_GET_AMPLITUDE_MODE(部分型号支持)
LX_INT_3D_AMPLITUDE_EXPOSURE = 1033, //LX_INT_3D_AMPLITUDE_GET_TYPE为MANUAL_EXPOSURE时的曝光值
LX_INT_3D_AMPLITUDE_INTENSITY = 1034,//LX_INT_3D_AMPLITUDE_GET_TYPE为AUTO_EXPOSURE时的目标亮度
LX_INT_3D_AMPLITUDE_DATA_TYPE = 1035,//强度图像数据格式只能获取对应的值参考LX_DATA_TYPE
LX_INT_3D_AUTO_EXPOSURE_LEVEL = 1036,//3D自动曝光开启时的曝光等级,期间不允许设置曝光值与增益
//2D图像
LX_INT_2D_IMAGE_WIDTH = 1041, //2D图像分辨率宽度,(ROI或Binning后会变化)
LX_INT_2D_IMAGE_HEIGHT = 1042, //2D图像分辨率高度,(ROI或Binning后会变化)
LX_INT_2D_IMAGE_OFFSET_X = 1043, //2D图像ROI水平偏移像素ROI设置中WIDTH HEIGHT OFFSET_X OFFSET_Y一起设置, 设置参数请用DcSetROI
LX_INT_2D_IMAGE_OFFSET_Y = 1044, //2D图像ROI垂直偏移像素ROI设置中WIDTH HEIGHT OFFSET_X OFFSET_Y一起设置, 设置参数请用DcSetROI
LX_INT_2D_BINNING_MODE = 1045, //2D图像binning参考LX_BINNING_MODE
LX_INT_2D_IMAGE_CHANNEL = 1046, //2D图像通道数单色为1彩色为3
LX_INT_2D_IMAGE_DATA_TYPE = 1047, //2D图像数据格式只能获取,对应的值参考LX_DATA_TYPE
LX_INT_2D_MANUAL_EXPOSURE = 1051, //2D手动曝光时的曝光值
LX_INT_2D_MANUAL_GAIN = 1052, //2D手动曝光时的增益值
LX_INT_2D_ENCODE_TYPE = 1053, //2D图像压缩格式对应的值参考LX_STREAM_ENCODE_MODE
LX_INT_2D_AUTO_EXPOSURE_LEVEL = 1054,//2D图像自动曝光时曝光等级[0-100], 0-整体更暗, 100-整体更亮
LX_INT_TOF_GLOBAL_OFFSET = 1061, //TOF深度数据偏移
LX_INT_3D_UNDISTORT_SCALE = 1062, //TOF图像反畸变系数
LX_INT_STROBE_EXPOSURE = 1063, //闪光灯曝光时间,部分型号支持
LX_INT_STROBE_MODE = 1064, //闪光灯开启模式,部分型号支持,对应的值参考LX_STROBE_MODE
LX_INT_ALGORITHM_MODE = 1065, //内置算法开启模式, 部分型号支持,对应的值参考LX_ALGORITHM_MODE
LX_INT_MODBUS_ADDR = 1066, //modbus地址部分型号支持MODBUS协议通过串口输出
LX_INT_HEART_TIME = 1067, //与设备间心跳时间,单位ms
LX_INT_GVSP_PACKET_SIZE = 1068, //GVSP单包数据分包大小, 单位字节
LX_INT_TRIGGER_MODE = 1069, //触发模式,对应的值参考LX_TRIGGER_MODE
/*float feature*/
LX_FLOAT_FILTER_LEVEL = 2001, //滤波等级,[0, 1]值越大滤波越强等于0表示关闭滤波//更详细滤波配置参考LX_STRING_FILTER_PARAMS
LX_FLOAT_EST_OUT_EXPOSURE = 2002, //是否评估过曝数据,[0, 1]为1则过曝数据无效
LX_FLOAT_LIGHT_INTENSITY = 2003, //光强度,[0, 1],部分型号支持
LX_FLOAT_3D_DEPTH_FPS = 2004, //深度图当前帧率,只可获取
LX_FLOAT_3D_AMPLITUDE_FPS = 2005, //强度图当前帧率,只可获取
LX_FLOAT_2D_IMAGE_FPS = 2006, //RGB图当前帧率只可获取
LX_FLOAT_DEVICE_TEMPERATURE = 2007,//相机当前温度, 只可获取
/*bool feature*/
LX_BOOL_CONNECT_STATE = 3001, //当前连接状态
LX_BOOL_ENABLE_3D_DEPTH_STREAM = 3002, //开启/关闭深度数据流(部分相机支持)
LX_BOOL_ENABLE_3D_AMP_STREAM = 3003, //开启/关闭强度数据流(部分相机支持)
LX_BOOL_ENABLE_3D_AUTO_EXPOSURE = 3006, //3D自动曝光使能
LX_BOOL_ENABLE_3D_UNDISTORT = 3007, //3D反畸变使能
LX_BOOL_ENABLE_ANTI_FLICKER = 3008, //抗频闪使能LED环境照明可能导致数据存在明显波纹部分型号支持
LX_BOOL_ENABLE_2D_STREAM = 3011, //开启/关闭2D数据流
LX_BOOL_ENABLE_2D_AUTO_EXPOSURE = 3012, //2D自动曝光使能
LX_BOOL_ENABLE_2D_UNDISTORT = 3015, //2D图像反畸变使能
LX_BOOL_ENABLE_2D_TO_DEPTH = 3016, //2D3D图像对齐使能3D图像分辨率会改变
LX_BOOL_ENABLE_BACKGROUND_AMP = 3017, //强度背景光使能
LX_BOOL_ENABLE_MULTI_MACHINE = 3018, //多机模式使能
/*string feature*/
LX_STRING_DEVICE_VERSION = 4001, //设备版本号
LX_STRING_DEVICE_LOG_NAME = 4002, //日志文件名,用于获取设备日志
LX_STRING_FIRMWARE_NAME = 4003, //固件文件名,用于升级设备版本,部分型号需要重新打开相机
LX_STRING_FILTER_PARAMS = 4004, //滤波算法参数,json格式的字符串//关闭滤波或配置简单的滤波参考LX_FLOAT_FILTER_LEVEL
LX_STRING_ALGORITHM_PARAMS = 4005, //内置算法参数,不同的开启模式对应不同的json格式字符串,前提需要设置过LX_ALGORITHM_MODE
LX_STRING_ALGORITHM_VERSION = 4006, //内置算法版本号,不同的开启模式,返回对应的版本号,只能获取,前提需要设置过LX_ALGORITHM_MODE
LX_STRING_DEVICE_OS_VERSION = 4007, //设备系统镜像版本号
/*command feature*/
LX_CMD_GET_NEW_FRAME = 5001, //更新当前最新数据,调用之后才可以获取相关数据指针
LX_CMD_RETURN_VERSION = 5002, //回退上一版本
LX_CMD_RESTART_DEVICE = 5003, //重启相机,部分型号需要重新打开相机
LX_CMD_WHITE_BALANCE = 5004, //自动白平衡
LX_CMD_RESET_PARAM = 5007, //恢复默认参数
/*ptr feature*/
LX_PTR_2D_IMAGE_DATA = 6001, //获取2D图像数据指针数据长度由2D图像尺寸、通道数和数据格式LX_INT_2D_IMAGE_DATA_TYPE确定
LX_PTR_3D_AMP_DATA = 6002, //获取3D强度图数据指针数据长度由3D图像尺寸、通道数和数据格式LX_INT_3D_AMPLITUDE_DATA_TYPE确定
LX_PTR_3D_DEPTH_DATA = 6003, //获取3D深度图数据指针数据长度由3D图像尺寸、通道数和数据格式LX_INT_3D_DEPTH_DATA_TYPE确定
LX_PTR_XYZ_DATA = 6004, //获取点云数据指针float*类型三通道(x, y, z为一组数据依次循环)
//数据长度为LX_INT_3D_IMAGE_WIDTH*LX_INT_3D_IMAGE_HEIGHT*sizeof(float)*3
LX_PTR_2D_INTRIC_PARAM = 6005, //获取2D图像内参float*类型指针长度固定为9*sizeof(float)(fx,fy,cx,cy,k1,k2,p1,p2,k3)
LX_PTR_3D_INTRIC_PARAM = 6006, //获取3D图像内参, float*类型指针长度固定为9*sizeof(float)(fx,fy,cx,cy,k1,k2,p1,p2,k3)
LX_PTR_3D_EXTRIC_PARAM = 6007, //获取3D图像外参float*类型指针 长度固定为12*sizeof(float)(前9个表示旋转矩阵后3个表示平移向量)
LX_PTR_ALGORITHM_OUTPUT = 6008, //获取内置算法输出
//当开启模式为MODE_AVOID_OBSTACLE输出结果为LxAvoidanceOutput指针参考struct LxAvoidanceOutput
//当开启模式为MODE_PALLET_LOCATE输出结果为LxPalletPose指针参考struct LxPalletPose
LX_PTR_FRAME_DATA = 6009, //获取完整一帧数据输出结果参考结构体FrameInfo
}LX_CAMERA_FEATURE;
#endif

@ -39,13 +39,13 @@ QT_MOC_LITERAL(3, 31, 18), // "QVector<ImageInfo>"
QT_MOC_LITERAL(4, 50, 12), // "vecImageInfo" QT_MOC_LITERAL(4, 50, 12), // "vecImageInfo"
QT_MOC_LITERAL(5, 63, 14), // "cameraLocation" QT_MOC_LITERAL(5, 63, 14), // "cameraLocation"
QT_MOC_LITERAL(6, 78, 9), // "onCapture" QT_MOC_LITERAL(6, 78, 9), // "onCapture"
QT_MOC_LITERAL(7, 88, 8), // "cameraID" QT_MOC_LITERAL(7, 88, 8), // "location"
QT_MOC_LITERAL(8, 97, 6) // "onOpen" QT_MOC_LITERAL(8, 97, 6) // "onOpen"
}, },
"CameraControl\0sgCapturedImage\0\0" "CameraControl\0sgCapturedImage\0\0"
"QVector<ImageInfo>\0vecImageInfo\0" "QVector<ImageInfo>\0vecImageInfo\0"
"cameraLocation\0onCapture\0cameraID\0" "cameraLocation\0onCapture\0location\0"
"onOpen" "onOpen"
}; };
#undef QT_MOC_LITERAL #undef QT_MOC_LITERAL

@ -0,0 +1,90 @@
/****************************************************************************
** Meta object code from reading C++ file 'LXCamera.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.9.4)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../../../../src/LXCamera.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'LXCamera.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.9.4. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_LXCamera_t {
QByteArrayData data[1];
char stringdata0[9];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_LXCamera_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_LXCamera_t qt_meta_stringdata_LXCamera = {
{
QT_MOC_LITERAL(0, 0, 8) // "LXCamera"
},
"LXCamera"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_LXCamera[] = {
// content:
7, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
void LXCamera::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
Q_UNUSED(_o);
Q_UNUSED(_id);
Q_UNUSED(_c);
Q_UNUSED(_a);
}
const QMetaObject LXCamera::staticMetaObject = {
{ &Camera::staticMetaObject, qt_meta_stringdata_LXCamera.data,
qt_meta_data_LXCamera, qt_static_metacall, nullptr, nullptr}
};
const QMetaObject *LXCamera::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *LXCamera::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_LXCamera.stringdata0))
return static_cast<void*>(this);
return Camera::qt_metacast(_clname);
}
int LXCamera::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = Camera::qt_metacall(_c, _id, _a);
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE

@ -0,0 +1,90 @@
/****************************************************************************
** Meta object code from reading C++ file 'TofCamera.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.9.4)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include "../../../../src/TofCamera.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'TofCamera.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.9.4. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_TofCamera_t {
QByteArrayData data[1];
char stringdata0[10];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_TofCamera_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_TofCamera_t qt_meta_stringdata_TofCamera = {
{
QT_MOC_LITERAL(0, 0, 9) // "TofCamera"
},
"TofCamera"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_TofCamera[] = {
// content:
7, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
void TofCamera::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
Q_UNUSED(_o);
Q_UNUSED(_id);
Q_UNUSED(_c);
Q_UNUSED(_a);
}
const QMetaObject TofCamera::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_TofCamera.data,
qt_meta_data_TofCamera, qt_static_metacall, nullptr, nullptr}
};
const QMetaObject *TofCamera::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *TofCamera::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_TofCamera.stringdata0))
return static_cast<void*>(this);
return QObject::qt_metacast(_clname);
}
int TofCamera::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QObject::qt_metacall(_c, _id, _a);
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE

@ -67,7 +67,7 @@
<OutputFile>$(OutDir)smokeBoxd.exe</OutputFile> <OutputFile>$(OutDir)smokeBoxd.exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(MVCAM_COMMON_RUNENV)\Libraries\win64;$(SolutionDir)..\3rdparty\lib;$(SolutionDir)$(Platform)\$(Configuration)\;$(SolutionDir)..\3rdparty\opencv\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(MVCAM_COMMON_RUNENV)\Libraries\win64;$(SolutionDir)..\3rdparty\lib;$(SolutionDir)$(Platform)\$(Configuration)\;$(SolutionDir)..\3rdparty\opencv\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Networkd.lib;Qt5QuickWidgetsd.lib;Qt5SerialPortd.lib;Qt5WebSocketsd.lib;Qt5Widgetsd.lib;Qt5Xlsxd.lib;opencv_world341d.lib;MvCameraControl.lib;numStatisticAlgod.lib;lpSeriald.lib;libzkqd.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Networkd.lib;Qt5QuickWidgetsd.lib;Qt5SerialPortd.lib;Qt5WebSocketsd.lib;Qt5Widgetsd.lib;Qt5Xlsxd.lib;opencv_world341d.lib;MvCameraControl.lib;numStatisticAlgod.lib;lpSeriald.lib;libzkqd.lib;LxCameraApi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
<QtMoc> <QtMoc>
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile> <OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
@ -97,7 +97,7 @@
<OutputFile>$(OutDir)smokeBox.exe</OutputFile> <OutputFile>$(OutDir)smokeBox.exe</OutputFile>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(MVCAM_COMMON_RUNENV)\Libraries\win64;$(SolutionDir)..\3rdparty\lib;$(SolutionDir)$(Platform)\$(Configuration)\;$(SolutionDir)..\3rdparty\opencv\lib;$(SolutionDir)..\3rdparty\qxlsx\lib;$(SolutionDir)..\tpvs17\x64\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(MVCAM_COMMON_RUNENV)\Libraries\win64;$(SolutionDir)..\3rdparty\lib;$(SolutionDir)$(Platform)\$(Configuration)\;$(SolutionDir)..\3rdparty\opencv\lib;$(SolutionDir)..\3rdparty\qxlsx\lib;$(SolutionDir)..\tpvs17\x64\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Network.lib;Qt5QuickWidgets.lib;Qt5SerialPort.lib;Qt5WebSockets.lib;Qt5Widgets.lib;Qt5Xlsx.lib;opencv_world341.lib;MvCameraControl.lib;numStatisticAlgo.lib;lpSerial.lib;libzkq.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Network.lib;Qt5QuickWidgets.lib;Qt5SerialPort.lib;Qt5WebSockets.lib;Qt5Widgets.lib;Qt5Xlsx.lib;opencv_world341.lib;MvCameraControl.lib;numStatisticAlgo.lib;lpSerial.lib;libzkq.lib;LxCameraApi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
<QtMoc> <QtMoc>
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile> <OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
@ -129,10 +129,12 @@
<ClCompile Include="..\..\src\common\log.cpp" /> <ClCompile Include="..\..\src\common\log.cpp" />
<ClCompile Include="..\..\src\HikCamera.cpp" /> <ClCompile Include="..\..\src\HikCamera.cpp" />
<ClCompile Include="..\..\src\lpSerialStation.cpp" /> <ClCompile Include="..\..\src\lpSerialStation.cpp" />
<ClCompile Include="..\..\src\LXCamera.cpp" />
<ClCompile Include="..\..\src\main.cpp" /> <ClCompile Include="..\..\src\main.cpp" />
<ClCompile Include="..\..\src\NetControl.cpp" /> <ClCompile Include="..\..\src\NetControl.cpp" />
<ClCompile Include="..\..\src\QNumTemplateBuild.cpp" /> <ClCompile Include="..\..\src\QNumTemplateBuild.cpp" />
<ClCompile Include="..\..\src\SmokeBoxIdentification.cpp" /> <ClCompile Include="..\..\src\SmokeBoxIdentification.cpp" />
<ClCompile Include="..\..\src\TofCamera.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtMoc Include="..\..\src\ADModule.h" /> <QtMoc Include="..\..\src\ADModule.h" />
@ -147,6 +149,10 @@
<QtMoc Include="..\..\src\CategoryMatcher.h" /> <QtMoc Include="..\..\src\CategoryMatcher.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtMoc Include="..\..\src\TofCamera.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
</QtMoc>
<QtMoc Include="..\..\src\CodeScanStation.h"> <QtMoc Include="..\..\src\CodeScanStation.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath> <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath> <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
@ -158,6 +164,13 @@
<ClInclude Include="..\..\src\lpv\LPVCore.h" /> <ClInclude Include="..\..\src\lpv\LPVCore.h" />
<ClInclude Include="..\..\src\lpv\LPVGeom.h" /> <ClInclude Include="..\..\src\lpv\LPVGeom.h" />
<ClInclude Include="..\..\src\lpv\LPVPat.h" /> <ClInclude Include="..\..\src\lpv\LPVPat.h" />
<QtMoc Include="..\..\src\LXCamera.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx</IncludePath>
</QtMoc>
<ClInclude Include="..\..\src\lxCamera\lx_camera_api.h" />
<ClInclude Include="..\..\src\lxCamera\lx_camera_application.h" />
<ClInclude Include="..\..\src\lxCamera\lx_camera_define.h" />
<ClInclude Include="..\..\src\MVCameraDriver\CameraParams.h" /> <ClInclude Include="..\..\src\MVCameraDriver\CameraParams.h" />
<ClInclude Include="..\..\src\MVCameraDriver\MvCameraControl.h" /> <ClInclude Include="..\..\src\MVCameraDriver\MvCameraControl.h" />
<ClInclude Include="..\..\src\MVCameraDriver\MvErrorDefine.h" /> <ClInclude Include="..\..\src\MVCameraDriver\MvErrorDefine.h" />

@ -40,6 +40,9 @@
<Filter Include="Header Files\HikCameraDriver"> <Filter Include="Header Files\HikCameraDriver">
<UniqueIdentifier>{fc09094f-8b70-4ea8-a059-83a93bf5ec55}</UniqueIdentifier> <UniqueIdentifier>{fc09094f-8b70-4ea8-a059-83a93bf5ec55}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Header Files\lxCamera">
<UniqueIdentifier>{71ef3486-4cd9-42b1-818a-a8ce9294861e}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtUic Include="SmokeBoxIdentification.ui"> <QtUic Include="SmokeBoxIdentification.ui">
@ -88,6 +91,12 @@
<ClCompile Include="..\..\src\CodeScanStation.cpp"> <ClCompile Include="..\..\src\CodeScanStation.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\TofCamera.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\src\LXCamera.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<QtMoc Include="..\..\src\ADModule.h"> <QtMoc Include="..\..\src\ADModule.h">
@ -120,6 +129,12 @@
<QtMoc Include="..\..\src\CodeScanStation.h"> <QtMoc Include="..\..\src\CodeScanStation.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</QtMoc> </QtMoc>
<QtMoc Include="..\..\src\TofCamera.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="..\..\src\LXCamera.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\src\common\log.h"> <ClInclude Include="..\..\src\common\log.h">
@ -167,5 +182,14 @@
<ClInclude Include="..\..\src\common\QZkJsonParser.h"> <ClInclude Include="..\..\src\common\QZkJsonParser.h">
<Filter>Header Files\common</Filter> <Filter>Header Files\common</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\lxCamera\lx_camera_api.h">
<Filter>Header Files\lxCamera</Filter>
</ClInclude>
<ClInclude Include="..\..\src\lxCamera\lx_camera_application.h">
<Filter>Header Files\lxCamera</Filter>
</ClInclude>
<ClInclude Include="..\..\src\lxCamera\lx_camera_define.h">
<Filter>Header Files\lxCamera</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>
Loading…
Cancel
Save