Commit 264b6d6a by “liusq”

解决opencv arm imread

parent af92429f
......@@ -20,8 +20,8 @@ CameraHandle::CameraHandle(QString &url, QString &httpUrl, QString &sSn, int &ch
connect(this, SIGNAL(afterDownloadFile(int,int,QString)), this, SLOT(pushRecordToCloud(int,int,QString)),Qt::QueuedConnection);
detector = TCV_CreateHumanDetector();
// 设置检测得分阈值 默认0.5
//TCV_HumanDetectorSetHumanThreshold(detector,0.5f);
//TCV_HumanDetectorSetCarThreshold(detector,0.2f);
TCV_HumanDetectorSetHumanThreshold(detector,0.5f);
TCV_HumanDetectorSetCarThreshold(detector,0.2f);
HLPR_ContextConfiguration configuration = {0};
QByteArray && by_mpath=modelPaths.toUtf8();
......@@ -531,6 +531,8 @@ void CameraHandle::updateImage(const cv::Mat & frame,qint64 currentTime){
vides_data::response* resp = httpService.httpPostFaceReconition(faceReconition);
if (resp->code!= 0) {
qInfo()<<"识别人code"<<resp->code;
qInfo()<<"识别人msg"<<resp->msg;
qInfo()<<"识别人脸信息推送失败"<<face.id;
}
instace.deleteObj(resp);
......
......@@ -6,6 +6,7 @@
#include "herror.h"
#include "LogHandle.h"
#include "VidesData.h"
#include <QReadWriteLock>
class FaceReconition
{
......@@ -18,6 +19,8 @@ private:
std::vector<int32_t>customIds;
QReadWriteLock rwLock;
FaceReconition();
~FaceReconition();
......@@ -28,7 +31,8 @@ public:
static FaceReconition instance;
return instance;
}
cv::Mat loadImage(const QString &path);
void doesItExistEmployee(const cv::Mat &source,std::list<vides_data::faceRecognitionResult>&face);
void initSourceImageMap(std::map<QString,QString>&maps,float confidence);
......
#include "FaceRecognition.h"
#include <QImage>
#include <QThread>
......@@ -14,7 +15,34 @@ FaceReconition::~FaceReconition(){
FaceReconition* FaceReconition::instance = nullptr;
cv::Mat FaceReconition::loadImage(const QString &path) {
// 尝试使用OpenCV直接加载图像
std::string stdPath = path.toStdString(); // 将路径转换为std::string
cv::Mat image = cv::imread(stdPath, cv::IMREAD_COLOR); // 尝试加载图像
if (!image.empty()) {
qDebug() << "图像以OpenCV成功加载。";
return image;
}
// 使用OpenCV加载失败,尝试使用QImage
qDebug() << "使用OpenCV加载图像失败,尝试QImage转换。";
QImage qimg(path);
if (qimg.isNull()) {
qDebug() << "QImage也无法加载图像,检查文件路径或文件损坏。";
return cv::Mat(); // 返回空的cv::Mat对象
}
// 转换QImage格式为RGB888
QImage converted = qimg.convertToFormat(QImage::Format_RGB888);
cv::Mat mat(converted.height(), converted.width(), CV_8UC3, const_cast<uchar*>(converted.bits()), converted.bytesPerLine());
// 将RGB转换为BGR,以便OpenCV处理
cv::cvtColor(mat, mat, cv::COLOR_RGB2BGR);
return mat;
}
void FaceReconition::initSourceImageMap(std::map<QString,QString>&maps,float confidence){
//QWriteLocker locker(&rwLock);
featureRemove();
HResult ret;
// 初始化context
......@@ -42,15 +70,16 @@ void FaceReconition::initSourceImageMap(std::map<QString,QString>&maps,float con
}
customIds.clear();
int i = 0;
qInfo()<< "加载图像size: "<<maps.size();
for (auto it = maps.begin(); it != maps.end(); ++it,++i) {
const QString& key = it->first;
const QString& value = it->second;
cv::Mat image = cv::imread(value.toStdString());
QString& value = it->second;
cv::Mat image = loadImage(value);
if (image.empty()) {
qInfo()<< "错误:图像为空或路径不正确,无法加载图像 ";
return;
qInfo() << "错误:使用QImage预处理无法加载图像 " << value;
continue ;
}
HF_ImageData imageData = {0};
imageData.data = image.data;
imageData.height = image.rows;
......@@ -121,6 +150,7 @@ int FaceReconition::featureRemove(){
}
}
void FaceReconition::doesItExistEmployee(const cv::Mat &source,std::list<vides_data::faceRecognitionResult>&faces){
//QReadLocker locker(&rwLock);
HResult ret;
HF_ContextCustomParameter parameter = {0};
HF_ImageData imageData = {0};
......
......@@ -301,6 +301,7 @@ vides_data::response *HttpService::httpPostFacePopulation(QByteArray &img,int &n
vides_data::response *HttpService::httpPostFaceReconition(vides_data::requestFaceReconition & faceReconition){
httpUrl.append("/api/v1.0/recongnition/face");
qDebug()<<"httpPostFaceReconition"<<httpUrl;
QJsonObject json;
json.insert("id",QJsonValue::fromVariant(faceReconition.id.toInt()));
json.insert("img", QJsonValue::fromVariant(faceReconition.img));
......
......@@ -7,7 +7,7 @@ HttpClient::HttpClient(QObject *parent)
{
m_networkAccessManager = new QNetworkAccessManager(this);
m_timer = new QTimer(this);
m_timer->setInterval(4000);
m_timer->setInterval(6000);
m_timer->setSingleShot(true);
connect(m_timer, SIGNAL(timeout()), &m_eventLoop, SLOT(quit()));
}
......
......@@ -15,7 +15,7 @@ int HumanDetection::findHuManCar(const cv::Mat &source,int res,TCV_HumanDetector
// 执行一帧目标检测
TCV_HumanDetectorProcessFrame(detector, stream);
int num = (res == 0) ? TCV_HumanDetectorGetNumOfHuman(detector) :0;//TCV_HumanDetectorGetNumOfCar(detector);
int num = (res == 0) ? TCV_HumanDetectorGetNumOfHuman(detector) :TCV_HumanDetectorGetNumOfCar(detector);
qDebug() << (res == 0 ? "Number of people detected:" : "Number of cars detected:") << num;
TCV_ReleaseCameraStream(stream);
......
......@@ -13,43 +13,43 @@ TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
#QMAKE_LIBDIR += /usr/local/lib
#INCLUDEPATH+=/usr/local/include/opencv4
#INCLUDEPATH+=/usr/local/include/hyperface
#INCLUDEPATH+=/usr/local/include/hyper
#INCLUDEPATH+=/usr/local/include/XNetSDK
#INCLUDEPATH+=/usr/local/include/human
unix:contains(QMAKE_HOST.arch, x86_64) {
QMAKE_LIBDIR += /home/mark/Public/x86_opencv/lib
}
unix:contains(QMAKE_HOST.arch, arm) {
QMAKE_LIBDIR += /usr/local/lib
}
# 根据编译器类型选择库路径和头文件路径
unix: {
# x86 架构
contains(QMAKE_HOST.arch, x86_64) {
INCLUDEPATH+=/home/mark/Public/x86_opencv/include/opencv4
INCLUDEPATH+=/home/mark/Public/x86_opencv/include/hyperface
INCLUDEPATH+=/home/mark/Public/x86_opencv/include/hyper
INCLUDEPATH+=/home/mark/Public/x86_opencv/include/XNetSDK
INCLUDEPATH+=/home/mark/Public/x86_opencv/include/human
}
# ARM 架构
contains(QMAKE_HOST.arch, arm) {
INCLUDEPATH+=/usr/local/include/opencv4
INCLUDEPATH+=/usr/local/include/hyperface
INCLUDEPATH+=/usr/local/include/hyper
INCLUDEPATH+=/usr/local/include/XNetSDK
INCLUDEPATH+=/usr/local/include/human
}
}
QMAKE_LIBDIR += /usr/local/lib
INCLUDEPATH+=/usr/local/include/opencv4
INCLUDEPATH+=/usr/local/include/hyperface
INCLUDEPATH+=/usr/local/include/hyper
INCLUDEPATH+=/usr/local/include/XNetSDK
INCLUDEPATH+=/usr/local/include/human
#unix:contains(QMAKE_HOST.arch, x86_64) {
# QMAKE_LIBDIR += /home/mark/Public/x86_opencv/lib
#}
#unix:contains(QMAKE_HOST.arch, arm) {
# QMAKE_LIBDIR += /usr/local/lib
#}
## 根据编译器类型选择库路径和头文件路径
#unix: {
# # x86 架构
# contains(QMAKE_HOST.arch, x86_64) {
# INCLUDEPATH+=/home/mark/Public/x86_opencv/include/opencv4
# INCLUDEPATH+=/home/mark/Public/x86_opencv/include/hyperface
# INCLUDEPATH+=/home/mark/Public/x86_opencv/include/hyper
# INCLUDEPATH+=/home/mark/Public/x86_opencv/include/XNetSDK
# INCLUDEPATH+=/home/mark/Public/x86_opencv/include/human
# }
# # ARM 架构
# contains(QMAKE_HOST.arch, arm) {
# INCLUDEPATH+=/usr/local/include/opencv4
# INCLUDEPATH+=/usr/local/include/hyperface
# INCLUDEPATH+=/usr/local/include/hyper
# INCLUDEPATH+=/usr/local/include/XNetSDK
# INCLUDEPATH+=/usr/local/include/human
# }
#}
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
......
......@@ -827,8 +827,8 @@ void MainWindow::deleteMkvFileTimer(){
void MainWindow::deleteLogFile(){
QDateTime now = QDateTime::currentDateTime();
QDir logDir("log");
// 前3
QDateTime dateTime1 = now.addDays(-3);
// 前7
QDateTime dateTime1 = now.addDays(-7);
QDateTime dateTime2;
QString logPath = logDir.absoluteFilePath(""); // 日志的路径
......@@ -845,7 +845,7 @@ void MainWindow::deleteLogFile(){
continue;
dateTime2 = QDateTime::fromString(f.baseName(), "yyyy-MM-dd");
if (dateTime2 < dateTime1) { // 只要日志时间小于前3天的时间就删除
if (dateTime2 < dateTime1) { // 只要日志时间小于前7天的时间就删除
dir.remove(f.absoluteFilePath());
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment