AR Puzzle 기능 추가 영상AR Puzzle 기능 추가 영상

Posted at 2011.11.16 22:42 | Posted in Project/증강현실을 이용한 사천성

근 2년만에 소스 꺼내서 이것저것 기능 추가했음 ㅎㅎ

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

대구대학교 App 공모전 시연용 동영상대구대학교 App 공모전 시연용 동영상

Posted at 2011.01.13 00:19 | Posted in Project/Android기반 자녀 지킴이



저작자 표시 비영리 변경 금지
신고

'Project > Android기반 자녀 지킴이' 카테고리의 다른 글

대구대학교 App 공모전 시연용 동영상  (2) 2011.01.13
시연 동영상  (0) 2011.01.09
  1. ㅎㅎ 완료 한거 추카.ㅋ 꾸준히 블로그를 하고 있구나.ㅎ
    • 2011.01.17 00:27 신고 [Edit/Del]
      완료를 하긴 했는데,
      지적사항도 많이 나오고
      등급도 잘 못받아서 속상해요ㅠ
      좋은 경험 삼아서
      다음 과제 부터는 파이팅 하려구요 ㅎ

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

시연 동영상시연 동영상

Posted at 2011.01.09 21:04 | Posted in Project/Android기반 자녀 지킴이


 

apk 를 배포한다거나, 정식 서비스 계획은 없습니다.

영화 [악마를 보았다]를 보고 난 뒤,
꼭 필요한 프로그램이 아닐까 해서 개발하였습니다.

하지만, 악용될 경우 사생활 침해의 우려가 매우 높기 때문에
개발 했다는 것에 만족하겠습니다.

저작자 표시 비영리 변경 금지
신고

'Project > Android기반 자녀 지킴이' 카테고리의 다른 글

대구대학교 App 공모전 시연용 동영상  (2) 2011.01.13
시연 동영상  (0) 2011.01.09

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Visual studio 2008에서 OpenGL 적용 법Visual studio 2008에서 OpenGL 적용 법

Posted at 2010.11.07 21:54 | Posted in Project/증강현실을 이용한 사천성


1)
C:\Program Files\Microsoft Visual Studio 9.0\VC\include 에 gl 폴더를 생성하고,  
gl.h glaux.h glu.h glut.h (3- Header 폴더내의 파일)넣는다.


2)
C:\Program Files\Microsoft Visual Studio 9.0\VC\lib 에
OPENGL32.lib GLAUX.lib, GLU32.lib, GLUT32.lib GLUT.lib  (2- Lib 폴더내의 파일) 을 넣는다..

3)
C:\Windows\System32 에
3-Header 폴더내의 파일을 넣는다.

저작자 표시 비영리 변경 금지
신고
  1. 보통 저러캐 VS디릭토리 밑에 갖다놓고 쓰지 않고...프로젝트 디렉토리에 include, lib을 만들어서 복사하고....프로젝트 세팅에서 include path, library path를 잡아서 쓴다능.

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Document Protector 완료 명세서Document Protector 완료 명세서

Posted at 2010.11.01 22:45 | Posted in Project/Document Protector

과 제 명

Document Protector

과제분야

System S/W

   

문서보안, 정보유출, DRM, DeviceDriver, WDM

과제기간

2010.05 ~ 2010.08 (4개월)

   

대구

참여인원

3


1. 과제 요약
 1.1 과제 개요
 기업의 기밀 문서 유출 사례에 대한 통계를 보면, 현 또는 전 직원의 매수에 의한 유출 사례가 가장 많은 분포를
차지하고 있다
.
따라서 본 프로젝트에서는 관리자의 모니터링을 통해서 내부 문서의 유통을 감시하여 문서의
유출 사례를 감소시키는 것이
목적이다
.

 1.2 과제 기능(시나리오)
  i. 사용자는 Document Protector Client를 통해 Server에 접속.
  ii. Client를 통해서만 접근 가능한 숨겨진 임시 폴더가 생성.
  iii. 문서 작성에 필요한 Process를 제외하고 모두 차단.
  iv Server와의 통신에 필요한 Port를 제외하고 모두 차단
  v. USB, CD-ROM과 같은 외부 기억장치 Driver를 모두 차단
  vi. 열람할 문서를 서버에서 다운받을 때 그 경로가 처음에 생성된 숨겨진 임시 폴더이기 때문에
      Document Protector Client를 통해서가 아니라면 접근이 불가능.
  vii. 문서는 암호화 되어서 Server에서 Client로 전송.
  viii. 새로운 문서를 작성하여 저장하면, 사용자가 지정한 저장 경로에 관계 없이 숨겨진 임시 폴더로 강제로
      변경되어서
