주식 기본 정보 가져오기

----------------------------------------------------------------------------------------------------------------------------------------------------------

 주식 기본 정보 가져오는건 지난주에 다 해뒀는데 이번 주에 개인적으로 생각할 일들이 있어서 포스팅을 못했네요 ㅜㅜ

 그래두 앞으로는 짬을 내서 계속 올려야겠어요!! 우리 함께 화이팅 해용 ㅎㅎㅎ


 오늘은 주식 기본 정보를 가져오는걸 해볼꺼에요. HTS를 할때 해당 주식의 시가총액이라든가, 현재가, 시가, 종가 등등 기본적인 데이터를 가져오는걸 할 수 있다면 이제 어느정도 감을 잡았다는 거겠죠?? 주식 기본 정보를 가져오는 것도 생각보다 어렵지 않아요. 다만, 이벤트 처리 개념을 이해하셔야 합니다! 시작해봅시다~

 주식 기본 정보를 가져오기 위해서는 위와 같이 서버로부터 정보를 받아야 합니다. 그 흐름은 위와 같은데요, 이를 순서에 따라 정리해보면, 

     1. 원하는 걸 상자에 담습니다.

     2. 서버에 해달라고 보냅니다.

     3. 서버는 확인하고 처리해드렸다고 합니다.

     4. 상자를 받아서 풀어봅니다.

 이와 같이 되는데요, 이를 함수로 나타내면, 

     1. SetInputValue : 내가 얻고 싶은 아이템을 넣습니다. ex) 종목코드, 계좌번호 등등...

     2. CommRqData : 아이템의 어떤 정보를 얻고 싶은지를 설정해서 보냅니다.

     3. OnReceiveTrData : 서버가 처리했다는 이벤트를 감지합니다.

     4. GetCommData : 이벤트를 감지한 다음, 원하는 정보를 꺼냅니다.

여기서 3번 이벤트 부분은 기존 함수와는 다른 방법으로 설정하게 되는데요 밑의 과정을 따라해볼까요?

-----------------------------------------------------------<참고 함수>-----------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


 우선, 프로그래밍을 하기 이전에, 전에 보았던 KOA Studio를 켜서 확인해볼께 있어요. <TRcode>, <함수>, <화면목록>, <동작방식>, 인데요. 서버한테 요청할 때 필요한 것들이에요. CommRqData(sRQName, sTrCode, nPrevNext, sScreenNo) 함수 인자에 각각

  sRQName = TrCode 옆에 있는 말

  sTrCode = 어떤 TrCode 인지?

  nPrevNext = 보통 0 으로 설정 (0:조회, 2: 연속)

  sScreenNo = 화면번호 (==> 영웅문의 화면 번호를 이야기함, 위의 그림에서 탭을 변경하여 확인가능.)

이런 식으로 들어갑니다. 각각의 인자들을 어디서 얻을 수 있는지 알아두세요!!


 아, 그리고 인터페이스를 조금 바꿧는데요, 이젠 다 하실수 있죠? 그런데 제가 지난번에 까먹고 말씀 못드렸는데, List_box에서 속성 - Sort 부분을 False로 바꿔주세요. True면 자동으로 오름차순으로 정리해준답니다. 그러면 안되잖아요 ㅎㅎ


 이제 이벤트 처리를 해줄꺼에요. 맨 처음 도형에서 보았을 떄 처럼, 우리가 서버에게 요청을 했을 떄 서버가 요청을 했는지 알 수 있으려면 위와 같이 이벤트처리를 해줘야 합니다. openAPI 부분에서 마우스 우클릭을 하면, 이벤트 처리기 추가... 가 나오는데요, 이걸 누르고 위와 같이 OnReceiveTrData를 선택해주고  추가 및 편집 버튼을 눌러주세요. 그러면, 자동적으로 이벤트 처리에 필요한 코드들을 추가해줍니다. 이는 stock_ver_0.1Dlg.cpp와 헤더 파일에서 볼 수 있어요.


 위의 버튼을 누를 때 서버에게 요청을 하려고 하는데요, 일단 우리는 알려고하는 단계니, 미리 정보를 넣어 놓고 보내는 연습을 해볼꼐요. 인자는 위의 코드와 처음 부분의 함수 설명을 보세용, 저는 삼성전자의 정보를 요청했습니다.


  이 부분은 주식 기본 정보를 요청한 후 이에 대한 이벤트가 발생했을 때 들어가지는 함수 부분입니다. 우리는 이 부분에서 정보를 확인할 거에요. 정보 확인은 우선, 내가 원했던 이벤트가 맞는지? 확인을 한 후, 얻고 싶은 정보에 대한 인덱스를 입력해줍니다. 그러면, 자동으로 파싱되어서 정보가 return 되어 집니다. 그런데, 여기서 받아 지는 정보 앞 뒤로 쓸데없는 공백이 함께 파싱이 되요. 그래서 CString 함수에 넣어서 Trim()을 해서 앞 뒤의 공백을 제거해주는 겁니다. 그 뒤 위처럼 출력하거나, 다른 곳에서 사용하시면 됩니당.


