Mac OS X에 HTK 설치하기

from 개발 2009/09/26 12:55
따지고 보면 간단한거고 헤맬게 전혀 없는 부분이지만..

알수 없는 이유로 인해 나는 하루종일 뻘짓만 하면서 실패했다.

나 같은 사람이 다시 안생기기를 바라며 포스팅을 한다..ㅠ


HTK는 Hidden Markov Model Toolkit의 약자로서 주로 음성인식에 사용되는 툴킷이다.

일단 설치를 하려면 파일을 다운받아야 되는데 http://htk.eng.cam.ac.uk/ 여기로 가면 다운을 받을수 있다.

간단한 가입과 함께 다운을 받을수 있는데 Linux, Unix, Mac OS 용 버전과 Windows용 두가지가 있다.

당연히 앞의 것을 받고 원하는 폴더에 압축을 푼다.

압축까지 풀었다면 OK, 이제 시작!

사용자 삽입 이미지
압축을 제대로 풀었다면 그림처럼 htk라는 폴더가 나온다.

이제는 터미널(terminal)을 실행시켜 보자.
사용자 삽입 이미지
터미널을 실행하면 위의 그림처럼 나온다. cd 명령을 이용하여 아까 압축을 풀어놓은 htk폴더로 이동한다.

ls 명령을 사용하면 현재 있는 폴더에서 하위폴더를 볼수 있으니까 적절히 이용해 가면서 찾아 들어가면 된다.
사용자 삽입 이미지
htk 폴더로 들어와서 ls를 쳐보면 위의 그림처럼 나오게 된다.

여기서 ./configure --prefix=/usr/local 이라고 적는다.

htk 사이트에서는 /usr/local 이 아니라 /tmp 로 하라고 되어있었는데.. 이것때문에 하루종일 고생했다..ㅠ

사용자 삽입 이미지
명령어가 정확하게 적혔으면 위와 같은 글들이 나온다. 이제 여기서 make all 이라고 적는다.
사용자 삽입 이미지
뭔가 또 줄줄이 실행된다. 약간만 기다리면 컴파일이 완료된다.

그다음 해야 될 부분이 make install 이라는 명령어를 적어 줘야 되는데 여기서 그냥 적으면 이런 메세지가

나올것이다.
사용자 삽입 이미지
에러가 잔뜩 뜬다. 사용자 권한 문제인데 이걸 해결하려면 su 명령어를 사용해서 superuser모드로 실행해야된다.
사용자 삽입 이미지
su 를 치고 패스워드를 입력해야 되는데 패스워드는 사용자 계정 패스워드 또는, 그냥 엔터 치면 된다.

참고로 superuser 패스워드 변경하는 방법은  sudo passwd 를 치고 패스워드를 입력하면 된다.

사용자 삽입 이미지
su 모드에서 make install 명령어를 실행하고 나면 위의 그림처럼 나온다. 완료 된것이다.

htk가 정상적으로 동작 하는지를 알아보려면 htk사이트에 있는 sample파일을 다운받아서 HTKDemo를 실행

해보면 된다.

적절한 폴더에 샘플 파일 압축을 풀고

cd HTKDemo
mkdir -p hmms/{tmp,hmm.{0,1,2,3}} proto acc test
perl runDemo configs/monPlainM1S1.dcf

를 차례대로 적으면

사용자 삽입 이미지
결과가 나온다.

이제 HTK는 설치되었으니, 본격적으로 인식기를 구현하기만 하면 된다.
2009/09/26 12:55 2009/09/26 12:55

[감격]HTK 설치했다..ㅠ

from 일기 2009/09/26 01:01
하루종일 뻘짓했는데..ㅠㅠㅠ

이렇게 간단하게 되다니..ㅠㅠ

나의 뻘짓이 또다른 누군가가 반복하지 않도록..

방법을 남겨놔야겠다.. 일단 밤이 늦었으니 내일 하기로 하고..



아.. 눈물 날려그라네 또
2009/09/26 01:01 2009/09/26 01:01
Tag //
정말 감격적인 날이다..

아침에 처음 봤던 뉴스가 방통위에서 국내 아이폰 출시를 허용했다는 기사였다.

그동안 그렇게 원하던 기사였는데 막상 현실로 다가오니 기쁘기도 하지만 뭔가 기분이 신기하다.

지금까지 먹어왔던 출시 떡밥이 없어지게 되어서 그런건가..?


아무튼 아이폰이 본격적으로 출시됨에 따라 여러가지 변화들을 기대해본다. (나만의 기대일지 모르지만)


1.국산 폰들의 스펙 향상

지금까지 국산 폰의 스펙이 안 좋다는게 아니라, 항상 고질적으로 해외에 수출하는 제품보다 한단계 아래로

스펙 다운해서 출시했던 X성, Xg폰들이 이제는 더 이상 그러지 못하고 당당하게 제 스펙대로 아이폰과 경쟁하기를

원한다. 사실 스펙으로 따지자면 아이폰이 그렇게 좋은 스펙은 아니지만, 안좋은 스펙으로도 할수있는 수많은 기능과

어플들. 그리고 아이폰의 터치감을 따라오려면 국산폰들 고생 꽤나 하겠다.


2. 고가폰들은 이제 안녕

휴대폰이 20~30만원 하는것 까지는 이해가 간다. 근데 60만원이 넘고 100만원이 넘는 그런 폰은 도대체 왜 나오는걸까?

분명 나와도 좋다고 사는 사람들이 있으니까 그렇겠지?? 아이폰이 20만원대로 출시를 하면 당장에 고가폰들이