저장.
  ix. Print screen Key를 누르면 이상행동으로 간주하고, 키보드와 마우스 입력이 모두 차단되고 즉시
      관리자에게 통보.

  x. 관리자는 차단된 사용자를 실시간으로 확인하고, 사용자의 요청에 의해 키보드와 마우스 입력 차단 수행.

 1.3 System Architecture


2. 과제 내용
 2.1 업무 분담
  ● 이희준 (PL)
      - Project Management
      - Document Access Restriction
      - Device Connection Sensing & Control
      - I/O Device Control

  ● 배태도
      - Port Control
      - Process Block

  ● 백종승
      - UI Design & Implement
      - Network Module
      - Network 암호화 구현

 2.2 사용 기술
  1) Document Access Restriction

 문서의 무단 유출을 막기 위해서 사용자가 문서에 접근을 하지 못하게 한다.
 그래서 프로그램 실행 시 사용자가 인지 못하게 임의의 폴더가 생성되고, 동시에 숨김 처리가 된다.
 그리고 문서를 서버로부터 다운받거나, 새로운 문서를 작성 후 저장할 때 숨김 처리 되어 있는 폴더로
강제로 경로를 바꾸어서 문서를 저장하게 끔 한다.
 따라서 외부 탐색기를 통해서는 사용자가 폴더 및 문서에 접근을 하지 못하도록 한다.
 단지 Document Protector 프로그램 내의 탐색기를 통해서만 숨김 처리된 폴더에 접근 가능할 수 있는
Minfilter Driver를 구현하였다.

 2) Device Connection Sensing & Control


 프로그램 실행 시 현재 컴퓨터에 연결되어 있는 장치를 감지하여, 키보드와 마우스를 제외한 USB, 외장HDD
등의 장치 연결을
제거한다. 그리고 프로그램 종료 전까지 USB, 외장HDD 등의 장치 연결을 제한 함으로서,
외부 장치를 통한 문서의 유출 시도를
막는 Minifilter Driver를 구현하였다.

 3) I/O Device Control
 키보드에서 기본적으로 Print Screen 키를 막으며, 사용자가 Print Screen 키를 누르게 되면 이상행동이라
간주하고 관리자에게
통보한다. 그리고 이를 통보 받은 관리자에 의해서 사용자는 키보드와 마우스의 사용을
제한 받을 수 있는
Keyboard/Mouse Filter Driver를 구현하였다.

 4) Driver & Application 비동기 이벤트 통신
 사용자가 이상행동을 하였을 때 이를 드라이버 단에서 감지하여 관리자에게 통보를 해주어야 한다.
 따라서 이를 구현하기 위해서는 "Driver → Application" 으로의 통신이 필요하다.
 이는 이벤트 객체를 공유하여서 비동기 통신을 하는 방법으로 가능하도록 하였다.

5) Port control

 Packet Hooking Driver에서 Callback함수로 TCP Packet을 받아 Filter 함수로 전달한다.
 TCP Packet이 가지고 있는 Destination Port가 차단할 Port와 일치하면 차단한다.

6) Process block


 Minifilter driver를 사용하여 Callback함수를 통해 Process의 생성과 종료를 감지한다.
 하지만 Process 파일명 만으로는 신뢰할 수 없다. 그래서 서로 다른 Process 실행 파일은
다른 Link 시간을 가질 것이므로, 이와 실행 파일의 크기를 XOR 한 값을 Process를
판별하는 기준으로 사용하면, 보다 정확한 판별이 가능하다.

7) Crypto Module

 Network를 통해 전송 중인 문서의 보안을 위하여 GPL 라이센스를 따르는 Polar SSL Library를 사용하였다.
 Open Source로 되어 있는 Library로 다양한 암호화 모듈을 제공하고, 암호화 과정에 대해서 자세히
알 수 있어서 유용하다.
 제공 되는 암호화 모듈 중에 AES / RSA / BigNum / SHA2 모듈을 사용하여
암호화를 진행 하였다.


3. 개발환경
[OS] Windows XP SP3
[Tool] Microsoft Visual Studio 2008 SP1, WinDBG, VMWare 7.0
[SDK] WDK & Windows XP DDK
[DB] MY-SQL
[Language] C(WDK), C++(MFC)

