결론부터 말하자면,

 

하지 않는게 좋다. 성능이 안나온다.

 

그럼에도 하고싶다 하는 사람들은 아래대로 따라하면 될 것이다.

 

준비물

  1. 젯슨나노
  2. 인터넷 가능한 환경

 

먼저 난 vi 에디터를 사용할 줄 모르기에 nano 에디터를 설치해주었다.

sudo apt update
sudo apt upgrade
sudo apt-get install nano

이제 ipv6를 꺼주도록 한다.

sudo nano /etc/sysctl.conf

위의 파일에 아래와 같이 작성해주어야한다.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

호스트 이름 액세스를 활성화하기 위해 설치해주어야 한다.

sudo apt install avahi-daemon

이제 위의 작업을 적용하기 위해 재부팅을 해준다.

sudo shutdown -r now

이제 채굴 프로그램을 설치해볼 것이다.

채굴 프로그램은 ccminer 라는 프로그램이다.

sudo apt-get install git

git을 설치해준 다음 ccminer 를 다운받는다.

git clone -b linux https://github.com/tpruvot/ccminer
cd ccminer
./build.sh

만약 설치가 완료되었다면 아래의 커맨드가 잘 작동해줄 것이다.

./ccminer --version

작성일 기준 버전은 2.3.2 이다.

 

설치가 완료되었으면 실행을 시켜줘야하는데, 그러려면 채굴 시 들어올 지갑과 마이닝 풀이 필요하다.

 

작성자는 nicehash 라는 사이트를 이용했다.

https://www.nicehash.com/

 

NiceHash - Leading Cryptocurrency Platform for Mining and Trading

Latest News Read about all the latest news from NiceHash

www.nicehash.com

Get Start 버튼을 누르면 회원가입을 하게 된다.

 

회원 가입 후 상단의 Mining을 누르고 Mining address 를 누르면 채굴 시 들어올 지갑의 주소를 볼 수 있다.

 

남은건 마이닝풀의 정보인데, Mining을 누른 현재 화면에서, 오른쪽에 Download Miner or Add Asic 버튼을 누르고

 

Stratum generator 를 클릭하고, 사용할 알고리즘(select algorithm)과 서버 위치(select location)을 설정해주면

 

마이닝 풀의 링크가 보일것이다.

 

작성자는 SHA256과 USA-east 를 선택했다.

 

그러면 이제 모든 준비는 끝났다.

 

이제 ccminer 를 실행시킬것이다.

./ccminer -a sha256d -o stratum+tcp://sha256.usa-west.nicehash.com:3334 -u 3Hr2sK6pNCF3nQDDSK71uWawLndgLqgjAY
./ccminer -a sha256d -o 마이닝풀 -u 지갑주소

위의 코드는 실행코드고, 아래코드는 설명코드이다.

 

-a 옵션은 어떠한 것을 채굴할 것인가 인데, 비트코인일 경우 sha256d이다.

 

여러가지 그 외로 채굴하고싶다면, --help 옵션을 넣어서 확인 할 수 있다.

 

3일동안 실행시킨 후 확인 했을때 jetson nano 환경에선

그렇다. 캐지지 않는다.

 

안하는것을 추천한다.

Posted by 서융
:

전편에 이어서 카드게임을 만들어 볼거에요.

 

일단 적용할 블랙잭의 룰을 생각해봅시다.

 

  • 21 이상이면 버스트
  • J, Q, K 카드는 10
  • A 카드는 1
  • 합이 더 크면 승

전 위와 같은 룰로 제작을 해 볼거에요.

//코인 부족 체크
if (coin < 10)
{
	if (AskRegame())
	{
		reGame = true;
		return false;
	}
	return false;
}

먼저 낙장불입을 막아줄게요.

//카드 부족 체크
if (Remain <= 0)
{
	if (AskRegame())
		reGame = true;
	return false;
}

게임할 때 카드가 부족하면 안되겠죠?

printf("Your Bet Coin : ");
scanf_s("%d", &m_betCoin);
if (m_betCoin < 0)
	m_betCoin = 0;

이제 베팅 부분인데, 아래에 if문은 만약 마이너스 값을 입력하는 바보같은 경우를 미리 차단해둔 거에요.

m_die = true;
coin -= (m_betCoin + 1);

혹시 다이를 선택하는 경우도 있으니 미리 체크해둡니다.

bool Cardcompare(int temp[5])
{
}

카드를 비교할 함수를 만들어줍니다.

 

이제 남은건 카드의 비교겠져?

int m_temp[5];
for (int i = 0; i < 5; i++)
{
	m_temp[i] = temp[i] % 13 + 1;
	if (m_temp[i] == 1)
		m_temp[i] = 10;
	if (m_temp[i] == 13)
		m_temp[i] = 10;
	if (m_temp[i] == 12)
		m_temp[i] = 10;
}

