Skip to content

Commit

Permalink
added passive stone detection
Browse files Browse the repository at this point in the history
  • Loading branch information
spchuang committed Jul 21, 2013
1 parent 7a510b2 commit 436805a
Show file tree
Hide file tree
Showing 10 changed files with 203 additions and 11 deletions.
27 changes: 24 additions & 3 deletions AugmentedRealityGo/ARGraphicController.cpp
Expand Up @@ -126,6 +126,27 @@ void ARGraphicController::calculateFPS()

// Reset frame count
frameCount = 0;

//read move passively
if(genMove == true && !d->handsOnBoard && d->fullBoardInScene)
{
std::cout<<"read board state"<<std::endl;
char newRealBoardStones[361];
d->readStone(newRealBoardStones);

//detect only when needing to generate move
if(board->checkNewBoardState(newRealBoardStones, board->getMoveTurnColor())){

if(!board->addRealStone(board->newMoveIndex, board->getMoveTurnColor())){
//not a valid move
fprintf(stderr, "ERROR: Invalid move\n");
}else{
genMove = false;
}
}

}

}


Expand All @@ -138,12 +159,12 @@ void ARGraphicController::calculateFPS()
loadingMsg = (loadingMsg+1)%4;
}

//fps = f/s


//calculate arrow animation
arrow_space_height_add -= 0.25/fps;
if(arrow_space_height_add <0) arrow_space_height_add = 0.25;


}

void ARGraphicController::drawBackGround()
Expand Down Expand Up @@ -195,7 +216,7 @@ void ARGraphicController::drawBoard()
double post_m[16] = {rotMat(0), rotMat(3), rotMat(6), 0.0f,
rotMat(1), rotMat(4), rotMat(7), 0.0f,
rotMat(2), rotMat(5), rotMat(8), 0.0f,
-Tvec(0) -0.054 , -Tvec(1) , -Tvec(2), 1.0f};
-Tvec(0) -0.045 , -Tvec(1) , -Tvec(2), 1.0f};
glLoadMatrixd(post_m);
float p[]={0,0,0};
drawGoStone(0.01f,0.01f,0.01f,2,2,p,0);
Expand Down
67 changes: 63 additions & 4 deletions AugmentedRealityGo/BoardTracking/GoBoardDetector.cpp
Expand Up @@ -71,6 +71,10 @@ GoBoardDetector::GoBoardDetector(Config* c)

camMatrix = cv::Mat(3, 3, CV_32FC1, &(c->cam.intrinsic_array));
distCoeff = cv::Mat(5, 1, CV_32FC1, &(c->cam.distCoeffs_array));
handsOnBoard = false;
fullBoardInScene = false;
frameWidth = c->cam.width;
frameHeight = c->cam.height;
}

void GoBoardDetector::setCameraIntrinsics(cv::Mat camM, cv::Mat camD)
Expand All @@ -91,12 +95,13 @@ bool GoBoardDetector::detectMove()
{

detectBoard = findBoard(srcFrame);
if(!detectBoard)
if(!detectBoard){
fullBoardInScene = false;
return false;
}

undistortBoard();


detectHand();
return true;
}

Expand Down Expand Up @@ -132,6 +137,8 @@ bool GoBoardDetector::findBoard(cv::Mat &srcImage)