짠! 결과 화면입니다. 깔꼬롬하게 나오는 걸 확인할 수 있어요. 저거 1주만이라두 가지고 싶네요 ㅎㅎ...

여러분 앞으로도 계속 올릴 예정이니 서로 으쌰으쌰해요~ 화이팅!

ERwin 다운/사용법

------------------------------------------------------------------------------------------------------------------------------------------------------

 오늘 데이터 구조에 대해서 체계적으로 짜야된다고 아는 형님께서 귀띔해주셔서 ERwin 에 대해서 알아보았습니다. 그런데 이게 왜 필요한건지... 솔직히 아직 감이 안잡히는 것 같아요. 제 데이터 구조가 작아서 그런거 같은데, 아마 데이터 종류가 더 많아지고 크기도 커지면 그때서야 비로소 의미가 있을 것 같아요.

 실습해본거랑 사용법, 설치 사이트 올립니당. (설치사이트는 영어인데, 전 Trial 버전으로 깔았어요.)

* HTS의 데이터 구조


* 사용법

erwin_사용법-lachesys7.doc


* 다운 사이트 주소 (<-- 클릭)

 로그인 정보 확인하기

---------------------------------------------------------------------------------------------------------------------------------------------------------

 네! 안녕하세요. 오늘은 로그인도 했으니 로그인 정보를 확인해보는 시간을 가져보겠습니다.

참고로 제 블로그의 내용은 환델 님의 블로그를 보고 수정해보고 배워가는 형식으로 작성하고 있습니다!

저 분 블로그는 C#인데 전 C++이니까 코드가 살짝달라요. 어쨋든 로그인 정보를 확인해봅시다!

 우리는 이 함수를 통해서 로그인 정보를 받아올 수 있어요! 이런 정보는 모두 지지난 시간에 말씀드린 다운 받는 곳의 Guide 파일에 있답니다.

kiwoom_openapi_plus_devguide_ver_1.1.pdf

혹시 몰라서 첨부해드려요 ㅎㅎ

저기 BSTR은 visual C에서 사용하는 파일 형식으로 우리는 _T(String a) 과 같은 형식으로 쉽게 사용할 수 있어요. 있다가 예제를 보면 이해가 갈꺼에요.


 지난 시간과는 인터페이스가 많이 달라졌죠? 아마 저기 생긴 박스가 뭔지 궁금하실거에요.


 도구상자에서 빨간색 박스 안의 Box를 가져와서 편집해놓은거에요. 하얀색 박스가 List Box로 우리가 원하는 정보를 넣을수도, 뺄수도있어요. Group Box는 그냥 고정해서 쓸겁니다.


 우리가 하얀색 박스인 List Box에 무언가를 넣기 위해서는 객체로 선언해서 넣아야 하는데요, List Box 에 마우스 오른쪽 클릭을 하고 변수추가 버튼을 누르면 위에 같은 창이 떠요. 그러면 변수 이름부분에 이름을 쓰시고 마침을 눌러줍시다!


 버튼이 눌릴때 Login 정보를 업로드를 하도록 할꺼에요. 그러기 위해서는 Login_Update 버튼 쪽에 List_box스트링 추가 함수를 넣어야 겠죠? 

User_infor.AddString(theApp.stock.GetLoginInfo(_T("ACCOUNT_CNT")));

  - User_infor ==> List 박스의 변수 이름

  - User_infor.AddString() ==> List 박스에 스트링을 추가한다.

  - theApp.stock.GetLoginInfo ==> Login정보를 불러온다. 

  - _T("ACCOUNT_CNT") ==> 전체 계좌 개수를 반환한다.

     => 이부분에서 왜 _T()를 넣으는 건가 궁금하시는 분들이 계실꺼에요. 이건 String 속성을 편리하게 BSTR로 바꿔준답니다. 꿀팁이니까 기억해주세요!

