滁州基础

滁州
LAPTOP-S9HJSOEB\昊天 2 years ago
parent 5b4b895e21
commit 249e7160e3

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,106 @@
{
"devices": {
"LP-OCM-R060GC 00787720450": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
"auto_push": true,
"balanceRatio": 0,
"balanceRatioSelector": 0,
"board_config_file": "",
"board_name": "",
"board_num": 0,
"board_type": 64,
"camera_file": "",
"exposure": 10000,
"folder": "model1\\",
"format": "None",
"frame_rate": 9.3,
"gain": 2,
"height": 1200,
"id": 1,
"location": 1,
"loop": 1,
"mac_address": "",
"offset_x": 0,
"offset_y": 0,
"param_policy": 2,
"rely_on_camera": "",
"rotation_angle": 0,
"calib_file": ".\\config\\1.calib",
"save": 1,
"save_img_suffix": ".PNG",
"savefile_rgb_swapped": false,
"showname": "相机一",
"trigger_source": "Line0",
"type": 140,
"width": 1920,
"zoom": 1
},
"LP-OCM-HL060M 00J49540865": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
"auto_push": true,
"balanceRatio": 0,
"balanceRatioSelector": 0,
"board_config_file": "",
"board_name": "",
"board_num": 0,
"board_type": 64,
"camera_file": "",
"exposure": 10000,
"folder": "model1\\",
"format": "None",
"frame_rate": 9.3,
"gain": 2,
"height": 3072,
"id": 2,
"location": 2,
"loop": 1,
"mac_address": "",
"offset_x": 0,
"offset_y": 0,
"param_policy": 2,
"rely_on_camera": "",
"rotation_angle": 0,
"calib_file": ".\\config\\1.calib",
"save": 1,
"save_img_suffix": ".PNG",
"savefile_rgb_swapped": false,
"showname": "相机一",
"trigger_source": "Line0",
"type": 140,
"width": 2048,
"zoom": 1
},
"Eagle-M4 EF0CD99CF26B8A23": {
"id": 3,
"exposure": 10000,
"location": 1,
"save_img_suffix": ".PNG",
"height": 3072,
"width": 2048,
"type": 210
},
"Eagle-M4 F83A01121310": {
"id": 4,
"exposure": 10000,
"location": 2,
"save_img_suffix": ".PNG",
"height": 3072,
"width": 2048,
"type": 210
}
},
"top": {
"startID": 0,
"endID": 0
},
"side": {
"startID": 1,
"endID": 4
}
}

@ -1,6 +1,6 @@
{
"devices": {
"LP-OCM-R060GC 00787720450": {
"LP-OCM-R060GM 00J51775660": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
@ -37,44 +37,7 @@
"width": 1920,
"zoom": 1
},
"LP-OCM-HL060M 00J49540865": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
"auto_push": true,
"balanceRatio": 0,
"balanceRatioSelector": 0,
"board_config_file": "",
"board_name": "",
"board_num": 0,
"board_type": 64,
"camera_file": "",
"exposure": 10000,
"folder": "model1\\",
"format": "None",
"frame_rate": 9.3,
"gain": 2,
"height": 3072,
"id": 2,
"location": 2,
"loop": 1,
"mac_address": "",
"offset_x": 0,
"offset_y": 0,
"param_policy": 2,
"rely_on_camera": "",
"rotation_angle": 0,
"calib_file": ".\\config\\1.calib",
"save": 1,
"save_img_suffix": ".PNG",
"savefile_rgb_swapped": false,
"showname": "相机一",
"trigger_source": "Line0",
"type": 140,
"width": 2048,
"zoom": 1
},
"Eagle-M4 EF0CD99CF26B8A23": {
"Eagle-M4 040F0DCB2C4ACC39": {
"id": 3,
"exposure": 10000,
"location": 1,
@ -84,7 +47,7 @@
"type": 210
},
"Eagle-M4 F83A01121310": {
"Eagle-M4 1830C89357783412": {
"id": 4,
"exposure": 10000,
"location": 2,

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -34,7 +34,7 @@ public:
virtual bool setTriggerSource(int) = 0; //设置触发源
virtual bool setExposure(int exposure) =0; //设置曝光时间
virtual bool setGain(double gain) = 0; //设置增益
virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D) = 0; // »ñÈ¡µ±Ç°Í¼Ïñ
virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D, int location) = 0; // »ñÈ¡µ±Ç°Í¼Ïñ
void start() { m_timer->start(); }
void stop() { m_timer->stop(); }

@ -507,7 +507,8 @@ bool CameraControl::capture(const QString& serialNumber, cv::Mat& img, cv::Mat&
}
int index = iter.value();
m_vecPCamera[index]->setExposure(exposure);
m_vecPCamera[index]->takeAPic(img, img3D);
int localMap = m_cameraStockLocation.find(serialNumber).value();
m_vecPCamera[index]->takeAPic(img, img3D, localMap);
if (img.empty())
{
qWarning() << serialNumber << " capture empty";
@ -576,7 +577,8 @@ Q_SLOT void CameraControl::onCapture(int cameraLocation,int location, int floor)
#if IMAGEDRAWING == LPV
for (auto iter = m_mapSerialNumberIdSide.begin(); iter != m_mapSerialNumberIdSide.end(); iter++)
{
if (m_cameraStockLocation[iter->first] == location)
//if (m_cameraStockLocation[iter->first] == location)
//直接保存所有图片
{
serialNumList << iter->first;
}
@ -593,6 +595,7 @@ Q_SLOT void CameraControl::onCapture(int cameraLocation,int location, int floor)
if (serialNumList.length() != 0)
{
qInfo() << "Captured SerialNumList = " << serialNumList;
//进行拍照
capture(serialNumList, location, floor);
}
}
@ -633,7 +636,7 @@ void CameraControl::capture(const QStringList& serialNumberList, int location, i
setExposure(serialNumber, exposure);
if (!capture(serialNumber, imgInfo.image, imgInfo.image3D, floor))
if (!capture(serialNumber, imgInfo.image, imgInfo.image3D, location))
{
vecImageInfo.push_back(imgInfo);
continue;

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

@ -28,7 +28,7 @@ public:
virtual bool closeCamera() override;
virtual bool startCamera() override;
virtual bool stopCamera() override;
virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D) override;
virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D, int location) override;
virtual bool setTriggerSource(int mode) override;
virtual bool setExposure(int exposure) override;

@ -6,8 +6,8 @@
#include<filesystem>
#include "opencv2/opencv.hpp"
#include "lxCamera/lx_camera_api.h"
#pragma comment(lib,"LxCameraApi.lib")
#pragma comment (lib,"LxCameraApi.lib")
//#pragma comment(lib,"LxCameraApi.lib")
static char wait_key = '0';
@ -62,7 +62,7 @@ bool LXCamera::openCamera()
if (LX_SUCCESS == lx_state) {
break;
}
qDebug() << "TofCamera Open Failed ="<<i<<"id£º"<< m_handle.c_str();;
qDebug() << "TofCamera Open Failed ="<<i<<"id:"<< m_handle.c_str();;
lx_state = DcOpenDevice(LX_OPEN_MODE::OPEN_BY_SN, m_handle.c_str(), handlePtr, &device_info);
}
handle = *handlePtr;
@ -108,7 +108,7 @@ bool LXCamera::startCamera()
{
//¸üÐÂÊý¾Ý
ret = DcSetCmd(handle, LX_CMD_GET_NEW_FRAME);
if (LX_SUCCESS == ret)
if (LX_SUCCESS == ret || LX_W_LOAD_DATAPROCESSLIB_ERROR == ret)
{
break;
}
@ -133,7 +133,7 @@ bool LXCamera::startCamera()
}
}
qDebug() << "TofCamera Open Succeed!";
qDebug() << "TofCamera Open Succeed! "<< QString::number(ret);
return true;
}
@ -157,7 +157,7 @@ bool LXCamera::setGain(double gain)
return true;
}
bool LXCamera::takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D)
bool LXCamera::takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D, int location)
{
qInfo() << "getPicCamera3D handle:" << handle << "cameraSN:" << m_handle.c_str();
@ -192,5 +192,12 @@ bool LXCamera::takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D)
//PointCloud
auto retPCL = DcSetCmd(handle, LX_CMD_GET_NEW_FRAME);
retPCL = DcSaveXYZ(handle, ".\\Cache\\1.pcd");
QString str11;
int number = location;
std::string loca = std::to_string(number);
str11.append(".\\Cache\\").append(loca.c_str()).append(".pcd");
std::string stdStr = str11.toStdString();
retPCL = DcSaveXYZ(handle, stdStr.c_str());
}

@ -20,7 +20,7 @@ public:
virtual bool closeCamera() override;
virtual bool startCamera() override;
virtual bool stopCamera() override;
virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D) override;
virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D, int location) override;
virtual bool setTriggerSource(int mode) override;
virtual bool setExposure(int exposure) override;