타격을 받겠지. 가격도 비싸. 어플들은 아이폰한테 안되고. 방법은 별수 있나? 가격을 내려야지..


3. 저렴해지는 데이터 요금제

솔직히 말하면 지금의 데이터 요금제는 횡포에 가깝다. 무슨놈의 정보이용료가 배보다 배꼽이 더큰것처럼 받아먹는지..

23일 아이폰 출시결정을 하면서 방통위에서 또 발표한것은 앞으로 데이터요금이 50%이상 저렴해진다고 한다.

이게 아이폰 출시와 연관이 있는지 아닌지는 확신못하지만 내가 느끼는 느낌으로는 그렇다.





벌써부터 다른 휴대폰 제조 회사들은 불평을 부리고 있다. 왜 애플에게만 혜택을 주냐고. 차별대우 아니냐고.

국내 회사들.. 휴대폰 잘 만드는건 인정하지만..

쫌 더 솔직해지자..


진짜 제대로 만들었니? 너네들한테 소비자들은 그냥 봉 아니었니?

폰에 들어가는 중요한 부품 모듈 이거 딱 만들어 놓고, 휴대폰 껍데기 디자인만 바꿔가면서 만들었잖아?

솔직히 말해봐. 그저 그런 폰 만들어 놓고 대충 인기있는 연예인, 가수 데리고 와서 광고 때리면 사람들 잘 사잖아?

대충 만들어도 사람들이 많이 사니까, 그러니까 또 대충 만들고. 그러면서 해외 수출용은 스펙 쩔고.


이제 쫌 이런 모습 덜 보게 되는가 하고 내심 기대한다..

이제 쫌더 당당한 모습으로 제대로 경쟁하자.


생각해보자.. 국산 폰들은 수십 종류가 넘지? 아이폰은 어떤가? 한 종류다. 3GS랑 3G랑 다르다고 치면 2종류고.

이런 대결에서 만약 진다거나, 쩔쩔 맨다면.. 그건 누구한테 문제가 있는걸까?

17대 1로 싸웠는데 17명이 얻어터진다.. 17명이 병신인거 아냐?

국산 폰들이 지금까지 진짜 정정당당했다면, 아이폰 출시에 불평해서도 안되고 긴장할 필요도 없을것이다.
2009/09/23 23:56 2009/09/23 23:56
Tag //

http://theappleblog.com/live/


http://live.gizmodo.com/



지금 둘 다 켜놓고 기다리고 있는중.

한국시간으로 새벽 2시에 시작!

앞으로 50분 남았음.

 
이사람 말로는 뱃지 종류는 3가지가 있다고 하네요. Media, Guest, Special Guest





나도 공대생이지만 가끔씩 소름돋을정도로 신기할때가 있다..

지금 지구 반대편에서 일어나고 있는 일들을 이렇게 실시간으로 (약간 시간차이가 있겠지만)

볼수 있다는게.. 정말 놀랍다..
2009/09/10 01:11 2009/09/10 01:11
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>

void ErrorHandling(char *message);

int main(int argc, char* argv[])
{
WSADATA wsaData;
SOCKET hSocket;
char message[30];
int strLen;
SOCKADDR_IN servAddr;

if (argc!=3){
printf("Usage : %s <IP><port> \n", argv[0]);
exit(1);
}

//Load WinSocket 2.2 DLL
if(WSAStartup(MAKEWORD(2,2), &wsaData) !=0)
ErrorHandling ("WSAStartup() error!");

//서버 접속을 위한 소켓 생성
hSocket = socket(PF_INET, SOCK_STREAM, 0);
if(hSocket == INVALID_SOCKET)
ErrorHandling ("hSocketet() error");

memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(argv[1]);
servAddr.sin_port = htons(atoi(argv[2]));

if(connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr))==SOCKET_ERROR)
ErrorHandling("connect() error!");
//데이터 수신
strLen = recv(hSocket, message, sizeof(message)-1,0);
if(strLen == -1)
ErrorHandling("read() error!");
message[strLen] = 0;
printf("Message from server: %s \n", message);

closesocket(hSocket); //연결 종료
WSACleanup();
return 0;
}

void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
2009/09/09 11:13 2009/09/09 11:13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>

void ErrorHandling(char *message);

int main(int argc, char* argv[])
{
WSADATA wsaData;
SOCKET hServSock;
SOCKET hClntSock;
SOCKADDR_IN servAddr;
SOCKADDR_IN clntAddr;
int szClntAddr;
char message[] = "Hello World!\n";

if (argc!=2){
printf("Usage : %s <port> \n", argv[0]);
exit(1);
}

if(WSAStartup(MAKEWORD(2,2), &wsaData) !=0)
ErrorHandling ("WSAStartup() error!");

hServSock = socket(PF_INET, SOCK_STREAM, 0); //서버 소켓생성
if(hServSock == INVALID_SOCKET)
ErrorHandling ("socket() error");

memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(atoi(argv[1]));

        //소켓에 주소 할당
if(bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr)) == SOCKET_ERROR)
ErrorHandling("bind() error");

if(listen(hServSock,5) == SOCKET_ERROR) //연결 요청 대기 상태
ErrorHandling("listen() error");

szClntAddr = sizeof(clntAddr);
hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr); // 연결 요청 수락
if(hClntSock == INVALID_SOCKET)
ErrorHandling("accept() error");

send(hClntSock, message, sizeof(message),0); // 데이터 전송

closesocket(hClntSock); //연결 종료
WSACleanup();
return 0;
}

void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
2009/09/09 11:11 2009/09/09 11:11