이런 방식으로 모든 정보를 다 추가해봅시다.


  이제 실행해서... 로그인하고~ (로그인에 성공하면 로그인 창은 사라져요) Login_Update 버튼을 누르면...


자 그러면 완성입니다! 모두들 자신의 로그인 정보를 확인해보세요 ㅎㅎ 이젠 주식 정보를 받아오는 걸 해봐야겠네요!

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

(참조)

 List_box 함수 보기


로그인 창 띄우기

---------------------------------------------------------------------------------------------------------------------------------------------------------

안녕하세요! 오늘은 키움증권 API를 이용하여 로그인 창을 띄어보는 것까지 해볼거에요. 아직까지는 쉬운것 같습니다. 그럼 그림을 보면서 알아볼까요!

 우선, 저희는 C++기반의 MFC 를 사용할꺼잖아요? C++에 있는 MFC 응용 프로그램을 선택해줍시다.


 그 다음 나오는 창에서 꼭 대화 상자 기반으로 선택하셔야되요~


 여기까지 하셨으면 이런 창이 뜨겠죠?


 여기서 버튼을 한번 만들어 줄꺼에요. 왼쪽의 도구상자 탭에서 버튼을 창으로 드래그 앤 드롭 하시면 버튼이 생깁니다. 간단하죠??


  버튼을 누르시고 오른쪽 하단의 속성 탭을 누르시면, 속성을 변경할 수 있어요. 우리는 버튼 이름만 바꿀꺼니까 캡션 부분에서 Start로 바꿔봅시다.


  여기가 가장 중요한데요, 이제 필요한 두 가지 기반작업을 할거에요. 첫번째로는 API를 다운 받을 것이고, 두번쨰로는 키움증권의 Active X를 활성화 시킬거에요. 

 일단, 우리에게 필요한 API를 다운 받겠습니다. 저는 지난 시간에 말씀드렸던 사이트 에서 다운받을 건데요, 어렵지 않아요. 밑의 그림을 따라가 봅시다.


 여기서 C++을 사용하고 있는 샘플을 다운받아서 압축을 풀면


  내부에 khopenapictrl1.h, khopenapictrl1.cpp 이 두파일이 있어요 이걸 프로젝트로 복사해주세요. 그리고 복사한다음에 프로젝트에도 포함시켜야겠죠? cpp확장자는 소스에, h 확장자는 헤더 파일에 넣어주세요~


 헤더를 추가할 시간입니다. stdafx.h 에 키움증권에서 제공하는 헤더를 include 해줄까요? #include "khopenapictrl1.h"

 

 키움증권에서 제공하는 Active X를 넣어 봅시다. 대화상자에서 오른쪽클릭을하면, Active X 컨트롤 삽입 항목이 있는데, 이걸 누르고 위의 KHOpenAPI Control을 선택해 주세요


 위의 그림처럼 나오면 성공이에요. 


 API를 추가 해주었으니 이걸 사용할려면 API의 객체를 선언해주어야 해요. 위와 같이 선언해줄까요? 이름은 뭐 상관없어요.


 아까 Start 버튼을 더블 클릭하면 자동적으로 

void Cstock_examDlg::OnBnClickedButton1() 함수 쪽으로 이동하게 되는데요, 여기서 위와 같이 소스를 추가해주세요. CommConnect() 하는 함수가 로그인을 하게 하는 함수이구요, return 값은 0이면 성공, 음수이면 실패입니다.


 그 다음에는 Active X와 우리가 선언한 객체를 연결해줄거에요. DDX_Control을 통해서 이걸 연결해주면됩니다.

 

 이제 실행시키면 위와 같은 창이 뜰텐데요, 여기서 Start 버튼을 눌러볼까요??


  이렇게 로그인 창이 뜨는걸 볼수 있습니다!! ㅎㅎ 이제 거이 뭐 전 되게 신기합니다.


하지만 로그인 하려고하면 다음과 같은 오류같은게 뜨는데요, 이건 다음 시간에 해결해보도록하겠습니다... 아 어떻게 해결하는거지... ㅜㅜ


