딥 러닝에 대해 독학을 하면서 정리한 걸 적고 있습니다.

전공과 무관하며 전문적인 지식이 아니므로 개인적인 의견과 부족하고 틀린 점이 많습니다.

추가 지식 및 잘못된 점을 지적해주시면 공부하는데 많은 도움이 되겠습니다. 감사합니다^^

- 푸어맨


[Reference]

(MNIST 고급) https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/tutorials/mnist/pros/

(모두를 위한 머신러닝/딥러닝 강의) http://hunkim.github.io/ml/




딥 러닝에 대해 독학을 하면서 정리한 걸 적고 있습니다.

전공과 무관하며 전문적인 지식이 아니므로 개인적인 의견과 부족하고 틀린 점이 많습니다.

추가 지식 및 잘못된 점을 지적해주시면 공부하는데 많은 도움이 되겠습니다. 감사합니다^^

- 푸어맨


[Reference]

(MNIST 초급) https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/tutorials/mnist/beginners/

(모두를 위한 머신러닝/딥러닝 강의) http://hunkim.github.io/ml/

[PixelMaker] 픽셀 단위 이미지를 데이터로 변환

픽셀 단위 이미지를 바이너리, 헥사값 데이터로 변환


- 사용법

마우스 좌클릭 상태로 드래그 시에 픽셀 이미지 표시

마우스 우클릭 상태로 드래그 시에 픽셀 이미지 제거

- 배포파일

PixelMaker.zip

암축해제 암호 : poorman

크리에이티브 커먼즈 라이선스
poorman에 의해 작성된 MonitorCapture은(는) 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.


1. 소스 코드


2. 실행 결과


3. 설명

void CreateRoot(void) : 루트 버퍼에 프레임 버퍼와 같은 사이즈의 메모리 공간을 할당한다.

void DrawRoot(void) : 루트 버퍼에 원하는 그림을 그린다.

void UpdateRootToFB(void) : 루트 버퍼에 그려진 이미지를 프레임 버퍼에 복사한다.


프레임 버퍼의 이미지를 LCD 드라이버에서 보여줄때는 한 픽셀씩 순차적으로 그리기 때문에 그리는 도중에 프레임 버퍼가 업데이트 되는 경우에 이전 프레임 버퍼와 섞여 보이는 현상이 생긴다.

이 현상을 Screen tearing라고 하는데 이를 방지하고자 플립폴롭 버퍼링, 트리플 버퍼링을 사용한다.

프레임 버퍼와 같은 사이즈의 루트 버퍼를 2개 만들고 이미지를 그리는 버퍼와 업데이트하는 버퍼를 번갈아가며 진행하면 된다.

Screen tearing : https://en.wikipedia.org/wiki/Screen_tearing


출처 : http://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html






[Reference]

(copy와 flip - Double buffering의 2가지 기법) http://blog.seulgi.kim/2014/05/flip-copy-double-buffering-2.html


[OpenCV 3.2] Template Matching with Multiple Objects (다중 물체 찾기)

minMaxLoc 함수를 사용하면 단일 물체 찾기는 편하지만 다중 물체 찾기에 이용할려니 매번 matchTemplate 함수를 반복해서 속도가 상당히 느릴 뿐더러 오인식의 경우가 생긴다.

한 이미지에 대해 대응하는 복수의 물체를 찾을 때는 matchTemplate 결과의 배열 값을 직접 분석하는 방법으로 속도와 인식률을 높일 수 있다.

 

1. 소스 코드


2. 실행 결과

1 : 스페이드, 2: 다이아몬드, 3 : 하트, 4 : 클로버 로 표시

실행 결과 속도와 인식률이 개선되었다.

보완할 점으로 하트와 다이아의 경우 인접한 픽셀 값들이 한계값 내에 있어서 중복하여 표시해주는데 좌표 값 사이를 조정하면 쉽게 해결된다.

개선 후의 matchTemplate 함수의 카드 문양 인식률이 상당히 좋아졌다.

다음은 나란히 배열되는 문양의 위치를 ROI (관심영역)로 지정하고 1부터 A까지의 숫자, 문양을 인식하여 현재 보이는 패의 족보와 확률 값을 계산한다.

