diff --git a/WebARKit/WebARKitManager.cpp b/WebARKit/WebARKitManager.cpp index 0914f7e..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, 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, enableBlur); + m_tracker->processFrameData(frameData, frameCols, frameRows, colorSpace, blurType); state = DETECTION_RUNNING; WEBARKIT_LOGd("WebARKitManager::processFrameData() done\n"); } 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..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,11 +157,14 @@ class WebARKitTracker::WebARKitTrackerImpl { } void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, - bool enableBlur) { + BLUR_TYPE blurType) { 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(); }; @@ -168,7 +173,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; }; @@ -344,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); } @@ -377,6 +382,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); } @@ -789,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, - bool enableBlur) { - _trackerImpl->processFrameData(frameData, frameCols, frameRows, colorSpace, 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/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..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, 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 d1bdffd..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, bool enableBlur); + void processFrameData(uchar* frameData, size_t frameCols, size_t frameRows, ColorSpace colorSpace, BLUR_TYPE blurType); std::vector getOutputData(); 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: