From cc1144b51d19326f82f7ad1057692d3a1caa764e Mon Sep 17 00:00:00 2001 From: kalwalt Date: Tue, 9 Jul 2024 16:48:05 +0200 Subject: [PATCH 1/3] Testing new update function --- WebARKit/WebARKitPattern.cpp | 12 ++++++++++++ .../WebARKitOpticalTracking/WebARKitTracker.cpp | 3 ++- WebARKit/include/WebARKitPattern.h | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/WebARKit/WebARKitPattern.cpp b/WebARKit/WebARKitPattern.cpp index 1131c70..c663cf2 100644 --- a/WebARKit/WebARKitPattern.cpp +++ b/WebARKit/WebARKitPattern.cpp @@ -53,6 +53,18 @@ void WebARKitPatternTrackingInfo::getTrackablePose(cv::Mat& pose) { memcpy(transMat, poseOut.ptr(0), 3*4*sizeof(float)); } +void WebARKitPatternTrackingInfo::updateTrackable() { + if (transMat) { + //visible = true; + for (int j = 0; j < 3; j++) { + trans[j][0] = transMat[j][0]; + trans[j][1] = -transMat[j][1]; + trans[j][2] = -transMat[j][2]; + trans[j][3] = (transMat[j][3] * m_scale * 0.001f * 1.64f ); + } + } +} + void WebARKitPatternTrackingInfo::computeGLviewMatrix() { cv::transpose(pose3d, glViewMatrix); } void WebARKitPatternTrackingInfo::invertPose() { diff --git a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp index 0c338e1..0497b87 100644 --- a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp +++ b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp @@ -168,7 +168,7 @@ class WebARKitTracker::WebARKitTrackerImpl { cv::Mat getPoseMatrix() { return _patternTrackingInfo.pose3d; }; - float* getPoseMatrix2() { return (float*)_patternTrackingInfo.transMat; } + float* getPoseMatrix2() { return (float*)_patternTrackingInfo.trans; } cv::Mat getGLViewMatrix() { return _patternTrackingInfo.glViewMatrix; }; @@ -377,6 +377,7 @@ class WebARKitTracker::WebARKitTrackerImpl { _patternTrackingInfo.cameraPoseFromPoints(_pose, objPoints, imgPoints, m_camMatrix, m_distortionCoeff); // _patternTrackingInfo.computePose(_pattern.points3d, warpedCorners, m_camMatrix, m_distortionCoeff); _patternTrackingInfo.getTrackablePose(_pose); + _patternTrackingInfo.updateTrackable(); fill_output(m_H); WEBARKIT_LOGi("Marker tracked ! Num. matches : %d\n", numMatches); } diff --git a/WebARKit/include/WebARKitPattern.h b/WebARKit/include/WebARKitPattern.h index 0d63ada..df9b11c 100644 --- a/WebARKit/include/WebARKitPattern.h +++ b/WebARKit/include/WebARKitPattern.h @@ -26,6 +26,7 @@ class WebARKitPatternTrackingInfo { std::vector points2d; cv::Mat pose3d; float transMat [3][4]; + float trans [3][4]; cv::Mat glViewMatrix; void setScale(const float scale) { m_scale = scale; } @@ -42,6 +43,8 @@ class WebARKitPatternTrackingInfo { void getTrackablePose(cv::Mat& pose); + void updateTrackable(); + void computeGLviewMatrix(); private: From 82c08b6c07b1cfff4fd23d0e5e9409b20711f758 Mon Sep 17 00:00:00 2001 From: kalwalt Date: Thu, 12 Sep 2024 17:50:41 +0200 Subject: [PATCH 2/3] Added new enum for blurring -> updated c++ and javascript code - npm packages upgrade --- WebARKit/WebARKitManager.cpp | 4 ++-- .../WebARKitOpticalTracking/WebARKitTracker.cpp | 11 +++++++---- .../WebARKitOpticalTracking/WebARKitEnums.h | 6 ++++++ .../WebARKitOpticalTracking/WebARKitTracker.h | 2 +- WebARKit/include/WebARKitManager.h | 2 +- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/WebARKit/WebARKitManager.cpp b/WebARKit/WebARKitManager.cpp index 0914f7e..47e24d6 100644 --- a/WebARKit/WebARKitManager.cpp +++ b/WebARKit/WebARKitManager.cpp @@ -79,7 +79,7 @@ bool WebARKitManager::shutdown() { return true; }; -void WebARKitManager::processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, bool enableBlur) { +void WebARKitManager::processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType, bool enableBlur) { WEBARKIT_LOGd("WebARKitManager::processFrameData(...)\n"); if (state < WAITING_FOR_VIDEO) { WEBARKIT_LOGe("processFrameData called without init the tracker. Call first initTracker.\n"); @@ -88,7 +88,7 @@ void WebARKitManager::processFrameData(uchar* frameData, size_t frameCols, size_ WEBARKIT_LOGe("Error initialising processFrameData.\n"); //return false; } - m_tracker->processFrameData(frameData, frameCols, frameRows, colorSpace, enableBlur); + m_tracker->processFrameData(frameData, frameCols, frameRows, colorSpace, blurType, enableBlur); state = DETECTION_RUNNING; WEBARKIT_LOGd("WebARKitManager::processFrameData() done\n"); } diff --git a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp index 0497b87..f907f13 100644 --- a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp +++ b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp @@ -155,11 +155,14 @@ class WebARKitTracker::WebARKitTrackerImpl { } void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, - bool enableBlur) { + BLUR_TYPE blurType, bool enableBlur) { cv::Mat grayFrame = convert2Grayscale(frameData, frameCols, frameRows, colorSpace); - if (enableBlur) { + if (blurType == BLUR_TYPE::BOX_BLUR) { cv::blur(grayFrame, grayFrame, blurSize); } + else if (blurType == BLUR_TYPE::MEDIAN_BLUR) { + cv::medianBlur(grayFrame, grayFrame, blurSize.width); + } processFrame(grayFrame); grayFrame.release(); }; @@ -790,8 +793,8 @@ void WebARKitTracker::initTracker(uchar* refData, size_t refCols, size_t refRows } void WebARKitTracker::processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, - bool enableBlur) { - _trackerImpl->processFrameData(frameData, frameCols, frameRows, colorSpace, enableBlur); + BLUR_TYPE blurType,bool enableBlur) { + _trackerImpl->processFrameData(frameData, frameCols, frameRows, colorSpace, blurType, enableBlur); } std::vector WebARKitTracker::getOutputData() { return _trackerImpl->getOutputData(); } diff --git a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitEnums.h b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitEnums.h index 2dca6c4..05d759b 100644 --- a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitEnums.h +++ b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitEnums.h @@ -16,6 +16,12 @@ enum ColorSpace { GRAY = 2 }; +enum BLUR_TYPE { + MEDIAN_BLUR = 0, + BOX_BLUR = 1, + NONE_BLUR = 2 +}; + } // namespace webarkit #endif \ No newline at end of file diff --git a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h index 8d2bf61..4e34920 100644 --- a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h +++ b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h @@ -27,7 +27,7 @@ class WebARKitTracker { void initTracker(uchar* refData, size_t refCols, size_t refRows, ColorSpace colorSpace); - void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, bool enableBlur); + void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType, bool enableBlur); std::vector getOutputData(); diff --git a/WebARKit/include/WebARKitManager.h b/WebARKit/include/WebARKitManager.h index d1bdffd..a9f9014 100644 --- a/WebARKit/include/WebARKitManager.h +++ b/WebARKit/include/WebARKitManager.h @@ -98,7 +98,7 @@ class WebARKitManager { bool shutdown(); - void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, bool enableBlur); + void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType, bool enableBlur); std::vector getOutputData(); From 77b2029da9c6f4e21005e59db0c736d3f1990d73 Mon Sep 17 00:00:00 2001 From: kalwalt Date: Sat, 14 Sep 2024 20:38:13 +0200 Subject: [PATCH 3/3] new example with jsfeatNext - bunch of debug logs - removing enableBlur bool variable because not necessary anymore (commit files previously missed) --- WebARKit/WebARKitManager.cpp | 4 ++-- .../WebARKitOpticalTracking/WebARKitTracker.cpp | 10 ++++++---- .../WebARKitOpticalTracking/WebARKitTracker.h | 2 +- .../WebARKitOpticalTracking/WebARKitUtils.h | 4 ++++ WebARKit/include/WebARKitManager.h | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/WebARKit/WebARKitManager.cpp b/WebARKit/WebARKitManager.cpp index 47e24d6..703b4da 100644 --- a/WebARKit/WebARKitManager.cpp +++ b/WebARKit/WebARKitManager.cpp @@ -79,7 +79,7 @@ bool WebARKitManager::shutdown() { return true; }; -void WebARKitManager::processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType, bool enableBlur) { +void WebARKitManager::processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType) { WEBARKIT_LOGd("WebARKitManager::processFrameData(...)\n"); if (state < WAITING_FOR_VIDEO) { WEBARKIT_LOGe("processFrameData called without init the tracker. Call first initTracker.\n"); @@ -88,7 +88,7 @@ void WebARKitManager::processFrameData(uchar* frameData, size_t frameCols, size_ WEBARKIT_LOGe("Error initialising processFrameData.\n"); //return false; } - m_tracker->processFrameData(frameData, frameCols, frameRows, colorSpace, blurType, enableBlur); + m_tracker->processFrameData(frameData, frameCols, frameRows, colorSpace, blurType); state = DETECTION_RUNNING; WEBARKIT_LOGd("WebARKitManager::processFrameData() done\n"); } diff --git a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp index f907f13..605fa04 100644 --- a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp +++ b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.cpp @@ -142,11 +142,13 @@ class WebARKitTracker::WebARKitTrackerImpl { assert(grayImage.channels() == 1); this->_featureDetector->detect(grayImage, keypoints, featureMask); + WEBARKIT_LOGd("keypoints size: %d\n", keypoints.size()); if (keypoints.empty()) { WEBARKIT_LOGe("No keypoints detected!\n"); return false; } this->_featureDescriptor->compute(grayImage, keypoints, descriptors); + WEBARKIT_LOGd("descriptors size: %d\n", descriptors.size()); if (descriptors.empty()) { WEBARKIT_LOGe("No descriptors computed!\n"); return false; @@ -155,7 +157,7 @@ class WebARKitTracker::WebARKitTrackerImpl { } void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, - BLUR_TYPE blurType, bool enableBlur) { + BLUR_TYPE blurType) { cv::Mat grayFrame = convert2Grayscale(frameData, frameCols, frameRows, colorSpace); if (blurType == BLUR_TYPE::BOX_BLUR) { cv::blur(grayFrame, grayFrame, blurSize); @@ -347,7 +349,7 @@ class WebARKitTracker::WebARKitTrackerImpl { // return false; }; //if (!_isDetected) { - WEBARKIT_LOGd("frameKeyPts.size() = %d\n", frameKeyPts.size()); + WEBARKIT_LOGd("frame KeyPoints size: %d\n", frameKeyPts.size()); if (static_cast(frameKeyPts.size()) > minRequiredDetectedFeatures) { MatchFeatures(frameKeyPts, frameDescr); } @@ -793,8 +795,8 @@ void WebARKitTracker::initTracker(uchar* refData, size_t refCols, size_t refRows } void WebARKitTracker::processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, - BLUR_TYPE blurType,bool enableBlur) { - _trackerImpl->processFrameData(frameData, frameCols, frameRows, colorSpace, blurType, enableBlur); + BLUR_TYPE blurType) { + _trackerImpl->processFrameData(frameData, frameCols, frameRows, colorSpace, blurType); } std::vector WebARKitTracker::getOutputData() { return _trackerImpl->getOutputData(); } diff --git a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h index 4e34920..edd4c5e 100644 --- a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h +++ b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitTracker.h @@ -27,7 +27,7 @@ class WebARKitTracker { void initTracker(uchar* refData, size_t refCols, size_t refRows, ColorSpace colorSpace); - void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType, bool enableBlur); + void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType); std::vector getOutputData(); diff --git a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitUtils.h b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitUtils.h index 4debaeb..a6f4a3f 100644 --- a/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitUtils.h +++ b/WebARKit/WebARKitTrackers/WebARKitOpticalTracking/include/WebARKitTrackers/WebARKitOpticalTracking/WebARKitUtils.h @@ -125,17 +125,21 @@ static auto convert2Grayscale(uchar* refData, size_t refCols, size_t refRows, Co cv::Mat colorFrame(refRows, refCols, CV_8UC4, refData); refGray.create(refRows, refCols, CV_8UC1); cv::cvtColor(colorFrame, refGray, cv::COLOR_RGBA2GRAY); + WEBARKIT_LOGd("convert to GRAY from RGBA !!\n"); } break; case ColorSpace::RGB: { cv::Mat colorFrame(refRows, refCols, CV_8UC3, refData); refGray.create(refRows, refCols, CV_8UC1); cv::cvtColor(colorFrame, refGray, cv::COLOR_RGB2GRAY); + WEBARKIT_LOGd("convert to GRAY from RGB !!\n"); } break; case ColorSpace::GRAY: { refGray = cv::Mat(refRows, refCols, CV_8UC1, refData); + WEBARKIT_LOGd("no need to convert to GRAY!!\n"); } break; default: { refGray = cv::Mat(refRows, refCols, CV_8UC1, refData); + WEBARKIT_LOGd("Default: no need to convert to GRAY!!\n"); } } diff --git a/WebARKit/include/WebARKitManager.h b/WebARKit/include/WebARKitManager.h index a9f9014..6472aad 100644 --- a/WebARKit/include/WebARKitManager.h +++ b/WebARKit/include/WebARKitManager.h @@ -98,7 +98,7 @@ class WebARKitManager { bool shutdown(); - void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType, bool enableBlur); + void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType); std::vector getOutputData();