コード例 #1
0
        public async Task <IHttpActionResult> TrainRecognizer(int userID, int imgCount)
        {
            if (imgCount < 1 || imgCount > 50)
            {
                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, Request.Content)));
            }

            var currentPerson = Storage.FindPersonByID(userID);

            if (currentPerson == null)
            {
                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, Request.Content)));
            }

            var buffer = await Request.Content.ReadAsByteArrayAsync();

            if (buffer.Length != IMAGE_BYTE_COUNT * imgCount)
            {
                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, Request.Content)));
            }

            var imagesToTrain = new List <Image <Gray, byte> >(imgCount);

            for (int i = 0; i < imgCount; ++i)
            {
                imagesToTrain.Add(Statics.ByteArrayToImage(Statics.SubArray(buffer, i * IMAGE_BYTE_COUNT, IMAGE_BYTE_COUNT), 240, 320));
            }

            Statics.TrainSinglePersonFaces(imagesToTrain, userID);
            return(Ok());
        }
コード例 #2
0
        public async Task <IHttpActionResult> RecognizeUser()
        {
            /*if (!Request.Content.IsMimeMultipartContent() || !Request.Content.Headers.ContentType.Equals("application/octet-stream"))
             * {
             *      //throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
             *      return ResponseMessage(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, Request.Content));
             * }
             *
             * var provider = new MultipartMemoryStreamProvider();
             * await Request.Content.ReadAsMultipartAsync(provider);
             * if (provider.Contents.Count != 1)
             * {
             *      //throw new HttpResponseException(HttpStatusCode.BadRequest);
             *      return ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, Request.Content));
             * }
             *
             * var file = provider.Contents[0];
             * var buffer = await file.ReadAsByteArrayAsync();*/

            var buffer = await Request.Content.ReadAsByteArrayAsync();

            Debug.WriteLine(buffer.Length);
            File.WriteAllBytes("D:/SomeDump/uploaded.bmp", buffer);
            if (buffer.Length != IMAGE_BYTE_COUNT)
            {
                //throw new HttpResponseException(HttpStatusCode.BadRequest);
                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.BadRequest, Request.Content)));
            }

            if (!EmguSingleton.Instance.RecognizerIsTrained)
            {
                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError,
                                                              new StringContent("Recognition algorythm has not been trained yet - cannot recognize"))));
            }

            var    recognizedUserID = Statics.RecognizeUser(Statics.ByteArrayToImage(buffer, 240, 320));
            Person recognized       = Storage.FindPersonByID(recognizedUserID);

            if (recognized != null)
            {
                return(Ok(recognized));
            }
            else
            {
                return(ResponseMessage(Request.CreateResponse(HttpStatusCode.InternalServerError)));
            }
        }
コード例 #3
0
ファイル: UnitTest1.cs プロジェクト: Edvinas-Smita/WhosThat
        public void TestEmguImageCreation()
        {
            byte[] bytes = File.ReadAllBytes(@"D:\ToTest");
            Assert.AreEqual(240 * 320, bytes.Length);
            var emguImg = Statics.ByteArrayToImage(bytes, 240, 320);

            Assert.IsNotNull(emguImg);
            var bitmap = emguImg.ToBitmap(240, 320);

            for (int y = 0; y < 320; y++)
            {
                for (int x = 0; x < 240; x++)
                {
                    Assert.AreEqual(bytes[240 * y + x], bitmap.GetPixel(x, y).R);
                    Assert.AreEqual(bytes[240 * y + x], bitmap.GetPixel(x, y).G);
                    Assert.AreEqual(bytes[240 * y + x], bitmap.GetPixel(x, y).B);
                }
            }
            Assert.AreEqual(bytes[0], bitmap.GetPixel(0, 0).B);
            bitmap.Save(@"D:\FromTest.bmp");
        }