当前位置: 移动技术网 > IT编程>开发语言>.net > Microsoft.Azure:语音识别/图片识别/人脸识别/情绪识别

Microsoft.Azure:语音识别/图片识别/人脸识别/情绪识别

2018年01月04日  | 移动技术网IT编程  | 我要评论

天秤台风,快乐大本营2012825,爱普生me300

 

在第一篇博客里提过图片识别的底层.最精准的图片识别需要海量的数据磨炼.自己写的底层没有以亿为单位的数据支持其实也是个残废品.

在此介绍Microsoft的几个云服务吧.都是付费的喔.个人可以申请30天免费试用.

public class FaceHelper
{
private const string uriBase = "https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect";
private static string subscriptionKey = string.Empty;
public FaceHelper(string Key,string imageFilePath)
{
if (!String.IsNullOrWhiteSpace(Key))
{
subscriptionKey = Key;
MakeAnalysisRequest(imageFilePath);
}
}

static async void MakeAnalysisRequest(string imageFilePath)
{
HttpClient client = new HttpClient();

client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);

string requestParameters = "returnFaceId=true&returnFaceLandmarks=false&returnFaceAttributes=age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise";

string uri = uriBase + "?" + requestParameters;

HttpResponseMessage response;

byte[] byteData = GetImageAsByteArray(imageFilePath);

using (ByteArrayContent content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

response = await client.PostAsync(uri, content);

string contentString = await response.Content.ReadAsStringAsync();

Console.WriteLine("\nResponse:\n");
Console.WriteLine(JsonPrettyPrint(contentString));
}
}

static byte[] GetImageAsByteArray(string imageFilePath)
{
FileStream fileStream = new FileStream(imageFilePath, FileMode.Open, FileAccess.Read);
BinaryReader binaryReader = new BinaryReader(fileStream);
return binaryReader.ReadBytes((int)fileStream.Length);
}

static string JsonPrettyPrint(string json)
{
if (string.IsNullOrEmpty(json))
return string.Empty;

json = json.Replace(Environment.NewLine, "").Replace("\t", "");

StringBuilder sb = new StringBuilder();
bool quote = false;
bool ignore = false;
int offset = 0;
int indentLength = 3;

foreach (char ch in json)
{
switch (ch)
{
case '"':
if (!ignore) quote = !quote;
break;
case '\'':
if (quote) ignore = !ignore;
break;
}

if (quote)
sb.Append(ch);
else
{
switch (ch)
{
case '{':
case '[':
sb.Append(ch);
sb.Append(Environment.NewLine);
sb.Append(new string(' ', ++offset * indentLength));
break;
case '}':
case ']':
sb.Append(Environment.NewLine);
sb.Append(new string(' ', --offset * indentLength));
sb.Append(ch);
break;
case ',':
sb.Append(ch);
sb.Append(Environment.NewLine);
sb.Append(new string(' ', offset * indentLength));
break;
case ':':
sb.Append(ch);
sb.Append(' ');
break;
default:
if (ch != ' ') sb.Append(ch);
break;
}
}
}

return sb.ToString().Trim();
}

}

脸识别 API.检测、识别、分析、组织和标记照片中的人脸

FaceHelper face = new FaceHelper("你的密钥",ConfigurationManager.AppSettings["Face"] );

 

 

返回值很多很详细.人脸在图片的那个区域。性别.有没有头发。有没有胡子。有没有眼镜都写的很清楚.在此不一一列举

以下是声音识别.分REST 和SOCKET 语音识别也分中英美法.传递的音频也要分长短.以下配置为英文识别.REST.15秒以下音频

public class VoiceHelper
{
/// <summary>
/// 识别模式
///有认可的三种模式:interactive,conversation,和dictation。识别模式根据用户如何说话来调整语音识别。为您的应用程序选择适当的识别模式。
/// </summary>
public VoiceHelper(string file,string key)
{
string url = "https://speech.platform.bing.com/speech/recognition/dictation/cognitiveservices/v1?language=en-US&format=simple";

string responseString = string.Empty;
HttpWebRequest request = null;
request = (HttpWebRequest)HttpWebRequest.Create(url);
request.SendChunked = true;
request.Accept = @"application/json;text/xml";
request.Method = "POST";
request.ProtocolVersion = HttpVersion.Version11;
request.ContentType = @"audio/wav; codec=audio/pcm; samplerate=16000";
request.Headers["Ocp-Apim-Subscription-Key"] = key;

using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
{

byte[] buffer = null;
int bytesRead = 0;
using (Stream requestStream = request.GetRequestStream())
{

buffer = new Byte[checked((uint)Math.Min(1024, (int)fs.Length))];
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
}

requestStream.Flush();
}
}

using (WebResponse response = request.GetResponse())
{
Console.WriteLine(((HttpWebResponse)response).StatusCode);

using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
responseString = sr.ReadToEnd();
}

Console.WriteLine(responseString);
}


}
}

 

 

 

 