어쨋든 이렇게 한발자국씩 나가다보면 언젠간 나만의 HTS를 구축할수있겠죠?? 그때까지 화이팅 해봅시다!! 화이팅 ㅎㅎ

---------------------------------------------------------------------------------------------------------------------------------------------------------

(참고)

DDX_Control

MFC Class

------------------------------------------------------------------------------------------------------------------------------------------------------------------  * 버전 처리 오류 해결! - 2016-07-02

버전 처리 오류는 그냥 키움 번개가 업그레이드 됨에 따라서 생기는 오류? 인것 같아요.

키움 번개만 실행시켜서 버전업그레이드를 시켜준다음에 실행시키면 오류는 사라집니다!

유튜브 참고(<-- 클릭)하세용


키움증권 API 입문

---------------------------------------------------------------------------------------------------------------------------------------------------------

 어떻게 하면 빈둥대면서 돈을 벌수있을까..?? 그 답은 자동 투자 프로그램에 있지 않을까요? ㅋㅋ 어쨋든 1년 휴학을 하게 되면서 그전에 소홀했던 경영학과 공부와 앞으로 업으로 삼을 전자공학의 중간선 상에서 이 프로젝트를 진행하려고 합니다!

 우선 키움 증권 API를 기반으로 HTS를 만드려고 해요~ 이는 키움증권 홈페이지에서 회원 가입을 한뒤 받을 수 있어요.

https://www3.kiwoom.com/ (키움증권 홈페이지)

 회원 가입 후 밑의 탭을 보면 빨간색으로 쳐진 대가 있는데 저길 누르면...


 로드맵이 나오는데 밑의 로드맵에 따라서 설치를 진행하면 되요! 단, Step2에서는 키움 Open API+ 모듈을 설치하기 이전에 번개(HTS)를 먼저 다운 받아야 합니다. 안그러면 에러가 뜨네요. 그리고 마지막 Step 4까지 진행하면 일단은 우리의 목표의 반은 한겁니다. 시작이 반이래잖아요?

 



아 그리고 전 C/C++ 로 프로그래밍을 할거에요. 아직 언어 하나를 완벽히 다루지 못해서 이번 기회에 C++을 마스터 해야겠습니다.




 이제 다 설치를 하셨으면 KDA Studio를 켜보세요. 그럼 밑의 창이 나오는데, 빨간색으로 쳐진 <Open API 접속> 버튼을 눌러서 로그인을 하세요.



 그러면, 비어있던 창에 여러가지 항목이 생겨요. 우리가 주목해야할 탭은 바로 TR목록입니다. TR 목록 탭에서 여러 항목을 누르면 해당 내용을 추출할 수 있는 함수들을 보여주는데요, 종목정보 탭에서 본 종목코드를 우측 상단에 입력해 넣으면 어떻게 output이 작동하는 지도 볼수가 있어요.



 전 게임빌의 종목코드를 쳐보았는데요 저기 빨간색으로 쳐진 부분들이 변한 게 보이시죠?? 저렇게 함수가 어떻게 작용하는지 하나하나 볼수가 있답니다. ㅎㅎ 이제 시작하는 저에게는 신기하기도 하고 유용할 것 같네요.




 오늘은 일단 키움증권 API를 설치하고 어떤 함수들이 있는지 확인하였는데요, 내일 부터는 직접 C++코딩을 어떻게 해야하는지 MFC 기반으로 살펴보도록하겠습니다~ 오늘도 즐거운 하루 되세요!





VS2013에서 MBCS(Multi-Byte Character Set)로 설정된 MFC 프로젝트를 컴파일하면 다음과 같은 에러 발생한다.

 

error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for more information. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets 369 5 IOKF_Client

 

 

2013 부터는 MBCS용 MFC 라이브러리(DLL)가 제공되지 않는다.

디볼트인 유니코드를 사용 권장하기 때문... --;

 

 

아래 사이트에서 다운받고 설치하면 된다.

http://www.microsoft.com/ko-kr/download/details.aspx?id=40770


출처 : http://intra97.tistory.com/trackback/240

 오늘은 OpenCV에서 제공하는 ANN_MLP 함수에 대해서 알아보고자 한다. OpenCV의 버전은 2.4.12 버전이다. 

 MLP(다중 레이어 퍼샙트론)에 대한 설명은 나중에 기회가 된다면 설명하도록 하고 어떻게 함수가 작동하는지 살펴보자.

  ML에서 모든 뉴런은 학습 알고리즘에 영향을 받지 않는 활성 함수를 가지게 되는데, 맨처음 "알파와 베타값"을 설정하게 된다. 시그모이드 함수의 경우 (1,1)이 기본값이다.