카드가 총 52장으로 모양별로 13장씩 4모양이니까 13으로 나머지계산을 한 후 +1을 해줍니다.

 

13(K)을 13으로 나눌 경우 0이 되니까 그 부분과 Q, J 카드도 10으로 처리해줍니다.

for (int i = 0; i < 3; i++)
{
	if (temp[i] == -1)
	{
	}
	else
	{
		m_psum += m_temp[i];
	}
}

카드를 뽑을때 -1로 초기화해둔 temp 의 배열을 바꿔주었기 때문에 뽑지 않았을 경우 건너뛰도록 해줍니다.

for (int i = 3; i < 5; i++)
{
	m_dsum += m_temp[i];
}

딜러는 간단하게 두장만 합쳐줍니다.

//버스트 체크
bool m_pbust = false, m_dbust = false;
if (m_psum > 21)
	m_pbust = true;

if (m_dsum > 21)
	m_dbust = true;
if (m_dsum < 15)
	m_dbust = true;
	
if (m_dbust)
	return true;
if (m_pbust)
	return false;

카드 숫자 합이 21을 넘어가게 되었을 때, 혹은 딜러가 15보다 낮을때 버스트인지 체크해줍니다.

//합 숫자 비교
bool win = false;
if (m_psum >= m_dsum)
	win = true;
else
	win = false;

return win;

이제 양쪽이 버스트가 아닐때 승리처리를 해 준 후 리턴을 해줍니다.

//카드 비교하기
if (!m_die)
{
	if (Cardcompare(temp))
	{
		coin += (m_betCoin + 1);
	}
	else
	{
		coin -= (m_betCoin + 1);
	}
}

마지막으로 승리시 배팅시만큼의 금액을, 패배시 배팅 금액을 더하거나 빼줍니다.

 

전체 코드는 아래 압축파일에 있습니다.

 

CardGame.zip
0.00MB

'프로그래밍 > C, C++ ' 카테고리의 다른 글

C,C++ 응용 - 콘솔 카드게임 만들기(전편)  (0) 2020.12.02
C, C++ 기초 - 생성자, 소멸자  (0) 2020.05.06
C,C++ 기초 - 클래스  (0) 2020.05.06
C, C++ 기초 - 포인터  (0) 2020.04.20
C, C++ 기초 - 함수  (0) 2019.08.25
Posted by 서융
:

오랜만에 다시 왔네요.

 

이번에 만들 카드 게임은 다들 한번쯤은 해보셨을 블랙잭을 만들어볼거에요.

 

필요로하는 헤더는 이렇게 되겠습니다.

#include <iostream>
#include <time.h>
#include <stdlib.h>

그리고 카드는 조커를 제외하고 52장이므로, 카드 갯수를 선언해줍니다.

#define CARD_COUNT	52

또한 남은 카드도 글로벌로 선언해줍니다.

int Remain = CARD_COUNT;

이제 남은 필요한 변수들을 생각해봅시다.

 

카드의 문양과 숫자를 지정해줄 문자열변수, 무슨 카드가 뽑혔는지 알려줄 정수형 변수, 코인, 다시할건지 물어볼 bool형 변수 이렇게 4개가 주로 사용될 변수겠죠?

 

그러면 이제 그 변수들을 선언을 해줍시다.

const char* m_card[CARD_COUNT] = {	"♠1", "♠2", "♠3", "♠4", "♠5", "♠6", "♠7", "♠8", "♠9", "♠10", "♠11", "♠12", "♠13",
					"◆1", "◆2", "◆3", "◆4", "◆5", "◆6", "◆7", "◆8", "◆9", "◆10", "◆11", "◆12", "◆13",
					"♥1", "♥2", "♥3", "♥4", "♥5", "♥6", "♥7", "♥8", "♥9", "♥10", "♥11", "♥12", "♥13", 
					"♣1", "♣2", "♣3", "♣4", "♣5", "♣6", "♣7", "♣8", "♣9", "♣10", "♣11", "♣12", "♣13"};
int m_index[CARD_COUNT];
int m_coin = 0; 
bool m_reGame = true;

이제 카드 섞기와 코인 입력 등 초기화 부분의 함수를 만들어 볼겁니다.

void InitGame(int index[CARD_COUNT], int &coin, bool &reGame)

함수의 인수부터 설명하자면, 왼쪽부터 카드 체크용 변수, 코인값, 다시 게임할지 물어봐주는 변수입니다.

for (int i = 0; i < CARD_COUNT; i++)
{
	index[i] = i;
}

먼저 카드를 처음부터 정렬해줍니다.

srand(time(NULL));
int temp;
int rn;
for (int i = 0; i < CARD_COUNT - 1; i++)
{
	rn = rand() % (CARD_COUNT - 1 - i) + i;
	temp = index[i];
	index[i] = index[rn];
	index[rn] = temp;
}

