C#FaceAPI检测请求仅在第二次单击按钮时有效

时间:2019-05-07 10:08:06

标签: c# json face-api

我想使用Face API从使用八位字节流的照片中检测人,并且我需要返回人的ID并在单击按钮时将其写在标签中。 MakeAnalysisRequest函数应将面部ID的字符串保存到全局变量中,然后将其写入标签中。

我正在Visual Studio中使用WPF应用程序。

此代码的唯一问题是,当我第一次单击按钮时,标签保持空白。但是当我第二次单击时,面部ID显示在标签中。

我不知道为什么它只能在第二次点击时起作用,我想这是因为该函数是异步的,但是我不确定。

我尝试添加延迟,两次都延迟调用函数,但这无济于事。

faceID的全局变量:

static string faceIDjson = null;

我的要求:

static async void MakeAnalysisRequest(string imageFilePath)
        {
            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "SubKey...");
            string requestParameters = "returnFaceId=true";

            // Assemble the URI for the REST API Call.
            string uri = https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect?" + requestParameters;

            HttpResponseMessage response;

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

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

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

                // Get the JSON response.
                var contentString = await response.Content.ReadAsStringAsync();
                dynamic jsonresponse = JsonConvert.DeserializeObject(contentString);
                faceIDjson = jsonresponse[0].faceId;

            }
        }

将照片从PC加载到字节数组的功能:

static byte[] GetImageAsByteArray(string imageFilePath)
        {
            using (FileStream fileStream =
                new FileStream(imageFilePath, FileMode.Open, FileAccess.Read))
            {
                BinaryReader binaryReader = new BinaryReader(fileStream);
                return binaryReader.ReadBytes((int)fileStream.Length);
            }
        }
 private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (File.Exists(path2))
            {
                try
                {
                    MakeAnalysisRequest(path2);
                    //System.Threading.Thread.Sleep(1000);
                    label1.Content = faceIDjson;
                }
                catch (Exception ex)
                {
                    label1.Content = ex.Message;
                }
            }
            else
            {
                label1.Content = "Invalid file path.";
            }
        }

0 个答案:

没有答案