1. 시그모이드 함수 : f(x)=\beta*(1-e^{-\alpha x})/(1+e^{-\alpha x})

2. 가우시안 함수 : f(x)=\beta e^{-\alpha x*x}


  훈련된 네트워크는 다음과 같이 작동한다.

1. 특징 벡터를 input으로 받는다. 벡터의 사이즈는 input layer의 값과 동일하다.

2. input의 값을 첫번째 hidden layer로 보낸다.

3. 가중치와 활성함수를 사용하여 hidden layer의 출력을 계산한다.

4. 출력을 다음 layer로 보내며 최종 output layer까지 이를 반복하여 계산한다.

  그러므로, network를 계산하기 위해서는, 모든 레이어의 가중치 값을 알아야 한다. 이때 가중치는 훈련 알고리즘에 의해서 계산된다. 훈련알고리즘은 training set(훈련데이터)를 받고, 입력 값(훈련데이터)이 최종 값(레이블)과 같도록 가중치를 조절한다. 

  더 큰 network 크기(hidden layer의 숫자와 크기)는 network가 좀더 유연하도록 한다. 

  ML은 다중 레이어 퍼셉트론을 훈련하는 두가지 알고리즘을 가지고 있다. 첫번째는 classical random sequential back-propagation algorithm 이고, 두번째는(기본값) bath RPROP algorithm이다. 해당 알고리즘에 대한 논문은 아까 사이트에서 확인하기 바란다.

  1. 생성함수 

 생성함수는 다음과 예와 같이 생성하면된다.

CvANN_MLP bpn(layer_size, CvANN_MLP::SIGMOID_SYM, 1, 1);

파라미터 설명

1. LayerSizes : 정수 벡터로써, input, hidden, output layer의 각각의 neurons 숫자를 의미

2. activateFunc : 활성함수 선택

3. fparam1 : 활성함수의 알파 값

4. fparam2 : 활성함수의 베타 값

이 함수를 통해 MLP network with the specified topology를 만들고 모든 neuron에 같은 활성함수를 할당한다.


2. 파라미터 생성


파라미터 생성은 위와 같이 한다. 다음은 예이다.

CvTermCriteria term = cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 5000, 0.001);

CvANN_MLP_TrainParams train_params = CvANN_MLP_TrainParams(term, CvANN_MLP_TrainParams::BACKPROP, 0.1, 0.1);

파라미터 설명 :

1. term_crit : 훈련 알고리즘의 종료 기준이다. 최대 반복 수 또는, 얼마나 많이 변화시킬 건지(훈련시 조정 값)를 정한다.

2. train_Method : back-propagation, RPROP 두가지 방식을 사용한다

3. param1 : RPROP에 대해서는 rp_dw0 // BACKPROP에 대해서는 bp_dw_scale

4. param2 : RPROP에 대해서는 rp_dw_min // BACKPROP에 대해서는 bp_moment_scale

3, 4번 파라미터에 대해서는 논문을 읽어야 하지만, 안읽었기에 간단히 설명하면,

* RPROP 의 파라미터

rp_dw0 : 최초의 가중치 값

rp_dw_plus : 가중치 조정시 얼마나 더할건지?

rp_dw_minus : 가중치 조정시 얼마나 뺄건지?

rp_dw_min : 가중치의 최소 한계

rp_dw_max : 가중치의 최대 한계

Back-Propagation의 파라미터

bp_dw_scale : 가중치의 세기, 추천 값은 0.1

bp_moment_scale : 잘모르겟는데 추천값은 0.1 (0~1사이의 값을 가짐)


3. 훈련





----------------------------------------------------------------------------

아직 미완성된 글입니다. 오류가 있을 수 있어요. 아니 분명 있을 거에요

'프로그래밍 > OpenCV' 카테고리의 다른 글

Mnist with OpenCV (1)  (7) 2016.04.29


Mnist 시작하기 (1)

 C++과 OpenCV를 활용하여 Mnist를 하려고 하니, 자료 찾기가 너무 힘들어서 공유하고자 만들었다.

우선, Mnist의 데이터 셋은 Yann LeCun 사이트에 있다. 