4. 참고문헌 및 자료
윈도우 디바이스 드라이버, 이봉석 저, 한빛미디어
윈도우 파일 시스템, 이병오 저
루트킷, 그렉 호글런드 저
WinDbg로 쉽게 배우는 Windows Debugging

http://www.hajesoft.com/ - 하제 소프트 홈페이지
http://www.kosr.org/ - 한국 시스템 프로그래밍 사이트
http://www.osronline.com/ OSR Online 사이트
http://www.devpia.com/ - 데브피아 개발자 포털 사이트
http://www.DriverOnline.com - 드라이버 온라인

5. 향후 발전 방향
 현재는 외부로 문서가 빠져나갈 수 없게 구현되어 있다. 그러나, 경우에 따라서 문서가 외부에서 필요한
경우가 생길 수도 있다.
 따라서 필요에 의해 외부로 반출되었을 경우에도 보안이 유지가 될 수 있게
파일 암호화를 사용하여 추가 기능 구현을 한다면
보다 완성도 높은 프로젝트가 될 수 있을 것이다.

저작자 표시 비영리 변경 금지
신고

'Project > Document Protector' 카테고리의 다른 글

Document Protector 완료 명세서  (0) 2010.11.01
개발 환경  (0) 2010.05.15

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

개발 환경개발 환경

Posted at 2010.05.15 23:03 | Posted in Project/Document Protector

OS : Windows XP SP3
Tool : Microsoft Visual Studio 2008 SP1, PE View
Library : OpenCV 2.0
SDK : Windows Driver Kit Version 7.1.0
DB : My-SQL
Language: C++ (MFC)
저작자 표시 비영리 변경 금지
신고

'Project > Document Protector' 카테고리의 다른 글

Document Protector 완료 명세서  (0) 2010.11.01
개발 환경  (0) 2010.05.15

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

OpenGL을 이용한 Picking 성공OpenGL을 이용한 Picking 성공

Posted at 2010.02.24 15:48 | Posted in Project/증강현실을 이용한 사천성

일단 방금 기능구현이 막 끝난 참이라
부가기능 구현도 안되어있고
여러가지 자잘한 버그도 수정이 안되어있다.

게임 실행창을 닫아서 메인 창으로 갔다가,
다시 게임 실행창을 켰을때 화면이 검게 나오는 이유는,

ARToolKit에서 제공해주는 프레임을 얻어오는 함수를 거치면서 화면이 검게되는것을 확인하였다.

어디서부터 손을 대야할지 막막하다-_-a

이걸 어떻게 고치지....ㅠ
저작자 표시 비영리 변경 금지
신고
  1. 이것 저것 신경써야 할 것이 많은 와중에도 열심히 하니까 보기 좋은것 같네.ㅋ
  2. gloria
    안녕하세요~ 저는 증강현실을 졸업작품으로 준비하고 있는 학생입니다. 현재 open gl에서 picking을 하려고 하는데 이 부분을 어떻게 어디서 부터 해야할 지 막막해서 이것 저것 찾는 도중의 숙신님의 홈페이지를 보게 되었습니다.
    숙신님께서 올려놓은 월풍도원에 들어가 봤는데.. ㅠ 실은 이게 무슨 말인지 잘 모르겠어요ㅠㅠ 일단 open gl책으로 공부를 하고 있긴 한데요..ㅠ
    그래서 pinking에 대해 조언을 구할 수 있을까요? ㅠㅠㅠㅠㅠ 일단 menu를 띄우고 거기서 숙신님이 하신 것 처럼 선택을 하고 싶은데요. 이렇게 하려면 어떻게 해야 하나요 ㅠ 제발 부탁드립니다. ㅠ

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

증강현실을 MFC로 이식 성공증강현실을 MFC로 이식 성공

Posted at 2010.02.23 01:14 | Posted in Project/증강현실을 이용한 사천성

무한 삽질 끝에 AR을 우리 소스에 이식하는데 성공하였다.
하지만 불안사항이 있다.

일시 정지 버튼을 누르면 불규칙적인 확률로 다운되는 현상이 있고,
AR을 합치고나서부터 게임 시작을 했다가, 창을 닫고 다시 시작을 누르면 검은 화면이 나온다.

랭킹 구현도 다 했고...

이제 OpenGL을 사용해서 Picking하는 작업이 남았는데
제일 만만찮은 작업이 될것 같다.


ARToolKit 관련 소스들도 클래스화 시켜야 되고...

그런데 ARToolKit 정말 너무 까다롭다-_-

