You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
5.1 KiB
C++
224 lines
5.1 KiB
C++
|
3 years ago
|
#pragma execution_character_set("utf-8")
|
||
|
|
#include "CameraControl.h"
|
||
|
|
#include <QDebug>
|
||
|
|
|
||
|
|
CameraControl::CameraControl(QObject *parent) : QObject(parent)
|
||
|
|
{
|
||
|
|
qRegisterMetaType<QVector<ImageInfo> >("QVector<ImageInfo>");
|
||
|
|
}
|
||
|
|
|
||
|
|
CameraControl::~CameraControl()
|
||
|
|
{
|
||
|
|
for each (Camera* pCamera in m_vecPCamera)
|
||
|
|
{
|
||
|
|
DELETE_POINTER(pCamera);
|
||
|
|
}
|
||
|
|
m_vecPCamera.clear();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CameraControl::loadCamera(const QList<CameraInfo>& cameraInfoList)
|
||
|
|
{
|
||
|
|
bool flag = true;
|
||
|
|
m_vecPCamera.clear();
|
||
|
|
m_mapSNIndex.clear();
|
||
|
|
for each(CameraInfo cameraInfo in cameraInfoList)
|
||
|
|
{
|
||
|
|
QString serialNumber = cameraInfo.serialNumber;
|
||
|
|
CameraType cameraType = cameraInfo.cameraType;
|
||
|
|
if (cameraType == CameraType::Hik)
|
||
|
|
{
|
||
|
|
Camera* pHikCamera = new HikCamera();
|
||
|
|
if (pHikCamera->initCamera(serialNumber))
|
||
|
|
{
|
||
|
|
m_vecPCamera.push_back(pHikCamera);
|
||
|
|
m_mapSNIndex[serialNumber] = m_vecPCamera.size() - 1;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
qWarning() << "SerialNumber: " << serialNumber << " init failed";
|
||
|
|
flag = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return flag;
|
||
|
|
}
|
||
|
|
bool CameraControl::openCamera(const QStringList& serialNumberList)
|
||
|
|
{
|
||
|
|
bool flag = true;
|
||
|
|
for each (QString serialNumber in serialNumberList)
|
||
|
|
{
|
||
|
|
if (!openCamera(serialNumber))
|
||
|
|
{
|
||
|
|
qWarning() << "Open " << serialNumber << "failed!";
|
||
|
|
flag = false;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
qDebug() << "Open " << serialNumber << " successed";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return flag;
|
||
|
|
}
|
||
|
|
bool CameraControl::closeCamera(const QStringList& serialNumberList)
|
||
|
|
{
|
||
|
|
bool flag = true;
|
||
|
|
for each (QString serialNumber in serialNumberList)
|
||
|
|
{
|
||
|
|
if (!closeCamera(serialNumber))
|
||
|
|
{
|
||
|
|
qWarning() << "Close " << serialNumber << "failed!";
|
||
|
|
flag = false;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
qDebug() << "Close " << serialNumber << " successed";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return flag;
|
||
|
|
}
|
||
|
|
bool CameraControl::startCamera(const QStringList& serialNumberList)
|
||
|
|
{
|
||
|
|
bool flag = true;
|
||
|
|
for each (QString serialNumber in serialNumberList)
|
||
|
|
{
|
||
|
|
if (!startCamera(serialNumber))
|
||
|
|
{
|
||
|
|
qWarning() << "Start " << serialNumber << "failed!";
|
||
|
|
flag = false;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
qDebug() << "Start " << serialNumber << " successed";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return flag;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CameraControl::stopCamera(const QStringList& serialNumberList)
|
||
|
|
{
|
||
|
|
bool flag = true;
|
||
|
|
for each (QString serialNumber in serialNumberList)
|
||
|
|
{
|
||
|
|
if (!stopCamera(serialNumber))
|
||
|
|
{
|
||
|
|
qWarning() << "Stop " << serialNumber << "failed!";
|
||
|
|
flag = false;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
qDebug() << "Stop " << serialNumber << " successed";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return flag;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CameraControl::setSoftwareTrigger(const QStringList& serialNumberList)
|
||
|
|
{
|
||
|
|
bool flag = true;
|
||
|
|
for each (QString serialNumber in serialNumberList)
|
||
|
|
{
|
||
|
|
if (!setSoftwareTrigger(serialNumber))
|
||
|
|
{
|
||
|
|
qWarning() << "Set " << serialNumber << " software trigger failed!";
|
||
|
|
flag = false;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
qDebug() << "Set " << serialNumber << " software trigger successed";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return flag;
|
||
|
|
}
|
||
|
|
|
||
|
|
Q_SLOT void CameraControl::onCapture(const QStringList& serialNumberList)
|
||
|
|
{
|
||
|
|
int len = serialNumberList.length();
|
||
|
|
qDebug() << "start capture, length: " << len;
|
||
|
|
QVector<ImageInfo> vecImageInfo(len);
|
||
|
|
for (int i = 0; i < len; ++i)
|
||
|
|
{
|
||
|
|
QString serialNumber = serialNumberList.at(i);
|
||
|
|
vecImageInfo[i].image = capture(serialNumber);
|
||
|
|
vecImageInfo[i].cameraSn = serialNumber;
|
||
|
|
}
|
||
|
|
emit sgCapturedImage(vecImageInfo);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CameraControl::openCamera(const QString& serialNumber)
|
||
|
|
{
|
||
|
|
QMap<QString, int>::iterator iter = m_mapSNIndex.find(serialNumber);
|
||
|
|
if (iter == m_mapSNIndex.end())
|
||
|
|
{
|
||
|
|
qWarning() << "Do not find " << serialNumber;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
int index = iter.value();
|
||
|
|
return m_vecPCamera[index]->openCamera();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CameraControl::closeCamera(const QString& serialNumber)
|
||
|
|
{
|
||
|
|
QMap<QString, int>::iterator iter = m_mapSNIndex.find(serialNumber);
|
||
|
|
if (iter == m_mapSNIndex.end())
|
||
|
|
{
|
||
|
|
qWarning() << "Do not find " << serialNumber;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
int index = iter.value();
|
||
|
|
return m_vecPCamera[index]->closeCamera();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CameraControl::startCamera(const QString& serialNumber)
|
||
|
|
{
|
||
|
|
QMap<QString, int>::iterator iter = m_mapSNIndex.find(serialNumber);
|
||
|
|
if (iter == m_mapSNIndex.end())
|
||
|
|
{
|
||
|
|
qWarning() << "Do not find " << serialNumber;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
int index = iter.value();
|
||
|
|
return m_vecPCamera[index]->startCamera();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CameraControl::stopCamera(const QString& serialNumber)
|
||
|
|
{
|
||
|
|
QMap<QString, int>::iterator iter = m_mapSNIndex.find(serialNumber);
|
||
|
|
if (iter == m_mapSNIndex.end())
|
||
|
|
{
|
||
|
|
qWarning() << "Do not find " << serialNumber;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
int index = iter.value();
|
||
|
|
return m_vecPCamera[index]->stopCamera();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool CameraControl::setSoftwareTrigger(const QString& serialNumber)
|
||
|
|
{
|
||
|
|
QMap<QString, int>::iterator iter = m_mapSNIndex.find(serialNumber);
|
||
|
|
if (iter == m_mapSNIndex.end())
|
||
|
|
{
|
||
|
|
qWarning() << "Do not find " << serialNumber;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
int index = iter.value();
|
||
|
|
return m_vecPCamera[index]->setTriggerSource(SOFTWARE);
|
||
|
|
}
|
||
|
|
|
||
|
|
cv::Mat CameraControl::capture(const QString& serialNumber)
|
||
|
|
{
|
||
|
|
QMap<QString, int>::iterator iter = m_mapSNIndex.find(serialNumber);
|
||
|
|
if (iter == m_mapSNIndex.end())
|
||
|
|
{
|
||
|
|
qWarning() << "Do not find " << serialNumber;
|
||
|
|
return cv::Mat();
|
||
|
|
}
|
||
|
|
int index = iter.value();
|
||
|
|
cv::Mat imgMat;
|
||
|
|
m_vecPCamera[index]->takeAPic(imgMat);
|
||
|
|
if (imgMat.empty())
|
||
|
|
{
|
||
|
|
qWarning() << serialNumber << " capture empty";
|
||
|
|
}
|
||
|
|
return imgMat;
|
||
|
|
}
|