그 후 카드를 섞어줍시다. 이러면 초기화는 끝났습니다.

 

그러면 이제 인게임을 만들차례가 됬죠?

int temp[4];
for (int i = 0; i < 4; i++)
{
	temp[i] = rand() % CARD_COUNT;
	for (int j = 0; j < i; j++)
	{
		if (temp[i] == temp[j])
		{
			i--;
			break;
		}
	}
	if (index[temp[i]] == -1)
		i--;
}
for (int i = 0; i < 4; i++)
{
	index[temp[i]] = -1;
}

Remain -= 4;

카드를 이제 딜러(CPU)와 플레이어꺼 카드 총 4장을 뽑아야 하는데 카드가 중복이 되면 안되겠죠?

 

그래서 그 부분의 예외처리하는 부분과 남은 카드장수를 체크하는 부분의 코드입니다.

 

남은 코드와 내용은 다음주에 이어서 업로드 됩니다.

 

남은 부분은 블랙잭의 규칙과 배팅, 다시할지 여부가 남았습니다. 다음주에 뵈요

'프로그래밍 > C, C++ ' 카테고리의 다른 글

C,C++ 응용 - 콘솔 카드게임 만들기(후편)  (0) 2020.12.07
C, C++ 기초 - 생성자, 소멸자  (0) 2020.05.06
C,C++ 기초 - 클래스  (0) 2020.05.06
C, C++ 기초 - 포인터  (0) 2020.04.20
C, C++ 기초 - 함수  (0) 2019.08.25
Posted by 서융
:

최근 인공지능이 발전하고 있죠?

 

그 인공지능 중에서 제가 이번에 다룰 내용은 사람의 목소리를 흉내내는 Voice Cloning 이라는 기술이에요.

 

그리고 이 기술이 아직 한국어로 많이 퍼져있지가 않은거같아요.

 

Voice Cloning이란?

 

다른 이름으론 DeepVoice라고도 불리며, 사람의 목소리와 말투를 기계가 학습해서 그 목소리를 기반으로 어떠한 글을 읽어주는 기술이에요.

 

비슷한 프로그램의 예시로는 보이스로이드, 보컬로이드도 있죠.

 

제가 참고로 한 사이트는 https://github.com/CorentinJ/Real-Time-Voice-Cloning 이에요.

 

설치

 

1. Anaconda 다운로드

https://www.anaconda.com/products/individual

 

Anaconda | Individual Edition

Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

위의 링크에서 자신의 운영체제에 맞는 아나콘다를 다운받습니다.

 

저는 윈도우 64비트니까 64비트로 다운했어요.

 

2. 깃허브 다운로드

https://github.com/CorentinJ/Real-Time-Voice-Cloning

 

CorentinJ/Real-Time-Voice-Cloning

Clone a voice in 5 seconds to generate arbitrary speech in real-time - CorentinJ/Real-Time-Voice-Cloning

github.com

1번을 기다리면서 위의 링크에서 Download Zip을 눌러서 압축파일로 코드를 내려받습니다.

 

그리고 깃허브 사이트에서 약간 내리면 pretrained models도 다운합시다.

 

3. 1번과 2번이 다 된 후

 

"시작" 버튼을 누르시면 Anaconda Prompt 라는 프로그램이 새로 생겼을거에요.

 

실행시키면 명령프롬프트와 비슷한 창이 뜨죠?

 

그 창에 지금부터 명령어를 칠 거에요.

 

3-1. conda create -n VoiceTest python=3.6

 

위 명령어를 설명하자면, VoiceTest라는 이름의 가상 머신을 파이썬 3.6버전으로 만들겠다. 라는 뜻이에요.

 

3-2. conda activate VoiceTest

 

말 그대로 VoiceTest 라는 가상머신을 활성화 시킨다는 명령어에요.

 

3-3. conda install -c menpo ffmpeg

 

이젠 설치하는 명령어인데, menpo라는 채널에서 ffmpeg 를 설치한다는 뜻이에요.

 

3-4. https://pytorch.org/get-started/locally/

 

PyTorch

An open source deep learning platform that provides a seamless path from research prototyping to production deployment.

pytorch.org

이제 위 사이트에서 pytorch라는것을 다운로드 해줘야 하는데, 버전을 설정하는 방법을 설명하자면,

pytorch build : pytorch 버전

your os : 사용중인 운영체제

package : 다운할 때 사용할 패키지 언어 (지금은 conda)

language : 프로그래밍 언어 (지금은 python)

cuda : 사용중인 cuda 버전

 

자신의 현재 상황에 따라 설정 후 나오는 명령어를 복사하고, anaconda prompt에 붙여넣기 하시면 됩니다.

 