@ -190,7 +190,7 @@ QString SmokeBoxIdentification::saveImage(ILImagePtr image, const cv::Mat& imgMa
//QFile::copy("C:\\Users\\LENOVO\\Downloads\\30t.pcd",pclPath);
QFile::rename(".\\Cache\\1.pcd", pclPath);
QFile::rename(".\\Cache\\2.pcd", pclPath);
qDebug() << "Save 3D image: " << pclPath;
return prePath + ".PNG";
@ -210,13 +210,20 @@ void SmokeBoxIdentification::saveImage(const QVector<ImageInfo>& vecImageInfo, i
#if IMAGEDRAWING==LPV
if (m_currtIntoStockInfo.taskNum == "0")
{
dataSaveFolderPath = QString("%1\\%2\\%3\\%4").arg(FILE_INPUTSTORE_PATH)
.arg(m_currtIntoStockInfo.streetName).arg(m_currtIntoStockInfo.Floor).arg(m_currtIntoStockInfo.row);
dataSaveFolderPath = QString("%1\\%2\\%3\\%4\\%5")
.arg(FILE_INPUTSTORE_PATH)
.arg(m_currtIntoStockInfo.streetName)
.arg(m_currtIntoStockInfo.Floor)
.arg(m_currtIntoStockInfo.row)
.arg(m_currtIntoStockInfo.stockLocation);//增加方向
}
else
{
dataSaveFolderPath = QString("%1\\%2\\%3").arg(FILE_STORAGE_PATH)/*.arg(ORIGIN_IMAGE_FOLDER)*/
.arg(m_currtIntoStockInfo.taskNum).arg(m_currtIntoStockInfo.id);
dataSaveFolderPath = QString("%1\\%2\\%3\\%4")
.arg(FILE_STORAGE_PATH)/*.arg(ORIGIN_IMAGE_FOLDER)*/
.arg(m_currtIntoStockInfo.taskNum)
.arg(m_currtIntoStockInfo.id)
.arg(m_currtIntoStockInfo.stockLocation);//增加方向
}
@ -500,8 +507,8 @@ void SmokeBoxIdentification::calculate(int stocketID)
QString typeNum = stocket.smokeTypeNum;
cv::Mat imgRltMat;
QString dataSaveFolder = QString("%1\\%2\\%3").arg(FILE_STORAGE_PATH)
.arg(stocket.taskNum).arg(stocket.id);
QString dataSaveFolder = QString("%1\\%2\\%3\\%4").arg(FILE_STORAGE_PATH)
.arg(stocket.taskNum).arg(stocket.id).arg(stocket.stockLocation);
QVector<ImageInfo> vecImageInfo = m_imageList.value(stocket.id.toInt());
@ -514,6 +521,7 @@ void SmokeBoxIdentification::calculate(int stocketID)
// 由于之前是多个相机拍一个库若前一个相机的图像为OK则不运行下一个
bool bIsMatch = false;
//基础2d图片品规判断
for each (const ImageInfo& imgInfo in vecImageInfo)
{
qDebug() << "imageInfo "<<imgInfo.bIs2D;
@ -587,6 +595,8 @@ void SmokeBoxIdentification::calculate(int stocketID)
}
//3D图片数量判断
for each (const ImageInfo & imgInfo in vecImageInfo)
{
qDebug() << "imageInfo3D " << imgInfo.bIs2D;
@ -606,8 +616,11 @@ void SmokeBoxIdentification::calculate(int stocketID)
pcdName.append(".pcd");
QString storeDir = QString("%1/%2/%3/%4").arg(FILE_INPUTSTORE_PATH)
.arg(m_currtIntoStockInfo.streetName).arg(m_currtIntoStockInfo.Floor).arg(m_currtIntoStockInfo.row);
QString storeDir = QString("%1/%2/%3/%4/%5").arg(FILE_INPUTSTORE_PATH)
.arg(m_currtIntoStockInfo.streetName)
.arg(m_currtIntoStockInfo.Floor)
.arg(m_currtIntoStockInfo.row)
.arg(m_currtIntoStockInfo.stockLocation);
QString pcdPath = dataSaveFolder + "\\" + pcdName;
QString pcdPath2 = storeDir + "\\" + pcdName;
@ -635,15 +648,16 @@ void SmokeBoxIdentification::calculate(int stocketID)
QString absolutePclPath = QCoreApplication::applicationDirPath();
if (!stocket.taskNum.isEmpty()) {
absolutePclPath = absolutePclPath + QString("%1/%2/%3/%4").arg("/fileData").arg(stocket.taskNum).arg(stocket.id).arg(pcdName);
absolutePclPath = absolutePclPath + QString("%1/%2/%3/%4/%5")
.arg("/fileData").arg(stocket.taskNum).arg(stocket.id).arg(stocket.stockLocation).arg(pcdName);
}
else {
absolutePclPath = absolutePclPath + QString("%1/%2/%3").arg("/fileData").arg(stocket.id).arg(pcdName);
absolutePclPath = absolutePclPath + QString("%1/%2/%3/%4").arg("/fileData").arg(stocket.id).arg(stocket.stockLocation).arg(pcdName);
}
QString absolutePclPath2 = QCoreApplication::applicationDirPath()
+ QString("%1/%2/%3/%4/%5").arg("/storeData").arg(m_currtIntoStockInfo.streetName)
.arg(m_currtIntoStockInfo.Floor).arg(m_currtIntoStockInfo.row).arg(pcdName);
.arg(m_currtIntoStockInfo.Floor).arg(m_currtIntoStockInfo.row).arg(stocket.stockLocation).arg(pcdName);
str = QString("[%1]:3DCamera %2 -- PointCould = %3; Store PointCloud = %4").arg(stocket.id)

@ -0,0 +1,34 @@
#ifndef _ILP_SERIAL_H_
#define _ILP_SERIAL_H_
#include <QObject>
#include "lp_serial_define.h"
class lp_ISerial :public QObject
{
Q_OBJECT
public:
lp_ISerial(const SerialParam& sp, QObject *parent = 0):sp_(sp),port_name_(sp.port_name_){};
virtual ~lp_ISerial() {};
virtual void open() = 0;
virtual void close() = 0;
virtual bool isopen() = 0;
virtual QString getName() const { return port_name_; }
virtual SerialParam getParam() const { return sp_; }
virtual void sendData(QSharedPointer<QByteArray> data_ptr_) {
emit signal_data_send(data_ptr_);
};
virtual void sendData(QSharedPointer<LpSerialFrame> data_ptr_) {
emit signal_data_send(data_ptr_);
}
signals:
void signal_data_recv(const QString& sn,QSharedPointer<QByteArray> data_ptr_);
void signal_data_recv(const QString& sn,QSharedPointer<LpSerialFrame> data_ptr_);
void signal_data_send(QSharedPointer<QByteArray> data_ptr_);
void signal_data_send(QSharedPointer<LpSerialFrame> data_ptr_);
void signal_state_changed(const QString& sn, SerialErrorType error);
protected:
SerialParam sp_;
QString port_name_;
};
#endif

@ -0,0 +1,68 @@
#ifndef _LP_SERIAL_DEFINE_H_
#define _LP_SERIAL_DEFINE_H_
#include <QtCore>
#include <QSerialPort>
#include <functional>
enum SerialType {
SERIAL_LEAPER,
SERIAL_CUSTOM
};
enum SerialErrorType {
OpenSuccess,
DeviceNotFoundError,
OpenError,
CloseSuccess,
CloseError
};
typedef struct tagSerialParam {
SerialType modbus_type_ = SERIAL_LEAPER;
QString port_name_ = "COM1";
int parity_ = QSerialPort::NoParity;
int baud_ = QSerialPort::Baud115200;
int data_bits_ = QSerialPort::Data8;
int stop_bits_ = QSerialPort::OneStop;
bool auto_connect_ = true;
}SerialParam;
typedef struct tagLpSerialFrame {
quint16 devicecode;
quint16 totalnum;
quint8 hdrlen;
quint8 r_hdrlen;
quint8 checksun;
quint8 cmd;
quint16 data1;
quint16 data2;
quint16 data3;
quint16 data4;
quint16 data5;
quint16 data6;
quint16 data7;
quint16 data8;
tagLpSerialFrame() {
devicecode = 0;
totalnum = 0;
hdrlen = 0;
r_hdrlen = 0;
checksun = 0;
cmd = 0;
data1 = 0;
data2 = 0;
data3 = 0;
data4 = 0;
data5 = 0;
data6 = 0;
data7 = 0;
data8 = 0;
}
}LpSerialFrame;
Q_DECLARE_METATYPE(QSharedPointer<LpSerialFrame>)
Q_DECLARE_METATYPE(QSharedPointer<QByteArray>)
#endif

@ -0,0 +1,63 @@
#ifndef _LP_SERIAL_MANAGER_H_
#define _LP_SERIAL_MANAGER_H_
#include <QtCore/qglobal.h>
#ifndef BUILD_STATIC
# if defined(LP_SERIAL_LIB)
# define LP_SERIAL_EXPORT Q_DECL_EXPORT
# else
# define LP_SERIAL_EXPORT Q_DECL_IMPORT
# endif
#else
# define LP_SERIAL_EXPORT
#endif
#include <QtCore>
#include <QMap>
#include <QMutex>
#include "lp_singleton.h"
#include "lp_serial_define.h"
#include "lp_ISerial.h"
#include <functional>
class lp_ISerial;
typedef QMap<QString, lp_ISerial*> mapSerials;
typedef std::function<void(const QString&, QSharedPointer<QByteArray>)> CustomRecvFunc;
typedef QMap<QString, CustomRecvFunc> mapFunc;
class LP_SERIAL_EXPORT lp_serial_manager : public QObject
, public lp_singleton<lp_serial_manager>
{
Q_OBJECT
public:
lp_serial_manager();
~lp_serial_manager();
int open(SerialParam& sp);
int open(SerialParam& sp, CustomRecvFunc func);
// int addCom(lp_ISerial *ptr);
int close(const QString& sn);
QStringList getcomNames() const;
signals:
void signal_data_recv(const QString& sn,
QSharedPointer<QByteArray> data_ptr_);
void signal_data_recv(const QString& sn,
QSharedPointer<LpSerialFrame> data_ptr_);
void signal_state_changed(const QString& sn,SerialErrorType err);
public slots:
bool on_data_send(const QString& sn,
QSharedPointer<QByteArray> data_ptr);
bool on_data_send(const QString& sn,
QSharedPointer<LpSerialFrame> data_ptr_);
void on_data_recv(const QString& sn,
QSharedPointer<QByteArray> data_ptr);
private slots:
void on_state_changed(const QString& sn, SerialErrorType err);
private:
mapSerials map_serials_;
QMutex mutex_;
mapFunc map_funcs_;
};
#endif

@ -0,0 +1,55 @@
#ifndef LP_SINGLETON_H
#define LP_SINGLETON_H
#include <mutex>
#include <atomic>
template<class T>
class lp_singleton
{
public:
static T* instance()
{
T *sin = s_this.load(std::memory_order_acquire);
if (!sin) {
std::lock_guard<std::mutex> locker(s_mutex);
sin = s_this.load(std::memory_order_relaxed);
if (!sin) {
sin = new T;
s_this.store(sin, std::memory_order_release);
}
}
return sin;
}
static void uninstance()
{
T *sin = s_this.load(std::memory_order_relaxed);
if (sin) {
std::lock_guard<std::mutex> locker(s_mutex);
delete sin;
sin = nullptr;
}
}
protected:
lp_singleton() = default;
virtual ~lp_singleton() = default;
private:
lp_singleton(const T&) = delete;
T& operator=(const T&) = delete;
static std::atomic<T*> s_this;
static std::mutex s_mutex;
};
template<class T>
std::atomic<T*> lp_singleton<T>::s_this;
template<class T>
std::mutex lp_singleton<T>::s_mutex;
#endif // LP_SINGLETON_H

@ -4,169 +4,501 @@
#include "lx_camera_define.h"
//~chinese:
//功能: 获取API版本号
//参数:[out]version API版本号无需外部分配内存
//~english:
/**
* @brief Get api version
*
* @return LX_API_STR
*/
LX_API_STR DcGetApiVersion();
//~chinese:
//功能: 设置打印信息等级
//参数:[in]print_level 0info 所有调试信息
// 1warn 重要及警告类调试信息
// 2error 仅输出错误信息
// [in]enable_screen_print 是否在窗口打印
// [in]log_path log文件保存路径(不包含日志文件名),默认为程序执行路径
// [in]log_path log文件保存路径可以为空则保存在当前执行路径
//~english:
/**
* @brief Set the level of log
*
* @param print_level [in]print_level 0: info All debug messages 1: warn Important and warning debug messages 2: error Only error messages are output.
* @param enable_screen_print [in]Whether to print in the window
* @param log_path [in]Log file save path
* @return LX_API
*/
#ifdef __cplusplus
LX_API DcSetInfoOutput(int print_level = 1, bool enable_screen_print = false, const char* log_path = "", int language = 0);
#else
//纯C风格接口原接口逐步弃用
LX_API DcSetInfoOutput(int print_level, bool enable_screen_print, const char* log_path);
#endif
//~chinese:
//功能: 允许用户输出调试信息到log文件
//参数:[in]str 要输出的字符串,'\0'结尾
//~english:
/**
* @brief Allows users to output debugging information to log files.
*
* @param str [in]String to be output, ending with '\0'.
* @return LX_API
*/
LX_API DcLog(const char* str);
//功能查找eagle系列所有网口相机,不包含usb相机
//~chinese:
//功能:查找支持的相机
//参数 [out]devlist 查找到的相机列表
//参数 [out]devnum 查找到的相机数量
//参数 [in]is_local_loop 是否本地回环, 一般情况下为false, 当SDK也运行在相机内部情况下为true
//内部维护内存,外部无须分配内存, 但因每次搜索前会清空原内容,故需外部保证线程安全
//当SDK与相机端程序运行在同一主机的情况下此接口无需调用, 若依然调用将返回0条
//~english:
/**
* @brief Search for camera list
*
* @param devlist [out]List of found cameras
* @param devnum [out]Number of cameras found
* @return LX_API
*/
#ifdef __cplusplus
LX_EXPORT LX_STATE LX_STDC DcGetDeviceList(LxDeviceInfo** devlist, int* devnum, LX_DEVICE_SERIALS lx_serials = LX_SERIAL_ALL);
#else
//纯C风格接口原接口逐步弃用
LX_API DcGetDeviceList(LxDeviceInfo** devlist, int* devnum);
#endif
//功能:连接设备
//~chinese:
//功能:打开设备。设备打开后会独占权限其他进程无法再打开相机。如果程序强制结束没有调用DcCloseDevice需要等待几秒等心跳超时释放权限
//参数:[in]open_mode 打开方式, 具体说明见LX_OPEN_MODE
// [in]param 不同的打开方式,填写不同的参数(当sdk与相机端程序运行在同一主机情况下此处填写"127.0.0.1")
// [in]param 不同的打开方式,填写不同的参数(当sdk运行在相机内部时,此处填写"127.0.0.1")
// [out]handle 连接成功后返回的设备句柄,后续所有接口访问都依赖该handle字段
// [out]info 连接成功后返回的相机详细信息
//~english:
/**
* @brief open device
*
* @param open_mode[in]Open mode, see LX_OPEN_MODE for details.
* @param param[in]Fill in different parameters for different opening methods (when the sdk is running inside the camera, fill in "127.0.0.1" here)
* @param handle[out]The handle of the device returned after a successful connection, all subsequent interface accesses rely on this handle field.
* @param info[out]Camera details returned after successful connection
* @return LX_API
*/
LX_API DcOpenDevice(LX_OPEN_MODE open_mode, const char* param, DcHandle* handle, LxDeviceInfo* info);
//功能: 关闭设备
//~chinese
//功能: 关闭设备。与DcOpenDevice对应释放权限和资源。
//参数:[in]handle 设备句柄
//~english
/**
* @brief Close device
*
* @param handle[in]Device handle
* @return LX_API
*/
LX_API DcCloseDevice(DcHandle handle);
//~chinese
//功能: 打开数据流
//参数:[in]handle 设备句柄
//~english
/**
* @brief Start stream data
*
* @param handle[in]Device handle
* @return LX_API
*/
LX_API DcStartStream(DcHandle handle);
//~chinese
//功能: 关闭数据流
//参数:[in]handle 设备句柄
//~english
/**
* @brief stop stream data
*
* @param handle[in]Device handle
* @return LX_API
*/
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);
//~chinese
//功能: 设置相机IP相关参数
// 修改完之后设备列表会变化需重新调用DcGetDeviceList接口重新获取新的设备列表
//参数:[in]handle 设备句柄, (当未连接上设备情况下,需先通过搜索获取)
// [in]ip 设备IP
// [in]netmask 子网掩码(若传空则内部默认"255.255.0.0")
// [in]gateway 网关ip(若传空则内部默认将ip最后网段置为"1"后作为网关)
//~english
/**
* @brief Set camera IP-related parameters
*
* @param handle[in]Device handle
* @param ip[in]Device IP
* @param netmask[in]Subnet Mask (if empty, internal default is "255.255.0.0")
* @param gateway[in]gateway ip (if pass empty, internal default will set the last segment of ip to "1" as gateway)
* @return LX_API
*/
#ifdef __cplusplus
LX_API DcSetCameraIp(DcHandle handle, const char* ip, const char* netmask = 0, const char* gateway = 0);
#else
//纯C风格接口原接口逐步弃用
LX_API DcSetCameraIp(DcHandle handle, const char* ip, const char* netmask, const char* gateway);
#endif
//~chinese
//功能设置int类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [in]value 设置参数值
//~english
/**
* @brief Set int type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[in]Setting parameter values
* @return LX_API
*/
LX_API DcSetIntValue(DcHandle handle, int cmd, int value);
//~chinese
//功能获取int类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数结构体
//~english
/**
* @brief Obtain int type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[out]Return parameter structure
* @return LX_API
*/
LX_API DcGetIntValue(DcHandle handle, int cmd, LxIntValueInfo* value);
//~chinese
//功能设置float类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [in]value 设置参数值
//~english
/**
* @brief Set float type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[in]Setting parameter values
* @return LX_API
*/
LX_API DcSetFloatValue(DcHandle handle, int cmd, float value);
//~chinese
//功能获取float类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数结构体
//~english
/**
* @brief Obtain float type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[out]Return parameter structure
* @return LX_API
*/
LX_API DcGetFloatValue(DcHandle handle, int cmd, LxFloatValueInfo* value);
//~chinese
//功能设置bool类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [in]value 设置参数值
//~english
/**
* @brief Set bool type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[in]Setting parameter values
* @return LX_API
*/
LX_API DcSetBoolValue(DcHandle handle, int cmd, bool value);
//~chinese
//功能获取bool类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数
//~english
/**
* @brief Obtain bool type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[out]Return Parameters
* @return LX_API
*/
LX_API DcGetBoolValue(DcHandle handle, int cmd, bool* value);
//~chinese
//功能设置string类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [in]value 设置参数值
//~english
/**
* @brief Set string type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[in]
* @return LX_API
*/
LX_API DcSetStringValue(DcHandle handle, int cmd, const char* value);
//~chinese
//功能获取string类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数,无需外部分配内存
//~english
/**
* @brief Obtain string type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[out]Return parameter, no external memory allocation required
* @return LX_API
*/
LX_API DcGetStringValue(DcHandle handle, int cmd, char** value);
//~chinese
//功能:获取指针类型参数
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
// [out]value 返回参数,无需外部分配内存
//~english
/**
* @brief Obtain pointer type parameters
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @param value[out]Return parameter, no external memory allocation required
* @return LX_API
*/
LX_API DcGetPtrValue(DcHandle handle, int cmd, void** value);
//~chinese
//功能执行对应CMD类型指令操作
//参数:[in]handle 设备句柄
// [in]cmd 参考LX_CAMERA_FEATURE
//~english
/**
* @brief Execute the corresponding CMD type command
*
* @param handle[in]Device handle
* @param cmd[in]Reference LX_CAMERA_FEATURE
* @return LX_API
*/
LX_API DcSetCmd(DcHandle handle, int cmd);
//~chinese
//功能LX_CAMERA_FEATURE定义之外的特殊操作具体功能和参数由字符串command确定
//参数:[in]handle 设备句柄
// [in]command 指令
// [in][out]value 设置时为对应入参,获取时为对应出参,无需外部分配内存
//~english
/**
* @brief Special operations outside the definition of LX_CAMERA_FEATURE, with specific functions and parameters defined by the string command
*
* @param handle[in]Device handle
* @param command[in]Command
* @param value[in][out]Input parameter when setting, output parameter when getting, no need to allocate memory externally.
* @return LX_API
*/
LX_API DcSpecialControl(DcHandle handle, const char* command, void* value);
//功能设置ROI区域
//~chinese
//功能设置ROI区域, 输入数值若不是8的整数倍,内部会自动处理为目标值最近的8的整倍数
//参数:[in]handle 设备句柄
// [in]x_offset 起始点水平偏移像素
// [in]value 起始点垂直偏移参数
// [in]type 0-3D图像 1-2D图像
// [in]offsetx 起始点水平偏移像素
// [in]offsety 起始点垂直偏移参数
// [in]width roi目标区域的宽
// [in]height roi目标区域的高
// [in]img_type 0-3D图像 1-2D图像
//~english
/**
* @brief Set the ROI area, if the input value is not an integer multiple of 8, it will be automatically processed as the nearest integer multiple of 8 to the target value.
*
* @param handle[in]Device handle
* @param offsetx[in]Horizontal offset of the start point in pixels
* @param offsety[in]Start Point Vertical Offset Parameter
* @param width[in]The width of the roi target area
* @param height[in]The height of the roi target area
* @param img_type[in] 0-3D image 1-2D image
* @return LX_API
*/
LX_API DcSetROI(DcHandle handle, int offsetx, int offsety, int width, int height, int img_type);
//~chinese
//功能: 注册数据帧回调函数,收到新的数据时自动调用
//参数:[in]handle 设备句柄
// [in]func 回调函数指针
// [in]usr_data 用户自定义参数
//~english
/**
* @brief Register the data frame callback function to be called automatically when new data is received.
*
* @param handle[in]Device handle
* @param func[in]Callback function pointer
* @param usr_data[in]User-defined parameters
* @return LX_API
*/
#ifdef __cplusplus
LX_API DcRegisterFrameCallback(DcHandle handle, LX_FRAME_CALLBACK func, void* usr_data = 0);
#else
//纯C风格接口原接口逐步弃用
LX_API DcRegisterFrameCallback(DcHandle handle, LX_FRAME_CALLBACK func, void* usr_data);
#endif
//~chinese
//功能: 取消数据帧注册回调函数
//参数:[in]handle 设备句柄
//~english
/**
* @brief Cancel data frame registration callback function
*
* @param handle[in]Device handle
* @return LX_API
*/
LX_API DcUnregisterFrameCallback(DcHandle handle);
//~chinese
//功能: 注册相机状态回调函数,相机状态变化时自动调用
//参数:[in]handle 设备句柄
// [in]func 回调函数指针
// [in]usr_data 用户自定义参数
//~english
/**
* @brief Register the camera state callback function and call it automatically when the camera state changes.
*
* @param handle[in]Device handle
* @param func[in]Callback function pointer
* @param usr_data[in]User-defined parameters
* @return LX_API
*/
#ifdef __cplusplus
LX_API DcRegisterCameraStatusCallback(DcHandle handle, LX_CAMERA_STATUS_CALLBACK func, void* usr_data = 0);
#else
//纯C风格接口原接口逐步弃用
LX_API DcRegisterCameraStatusCallback(DcHandle handle, LX_CAMERA_STATUS_CALLBACK func, void* usr_data);
#endif
//~chinese
//功能: 取消相机状态注册回调函数
//参数:[in]handle 设备句柄
//~english
/**
* @brief Cancel camera state registration callback function
*
* @param handle[in]Device handle
* @return LX_API
*/
LX_API DcUnregisterCameraStatusCallback(DcHandle handle);
//~chinese
//功能:往设备写入自定义内容
//参数:[in]handle 设备句柄
// [in]start_address 起始地址从0开始
// [in]data 写入内存的内容最大支持128kb内容
// [in]data_size 写入内存的内容长度最大不超过128kb
//~english
/**
* @brief Write custom content to device
*
* @param handle[in]Device handle
* @param start_address[in]Starting address, from 0
* @param data[in]Content written to memory, supports up to 128kb of content
* @param data_size[in]Length of content written to memory, max. 128kb
* @return LX_API
*/
LX_API DcWriteUserData(DcHandle handle, int start_address, char* data, int data_size);
//~chinese
//功能:从设备读取自定义内容,无需外部分配内存,但每次调用读取前会重置上次读取时分配的内存
//参数:[in]handle 设备句柄
// [in]start_address 起始地址从0开始
// [out]data 读取内存的内容最大支持128kb内容
// [out]data_size 读取的内容长度最大不超过128kb
//~english
/**
* @brief Read customized content from the device without external memory allocation, but each call to read will reset the memory allocated during the last read.
*
* @param handle[in]Device handle
* @param start_address[in]Starting address, from 0
* @param data[out]Read the contents of the memory, maximum support for 128kb content
* @param data_size[out]Length of read content, max. 128kb
* @return LX_API
*/
LX_API DcReadUserData(DcHandle handle, int start_address, char** data, int& data_size);
//~chinese
//功能: 保存点云,可直接调用
//参数:[in]handle 设备句柄
// [in]filename 文件名支持txt,ply和pcd格式。txt格式按图像顺序保存所有数据ply和pcd仅保存非零数据
//~english
/**
* @brief Save the point cloud, which can be called directly
*
* @param handle[in]Device handle
* @param filename[in]File name, supports txt, ply and pcd formats. txt format saves all data in image order, ply and pcd only save non-zero data
* @return LX_API
*/
LX_API DcSaveXYZ(DcHandle handle, const char* filename);
//~chinese
//功能:设置参数路径
//参数:[in]handle 设备句柄
// [in]filepath 参数文件路径,不包含文件名(大部分情况不需要调用仅部分相型号机打开时需要参数如M3I2等)
//~english
/**
* @brief Setting the parameter path
*
* @param handle[in]Device handle
* @param filepath[in]Parameter file path, without file name (most cases do not need to call, only part of the camera type machine to open the parameters needed, such as M3, I2, etc.)
* @return LX_API
*/
LX_API DcSetParamPath(DcHandle handle, const char* filepath);
//~chinese
//功能: 获取函数返回状态对应的说明
//参数:[in]state 函数接口返回的状态
//~english
/**
* @brief Get the description of the function's return status
*
* @param state[in]The status returned by the function interface
* @return LX_API_STR
*/
LX_API_STR DcGetErrorString(LX_STATE state);
//~chinese:
//功能: 算法库使用GPU加速打开相机前必须先调用否则无效。默认关闭。部分GPU设备可能不支持如果出现异常建议关闭。
//参数:[in]is_enable 是否使能
//~english:
/**
* @brief Use gpu to accelerate, must call first. Recommend to set false if it works abnormally.
*
* @param is_enable [bool]
* @return LX_API
*/
LX_API DcSetGpuEnable(bool is_enable);
LX_API DcGetGpuEnable(bool* is_enable);
#endif

@ -43,6 +43,23 @@ typedef struct {
LxVelocity velocity; //!< 障碍物速度,暂未实现
} LxObstacleBox;
typedef struct {
LxPose pose; //!< 障碍物 Box 中心和旋转矩阵
float width, height, depth; //!< 障碍物 Box 宽、高、深
LxTranslation center; //!< 障碍物质心
int32_t type_idx; //!< 障碍物语义 idx
int64_t id; //!< 障碍物 ID
int64_t prev_id; //!< 障碍物 Prev_ID
float box_2d_x_min; //!< 障碍物在2D图上左上角点的X坐标与图像宽度的比值
float box_2d_y_min; //!< 障碍物在2D图上左上角点的Y坐标与图像高度的比值
float box_2d_x_max; //!< 障碍物在2D图上右下角点的X坐标与图像宽度的比值
float box_2d_y_max; //!< 障碍物在2D图上右下角点的Y坐标与图像高度的比值
LxVelocity velocity; //!< 障碍物速度,暂未实现
int32_t type_name_len; //!< 障碍物语义类别长度
char type_name[512]; //!< 障碍物语义类别
char reserved[1024]; //!< 预留位
} LxObstacleBoxN;
typedef enum {
//! 执行成功
@ -74,6 +91,16 @@ typedef struct {
LxObstacleBox* obstacleBoxs; //!< 障碍物 Box
} LxAvoidanceOutput;
//! V2避障输出结构体
typedef struct {
LxAvState state; //!< 返回状态
LxGroundPlane groundPlane; //!< 检测到的距离最近的地面
uint32_t number_3d; //!< 输出点个数
LxPoint3dWithRGB* cloud_output; //!< 输出点云(已过滤地面与噪声)
uint32_t number_box; //!< 障碍物个数
LxObstacleBoxN* obstacleBoxs; //!< 障碍物 Box
char resveredData[4096]; //!< 预留位置
} LxAvoidanceOutputN;
//! 托盘定位结构体
//@Update Since 0.1.2: add return value and a float-array
@ -88,15 +115,40 @@ typedef struct {
int extents[8192];
} LxPalletPose;
//重定位pose结构体
typedef struct {
double x, y, theta;
}LxRelocPose;
//odom结构体
typedef struct {
int64_t timestamp;
double x, y, theta;
}LxOdomData;
//激光数据结构体
typedef struct {
int64_t timestamp; //时间戳
float time_increment; //扫描时间间隔
float angle_min; //开始扫描的角度(角度)
float angle_max; //结束扫描的角度(角度)
float angle_increment; //每一次扫描增加的角度(角度)
float range_min; //距离最小值(m)
float range_max; //距离最大值(m)
float reserved; //预留字段
float range_size; //距离数组大小
float* ranges; //距离数组
}LxLaser;
//激光pose结构体
typedef struct {
int64_t timestamp;
double x, y, theta;
}LxLaserPose;
//! 定位算法输出结果结构体
typedef struct {
int64_t timestamp; //时间戳
int32_t status; //算法返回值:正在加载地图,加载地图错误,正在重定位,重定位错误,初始化错误,参数异常,图像异常,识别异常等
@ -104,6 +156,4 @@ typedef struct {
int32_t extents[8192]; //自定义内容,扩展信息
}LxLocation;
#endif

@ -36,6 +36,7 @@
#endif
#endif
//错误类型定义
typedef enum LX_STATE
{
LX_SUCCESS = 0, //成功
@ -44,7 +45,7 @@ typedef enum LX_STATE
LX_E_NETWORK_ERROR = -3, //网络通讯错误
LX_E_INPUT_ILLEGAL = -4, //入参非法
LX_E_RECONNECTING = -5, //设备重连中
LX_E_DEVICE_ERROR = -6, //设备故障
LX_E_DEVICE_ERROR = -6, //设备故障或设备响应失败
LX_E_DEVICE_NEED_UPDATE = -7, //设备版本过低,需升级
LX_E_API_NEED_UPDATE = -8, //API版本过低
LX_E_CTRL_PERMISS_ERROR = -9, //独占控制权限失败
@ -66,6 +67,10 @@ typedef enum LX_STATE
LX_E_LOAD_DATAPROCESSLIB_ERROR = -25, //加载图像处理算法库错误
LX_E_FUNCTION_CALL_LOGIC_ERROR = -26, //函数调用逻辑错误
LX_E_IPAPPDR_UNREACHABLE_ERROR = -27, //IP不可达或网络配置错误
LX_E_FRAME_ID_NOT_MATCH = -28, //超时范围内帧不同步错误
LX_E_FRAME_MULTI_MACHINE = -29, //帧中检测到多机干扰信号
LX_W_LOAD_DATAPROCESSLIB_ERROR = 25, //加载图像处理算法库失败,不影响其他功能
}LX_STATE;
#define LX_API LX_EXTC LX_EXPORT LX_STATE LX_STDC
@ -73,24 +78,43 @@ typedef enum LX_STATE
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_M4V1_1 = 1006,
LX_DEVICE_M4ProV1_1 = 1007,
LX_DEVICE_S1 = 2001,
LX_DEVICE_S2,
LX_DEVICE_S2MaxV1,
LX_DEVICE_S2MaxV2,
LX_DEVICE_S2MaxV1_1 = 2005,
LX_DEVICE_S3 = 2101,
LX_DEVICE_I1 = 3001,
LX_DEVICE_I2,
LX_DEVICE_T1 = 4001,
LX_DEVICE_T2,
LX_DEVICE_WK = 5001,
LX_DEVICE_H3 = 5001,
LX_DEVICE_V1Pro = 6001,
LX_DEVICE_NULL = 0
}LX_DEVICE_TYPE;
//设备大类,暂未使用
typedef enum LX_DEVICE_SERIALS {
LX_SERIAL_GIGE = 1,
LX_SERIAL_WK,
LX_SERIAL_OTHER,
LX_SERIAL_ALL,
LX_SERIAL_LOCAL_LOOP, //本地回环(用于区分SDK与相机端程序运行在同一主机上的情况)
}LX_DEVICE_SERIALS;
//设备详细信息
typedef struct LxDeviceInfo
{
DcHandle handle; //设备唯一标识
@ -108,6 +132,7 @@ typedef struct LxDeviceInfo
char reserve4[128]; //预留字段4
}LxDeviceInfo;
//整形参数结构体
typedef struct LxIntValueInfo
{
bool set_available; //当前值是否可设置, true-可设置false-不可设置
@ -117,6 +142,7 @@ typedef struct LxIntValueInfo
int reserve[4]; //预留字段
}LxIntValueInfo;
//浮点参数结构体
typedef struct LxFloatValueInfo
{
bool set_available; //当前值是否可设置, true-可设置false-不可设置
@ -126,6 +152,7 @@ typedef struct LxFloatValueInfo
float reserve[4]; //预留字段
}LxFloatValueInfo;
//相机打开方式
typedef enum LX_OPEN_MODE
{
OPEN_BY_INDEX = 0, //按搜索列表中索引下标方式打开,对应的参数为索引号,当搜索到的设备列表发生变化时,选择打开的设备也会不一样
@ -139,23 +166,15 @@ typedef enum LX_DATA_TYPE
{
LX_DATA_UNSIGNED_CHAR = 0,
LX_DATA_UNSIGNED_SHORT = 2,
LX_DATA_SIGNED_SHORT = 3,
LX_DATA_FLOAT = 5,
LX_DATA_OBSTACLE = 16,
LX_DATA_PALLET = 17,
LX_DATA_LOCATION =18,
LX_DATA_OBSTACLE2 = 19,
}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;
//图像binning模式
typedef enum LX_BINNING_MODE
{
LX_BINNING_1X1 = 0,
@ -163,6 +182,7 @@ typedef enum LX_BINNING_MODE
LX_BINNING_4X4 = 2
}LX_BINNING_MODE;
//结构光相机编码方式
typedef enum LX_STRUCT_LIGHT_CODE_MODE
{
LX_CODE_NORMAL = 1,//常规
@ -170,43 +190,24 @@ typedef enum LX_STRUCT_LIGHT_CODE_MODE
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, //内置视觉定位算法
MODE_AVOID_OBSTACLE2 = 4, //内置避障算法V2
}LX_ALGORITHM_MODE;
//相机工作模式
typedef enum LX_CAMERA_WORK_MODE
{
MODE_ONLY_GIGE = 0, //正常模式,按需采图,默认为该状态
MODE_COLLECT_FOREVER = 1, //始终采图
KEEP_HEARTBEAT = 0, //保持心跳SDK心跳中断后相机自动待机
WORK_FOREVER = 1, //始终保持工作,此时部分参数无法设置
}LX_CAMERA_WORK_MODE;
//相机触发模式
typedef enum LX_TRIGGER_MODE
{
LX_TRIGGER_MODE_OFF, //关闭触发模式,流模式,默认
@ -214,6 +215,49 @@ typedef enum LX_TRIGGER_MODE
LX_TRIGGER_HARDWARE, //硬触发模式
}LX_TRIGGER_MODE;
//IO工作模式
typedef enum LX_IO_WORK_MODE {
ALGORITHM_IO_MODE = 0, //IO作为内置应用算法的输入输出
USER_IO_MODE = 1, //用户可以自己控制IO状态参考LX_IO_OUT_USERCTRL_MODE
TRIGGER_IO_MODE = 2, //IO作为触发信号输出仅触发模式下有效
}LX_IO_WORK_MODE;
//自定义IO输出状态
typedef enum LX_IO_OUTPUT_STATE {
OUT1_0_OUT2_0 = 0,
OUT1_0_OUT2_1 = 1,
OUT1_1_OUT2_0 = 2,
OUT1_1_OUT2_1 = 3,
}LX_IO_OUTPUT_STATE;
//滤波设置模式
typedef enum LX_FILTER_MODE {
FILTER_SIMPLE = 1,
FILTER_NORMAL = 2,
FILTER_EXPERT = 3,
}LX_FILTER_MODE;
//3D频率模式
typedef enum LX_3D_FREQ_MODE {
FREQ_SINGLE_3D = 0,
FREQ_DUAL_3D = 1,
FREQ_TRIPLE_3D = 2,
}LX_3D_FREQ_MODE;
//3D频率模式
typedef enum LX_RGBD_ALIGN_MODE {
RGBD_ALIGN_OFF = 0, //关闭rgbd对齐rgb和depth分别以各自分别和坐标系
DEPTH_TO_RGB = 1, //depth对齐rgb分辨率和坐标以rgb为准
RGB_TO_DEPTH = 2, //rgb对齐depth分辨率和坐标以depth为准
}LX_RGBD_ALIGN_MODE;
typedef enum LX_CAN_PROTOCOL_TYPE
{
CAN_MRDVS = 0,
CAN_KECONG = 1,
}LX_CAN_PROTOCOL_TYPE;
//图像显示相关信息
typedef struct FrameDataInfo
{
@ -239,6 +283,18 @@ typedef struct FrameInfo {
void* reserve_data; //扩展预留字段
}FrameInfo;
//数据帧扩展信息结构体
typedef struct FrameExtendInfo {
unsigned int depth_frame_id;
unsigned int amp_frame_id;
unsigned int rgb_frame_id;
unsigned int app_frame_id;
void* reserve_data1; //预留字段
void* reserve_data2; //预留字段
void* reserve_data3; //预留字段
}FrameExtendInfo;
//相机当前状态
typedef enum LX_CAMERA_STATUS
{
STATUS_CLOSED, //相机未打开或关闭状态
@ -266,8 +322,8 @@ 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_THIRD_EXPOSURE = 1003, //针对多积分情况为第三个积分的曝光时间单位us
LX_INT_FOURTH_EXPOSURE = 1004, //针对多积分情况为第四个积分的曝光时间单位us
LX_INT_GAIN = 1005, //增益,与曝光效果等价。会引入噪声,可适当调节增益防止曝光参数过大
LX_INT_MIN_DEPTH = 1011, //最小深度值
@ -275,7 +331,7 @@ typedef enum LX_CAMERA_FEATURE
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_WORK_MODE = 1018, //工作模式,参考LX_CAMERA_WORK_MODE
LX_INT_LINK_SPEED = 1019, //协商的网卡网速 100-百兆1000-千兆, 只支持获取,不可设置
//3D图像参数
@ -285,14 +341,14 @@ typedef enum LX_CAMERA_FEATURE
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
LX_INT_3D_FREQ_MODE = 1027, //3D频率模式,详见LX_3D_FREQ_MODE定义
//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_CHANNEL = 1031, //3D强度图像通道数与深度图通道共用,单色为1彩色为3
LX_INT_3D_AMPLITUDE_DATA_TYPE = 1035,//强度图像数据格式只能获取对应的值参考LX_DATA_TYPE
LX_INT_3D_AUTO_EXPOSURE_LEVEL = 1036,//3D自动曝光开启时的曝光等级,期间不允许设置曝光值与增益
LX_INT_3D_AUTO_EXPOSURE_LEVEL = 1036,//3D自动曝光开启时的曝光等级,期间不允许设置曝光值与增益
LX_INT_3D_AUTO_EXPOSURE_MAX = 1037, //3D自动曝光上限值
LX_INT_3D_AUTO_EXPOSURE_MIN = 1038, //3D自动曝光下限值
//2D图像
LX_INT_2D_IMAGE_WIDTH = 1041, //2D图像分辨率宽度,(ROI或Binning后会变化)
@ -305,21 +361,42 @@ typedef enum LX_CAMERA_FEATURE
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_3D_UNDISTORT_SCALE = 1062, //3D图像反畸变系数[0,100],值越大,保留数据越多,但是边缘会有黑色填充
LX_INT_2D_UNDISTORT_SCALE = 1520, //2D图像反畸变系数[0,100],值越大,保留数据越多,但是边缘会有黑色填充
LX_INT_ALGORITHM_MODE = 1065, //设置内置应用算法, 部分型号支持,对应的值参考LX_ALGORITHM_MODE
//算法上移时LX_INT_CALCULATE_UP不允许开启内置应用算法
LX_INT_MODBUS_ADDR = 1066, //modbus地址部分型号支持MODBUS协议通过串口输出
LX_INT_HEART_TIME = 1067, //与设备间心跳时间,单位ms
LX_INT_GVSP_PACKET_SIZE = 1068, //GVSP单包数据分包大小, 单位字节
LX_INT_CALCULATE_UP = 1070, //允许tof或rgb算法上下移节省上位机或相机算力可能影响帧率和延时
//0-0xFFFF四个F代表意义保留位滤波上移RGB上移TOF上移
//内置应用算法LX_INT_ALGORITHM_MODE开启时不允许上移
LX_INT_CAN_BAUD_RATE = 1072, //can的波特率值, 单位bps
LX_INT_CAN_NODE_ID = 1073, //can地址
LX_INT_CAN_PROTOCOL_TYPE = 1074, //can协议类型, 参考枚举LX_CAN_PROTOCOL_TYPE
LX_INT_SAVE_PARAMS_GROUP = 1075, //将相机当前配置保存为指定的参数组
LX_INT_LOAD_PARAMS_GROUP = 1076, //一键加载指定索引的参数组
LX_INT_RGBD_ALIGN_MODE = 1077, //rgbd对齐的方式参考LX_RGBD_ALIGN_MODE替代LX_BOOL_ENABLE_2D_TO_DEPTH
LX_INT_TRIGGER_MODE = 1069, //触发模式,对应的值参考LX_TRIGGER_MODE
LX_INT_HARDWARE_TRIGGER_FILTER_TIME = 1085, //硬触发滤波时间, 单位us
LX_INT_TRIGGER_MIN_PERIOD_TIME = 1086, //触发最小时间间隔, 单位us
LX_INT_TRIGGER_DELAY_TIME = 1087, //触发延迟时间,单位us
LX_INT_TRIGGER_FRAME_COUNT = 1088, //单次触发帧数
LX_INT_IO_WORK_MODE = 1530, //GPIO信号输出控制模式, 参考LX_IO_WORK_MODE
LX_INT_IO_OUTPUT_STATE = 1531, //GPIO信号输出的用户控制模式, 参考LX_IO_OUTPUT_STATE
LX_INT_FILTER_MODE = 1090, //滤波模式,参考LX_FILTER_MODE
LX_INT_FILTER_SMOOTH_LEVEL = 1091, //当LX_INT_FILTER_MODE为FILTER_NORMAL时,可设置滤波平滑等级,[0, 3],值越大,滤波越强
LX_INT_FILTER_NOISE_LEVEL = 1092, //当LX_INT_FILTER_MODE为FILTER_NORMAL时,可设置滤波噪声等级,[0, 3],值越大,滤波越强
LX_INT_FILTER_TIME_LEVEL = 1093, //当LX_INT_FILTER_MODE为FILTER_NORMAL时,可设置滤波时域等级,[0, 3],值越大,滤波越强
LX_INT_FILTER_DETECT_LOW_SIGNAL = 1094, //小信号测量,可能检测到信噪比较低的数据,包括远距离数据导致多周期问题
/*float feature*/
LX_FLOAT_FILTER_LEVEL = 2001, //滤波等级,[0, 1]值越大滤波越强等于0表示关闭滤波//更详细滤波配置参考LX_STRING_FILTER_PARAMS
LX_FLOAT_FILTER_LEVEL = 2001, //当LX_INT_FILTER_MODE为FILTER_SIMPLE时,可设置滤波等级,[0, 1]值越大滤波越强等于0表示关闭滤波
LX_FLOAT_EST_OUT_EXPOSURE = 2002, //是否评估过曝数据,[0, 1]为1则过曝数据无效
LX_FLOAT_LIGHT_INTENSITY = 2003, //光强度,[0, 1],部分型号支持
LX_FLOAT_3D_DEPTH_FPS = 2004, //深度图当前帧率,只可获取
@ -338,39 +415,47 @@ typedef enum LX_CAMERA_FEATURE
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_2D_TO_DEPTH = 3016, //2D3D图像对齐使能替换为LX_INT_RGBD_ALIGN_MODE
LX_BOOL_ENABLE_BACKGROUND_AMP = 3017, //强度背景光使能
LX_BOOL_ENABLE_MULTI_MACHINE = 3018, //多机模式使能
LX_BOOL_ENABLE_MULTI_MACHINE = 3018, //多机模式使能TOF会有多机干扰开启此模式可以自动检测并缓解多机干扰
LX_BOOL_ENABLE_MULTI_EXPOSURE_HDR = 3019, //HDR多曝光高动态范围模式使能
LX_BOOL_ENABLE_SYNC_FRAME = 3020, //是否开启强制帧同步, 默认数据实时性优先若需要RGBD同步, 需要开启该模式
/*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_FILTER_PARAMS = 4004, //滤波算法参数,json格式的字符串
LX_STRING_ALGORITHM_PARAMS = 4005, //内置算法参数根据当前设置的LX_ALGORITHM_MODE返回对应的json格式字符串
LX_STRING_ALGORITHM_VERSION = 4006, //内置算法版本号根据当前设置的LX_ALGORITHM_MODE返回对应的版本号
LX_STRING_DEVICE_OS_VERSION = 4007, //设备系统镜像版本号
LX_STRING_IMPORT_PARAMS_FROM_FILE = 4008, //从本地文件加载参数到相机
LX_STRING_EXPORT_PARAMS_TO_FILE = 4009, //将相机当前参数导出到本地文件
LX_STRING_CUSTOM_ID = 4010, //客户自定义设备ID标识
/*command feature*/
LX_CMD_GET_NEW_FRAME = 5001, //更新当前最新数据,调用之后才可以获取相关数据指针
LX_CMD_GET_NEW_FRAME = 5001, //主动更新当前最新数据,调用之后才可以获取相关数据指针。
//开启多个数据流时每个数据流更新都会返回正常除非设置LX_BOOL_ENABLE_SYNC_FRAME为true
//建议采用回调方式DcRegisterFrameCallback更新数据此时不需调用此接口
LX_CMD_RETURN_VERSION = 5002, //回退上一版本
LX_CMD_RESTART_DEVICE = 5003, //重启相机,部分型号需要重新打开相机
LX_CMD_WHITE_BALANCE = 5004, //自动白平衡
LX_CMD_RESET_PARAM = 5007, //恢复默认参数
LX_CMD_SOFTWARE_TRIGGER = 5008, //软触发执行指令
/*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_2D_IMAGE_DATA = 6001, //建议使用LX_PTR_FRAME_DATA获取2D图像数据指针数据长度由2D图像尺寸、通道数和数据格式LX_INT_2D_IMAGE_DATA_TYPE确定
LX_PTR_3D_AMP_DATA = 6002, //建议使用LX_PTR_FRAME_DATA获取3D强度图数据指针数据长度由3D图像尺寸、通道数和数据格式LX_INT_3D_AMPLITUDE_DATA_TYPE确定
LX_PTR_3D_DEPTH_DATA = 6003, //建议使用LX_PTR_FRAME_DATA获取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, //获取内置算法输出
LX_PTR_ALGORITHM_OUTPUT = 6008, //建议使用LX_PTR_FRAME_DATA获取内置算法输出
//当开启模式为MODE_AVOID_OBSTACLE输出结果为LxAvoidanceOutput指针参考struct LxAvoidanceOutput
//当开启模式为MODE_PALLET_LOCATE输出结果为LxPalletPose指针参考struct LxPalletPose
//当开启模式为MODE_PALLET_LOCATE输出结果为LxPalletPose指针参考struct LxPalletPose,
//当开启模式为MODE_VISION_LOCATION输出结果为LxLocation指针参考struct LxLocation
//当开启模式为MODE_AVOID_OBSTACLE2输出结果为LxAvoidanceOutputN指针参考struct LxAvoidanceOutputN
LX_PTR_FRAME_DATA = 6009, //获取完整一帧数据输出结果参考结构体FrameInfo
}LX_CAMERA_FEATURE;

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.33801.198
# Visual Studio Version 17
VisualStudioVersion = 17.8.34112.27
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SmokeBoxIdentification", "SmokeBoxIdentification\SmokeBoxIdentification.vcxproj", "{B12702AD-ABFB-343A-A199-8E24837244A3}"
EndProject
@ -17,22 +17,22 @@ Global
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.ActiveCfg = Debug|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.Build.0 = Debug|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.ActiveCfg = Release|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.Build.0 = Release|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x86.ActiveCfg = Debug|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.ActiveCfg = Release|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.Build.0 = Release|x64
{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x86.ActiveCfg = Release|x64
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Debug|x64.ActiveCfg = Debug|x64
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Debug|x64.Build.0 = Debug|x64
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Debug|x64.ActiveCfg = Release|x64
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Debug|x64.Build.0 = Release|x64
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Debug|x86.ActiveCfg = Debug|Win32
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Debug|x86.Build.0 = Debug|Win32
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Release|x64.ActiveCfg = Release|x64
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Release|x64.Build.0 = Release|x64
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Release|x86.ActiveCfg = Release|Win32
{ED9C9915-8B5B-4E9B-A981-66D5E5D0EAE2}.Release|x86.Build.0 = Release|Win32
{10198138-A8F3-408B-9359-C33C121E7EC2}.Debug|x64.ActiveCfg = Debug|x64
{10198138-A8F3-408B-9359-C33C121E7EC2}.Debug|x64.Build.0 = Debug|x64
{10198138-A8F3-408B-9359-C33C121E7EC2}.Debug|x64.ActiveCfg = Release|x64
{10198138-A8F3-408B-9359-C33C121E7EC2}.Debug|x64.Build.0 = Release|x64
{10198138-A8F3-408B-9359-C33C121E7EC2}.Debug|x86.ActiveCfg = Debug|x64
{10198138-A8F3-408B-9359-C33C121E7EC2}.Release|x64.ActiveCfg = Release|x64
{10198138-A8F3-408B-9359-C33C121E7EC2}.Release|x64.Build.0 = Release|x64

@ -60,9 +60,10 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)..\runner17\$(Configuration)\</OutDir>
<TargetName>smokeBox</TargetName>
<LibraryPath>C:\Qt\Qt5.9.4\5.9.4\msvc2017_64\lib;D:\Qt\5.9.4\msvc2017_64\lib;$(LibraryPath)</LibraryPath>
<LibraryPath>C:\Qt\Qt5.9.4\5.9.4\msvc2017_64\lib;D:\Qt\5.9.4\msvc2017_64\lib;D:\git\hzleaper\smokebox\3rdparty\lib;$(LibraryPath)</LibraryPath>
<IncludePath>$(IncludePath)</IncludePath>
<ReferencePath>$(SolutionDir)..\3rdparty\include;$(ReferencePath)</ReferencePath>
<ReferencePath>$(SolutionDir)..\3rdparty\include;D:\git\hzleaper\smokebox\3rdparty\include;$(ReferencePath)</ReferencePath>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
@ -101,10 +102,11 @@
<ClCompile>
<PreprocessorDefinitions>UNICODE;_UNICODE;WIN32;WIN64;_WINDOWS;QT_DLL;QT_NO_DEBUG;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.;.\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;.\GeneratedFiles\$(ConfigurationName);..\..\3rdparty\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<MultiProcessorCompilation>false</MultiProcessorCompilation>
<Optimization>Disabled</Optimization>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@ -112,6 +114,9 @@
<AdditionalLibraryDirectories>$(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>true</GenerateDebugInformation>
<AdditionalDependencies>Qt5Xlsx.lib;opencv_world341.lib;MvCameraControl.lib;numStatisticAlgo.lib;lpSerial.lib;libzkq.lib;LxCameraApi.lib;tobaccoAlgorithm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OptimizeReferences>false</OptimizeReferences>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
<QtMoc>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>

@ -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

@ -0,0 +1,16 @@
{
"rotation": [
-1.19209e-07,
1,
0,
-0.945519,
-1.19209e-07,
0.325568,
0.325568,
0,
0.945519
],
"min_pt": [-520, 150, 1050],
"max_pt": [680, 2020, 1550],
"floorHeight": 300
}

@ -0,0 +1,16 @@
{
"rotation": [
-1.19209e-07,
1,
0,
-0.945519,
-1.19209e-07,
0.325568,
0.325568,
0,
0.945519
],
"min_pt": [-520, 150, 1050],
"max_pt": [680, 2020, 1550],
"floorHeight": 300
}

@ -0,0 +1,106 @@
{
"devices": {
"LP-OCM-R060GC 00787720450": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
"auto_push": true,
"balanceRatio": 0,
"balanceRatioSelector": 0,
"board_config_file": "",
"board_name": "",
"board_num": 0,
"board_type": 64,
"camera_file": "",
"exposure": 10000,
"folder": "model1\\",
"format": "None",
"frame_rate": 9.3,
"gain": 2,
"height": 1200,
"id": 1,
"location": 1,
"loop": 1,
"mac_address": "",
"offset_x": 0,
"offset_y": 0,
"param_policy": 2,
"rely_on_camera": "",
"rotation_angle": 0,
"calib_file": ".\\config\\1.calib",
"save": 1,
"save_img_suffix": ".PNG",
"savefile_rgb_swapped": false,
"showname": "相机一",
"trigger_source": "Line0",
"type": 140,
"width": 1920,
"zoom": 1
},
"LP-OCM-HL060M 00J49540865": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
"auto_push": true,
"balanceRatio": 0,
"balanceRatioSelector": 0,
"board_config_file": "",
"board_name": "",
"board_num": 0,
"board_type": 64,
"camera_file": "",
"exposure": 10000,
"folder": "model1\\",
"format": "None",
"frame_rate": 9.3,
"gain": 2,
"height": 3072,
"id": 2,
"location": 2,
"loop": 1,
"mac_address": "",
"offset_x": 0,
"offset_y": 0,
"param_policy": 2,
"rely_on_camera": "",
"rotation_angle": 0,
"calib_file": ".\\config\\1.calib",
"save": 1,
"save_img_suffix": ".PNG",
"savefile_rgb_swapped": false,
"showname": "相机一",
"trigger_source": "Line0",
"type": 140,
"width": 2048,
"zoom": 1
},
"Eagle-M4 EF0CD99CF26B8A23": {
"id": 3,
"exposure": 10000,
"location": 1,
"save_img_suffix": ".PNG",
"height": 3072,
"width": 2048,
"type": 210
},
"Eagle-M4 F83A01121310": {
"id": 4,
"exposure": 10000,
"location": 2,
"save_img_suffix": ".PNG",
"height": 3072,
"width": 2048,
"type": 210
}
},
"top": {
"startID": 0,
"endID": 0
},
"side": {
"startID": 1,
"endID": 4
}
}

@ -0,0 +1,69 @@
{
"devices": {
"LP-OCM-R060GM 00J51775660": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
"auto_push": true,
"balanceRatio": 0,
"balanceRatioSelector": 0,
"board_config_file": "",
"board_name": "",
"board_num": 0,
"board_type": 64,
"camera_file": "",
"exposure": 10000,
"folder": "model1\\",
"format": "None",
"frame_rate": 9.3,
"gain": 2,
"height": 1200,
"id": 1,
"location": 1,
"loop": 1,
"mac_address": "",
"offset_x": 0,
"offset_y": 0,
"param_policy": 2,
"rely_on_camera": "",
"rotation_angle": 0,
"calib_file": ".\\config\\1.calib",
"save": 1,
"save_img_suffix": ".PNG",
"savefile_rgb_swapped": false,
"showname": "相机一",
"trigger_source": "Line0",
"type": 140,
"width": 1920,
"zoom": 1
},
"Eagle-M4 040F0DCB2C4ACC39": {
"id": 3,
"exposure": 10000,
"location": 1,
"save_img_suffix": ".PNG",
"height": 3072,
"width": 2048,
"type": 210
},
"Eagle-M4 1830C89357783412": {
"id": 4,
"exposure": 10000,
"location": 2,
"save_img_suffix": ".PNG",
"height": 3072,
"width": 2048,
"type": 210
}
},
"top": {
"startID": 0,
"endID": 0
},
"side": {
"startID": 1,
"endID": 4
}
}

@ -0,0 +1,106 @@
{
"devices": {
"LP-OCM-R060GC 00787720450": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
"auto_push": true,
"balanceRatio": 0,
"balanceRatioSelector": 0,
"board_config_file": "",
"board_name": "",
"board_num": 0,
"board_type": 64,
"camera_file": "",
"exposure": 10000,
"folder": "model1\\",
"format": "None",
"frame_rate": 9.3,
"gain": 2,
"height": 1200,
"id": 1,
"location": 1,
"loop": 1,
"mac_address": "",
"offset_x": 0,
"offset_y": 0,
"param_policy": 2,
"rely_on_camera": "",
"rotation_angle": 0,
"calib_file": ".\\config\\1.calib",
"save": 1,
"save_img_suffix": ".PNG",
"savefile_rgb_swapped": false,
"showname": "相机一",
"trigger_source": "Line0",
"type": 140,
"width": 1920,
"zoom": 1
},
"LP-OCM-HL060M 00J49540865": {
"algorithm": 1,
"algorithm_dll": 1,
"auto_open": false,
"auto_push": true,
"balanceRatio": 0,
"balanceRatioSelector": 0,
"board_config_file": "",
"board_name": "",
"board_num": 0,
"board_type": 64,
"camera_file": "",
"exposure": 10000,
"folder": "model1\\",
"format": "None",
"frame_rate": 9.3,
"gain": 2,
"height": 3072,
"id": 2,
"location": 2,
"loop": 1,
"mac_address": "",
"offset_x": 0,
"offset_y": 0,
"param_policy": 2,
"rely_on_camera": "",
"rotation_angle": 0,
"calib_file": ".\\config\\1.calib",
"save": 1,
"save_img_suffix": ".PNG",
"savefile_rgb_swapped": false,
"showname": "相机一",
"trigger_source": "Line0",
"type": 140,
"width": 2048,
"zoom": 1
},
"Eagle-M4 F83A01121812": {
"id": 3,
"exposure": 10000,
"location": 1,
"save_img_suffix": ".PNG",
"height": 3072,
"width": 2048,
"type": 210
},
"Eagle-M4 F83A01121310": {
"id": 4,
"exposure": 10000,
"location": 2,
"save_img_suffix": ".PNG",
"height": 3072,
"width": 2048,
"type": 210
}
},
"top": {
"startID": 0,
"endID": 0
},
"side": {
"startID": 1,
"endID": 4
}
}

@ -0,0 +1,24 @@
{
"leaper": [
{
"baud": 115200,
"port_name": "COM1",
"device_name": "SinglechipCom",
"auto_connect": true
}
],
"customer": [
{
"baud": 9600,
"port_name": "COM8",
"device_name": "CodeScan_Left",
"auto_connect": true
},
{
"baud": 9600,
"port_name": "COM7",
"device_name": "CodeScan_Right",
"auto_connect": true
}
]
}

@ -0,0 +1,10 @@
{
"MatchParam": {
"MaxCount": 10,
"ScaleTolerance": 50,
"AngleTolerance": 10,
"StrictScore": true,
"ScoreThresh": 70,
"UseCache": true
}
}

@ -0,0 +1,9 @@
{
"ModuleParam": {
"CodeScan": 0,
"Sensor": 0,
"Camera2D": 4,
"Camera3D": 1,
"COMMRules": 1
}
}

@ -0,0 +1,12 @@
{
"TcpNetWork": {
"Host_IP": "127.0.0.1",
"Host_Port": 4000,
"Street_Name": "6",
"Heart_Interval": 10
},
"UdpNetWork": {
"AD_IP_Top": "20.16.1.6",
"AD_Port_Top": 5168
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

File diff suppressed because it is too large Load Diff

@ -52,7 +52,7 @@
<QtModules>core;serialport</QtModules>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<QtInstall>msvc2017_qt-5.9.4-x64</QtInstall>
<QtInstall>5.9.4</QtInstall>
<QtModules>core;serialport</QtModules>
</PropertyGroup>
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') OR !Exists('$(QtMsBuild)\Qt.props')">
@ -75,6 +75,8 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<ReferencePath>D:\git\hzleaper\smokebox\3rdparty\include;$(ReferencePath)</ReferencePath>
<LibraryPath>D:\git\hzleaper\smokebox\3rdparty\lib;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
@ -103,8 +105,7 @@
<ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<PreprocessorDefinitions>UNICODE;_UNICODE;WIN32;WIN64;QT_NO_DEBUG;NDEBUG;LP_SERIAL_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.;.\GeneratedFiles;.\GeneratedFiles\$(ConfigurationName);$(SolutionDir)..\src\lpSerial;$(SolutionDir)..\src\lpSerial\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat />
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
</ClCompile>
@ -113,7 +114,7 @@
<OutputFile>$(OutDir)\$(TargetName)$(TargetExt)</OutputFile>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>D:\git\hzleaper\smokebox\3rdparty\lib\LxCameraApi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<QtMoc>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>

@ -60,7 +60,7 @@
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@ -132,7 +132,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtSql;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;..\..\src\libzkq;..\..\3rdparty\opencv\include;..\..\3rdparty\opencv\include\opencv;..\..\3rdparty\opencv\include\opencv2</AdditionalIncludeDirectories>
<DebugInformationFormat>None</DebugInformationFormat>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>

Binary file not shown.

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save