다시는 증강현실에 발을 들여놓기가 싫다.
설정하다가 진땀 다 뺄듯
저작자 표시 비영리 변경 금지
신고
  1. 김범식
    저도 지금 ARToolkit을 MFC에 붙이는 작업을 하는데요. OpenGL 자체를 잘 몰라서인지.. 막막하네요.
    혹시 괜찮은 link나 어떤 부분들에 대해 작업하셨는지 공유해주실 수 있을까요 ㅠ.ㅠ
    • 2010.03.12 18:59 신고 [Edit/Del]
      김범식 님의 CPP수준이 어느정도인지는 잘 모릅니다만,
      클래스의 개념을 확실히 알고 계시고
      ARToolKit함수의 용도를 알고 계신다면
      금방 구현 가능하실꺼라 생각합니다.

      http://www.cyworld.com/cooc2003/2955949
      여기서 함수들의 기능에 대해서 공부해보세요^^

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭

Posted at 2010.02.20 02:52 | Posted in Project/증강현실을 이용한 사천성


경과 시간 계산은 크게 어렵지 않았다.

void PlayGameForm::OnBnClickedButtonStart()
{
	this->tStartTime = CTime::GetCurrentTime();	// 현재 시간을 얻어온다.
	SetTimer(TIMER, 1000, NULL);				// 1초마다 호출한다.
	this->cameraManager->Create(ComparePoint, this->cameraManager);
	this->cameraManager->threadState = true;
}

void PlayGameForm::OnTimer(UINT_PTR nIDEvent)
{
	if (nIDEvent == CAMERA)
	{
		this->cameraManager->GetCamera().cvQueryFrame_ipl_OriginalImage();
		this->cameraManager->FindRedColor ();
	}

	if (nIDEvent == TIMER)
	{
		this->Timer();
	}

	CDialog::OnTimer(nIDEvent);
}

void PlayGameForm::Timer ()
{
	this->tCurrentTime = CTime::GetCurrentTime();						// 현재 시간을 얻어온다.
	this->tViewTime = this->tCurrentTime - this->tStartTime;			// 차를 구한다.

	this->cHours.Format("%d : ", this->tViewTime.GetHours());			// 시간 추출
	this->cMinutes.Format("%d : ", this->tViewTime.GetMinutes());		// 분 추출
	this->cSeconds.Format("%d", this->tViewTime.GetSeconds());			// 초 추출

	this->cViewTime = this->cHours + this->cMinutes + this->cSeconds;	// 추출한 시, 분, 초 합치기

	this->m_timer.SetWindowTextA((LPCTSTR)(this->cViewTime));			// 출력
}

문제는 화면에서 붉은색이 일정 시간 멈춰 있을때 이벤트를 발생 시키는 것인데,
Thread를 사용해서 이진화된 영상 자체에 접근했다가
동기화 문제로 고생고생 하다가
결국은 이진화 할때마다 사진으로 저장하고, 그 사진 파일을 이용해서
비교하는 방법을 선택하였다.