영상 인식을 통해 족보와 확률 값이 확립되면 컴퓨터에게 포커 및 여러 카드 게임을 가르치고 딥러닝을 이용하여 인공지능 포커 플레이어를 만들 에정이다.




컴퓨터 비전과 영상 처리에 대해 독학을 하면서 정리한 걸 적고 있습니다.

전공과 무관하며 전문적인 지식이 아니므로 개인적인 의견과 부족하고 틀린 점이 많습니다.

추가 지식 및 잘못된 점을 지적해주시면 공부하는데 많은 도움이 되겠습니다. 감사합니다^^

- 푸어맨


[Reference]

(Template Matching Python) http://docs.opencv.org/3.2.0/d4/dc6/tutorial_py_template_matching.html

[임베디드 리눅스] 프레임 버퍼 - Memory Mapping (메모리 맵핑)


1. 소스 코드


2. 설명

커널단의 디바이스 메모리 주소와 소스 코드의 포인터를 메모리 맵핑으로 연결하여 입출력 제어

출처 : http://www.tutorialsdaddy.com/courses/linux-device-driver/8501-mmap/




[Reference]

(메모리 맵핑) http://mintnlatte.tistory.com/357

(메모리 맵) http://no1rogue.blog.me/30097158983

(mmap) http://www.tutorialsdaddy.com/courses/linux-device-driver/8501-mmap/

[OpenCV 3.2] Template Matching - 트럼프 카드 문양 찾기

matchTemplate 함수를 이용하여 트럼프 카드의 스페이드, 하드, 다이아, 클로버 문양들을 찾아 분류한다.


1. 소스 코드

1) MFC 다이얼로그 꾸미기

2) 소스 코드

같은 문양의 카드는 최대 13장이므로 최대 13번 반복한다.

우선적으로 스페이드, 다이아몬드, 하트, 클로버 순으로 한번씩 템플릿 매칭을 해나간다.

템플릿 매칭 결과 값이 있는 문양은 다음 순에도 찾는다.


2. 실행 결과

1) 원본 이미지

2) 찾을 이미지 (스페이드, 다이아몬드, 하트, 클로버)

3) 결과 이미지

1 : 스페이드, 2: 다이아몬드, 3 : 하트, 4 : 클로버 로 표시


4) 개선 사항

- 카드의 배경이 다른 경우 문양을 오인식한다.

- 문양이 아닌 배경을 오인식하는 경우가 있다.

- 스페이드와 클로바가 서로 틀리는 경우가 있다.

=> ROI 영역 지정과 다른 배경 카드(히든 카드)의 이미지 처리가 필요




컴퓨터 비전과 영상 처리에 대해 독학을 하면서 정리한 걸 적고 있습니다.

전공과 무관하며 전문적인 지식이 아니므로 개인적인 의견과 부족하고 틀린 점이 많습니다.

추가 지식 및 잘못된 점을 지적해주시면 공부하는데 많은 도움이 되겠습니다. 감사합니다^^

- 푸어맨


[Reference]

(매칭률 구하기) http://action713.tistory.com/entry/%EB%A7%A4%EC%B9%AD%EB%A5%A0-%EA%B5%AC%ED%95%98%EA%B8%B0

[에러 메세지]

ACCESS_MASK is ambiguous


[해결 방안]

opencv의 헤더 파일을 기존 헤더 파일보다 우선시 include 시에 문제가 생김

아래와 같이 #include의 위치를 수정하여 해결


#include "stdafx.h"

#include "AIpoker.h"

#include "AIpokerDlg.h"

#include "afxdialogex.h"

#include <opencv2/core/core.hpp> 

#include <opencv2/imgcodecs.hpp>

#include <opencv2/highgui/highgui.hpp> 

using namespace cv;


#include <iostream> 

using namespace std;


[참고]

(C2870 ambiguous symbol error) http://stackoverflow.com/questions/39348845/c2870-ambiguous-symbol-error

[에러 메세지]

error: storage class specified for parameter

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token


[해결 방안]

헤더 파일의 함수 정의에 세미클론(;) 이 빠져 있어서 붙여줌


[참고]





+ Recent posts