Example #1
0
        public async Task <Response <FaceDetectResult> > DetectAsync(CancellationToken cancellation, string imagePath, FaceDetectOptions options)
        {
            if (options == null)
            {
                options = new FaceDetectOptions();
            }
            Uri uri = BuildUri(options);

            HttpMessage message = null;

            try
            {
                message = _client.CreateMessage(_options, cancellation);
                message.SetRequestLine(PipelineMethod.Post, uri);

                message.AddHeader(_keyHeader);
                message.AddHeader(HttpHeader.Common.OctetStreamContentType);

                SetContentStream(message, imagePath);

                await _client.ProcessAsync(message).ConfigureAwait(false);

                Response response = message.Response;
                if (!response.TryGetHeader(s_contentLength, out long contentLength))
                {
                    throw new Exception("bad response: no content length header");
                }

                var buffer = new byte[contentLength];
                var read   = await response.ContentStream.ReadAsync(buffer, cancellation);

                Func <Response, FaceDetectResult> contentParser = null;
                if (response.Status == 200)
                {
                    contentParser = (rsp) => { return(FaceDetectResult.Parse(new ReadOnlySequence <byte>(buffer, 0, read))); };
                }
                return(new Response <FaceDetectResult>(response, contentParser));
            }
            catch
            {
                if (message != null)
                {
                    message.Dispose();
                }
                throw;
            }
        }
        public async Task <Response <FaceDetectResult> > DetectAsync(CancellationToken cancellation, Uri image, FaceDetectOptions options)
        {
            if (options == null)
            {
                options = new FaceDetectOptions();
            }
            Uri uri = BuildUri(options);

            PipelineCallContext context = null;

            try
            {
                context = _client.CreateContext(_options, cancellation);

                context.SetRequestLine(ServiceMethod.Post, uri);
                context.AddHeader(_keyHeader);
                context.AddHeader(Header.Common.JsonContentType);
                context.SetContent(new FaceContent(image, context));

                await _client.ProcessAsync(context).ConfigureAwait(false);

                ServiceResponse response = context.Response;
                if (!response.TryGetHeader(s_contentLength, out long contentLength))
                {
                    throw new Exception("bad response: no content length header");
                }

                var buffer = new byte[contentLength];
                var read   = await response.ContentStream.ReadAsync(buffer, cancellation);

                Func <ServiceResponse, FaceDetectResult> contentParser = null;
                if (response.Status == 200)
                {
                    contentParser = (rsp) => { return(FaceDetectResult.Parse(new ReadOnlySequence <byte>(buffer, 0, read))); };
                }
                return(new Response <FaceDetectResult>(response, contentParser));
            }
            catch
            {
                if (context != null)
                {
                    context.Dispose();
                }
                throw;
            }
        }
Example #3
0
        static void SetValue(ref Utf8JsonReader json, JsonState state, ref FaceDetectResult result)
        {
            switch (state)
            {
            // floats
            case JsonState.age: result.Age = json.GetValueAsSingle(); break;

            case JsonState.smile: result.Smile = json.GetValueAsSingle(); break;

            // strings
            case JsonState.gender: result.Gender = json.GetValueAsString(); break;

            case JsonState.faceId: result.FaceId = json.GetValueAsString(); break;

            default: break;
            }
        }
Example #4
0
        public static FaceDetectResult Parse(ReadOnlySequence <byte> content)
        {
            var       result = new FaceDetectResult();
            var       json   = new Utf8JsonReader(content, true);
            JsonState state  = JsonState.Other;

            while (json.Read())
            {
                switch (json.TokenType)
                {
                case JsonTokenType.PropertyName:
                    state = json.Value.ToJsonState();
                    break;

                case JsonTokenType.Number:
                case JsonTokenType.String:
                    SetValue(ref json, state, ref result);
                    break;
                }
            }
            return(result);
        }