Exemple #1
0
    /// <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);
            }
        }
    }
Exemple #2
0
    /// <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;
    }
Exemple #3
0
 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;
     }
 }
Exemple #5
0
        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();
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
 }
Exemple #10
0
 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); });
                         }
                     });
                 }
             }
         });
     }
 }
Exemple #11
0
        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);
        }
Exemple #12
0
 public void Recognized(ClientInfo clientInfo, RecognizeResult recognizeResult)
 {
     //并行回调所有客户端的回调接口,将数据广播到当前房间内的各个客户端
     ClientContexts.AsParallel().ForAll(c => c.GameServerCallBack.OnRecognized(clientInfo, recognizeResult));
 }