해당 사이트에서 트레이닝할 이미지인 train-images.idx3-ubyte 파일과 해당 레이블인 train-labels.idx1-ubyte 파일을 받을 수 있다. 

테스트 파일도 있지만 그건 나중에 하기로 하자.


train-images.idx3-ubyte 파일의 구조는 다음과 같다.

: Unsigned char, 28 x 28 매트릭스

 8

 1

 0

 234

96 

시작!

시작! 

앞의 (unsigned char) 8칸이 헤더이며, 그 이후부터는 데이터가 시작된다. 데이터의 내용은 다음과 같다. 

 28 x 28 매트릭스인 것을 감안하여 약간 비슷하게 출력 해보았는데 실제로 제일 위의 글씨와 동일한 순서로 나오는 것을 확인 할 수 있다. 

 소스에 의하면, arr[i][j] : i는 몇번째 숫자 혹은 알파벳 인지? j는 해당 숫자 혹은 알파벳의 픽셀값 이다.

  

train-labels.idx1-ubyte 파일 구조는 다음과 같다.

 8

 1

 0

 234

96 

5

0

 사실 위의 이미지의 파일 구조와 동일하고, 시작 되는 부분부터, 5, 0, 4, 1, 9 와 같은 해당 이미지에 대한 레이블이 등장한다.


 이를 가지고 특징 추출 후에 서로 매칭시켜서 나중에 CNN이나, SVM을 통해 학습 시키면 될 것 같다.


소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
 
using namespace std;
int ReverseInt(int i);
void ReadMNIST(int NumberOfImages, int DataOfAnImage, vector<vector<double>> &arr);
void ReadMNISTLabel(vector<unsigned char> &arr);
 
int main()
{
    vector<vector<double>> ai;
    vector<unsigned char> al;
    ReadMNIST(10000784, ai);                // 훈련데이터를 불러옴
    ReadMNISTLabel(al);                        // 레이블을 읽어 옴
 
    return 0;
}
 
 
int ReverseInt(int i)
{
    unsigned char ch1, ch2, ch3, ch4;
    ch1 = i & 255;
    ch2 = (i >> 8) & 255;
    ch3 = (i >> 16) & 255;
    ch4 = (i >> 24) & 255;
    return((int)ch1 << 24+ ((int)ch2 << 16+ ((int)ch3 << 8+ ch4;
}
void ReadMNIST(int NumberOfImages, int DataOfAnImage, vector<vector<double>> &arr)   // MNIST데이터를 읽어온다.
{
    arr.resize(NumberOfImages, vector<double>(DataOfAnImage));
    ifstream file("train-images.idx3-ubyte", ios::binary);
    if (file.is_open())
    {
        int magic_number = 0;
        int number_of_images = 0;
        int n_rows = 0;
        int n_cols = 0;
 
        file.read((char*)&magic_number, sizeof(magic_number));
        magic_number = ReverseInt(magic_number);
        file.read((char*)&number_of_images, sizeof(number_of_images));
        number_of_images = ReverseInt(number_of_images);
        file.read((char*)&n_rows, sizeof(n_rows));
        n_rows = ReverseInt(n_rows);
        file.read((char*)&n_cols, sizeof(n_cols));
        n_cols = ReverseInt(n_cols);
 
        char inputstring[1000];
        for (int i = 0; i<10000++i)
        {
            for (int r = 0; r<n_rows; ++r)
            {
                for (int c = 0; c<n_cols; ++c)
                {
                    unsigned char temp = 0;
                    file.read((char*)&temp, sizeof(temp));
                    arr[i][(n_rows*r) + c] = (double)temp;
                }
            }
        }
    }
}
 
void ReadMNISTLabel(vector<unsigned char> &arr){                // 레이블을 읽어온다.
    ifstream file("train-labels.idx1-ubyte");
    for (int i = 0; i<10000++i)
    {
        unsigned char temp = 0;
        file.read((char*)&temp, sizeof(temp));
        if (i > 7)
            arr.push_back((unsigned char)temp);
 
    }
}
 
cs



참고 논문 및 사이트

1. Handwritten digits recognition using OpenCV, Vincent Neiger (2015)

2. https://compvisionlab.wordpress.com/2014/01/01/c-code-for-reading-mnist-data-set/ 

'프로그래밍 > OpenCV' 카테고리의 다른 글

Mnist with OpenCV (2)  (0) 2016.04.30

+ Recent posts