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()); }
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))); } }
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"); }