bool GoBoardDetector::calculateCameraIntrinsix()
{
//cv::showAndSave("marker_board_pre", undistortImage);

std::vector<cv::Point3f> m_markerCorners3d;
cv::Mat test;
undistortImage.copyTo(test);
Expand All @@ -143,6 +150,7 @@ bool GoBoardDetector::calculateCameraIntrinsix()
for(size_t i=0; i<m_detectedMarkers.size(); i++)
{
Marker& m = m_detectedMarkers[i];
m.draw(undistortImage,cv::Scalar(0,0,255),2);
for(size_t j=0; j<boardMarkerID.size(); j++)
{
//if the marker is one of the board marker ids
Expand Down Expand Up @@ -291,7 +299,7 @@ bool GoBoardDetector::calculateCameraIntrinsix()
//project 3d points on the image plane
//std::cout<<transform_r<<std::endl;
cv::projectPoints(Board3DPoint, transform_r, GoBoardTaux, camMatrix, distCoeff, BoardImagePoint);

//cv::showAndSave("marker_board", undistortImage);
for(size_t c=0;c<BoardImagePoint.size() ; c++){
//MyFilledCircle(undistortImage, m_detectedMarkers[i].points[c],cv::Scalar(0,255,0));

Expand All @@ -300,6 +308,18 @@ bool GoBoardDetector::calculateCameraIntrinsix()
MyFilledCircle(undistortImage, BoardImagePoint[c], cv::Scalar(0,0,255));
}

fullBoardInScene = true;
for(int i=0; i<4;i++){
if(BoardImagePoint[i].x<0 || BoardImagePoint[i].x >frameWidth ||
BoardImagePoint[i].y<0 || BoardImagePoint[i].y >frameHeight)
fullBoardInScene = false;

}

//boardImagePoint[0-3] are the four corners
//if(BoardImagePoint[0].x

//cv::showAndSave("marker_board_with_board_pts", undistortImage);
if(showMarkers){
cv::imshow("markers",undistortImage);
cv::waitKey(1);
Expand Down Expand Up @@ -406,4 +426,43 @@ void GoBoardDetector::readStone(char new_BoardStonesStates[361])
{
sd.setupDetection(undistortBoardImage, UnidistortBoardPoint);
sd.readStones(new_BoardStonesStates);
}
//with a finger wearing a red ring, count as a hand
void GoBoardDetector::detectHand()
{

//convert to HSV image
cv::Mat test,imgThreshed, imgThreshed2 ;
cv::cvtColor(undistortBoardImage,test,CV_BGR2HSV);
cv::Mat dst;

cv::inRange(test, cv::Scalar(105, 135, 135), cv::Scalar(135, 255, 255), imgThreshed);
//cv::inRange(test, cv::Scalar(0, 135, 135), cv::Scalar(15, 255, 255), imgThreshed);
//cv::inRange(test, cv::Scalar(159, 135, 135), cv::Scalar(15, 255, 255), imgThreshed2);
//cvOr(imgThreshed, imgThreshed2, dst);


/// Find contours
std::vector<std::vector<cv::Point> > contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours( imgThreshed, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

handsOnBoard = (contours.size() >0);
/*
std::cout<<"countours: "<< contours.size()<<std::endl;
for( size_t i = 0; i < contours.size(); i++ )
{
std::vector<cv::Point> contour_poly;
cv::Point2f center;
float radius;
approxPolyDP( cv::Mat(contours[i]), contour_poly, 3, true );
cv::minEnclosingCircle( (cv::Mat)contour_poly, center, radius );
std::cout<<"radius: "<<radius<<std::endl;
}
cv::imshow("board",undistortBoardImage);
cv::waitKey(1);
cv::imshow("diff",imgThreshed);
cv::waitKey(1);
*/
}
6 changes: 5 additions & 1 deletion AugmentedRealityGo/BoardTracking/GoBoardDetector.h
Expand Up @@ -29,7 +29,8 @@ class GoBoardDetector

//camera world position transformation
cv::Mat GoBoardRaux,GoBoardTaux;

bool handsOnBoard;
bool fullBoardInScene;

void setCameraIntrinsics(cv::Mat camM, cv::Mat camD);

Expand All @@ -41,6 +42,7 @@ class GoBoardDetector
void detectOcclusionObject();
void saveBackGroundBoard();
void testThrehold();
void detectHand(); //with red blob
protected:
bool findBoard(cv::Mat& srcImage);
void undistortBoard();
Expand Down Expand Up @@ -75,6 +77,8 @@ class GoBoardDetector
//we have two ways of finding camera position relative to the models
enum PoseEstimationMethods {SOLVEPNP,RPP};
PoseEstimationMethods m_PoseMethod;

int frameWidth, frameHeight;
};

#endif
4 changes: 2 additions & 2 deletions AugmentedRealityGo/BoardTracking/StoneDetector.cpp
Expand Up @@ -84,7 +84,7 @@ void StoneDetector::setupDetection(cv::Mat b, std::vector<cv::Point2f> bp)
{
boardImage =b;
StonePoints = bp;

cv::showAndSave("board", boardImage);
//setup borders to the image
cv::cvtColor(boardImage,greyBoardImage,CV_BGR2GRAY );
/*
Expand Down Expand Up @@ -191,7 +191,7 @@ void StoneDetector::findCandidateStones(bool findBlack,std::vector<cv::Point2f>
// cv::imshow( "white ther", thre_output );
//cv:: waitKey(1);
}
cv::showAndSave("black_thresh", thre_output);
/// Find contours
cv::findContours( thre_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

Expand Down
108 changes: 108 additions & 0 deletions AugmentedRealityGo/Release/AugmentedRealityGo.write.1.tlog
Expand Up @@ -1258,3 +1258,111 @@ C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\Go
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\GoUtils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\PatternMatcher.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\sgfutils.dll
C:\Users\Sam\Documents\Visual Studio 2010\Projects\AugmentedRealityGo\Release\System.Data.SQLite.dll
Binary file modified AugmentedRealityGo/Release/CL.read.1.tlog
Binary file not shown.
Binary file modified AugmentedRealityGo/Release/CL.write.1.tlog
Binary file not shown.
Binary file modified AugmentedRealityGo/Release/cl.command.1.tlog
Binary file not shown.
Binary file modified Release/AugmentedRealityGo.exe
Binary file not shown.
2 changes: 1 addition & 1 deletion Release/config.json
Expand Up @@ -105,7 +105,7 @@

"fuego":{
//500000000 = 500 mb
"memory_limit": 5000000
"memory_limit": 1000000000

},
//this is about stone size
Expand Down

0 comments on commit 436805a

Please sign in to comment.