2014-02-11 2 views
11

저는 Intel Perceptual Computing SDK 음성 인식 모듈을 사용하고 있습니다. SDK 샘플은 Microsoft Visual Studio 2012 Professional을 사용하여 받아쓰기를 인식하고 음성 입력이 처리 된 후에 콘솔 창에이를 인쇄합니다. 콘솔 창에 출력 된 내용을 복사하여 .txt 파일에 기록하면됩니다. 나는 일반적인 방법을 따르고 있지만 어쨌든 파일에 쓰여진 텍스트는 단지 몇 가지 숫자이다.작성 또는 Visual C++ 콘솔 출력을 텍스트 파일로 복사

// Callback for recognized commands and alerts 
class MyHandler: public PXCVoiceRecognition::Recognition::Handler, public PXCVoiceRecognition::Alert::Handler 

{ 공개 : 가 MyHandler (표준 : : 벡터 & 명령) {this->는 = 명령을 명령; }

virtual void PXCAPI OnRecognized(PXCVoiceRecognition::Recognition *cmd) 
{ 
    wprintf_s(L"\nRecognized: <%s>\n", (cmd->label>=0)?commands[cmd->label]:cmd- >dictation); //this line prints the dictated statement// 
    // writing to a text file 
    printf("Writing to the txt file..."); 
    std::ofstream out("c:\\MyVoice.txt"); 
    out<<cmd->dictation; 
} 

protected: 
std::vector<pxcCHAR*> commands; 

}};

int wmain(int argc, wchar_t* argv[]) { 
// Create session 
PXCSmartPtr<PXCSession> session; 
pxcStatus sts = PXCSession_Create(&session); 
if (sts < PXC_STATUS_NO_ERROR) { 
wprintf_s(L"Failed to create the PXCSession\n"); 
return 3; 
} 
// Parse command line 
UtilCmdLine cmdl(session); 
if (!cmdl.Parse(L"-file-iuid-grammar-sdname-realtime-eos",argc, argv)) return 1; 

// Create PXCVoiceRecognition instance 
PXCSmartPtr<PXCVoiceRecognition> vc; 
sts=session->CreateImpl(cmdl.m_iuid, PXCVoiceRecognition::CUID, (void **)&vc); 
if (sts<PXC_STATUS_NO_ERROR) 
{ 
wprintf_s(L"Failed to create PXCVoiceRecognition\n"); 
return 3; 
} 

// Find and initilize capture module 
UtilCaptureFile capture(session,cmdl.m_recordedFile,false); 
if (cmdl.m_sdname) capture.SetFilter(cmdl.m_sdname); 

// Query PXCVoiceRecognition profile 
PXCVoiceRecognition::ProfileInfo profile; 
for (int i=0;;i++) 
{ 
    sts=vc->QueryProfile(i, &profile); 
    sts=capture.LocateStreams(&profile.inputs); 
    return 3; 
} 
if (cmdl.m_realtime >= 0) capture.SetRealtime(cmdl.m_realtime); 
// Set PXCVoiceRecognition profile 
if (cmdl.m_eos) profile.endOfSentence = cmdl.m_eos; 
sts=vc->SetProfile(&profile); 

// Grammar intialization 
pxcUID grammar = 0; 
if (cmdl.m_grammar.size()<0) 
{ 
    wprintf_s(L"Dictation Mode\n"); 
} 

vc->SetGrammar(grammar); 
// SubscribeRecognition 
MyHandler handler(cmdl.m_grammar); 
vc->SubscribeRecognition(80, &handler); 
vc->SubscribeAlert(&handler); 

// Processing loop 
PXCSmartPtr<PXCAudio> audio; 
PXCSmartSPArray sps(3); 
wprintf_s(L"Press any key to exit\n"); 

while (!_kbhit()) 
{ 
    sts = capture.ReadStreamAsync(audio.ReleaseRef(),sps.ReleaseRef(0)); 
    sts=vc->ProcessAudioAsync(audio,sps.ReleaseRef(1)); 
    sps.SynchronizeEx(); 
} 

} 당신이 다음 방금 (파일로 표준 출력을 리디렉션 > c:\result.txt 같은 명령 행 인수와 함께 실행 파일을 실행할 수 있습니다, 콘솔 창에 올바르게 출력을 생성 할 수 있다면

일반적으로
+0

코드를 올바르게 포맷하십시오. – Sean

+0

@Sean 이런 방식으로 서식을 지정하는 데 큰 어려움이있었습니다. 내가 변경 사항을 게시하는 것을 허용하지 않습니다. –

답변

1

는 말하기 나는 당신이 Visual C++ 태그를 가지고 있기 때문에 당신이 Windows에 있다고 가정하고있다. 따라서 코드를 전혀 변경할 필요가 없다. (cout에있는 모든 것은 인자로 지정된 파일에 기록 될 것이다). Visual Studio GUI를 사용하는 경우 프로젝트 속성 페이지에서 명령 줄 인수를 지정할 수 있습니다. 그렇지 않으면 콘솔 창에 직접 명령을 입력하면됩니다.

+0

예, Windows 7을 사용하고 있습니다. 방금 설명한 방법에 대해 자세히 설명해 줄 수 있습니까? –

18

>을 사용하면 Visual Studio에서 실행 한 명령의 출력을 리디렉션 할 수 있습니다. 솔루션 탐색기에서 프로젝트를 선택하고 PROJECT-> Properties-> Configuration Properties-> Debugging을 클릭하여 명령 인수에 추가하십시오. 그런 다음 > output.txt을 명령 인수에 입력하십시오. 응용 프로그램을 실행하면 파일이 작업 디렉토리에 표시됩니다.이 디렉토리는 기본적으로 .sln 파일과 동일한 디렉토리입니다.

+0

고맙습니다. 이것은 정상적인 응용 프로그램에서 작동합니다. 어쨌든 위의 음성 인식 코드에 대해 동일한 작업을 수행 할 때 콘솔에서 아무 것도 제공하지 않습니다. 이 변경 사항이 없으면 제대로 작동하고 출력을 제공합니다. 그러나 빈 txt 파일 만들기를 제외하고는> output.txt에 대해서는 아무 일도하지 않습니다. –

+1

출력이 stdout 대신 stderr로 출력 될 수 있습니까? stderr를 캡쳐하려면'>'대신'2> output.txt'를 사용하십시오. 두 파일을'> output.txt 2> & 1'와 같은 파일에 결합 할 수도 있습니다. – Rastaban

+0

좋습니다. 하지만 비틀 거림이 있습니다. 이 프로그램은 완벽하게 실행하고 txt 파일을 만들고 있습니다. 하지만 콘솔 출력을 txt 파일에 쓰지는 않습니다. –

2

은 그가 단순히 실행 파일을 실행하고 파일을 직접 제안 생각 :
C : \ EXE> C :. \ 여기

가 링크를 인 경우 output.txt에 대한 redirection.