8
8
#include < WebARKitTrackers/WebARKitOpticalTracking/WebARKitUtils.h>
9
9
10
10
namespace webarkit {
11
- static int gCameraID = 0 ;
11
+ // static int gCameraID = 0;
12
12
13
13
class WebARKitTracker ::WebARKitTrackerImpl {
14
14
public:
15
15
WebARKitTrackerImpl ()
16
- : corners(4 ), initialized(false ), output(17 , 0.0 ), _valid(false ), numMatches(0 ), _currentlyTrackedMarkers( 0 ) {
17
- _featureDetectorW = WebARKitFeatureDetector ();
16
+ : corners(4 ), initialized(false ), output(17 , 0.0 ), _valid(false ), numMatches(0 )
17
+ {
18
18
_maxNumberOfMarkersToTrack = 1 ;
19
+ _featureDetectorW = WebARKitFeatureDetector ();
20
+ _currentlyTrackedMarkers = 0 ;
21
+ // _maxNumberOfMarkersToTrack = 1;
19
22
_frameSizeX = 0 ;
20
23
_frameSizeY = 0 ;
21
24
_K = cv::Mat ();
@@ -57,20 +60,23 @@ class WebARKitTracker::WebARKitTrackerImpl {
57
60
}
58
61
}
59
62
60
- int loadARParam (std::string cparam_name, webarkit::TRACKER_TYPE trackerType) {
63
+ int loadARParam (std::string cparam_name, webarkit::TRACKER_TYPE trackerType, size_t xsize, size_t ysize ) {
61
64
// ARParam param;
62
65
if (arParamLoad (cparam_name.c_str (), 1 , &m_param) < 0 ) {
63
66
ARLOGe (" loadCamera(): Error loading parameter file %s for camera." , cparam_name.c_str ());
64
67
return -1 ;
65
68
}
66
- std::cout << " param xsize: " << m_param.xsize << std::endl;
67
- std::cout << " dist function version: " << m_param.dist_function_version << std::endl;
68
- int cameraID = gCameraID ++;
69
- cameraParams[cameraID] = m_param;
69
+ // std::cout << "param xsize: " << m_param.xsize << std::endl;
70
+ // std::cout << "dist function version: " << m_param.dist_function_version << std::endl;
71
+ // int cameraID = gCameraID++;
72
+ // cameraParams[cameraID] = m_param;
73
+
74
+ initialize_w (trackerType, xsize, ysize);
70
75
71
- initialize_w (trackerType, m_param.xsize , m_param.ysize );
76
+ // initialize_w(trackerType, m_param.xsize, m_param.ysize);
72
77
73
- return cameraID;
78
+ // return cameraID;
79
+ return 1 ;
74
80
}
75
81
76
82
void AddMarker (uchar* buff, std::string fileName, int width, int height, int uid, float scale) {
@@ -160,7 +166,7 @@ class WebARKitTracker::WebARKitTrackerImpl {
160
166
grayFrame.release ();
161
167
};
162
168
163
- void ProcessFrameData_w (unsigned char * frame) {
169
+ void ProcessFrameData_w (uchar * frame) {
164
170
// Just wraps `frame` rather than copying it, i.e. `frame` must remain valid
165
171
// for the duration of the call.
166
172
cv::Mat newFrame (_frameSizeY, _frameSizeX, CV_8UC1, frame);
@@ -400,7 +406,8 @@ class WebARKitTracker::WebARKitTrackerImpl {
400
406
return featureMask;
401
407
}
402
408
403
- bool CanDetectNewFeatures () { return (_currentlyTrackedMarkers < _maxNumberOfMarkersToTrack); }
409
+ // bool CanDetectNewFeatures() { return (_currentlyTrackedMarkers < _maxNumberOfMarkersToTrack); }
410
+ bool CanDetectNewFeatures () { return true ; }
404
411
405
412
bool CanMatchNewFeatures (int detectedFeaturesSize) { return (detectedFeaturesSize > minRequiredDetectedFeatures); }
406
413
@@ -410,6 +417,7 @@ class WebARKitTracker::WebARKitTrackerImpl {
410
417
std::vector<cv::KeyPoint> finalMatched1, finalMatched2;
411
418
for (int i = 0 ; i < _trackables.size (); i++) {
412
419
if (!_trackables[i]._isDetected ) {
420
+ std::cout << " trackable to match" << std::endl;
413
421
std::vector<std::vector<cv::DMatch>> matches =
414
422
_featureDetectorW.MatchFeatures (newFrameDescriptors, _trackables[i]._descriptors );
415
423
if (matches.size () > minRequiredDetectedFeatures) {
@@ -445,7 +453,7 @@ class WebARKitTracker::WebARKitTrackerImpl {
445
453
446
454
HomographyInfo homoInfo = GetHomographyInliers (Points (finalMatched2), Points (finalMatched1));
447
455
if (homoInfo.validHomography ) {
448
- // std::cout << "New marker detected" << std::endl;
456
+ std::cout << " New marker detected" << std::endl;
449
457
_trackables[bestMatchIndex]._trackSelection .SelectPoints ();
450
458
_trackables[bestMatchIndex]._trackSelection .SetHomography (homoInfo.homography );
451
459
_trackables[bestMatchIndex]._isDetected = true ;
@@ -570,7 +578,7 @@ class WebARKitTracker::WebARKitTrackerImpl {
570
578
return testVertexPoints;
571
579
}
572
580
573
- cv::Mat MatchTemplateToImage (cv::Mat searchImage, cv::Mat warpedTemplate) {
581
+ cv::Mat MatchTemplateToImage (cv::Mat& searchImage, cv::Mat& warpedTemplate) {
574
582
int result_cols = searchImage.cols - warpedTemplate.cols + 1 ;
575
583
int result_rows = searchImage.rows - warpedTemplate.rows + 1 ;
576
584
if (result_cols > 0 && result_rows > 0 ) {
@@ -592,7 +600,7 @@ class WebARKitTracker::WebARKitTrackerImpl {
592
600
}
593
601
}
594
602
595
- void RunTemplateMatching (cv::Mat frame, int trackableId) {
603
+ void RunTemplateMatching (cv::Mat& frame, int trackableId) {
596
604
// std::cout << "Starting template match" << std::endl;
597
605
std::vector<cv::Point2f> finalTemplatePoints, finalTemplateMatchPoints;
598
606
// Get a handle on the corresponding points from current image and the marker
@@ -677,14 +685,16 @@ class WebARKitTracker::WebARKitTrackerImpl {
677
685
}
678
686
}
679
687
680
- void BuildImagePyramid (cv::Mat frame) { cv::buildOpticalFlowPyramid (frame, _pyramid, winSize, maxLevel); }
688
+ void BuildImagePyramid (cv::Mat& frame) { cv::buildOpticalFlowPyramid (frame, _pyramid, winSize, maxLevel); }
681
689
682
690
void SwapImagePyramid () { _pyramid.swap (_prevPyramid); }
683
691
684
- void ProcessFrame_w (cv::Mat frame) {
692
+ void ProcessFrame_w (cv::Mat& frame) {
685
693
// std::cout << "Building pyramid" << std::endl;
686
694
BuildImagePyramid (frame);
687
695
// std::cout << "Drawing detected markers to mask" << std::endl;
696
+ std::cout << " Currently tracked markers: " << _currentlyTrackedMarkers << std::endl;
697
+ std::cout << " Max n. markers 2 track: " << _maxNumberOfMarkersToTrack << std::endl;
688
698
if (CanDetectNewFeatures ()) {
689
699
std::cout << " Detecting new features" << std::endl;
690
700
cv::Mat detectionFrame;
@@ -701,13 +711,13 @@ class WebARKitTracker::WebARKitTrackerImpl {
701
711
}
702
712
if (_frameCount > 0 ) {
703
713
if ((_currentlyTrackedMarkers > 0 ) && (_prevPyramid.size () > 0 )) {
704
- // std::cout << "Begin tracking phase" << std::endl;
714
+ std::cout << " Begin tracking phase" << std::endl;
705
715
for (int i = 0 ; i < _trackables.size (); i++) {
706
716
if (_trackables[i]._isDetected ) {
707
717
std::vector<cv::Point2f> trackablePoints = SelectTrackablePoints (i);
708
718
std::vector<cv::Point2f> trackablePointsWarped =
709
719
_trackables[i]._trackSelection .GetSelectedFeaturesWarped ();
710
- // std::cout << "Starting Optical Flow" << std::endl;
720
+ std::cout << " Starting Optical Flow" << std::endl;
711
721
RunOpticalFlow (i, trackablePoints, trackablePointsWarped);
712
722
if (_trackables[i]._isTracking ) {
713
723
// Refine optical flow with template match.
@@ -775,8 +785,8 @@ void WebARKitTracker::initTracker(uchar* refData, size_t refCols, size_t refRows
775
785
_trackerImpl->initTracker (refData, refCols, refRows);
776
786
}
777
787
778
- void WebARKitTracker::loadARParam (std::string paramName, webarkit::TRACKER_TYPE trackerType) {
779
- _trackerImpl->loadARParam (paramName, trackerType);
788
+ void WebARKitTracker::loadARParam (std::string paramName, webarkit::TRACKER_TYPE trackerType, size_t xsize, size_t ysize ) {
789
+ _trackerImpl->loadARParam (paramName, trackerType, xsize, ysize );
780
790
}
781
791
782
792
void WebARKitTracker::AddMarker (uchar* buff, std::string fileName, int width, int height, int uid, float scale) {
0 commit comments