VoiceHelper voice = new VoiceHelper(@ConfigurationManager.AppSettings["Voice"], "你的密钥");

 

 

 

 

 这个语音识别还是可以的.Displaytext就是我在音频中说的话.重复了三遍 TEST.声音很沙哑也很低沉.识别率很赞.

不过要注意只支持15秒带有PCM单声道(单声道),16 KHz的WAV文件

以下是图片识别.这个就可好玩了.我放了一个大飞机.返回的数据中.飞机蓝天都识别了

 

public class OCRHelper
{
const string subscriptionKey = "你的密钥";

const string uriBase = "https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/analyze";

public OCRHelper(string file)
{
// Get the path and filename to process from the user.
Console.WriteLine("Analyze an image:");
Console.Write("Enter the path to an image you wish to analzye: ");

// Execute the REST API call.
MakeAnalysisRequest(file);

Console.WriteLine("\nPlease wait a moment for the results to appear. Then, press Enter to exit...\n");

}
/// <summary>
/// Gets the analysis of the specified image file by using the Computer Vision REST API.
/// </summary>
/// <param name="imageFilePath">The image file.</param>
static async void MakeAnalysisRequest(string imageFilePath)
{
HttpClient client = new HttpClient();

// Request headers.
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);

// Request parameters. A third optional parameter is "details".
string requestParameters = "visualFeatures=Categories,Description,Color&language=en";

// Assemble the URI for the REST API Call.
string uri = uriBase + "?" + requestParameters;

HttpResponseMessage response;

// Request body. Posts a locally stored JPEG image.
byte[] byteData = GetImageAsByteArray(imageFilePath);

using (ByteArrayContent content = new ByteArrayContent(byteData))
{
// This example uses content type "application/octet-stream".
// The other content types you can use are "application/json" and "multipart/form-data".
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

// Execute the REST API call.
response = await client.PostAsync(uri, content);

// Get the JSON response.
string contentString = await response.Content.ReadAsStringAsync();

// Display the JSON response.
Console.WriteLine("\nResponse:\n");
Console.WriteLine(JsonPrettyPrint(contentString));
//description.captions.text 对图片的英文描述
}
}


/// <summary>
/// Returns the contents of the specified file as a byte array.
/// </summary>
/// <param name="imageFilePath">The image file to read.</param>
/// <returns>The byte array of the image data.</returns>
static byte[] GetImageAsByteArray(string imageFilePath)
{
FileStream fileStream = new FileStream(imageFilePath, FileMode.Open, FileAccess.Read);
BinaryReader binaryReader = new BinaryReader(fileStream);
return binaryReader.ReadBytes((int)fileStream.Length);
}


/// <summary>
/// Formats the given JSON string by adding line breaks and indents.
/// </summary>
/// <param name="json">The raw JSON string to format.</param>
/// <returns>The formatted JSON string.</returns>
static string JsonPrettyPrint(string json)
{
if (string.IsNullOrEmpty(json))
return string.Empty;

json = json.Replace(Environment.NewLine, "").Replace("\t", "");

StringBuilder sb = new StringBuilder();
bool quote = false;
bool ignore = false;
int offset = 0;
int indentLength = 3;

foreach (char ch in json)
{
switch (ch)
{
case '"':
if (!ignore) quote = !quote;
break;
case '\'':
if (quote) ignore = !ignore;
break;
}

if (quote)
sb.Append(ch);
else
{
switch (ch)
{
case '{':
case '[':
sb.Append(ch);
sb.Append(Environment.NewLine);
sb.Append(new string(' ', ++offset * indentLength));
break;
case '}':
case ']':
sb.Append(Environment.NewLine);
sb.Append(new string(' ', --offset * indentLength));
sb.Append(ch);
break;
case ',':
sb.Append(ch);
sb.Append(Environment.NewLine);
sb.Append(new string(' ', offset * indentLength));
break;
case ':':
sb.Append(ch);
sb.Append(' ');
break;
default:
if (ch != ' ') sb.Append(ch);
break;
}
}
}

return sb.ToString().Trim();
}
}

 

 OCRHelper ocr = new OCRHelper(@"C:\Users\Administrator\Desktop\test2.png");

 下图是输入参数

 

 

 下面是输出参数

 

 一只大鸟在天上飘

 情绪识别的接口就不解释了.人脸识别做的比情绪识别还详细.

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网