Google Speech Recognition API in Objective-C

I would like to use this Google API (for testing only):

https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US

My question is: how do I send a POST request to this URL? I use:

  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *recDir = [paths objectAtIndex:0]; NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/recordTest.flac", recDir]]; NSData *myData = [NSData dataWithContentsOfFile:[NSString stringWithFormat:@"%@/recordTest.flac", recDir]]; //NSString *audio = [NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/recordTest.flac", recDir]]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US"]]; [request setHTTPMethod:@"POST"]; //set headers [request addValue:@"Content-Type" forHTTPHeaderField:@"audio/x-flac; rate=16000"]; [request addValue:@"audio/x-flac; rate=16000" forHTTPHeaderField:@"Content-Type"]; NSString *requestBody = [[NSString alloc] initWithFormat:@"Content=%@", myData]; [request setHTTPBody:[requestBody dataUsingEncoding:NSASCIIStringEncoding]]; [request setValue:[NSString stringWithFormat:@"%d",[myData length]] forHTTPHeaderField:@"Content-length"]; NSHTTPURLResponse* urlResponse = nil; NSError *error = [[NSError alloc] init]; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSLog(@"The answer is: %@",result); 

But I only get

 { "status":5, "id":"fe6ba68a593f9919f5fd33e819d493a0-1", "hypotheses":[ HERE SHOULD BE THE TEXT ] } 

What is wrong / what should I do?

+6
source share
3 answers

FYI status: 0 - correct, status: 4 - missing audio file, status: 5 - incorrect audio file.

  In place of ; NSString *requestBody = [[NSString alloc] initWithFormat:@"Content=%@", myData]; [request setHTTPBody:[requestBody dataUsingEncoding:NSASCIIStringEncoding]]; 

Simple use;

  [request setHTTPBody:myData]; 

Here is the working code for reference:

- (invalid) googleSTT {

  NSString *homeDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *filePath = [NSString stringWithFormat:@"%@/%@", homeDirectory, @"test.flac"]; NSData *myData = [NSData dataWithContentsOfFile:filePath]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=en-US"]]; [request setHTTPMethod:@"POST"]; //set headers [request addValue:@"Content-Type" forHTTPHeaderField:@"audio/x-flac; rate=16000"]; [request addValue:@"audio/x-flac; rate=16000" forHTTPHeaderField:@"Content-Type"]; [request setHTTPBody:myData]; [request setValue:[NSString stringWithFormat:@"%d",[myData length]] forHTTPHeaderField:@"Content-length"]; NSHTTPURLResponse* urlResponse = nil; NSError *error = [[NSError alloc] init]; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSLog(@"The answer is: %@",result); 

}

+2
source

Instead of worrying about Cocoa's rather messy implementation, check out my extremely easy to use (single function) C library for Google Speech: http://github.com/H2CO3/libsprec

0
source

i struggled with the same problem, but later I solved it by accessing this link https://github.com/gillesdemey/google-speech-v2.and just replaced your NSMutableURLRequest * request with this NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@"https://github.com/gillesdemey/google-speech-v2"]];

0
source

Source: https://habr.com/ru/post/902320/


All Articles