/// <summary> /// 通过ServerID(mediaid)从微信服务器上下载图片,保存到本地,并返回文件名 /// </summary> /// <param name="mediaid"></param> /// <returns></returns> public async Task <string> Get(string mediaid) { var mongo = new MongoDBHelper <WeixinImgFileModels>("weixinImgFile"); //查询mongo中是否存储了mediaid对应的照片文件 var doc = await mongo.SelectOneAsync(x => x.MediaId == mediaid); if (doc != null) { return(doc.FileName); } //如果文件没有下载过,则下载 //http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID var queryString = HttpUtility.ParseQueryString(string.Empty); queryString["access_token"] = await Get(); queryString["media_id"] = mediaid; var uri = "http://file.api.weixin.qq.com/cgi-bin/media/get?" + queryString; HttpResponseMessage response; response = await client.GetAsync(uri); var msg = await response.Content.ReadAsStreamAsync(); var fileName = response.Content.Headers.ContentDisposition.FileName.Replace("\"", ""); var helper = new ProjecToxfordClientHelper(); var content = await FileHelper.ReadAsync(msg); FileHelper.SaveFile(content, fileName); await mongo.InsertAsync(new WeixinImgFileModels() { FileName = fileName, MediaId = mediaid }); return(fileName); }
public async Task <HttpResponseMessage> Verify(string faceId1, string faceId2) { var key = "verify"; var mongo = new MongoDBHelper <VerifyModels>("faceverify"); #region //////先检查数据库中是否有上次比较的结果 //var doc = await mongo.SelectOneAsync(x => // (x.FaceID1 == faceId1 && x.FaceID2 == faceId2) // ); //if (doc != null) //{ // var mongoResult = new // { // faceID1 = doc.FaceID1, // faceID2 = doc.FaceID2, // confidence = doc.Confidence, // isIdentical = doc.IsIdentical // }.ToJson(); // //var apiResult = doc.ToJson<VerifyModels>(); // return client.CreateHttpResponseMessage( // Request, // new Models.ProjecToxfordResponseModels(mongoResult, HttpStatusCode.OK)); //} #endregion //如果之前的结果没有查询到,则提交牛津查询 var result = SyncExecute(client.PostAsync( key, new { faceId1 = faceId1, faceId2 = faceId2 } )); if (result.StatusCode == HttpStatusCode.OK) { var tmp = Newtonsoft.Json.Linq.JObject.Parse(result.Message); //如果为了加速查询的话,我们采用两次写入 //await mongo.InsertAsync(new VerifyModels() //{ // FaceID1 = faceId1, // FaceID2 = faceId2, // Confidence = (double)tmp["confidence"], // IsIdentical = (bool)tmp["isIdentical"] //}); //await mongo.InsertAsync(new VerifyModels() //{ // FaceID1 = faceId2, // FaceID2 = faceId1, // Confidence = (double)tmp["confidence"], // IsIdentical = (bool)tmp["isIdentical"] //}); var resultJson = new { faceID1 = faceId1, faceID2 = faceId2, confidence = (double)tmp["confidence"], isIdentical = (bool)tmp["isIdentical"] }.ToJson(); Confidence = resultJson; return(client.CreateHttpResponseMessage( Request, new Models.ProjecToxfordResponseModels(resultJson, HttpStatusCode.OK))); } return(client.CreateHttpResponseMessage(Request, result)); }
public async Task <HttpResponseMessage> Detect(string weixnmediaid, string fileName) { var key = "detect"; //得到从微信服务器下载的文件名 //var fileName = await new WeixinController().Get(weixnmediaid); var mongo = new MongoDBHelper <DetectResultModels>("facedetect"); #region ////照片之前有没有下载过 // var docArr = mongo.SelectMoreAsync(x => x.FileName == fileName); //if (docArr.Count > 0) //{ // var resultJson = docArr.Select( // doc => new // { // faceId = doc.faceId, // filename = doc.FileName, // age = doc.Age, // gender = doc.Gender, // smile = doc.Smile // } // ).ToJson(); // return client.CreateHttpResponseMessage( // Request, // new Models.ProjecToxfordResponseModels(resultJson, HttpStatusCode.OK)); //} //if (docArr != null) //{ // var apiResult = docArr.ToJson(); // return client.CreateHttpResponseMessage( // Request, // new Models.ProjecToxfordResponseModels(apiResult, HttpStatusCode.OK)); //} #endregion //如果Mongo中没有该照片对应的Face信息 string fullpath = Path.Combine(photofolder, fileName); // var content = SyncExecute(FileHelper.ReadAsync(fullpath)); var content = File.ReadAllBytes(fullpath); if (content != null) { var result = await client.PostAsync(key, content, new Dictionary <string, string> { { "returnFaceId", "true" }, { "returnFaceLandmarks", "flase" }, { "returnFaceAttributes", "age,gender,smile" } } ); if (result.StatusCode == HttpStatusCode.OK) { var tmpJArr = Newtonsoft.Json.Linq.JArray.Parse(result.Message); #region //将牛津结果写入数据库 //foreach (var tmp in tmpJArr) //{ // mongo.InsertAsync(new DetectResultModels() // { // FileName = fileName, // faceId = tmp["faceId"] != null ? (string)tmp["faceId"] : "", // Age = tmp["faceAttributes"]["age"] != null ? (double)tmp["faceAttributes"]["age"] : 0, // Gender = tmp["faceAttributes"]["gender"] != null ? (string)tmp["faceAttributes"]["gender"] : "", // Smile = tmp["faceAttributes"]["smile"] != null ? (double)tmp["faceAttributes"]["smile"] : 0 // }); //} ////重新从牛津读取数据 #endregion var resultJson = tmpJArr.Select(x => new { faceId = (string)x["faceId"], age = x["faceAttributes"]["age"] != null ? (double)x["faceAttributes"]["age"] : 0, gender = x["faceAttributes"]["gender"] != null ? (string)x["faceAttributes"]["gender"] : "", smile = x["faceAttributes"]["smile"] != null ? (double)x["faceAttributes"]["smile"] : 0, fileName = fileName }).ToJson(); rest = resultJson; //var resultJson = tmpJArr.ToJson(); return(client.CreateHttpResponseMessage( Request, new Models.ProjecToxfordResponseModels(resultJson, HttpStatusCode.OK))); } } throw new HttpResponseException(HttpStatusCode.BadRequest); }
public async Task <HttpResponseMessage> Verify(string faceId1, string faceId2) { var key = "verify"; var mongo = new MongoDBHelper <VerifyModels>("faceverify"); //先检查数据库中是否有上次比较的结果 var doc = await mongo.SelectOneAsync(x => (x.FaceID1 == faceId1 && x.FaceID2 == faceId2) ); if (doc != null) { var mongoResult = new { faceID1 = doc.FaceID1, faceID2 = doc.FaceID2, confidence = doc.Confidence, isIdentical = doc.IsIdentical }.ToJson(); //var apiResult = doc.ToJson<VerifyModels>(); return(client.CreateHttpResponseMessage( Request, new Models.ProjecToxfordResponseModels(mongoResult, HttpStatusCode.OK))); } //如果之前的结果没有查询到,则提交牛津查询 var result = await client.PostAsync( key, new { faceId1 = faceId1, faceId2 = faceId2 } ); if (result.StatusCode == HttpStatusCode.OK) { var tmp = Newtonsoft.Json.Linq.JObject.Parse(result.Message); //如果为了加速查询的话,我们采用两次写入 await mongo.InsertAsync(new VerifyModels() { FaceID1 = faceId1, FaceID2 = faceId2, Confidence = (double)tmp["confidence"], IsIdentical = (bool)tmp["isIdentical"] }); await mongo.InsertAsync(new VerifyModels() { FaceID1 = faceId2, FaceID2 = faceId1, Confidence = (double)tmp["confidence"], IsIdentical = (bool)tmp["isIdentical"] }); var resultJson = new { faceID1 = faceId1, faceID2 = faceId2, confidence = (double)tmp["confidence"], isIdentical = (bool)tmp["isIdentical"] }.ToJson(); return(client.CreateHttpResponseMessage( Request, new Models.ProjecToxfordResponseModels(resultJson, HttpStatusCode.OK))); } return(client.CreateHttpResponseMessage(Request, result)); }