DWORD ComparePoint(LPVOID param)
{
	CameraManager *cameraManager = (CameraManager*) param;
	int i = 0;
	int j = 0;
	int counter = 0;
	CString directory, fileName;
	IplImage *ipl_gray_Image;
	IplImage *temp_ipl_gray_Image;

	directory.Format("Image\\");
	fileName.Format("grayImage.jpg");

	while (TRUE)
	{
		ipl_gray_Image = cvLoadImage(directory+fileName, CV_LOAD_IMAGE_UNCHANGED);

		if (ipl_gray_Image != NULL)
		{
			// Before Point중심 구하기 Start
			cameraManager->beforePoint = cvPoint (0, 0);
			counter = 0;

			for (i = 0 ; i < ipl_gray_Image->height ; i++)
			{
				for (j = 0 ; j < ipl_gray_Image->widthStep ; j++)
				{
					if ((ipl_gray_Image->imageData[i * ipl_gray_Image->widthStep + j]) != 0)
					{
						cameraManager->beforePoint.x += j;
						cameraManager->beforePoint.y += i;
						counter++;
					}
				}
			}	

			if (counter != 0)
			{
				cameraManager->beforePoint.x = cameraManager->beforePoint.x / counter;
				cameraManager->beforePoint.y = cameraManager->beforePoint.y / counter;
			}
			// Before Point중심 구하기 End

			temp_ipl_gray_Image = cvLoadImage(directory+fileName, CV_LOAD_IMAGE_UNCHANGED);

			if (temp_ipl_gray_Image != NULL)
			{
				// After Point중심 구하기 Start
				cameraManager->afterPoint = cvPoint (0, 0);
				counter = 0;

				for (i = 0 ; i < temp_ipl_gray_Image->height ; i++)
				{
					for (j = 0 ; j < temp_ipl_gray_Image->widthStep ; j++)
					{
						if ((temp_ipl_gray_Image->imageData[i * temp_ipl_gray_Image->widthStep + j]) != 0)
						{
							cameraManager->afterPoint.x += j;
							cameraManager->afterPoint.y += i;
							counter++;
						}
					}
				}

				if (counter != 0)
				{
					cameraManager->afterPoint.x = cameraManager->afterPoint.x / counter;
					cameraManager->afterPoint.y = cameraManager->afterPoint.y / counter;
				}
				// After Point중심 구하기 End

				// Befor Point와 After Point 차이 구하기 Start
				cameraManager->comparePoint = cvPoint(0, 0);
				counter = 0;

				cameraManager->comparePoint.x = abs(cameraManager->afterPoint.x - cameraManager->beforePoint.x);
				cameraManager->comparePoint.y = abs(cameraManager->afterPoint.y - cameraManager->beforePoint.y);
				// Befor Point와 After Point 차이 구하기 End

				// 비교해서 Event 발생
				if (cameraManager->comparePoint.x < CLICK_X || cameraManager->comparePoint.y < CLICK_Y)
				{
					if (cameraManager->frameCounter > FRAMECOUNTER)
					{
						AfxMessageBox("클릭");
						cameraManager->frameCounter = 0;
					}
				}
				else
				{
					cameraManager->frameCounter = 0;				
				}
			}

			cvReleaseImage( &(ipl_gray_Image) );
			cvReleaseImage( &(temp_ipl_gray_Image) );
		}
	}

	cameraManager->threadState = false;

	return FALSE;
}

저작자 표시 비영리 변경 금지
신고
  1. 이준재
    안녕하세요. 숙신님.
    저는 현재 대학교에서 재학중인 컴퓨터공학과 학생입니다.
    다름이 아니라 현재 제가 간단한 웹브라우저를 MFC로 만들고 있습니다.
    여기서 구현하려고 하는게 현재 시간과 브라우저를 시작하고 난뒤
    경과시간 2가지를 상태바에다가 구현하려고 하는데요.
    지금 현재시간은 구현을 하였는데요.
    경과시간은 아직 구현을 못하였습니다.
    죄송하지만 어떻게 해야될지 조금 알려주시면 안되겠습니까?

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

빨강 추적빨강 추적

Posted at 2010.02.19 00:51 | Posted in Project/증강현실을 이용한 사천성


분명 중심도 구하고
cvCircle 함수도 썼는데 왜 안되나 했었더니,
원본 영상 이미지를 다시 출력해주는걸 깜박했다ㅋㅋ

이런 어이없는 실수를 ㅋㅋ

void CameraManager::DrawCircle ()
{
	int i = 0;
	int j = 0;
	int counter = 0;
	CvPoint m_ptRed = cvPoint(0, 0);

	CRect rect;
	int x, y;

	this->pDC = this->originalCam->GetDC(); //Picture Box의 영역을 구함
	this->originalCam->GetClientRect(&rect);
	x = rect.top;
	y = rect.left;
	rect.SetRect(x, y, x + CAM_WIDTH, y + CAM_HEIGHT);

	// 중심 구하기
	for (i = 0 ; i < this->camera.Get_ipl_gray_Image()->height ; i++)
	{
		for (j = 0 ; j < this->camera.Get_ipl_gray_Image()->widthStep ; j++)
		{
			if ((this->camera.Get_ipl_gray_Image()->
				imageData[i * this->camera.Get_ipl_gray_Image()->widthStep + j])!=0)
			{
				m_ptRed.x += j;
				m_ptRed.y += i;
				counter++;
			}
		}
	}

	// 원그리기
	if(counter != 0)
	{
		m_ptRed.x = m_ptRed.x / counter;
		m_ptRed.y = m_ptRed.y / counter;
		cvCircle(this->camera.Get_ipl_OriginalImage(), m_ptRed, 20, CV_RGB(255,0,0), 3);
	}

	// Original Image View
	this->camera.Get_cvv_OriginalImage().CopyOf ( this->camera.Get_ipl_OriginalImage() );
	this->camera.Get_cvv_OriginalImage().DrawToHDC(this->pDC->m_hDC, rect);

	this->originalCam->ReleaseDC(this->pDC);
}
저작자 표시 비영리 변경 금지
신고
  1. 비밀댓글입니다

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

티스토리 툴바