/// <summary> /// 语音识别 /// </summary> /// <param name="audioClip"></param> /// <returns></returns> IEnumerator Recognition(AudioClip audioClip, int recordTime) { WWWForm form = new WWWForm(); string url = string.Format("{0}?cuid={1}&token={2}", SpeechRecognition_Address, SystemInfo.deviceUniqueIdentifier, Access_Token); /* * float[] samples = new float[16000 * recordTime * audioClip.channels]; * //将audioclip填充到数组中 * audioClip.GetData(samples, 0); * * short[] sampleShort = new short[samples.Length]; * for (int i = 0; i < samples.Length; i++) * { * sampleShort[i] = (short)(samples[i] * short.MaxValue); * } * byte[] data = new byte[sampleShort.Length * 2]; * Buffer.BlockCopy(sampleShort, 0, data, 0, data.Length); * */ byte[] data = ConvertAudioClipToPCM16(audioClip); form.AddBinaryData("audio", data); UnityWebRequest request = UnityWebRequest.Post(url, form); request.SetRequestHeader("Content-Type", "audio/pcm;rate=16000"); yield return(request.SendWebRequest()); if (request.isNetworkError) { Debug.Log("网络错误:" + request.error); } else { if (request.responseCode == 200) { string result = request.downloadHandler.text; print("成功获取到数据:" + result); RecognizeResult resultContent = JsonMapper.ToObject <RecognizeResult>(result); if (resultContent.result != null) { RecognizeContent = resultContent.result[0]; } else { RecognizeContent = resultContent.ToString(); } RecordButton.GetComponentInChildren <Text>().text = RecognizeContent; } else { print("状态码不为200:" + request.responseCode); } } }
/// <summary> /// 语音识别 /// </summary> /// <param name="audioClip"></param> /// <returns></returns> IEnumerator Recognition(AudioClip audioClip, int recordTime) { WWWForm form = new WWWForm(); string url = string.Format("{0}?cuid={1}&token={2}", SpeechRecognition_Address, SystemInfo.deviceUniqueIdentifier, Access_Token); float[] samples = new float[16000 * recordTime * audioClip.channels]; //将audioclip填充到数组中 audioClip.GetData(samples, 0); short[] sampleShort = new short[samples.Length]; for (int i = 0; i < samples.Length; i++) { sampleShort[i] = (short)(samples[i] * short.MaxValue); } byte[] data = new byte[sampleShort.Length * 2]; Buffer.BlockCopy(sampleShort, 0, data, 0, data.Length); form.AddBinaryData("audio", data); UnityWebRequest request = UnityWebRequest.Post(url, form); request.SetRequestHeader("Content-Type", "audio/pcm;rate=16000"); yield return(request.SendWebRequest()); if (request.isNetworkError) { Debug.Log("网络错误:" + request.error); } else { if (request.responseCode == 200) { string result = request.downloadHandler.text; print("获取的json数据:" + result); RecognizeResult resultContent = JsonMapper.ToObject <RecognizeResult>(result); if (resultContent.result != null) { RecognizeContent = resultContent.result[0]; //对识别的文字做关键词检测 bool hasKeyWords = KeyWords.DetectALLWords(RecognizeContent); if (hasKeyWords) { yield break; } } } else { print("状态码不为200:" + request.responseCode); } } //未检测到关键词,回到idle EventCenter.GetInstance().EventTrigger(MyEventType.UNWAVEGESTURE); yield break; }
private void OnPartialResponseReceivedHandler(object sender, PartialSpeechResponseEventArgs e) { Dispatcher.Invoke( (Action)(() => { RecognizeResult.Document.Blocks.Clear(); RecognizeResult.AppendText(e.PartialResult); RecognizeResult.SelectAll(); RecognizeResult.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Gray); RecognizeResult.Selection.Select(RecognizeResult.Document.ContentEnd, RecognizeResult.Document.ContentEnd); })); }
private void v_SelectedIndexChanged(object sender, EventArgs e) { if (v.FocusedItem != null) { ListViewItem lvi = v.FocusedItem; RecognizeResult sm = (RecognizeResult)lvi.SubItems[0].Tag; string range = lvi.SubItems[5].Text; lblTextSim.Text = string.Format("预计范围: {0} 检测结果: {1}", range, sm.similarity); //犯罪分子图片显示 if (picStandard.Image != null) { picStandard.Image.Dispose(); picStandard.Image = null; } picStandard.Image = Image.FromFile(Path.Combine(Properties.Settings.Default.FaceSampleLib, sm.fileName)); btnOK.Enabled = true; } }
private void LiveCallback(RecognizeResult result) { var base64Image = result.data.face.image; if (base64Image.IsEmpty()) { return; } var buffer = Convert.FromBase64String(base64Image); using (MemoryStream ms = new MemoryStream(buffer)) { Bitmap bitmap = new Bitmap(ms); bitmap.Save("c:\\nuc.jpg", ImageFormat.Jpeg); bitmap.Dispose(); } }
public RecognizeResult Recognize() { if (_network == null && File.Exists(NetworkPath)) { _network = new NeuralNet(NetworkPath); } Rectangles = SplitDigits(); Images = new Image[Rectangles.Length]; var result = new RecognizeResult { Probabilities = new double[DigitsCount] }; for (var j = 0; j < Rectangles.Length; j++) { Images[j] = ImageHelper.Crop(Target, Rectangles[j]); result.Result += _compute(Images[j], out result.Probabilities[j]); } return(result); }
private void lvPersonInfo_SelectedIndexChanged(object sender, EventArgs e) { if (v.SelectedItems.Count > 0) { ListViewItem lvi = v.SelectedItems[0]; RecognizeResult sm = (RecognizeResult)lvi.SubItems[0].Tag; string range = lvi.SubItems[5].Text; lblTextSim.Text = string.Format("相似度: {0:F0}%", sm.similarity * 100); //犯罪分子图片显示 if (picStandard.Image != null) { picStandard.Image.Dispose(); picStandard.Image = null; } string path = Path.Combine(Properties.Settings.Default.ImpSelectPersonPath, lvi.SubItems[1].Tag as string); picStandard.Image = Image.FromFile(path); btnOK.Enabled = true; } }
public RecognizeResult Recognize(RecoginizeData data) { try { using (var src = data.CardsBitmap.Deserialize() as Bitmap) { if (src == null) { throw new InvalidDataException(string.Format("待识别扑克的图片数据反序列化失败!")); } var result = new RecognizeResult { Result = new List <Card>() }; //过滤蓝色、灰度化、二值化 var toRec = _seq.Apply(src); //黑色与白色互换 ExchangeIndexColor(toRec, 255, 0); //去掉干扰线 RemoveInterferenceLines(toRec, 0); //过滤噪音 toRec = _blobsFiltering.Apply(toRec); //获取所有的块 _blobCounter.ProcessImage(toRec); //去掉偏移的块区域 var rects = RemoveOffsetBlobs(_blobCounter.GetObjectsRectangles().ToList()); //合并区域 rects = MergeBlobs(rects); //识别扑克牌数字 rects.ForEach(rectNum => { //识别牌数字 var bmpNum = _resizeNumFilter.Apply(toRec.Clone(rectNum, toRec.PixelFormat)); var cardNum = _cardNetworkService.ComputeNum(bmpNum); if (cardNum == CardNum.未知) { var dir = AppDomain.CurrentDomain.BaseDirectory + @"未知\数字\"; Directory.CreateDirectory(dir); bmpNum.Save(dir + string.Format("{0}.bmp", DateTime.Now.ToString("yyyyMMddHHmmssffff"))); } //识别牌花色(花色图片需要重新处理,所以需要用原图src) var bmpColor = GetColorBitmap(src, rectNum); var cardColor = _cardNetworkService.ComputeColor(bmpColor); if (cardColor == CardColor.未知) { var dir = AppDomain.CurrentDomain.BaseDirectory + @"未知\花色\"; Directory.CreateDirectory(dir); bmpColor.Save(dir + string.Format("{0}.bmp", DateTime.Now.ToString("yyyyMMddHHmmssffff"))); } //将识别出来的牌信息添加到结果集中 result.Result.Add(new Card { Num = cardNum, Color = cardColor, Rect = rectNum }); }); GC.Collect(); return(result); } } catch (Exception ex) { throw new FaultException((ex.InnerException ?? ex).ToString()); } }
public void Recognized(ClientInfo clientInfo, RecognizeResult recognizeResult) { ((SSZRoomContext)RoomContext).Recognized(clientInfo, recognizeResult); }
private void OnMicDictationResponseReceivedHandler(object sender, SpeechResponseEventArgs e) { if (e.PhraseResponse.RecognitionStatus == RecognitionStatus.EndOfDictation || e.PhraseResponse.RecognitionStatus == RecognitionStatus.DictationEndSilenceTimeout) { Dispatcher.Invoke( (Action)(() => { StartButton_Click(null, null); })); return; } Dispatcher.Invoke( (Action)(() => { RecognizeResult.Document.Blocks.Clear(); if (e.PhraseResponse.Results.Length > 0) { RecognizeResult.AppendText(e.PhraseResponse.Results[0].DisplayText); } RecognizeResult.SelectAll(); RecognizeResult.Selection.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black); RecognizeResult.Selection.Select(RecognizeResult.Document.ContentEnd, RecognizeResult.Document.ContentEnd); })); if (e.PhraseResponse.Results.Length > 0) { Task.Run(() => { { using (var wc = new WebClient()) { wc.Headers.Add("Ocp-Apim-Subscription-Key", "b53f42d2ebb64913861d26cfe65da32a"); var res = wc.UploadString("https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases", "{\"documents\":[{\"language\":\"en\",\"id\":\"1\",\"text\":\"?\"}]})".Replace("?", e.PhraseResponse.Results[0].DisplayText)); res = Regex.Match(res, "\"keyPhrases\":\\[(.*?)\\]").Groups[1].Value; Dispatcher.Invoke( (Action)(() => { RecognizeResult2.Document.Blocks.Clear(); RecognizeResult.Selection.Select(RecognizeResult.Document.ContentStart, RecognizeResult.Document.ContentEnd); RecognizeResult2.AppendText(RecognizeResult.Selection.Text); RecognizeResult.Selection.Select(RecognizeResult.Document.ContentEnd, RecognizeResult.Document.ContentEnd); foreach (Match match in Regex.Matches(res, "\"(.+?)\"")) { var word = match.Groups[1].Value; var si = e.PhraseResponse.Results[0].DisplayText.IndexOf(word); var sp = GetPoint(RecognizeResult2.Document.ContentStart, si); var ep = GetPoint(sp, word.Length); RecognizeResult2.Selection.Select(sp, ep); RecognizeResult2.Selection.ApplyPropertyValue(TextElement.BackgroundProperty, new SolidColorBrush(Colors.Yellow)); } })); Task.Run(() => { using (var wc1 = new WebClient()) { var html = "<style>b{font-weight:normal;background-color:yellow}</style><ul>"; foreach (Match match in Regex.Matches(res, "\"(.+?)\"")) { wc1.Headers.Add("Ocp-Apim-Subscription-Key", "74c0f1f7c19b49018ddd9949a9d7ea56"); wc1.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko"); var word = match.Groups[1].Value; var res1 = wc1.DownloadString("https://api.cognitive.microsoft.com/bing/v5.0/search?count=1&responseFilter=Webpages&textDecorations=true&textFormat=HTML&q=" + System.Uri.EscapeUriString(word)); res1 = Regex.Match(res1, "\"snippet\": \"(.*?)\"").Groups[1].Value; html += "<li>" + res1 + "</li>"; } html += "</ul>"; Dispatcher.Invoke(() => { WordHint.NavigateToString(html); }); } }); } } }); } }
public RecognizeResult Recognize(RecoginizeData data) { _template = TemplateFactory.Singleton.GetTemplate(data.GameTypeTemplate); if (null == _template) { throw new FaultException("未设置模板模型对象"); } var result = new RecognizeResult { Result = new List <Card>() }; var cardsBitmap = data.CardsBitmap.Deserialize() as Bitmap; if (cardsBitmap == null) { throw new FaultException("待识别的图片不合法或为空"); } //获取玩家二值化的图片 var bmpCards = cardsBitmap; var bmpNums = _seq.Apply(bmpCards.Clone(new Rectangle(0, 0, bmpCards.Width, bmpCards.Height / 2), bmpCards.PixelFormat)); var bmpColors = bmpCards; //遍历所有的模板,记录匹配出来的区域及牌大小 var matches = new Dictionary <Rectangle, KeyValuePair <float, CardNum> >(); _template.GetCardNumTemplate().ForEach( tmpl => tmpl.Bitmaps .ForEach( bmpTmpl => { _tm.SimilarityThreshold = tmpl.SimilaSimilarityThreshold; _tm.ProcessImage(bmpNums, bmpTmpl) .ToList() .ForEach(match => { //如果匹配到的当前结果在matches集合中存在,则将牌值添加到牌值集合中 var keyRect = matches.Keys .ToList() .FirstOrDefault( key => key.Contains(new Point( match .Rectangle .Left + match .Rectangle .Width / 2, match .Rectangle .Top + match .Rectangle .Height / 2))); if (!keyRect.IsEmpty) { if (matches[keyRect].Key < match.Similarity) { matches[keyRect] = new KeyValuePair <float, CardNum>( match.Similarity, tmpl.Num); } } else { matches.Add(match.Rectangle, new KeyValuePair <float, CardNum>(match.Similarity, tmpl.Num)); } }); })); //一个区域对应一个牌值对象 matches.OrderBy(m => m.Key.Left) .ToList() .ForEach(match => { var colorBmp = bmpColors.Clone(new Rectangle(match.Key.X, 0, match.Key.Width, bmpColors.Height), bmpColors.PixelFormat); result.Result.Add(new Card { Num = match.Value.Value, Color = MatchColor(colorBmp) }); }); GC.Collect(); return(result); }
public void Recognized(ClientInfo clientInfo, RecognizeResult recognizeResult) { //并行回调所有客户端的回调接口,将数据广播到当前房间内的各个客户端 ClientContexts.AsParallel().ForAll(c => c.GameServerCallBack.OnRecognized(clientInfo, recognizeResult)); }