ex) 위의 상황에선 conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch 입니다.

 

3-4-1. cuda 버전 확인법

 

윈도우일 경우, 바탕화면에 우클릭을 하여 nvidia 제어판을 들어갑니다.

 

그 후 왼쪽 하단에 시스템 정보 버튼을 클릭하신 후, 구성요소에  NVCUDA.DLL 의 제품 이름 부분을 보시면 됩니다.

 

3-5. pip install -r requirements.txt

 

이번 명령어는 치기 전에 디렉토리 경로를 이동해줘야 합니다.

 

아까 처음에 깃허브에서 다운했던 파일의 압축 해제한 후 폴더 내부로 경로를 변경해야 하는데 그 명령어는 리눅스와 동일합니다.

 

cd C:\경로 를 먼저 해 주셔야 제대로 작동합니다.

 

실행

 

이제 설치는 다 끝났습니다.

 

기나긴 설치 후 이제 실행만 남았는데, 실행 명령어는 단 한줄입니다.

 

python demo_toolbox.py

 

3-5에 들어간 경로 내에서 위의 명령어를 실행시키면 실행이 됩니다.

 

간단한 UI 설명을 하자면, Record(녹음) Browse(불러오기) synthesize and vocode(합성 및 실행) Export(추출)만 아셔도 될 것 같습니다.

 

녹음은 말 그대로 마이크로 바로 음성을 녹음할 수 있는것이고,

 

불러오기는 음성파일을 불러와서 학습을 할 수 있는 기능입니다.

 

우측 상단의 텍스트란에는 실행시 인공지능이 할 말을 적는 칸입니다.

 

이상 자신만의 tts(text to speach) 설치 및 실행법이었습니다.

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

젯슨나노에서 채굴기  (0) 2021.07.04
Posted by 서융
:

저번시간엔 클래스를 했었죠?

 

이번엔 바로 이어지는 생성자 소멸자를 하도록 해볼게요.

 

먼저 클래스를 사용하고자 하는 곳에 클래스의 헤더 파일을 인클루드(include)해줍니다.

 

그리고 포인터 변수들을 선언하듯 선언을 해줍니다.

 

포인터 변수는 delete라는 함수를 이용해서 반드시 지워야 합니다.

 

왜냐하면 그 장소를 계속 쓰다보니 다른 변수가 있을 자리가 줄어듭니다.

 

그게 계속 쌓이다 보면 렉이 걸리게 되고 게임도 느려집니다.

 

블루스크린도 볼수있다고 해요.

 

그리 해서 간단하게 클래스를 선언하고 지우는건 이렇게 하시면 됩니다.

 

생성자, 소멸자란?

생성자는 말 그대로 생성할때, 소멸자는 말 그대로 소멸할때 실행되는 함수입니다.

 

생성자가 실행되는 정확한 시점은 다른 곳에서 클래스를 선언했을때 실행됩니다.

 

소멸자는 delete 함수를 이용해서 클래스를 지웠을 때 실행되게 됩니다.

 

 

생성자와 소멸자에 이렇게 입력 후 F5키를 누르시면,

 

이렇게 실행이 됩니다.

 

다음번 부터는 실제 게임을 제작하는걸 한번 해보도록 할게요.

 

TstoryTuto.zip
0.00MB

Posted by 서융
:

이번엔 비주얼 스튜디오 환경에서 클래스 만드는 법을 알아볼거에요.

 

먼저 클래스란 무엇이냐?

 

학교에서 생각하면 학급이에요. 즉, 몇학년 몇반 이런 것들이 똑같이 적용됩니다.

 

몇학년 몇반이 클래스 이름이고, 학생들이 클래스 내의 변수, 학생들이 뭉쳐서 무언가를 하는것, 혹은 학생들의 집합이 함수입니다.

 

 

기본은 저런 형식으로 되어있지만, 만들지 못하면 꽝이겠죠.

 

우측에 솔루션 탐색기를 보시면 이렇게 되어있죠?

 

여기에서 아무 폴더나 우클릭 하시고 추가->클래스 를 클릭하시면

이런 창이 뜨게 돼요.

 

여기에서 클래스 속성을 설정 한 후 확인을 눌러주시면 클래스가 알아서 생성이 됩니다.

 

클래스 생성은 여기까지 하도록 하겠습니다.

'프로그래밍 > C, C++ ' 카테고리의 다른 글

C,C++ 응용 - 콘솔 카드게임 만들기(전편)  (0) 2020.12.02
C, C++ 기초 - 생성자, 소멸자  (0) 2020.05.06
C, C++ 기초 - 포인터  (0) 2020.04.20
C, C++ 기초 - 함수  (0) 2019.08.25
C, C++ 응용 - for문 별그리기  (0) 2019.05.21
Posted by 서융
: