/// <summary> /// 用于接收数据 /// </summary> private static void ReceiveData() { IPEndPoint tmp = new IPEndPoint(IPAddress.Any, 0); String msg = ""; while (true) { try { if (Cts.IsCancellationRequested) { break; } if (ReceiveClient.Available > 0) { byte[] buffer = ReceiveClient.Receive(ref tmp); msg = Encoding.UTF8.GetString(buffer, 0, buffer.Length); dynamic data = JsonConvert.DeserializeObject(msg); if (data.opt == ("reg")) { myEventArgs.RegistArgs args = new myEventArgs.RegistArgs() { Regist = JsonConvert.DeserializeObject <ResultReceiveMod.Regist>(msg) }; //触发事件 NewUserRegist(new UdpClient(), args); } else if (data.opt == ("scan")) { myEventArgs.ScanArgs args = new myEventArgs.ScanArgs() { Scan = JsonConvert.DeserializeObject <ResultReceiveMod.ScanApplication>(msg) }; //触发事件 ScanApply(new UdpClient(), args); } else { //do nothing } } }catch (JsonException ex) { Console.WriteLine("\n[********\n\tJson parse error : {0}\n\tdata : {1}\n********]\n", ex.Message, msg); continue; } catch (Exception) { Console.WriteLine("An error occured while receiving data!"); stopUdp(); break; throw; } } }
/// <summary> /// 注册事件触发函数 /// </summary> /// <param name="sender"></param> /// <param name="args">变量参数</param> public static void NewUserRegist(object sender, myEventArgs.RegistArgs args) { /**************************** * 保存特征值时才区分性别 * **************************/ //下载图片到本地 String url = String.Format("{0}/{1}_{2}.{3}", Url_DldImg, args.Regist.Id, args.Regist.Name, args.Regist.Extension); String pathImg = String.Format("{0}\\{1}_{2}.{3}", ImgRootPath_Regist, args.Regist.Id, args.Regist.Name, args.Regist.Extension); HttpUtil.downFile(url, pathImg); //判断性别(假设性别判断 100% 准确) try { ResultCode result = EngineActivate.ActivateEngine(APPID, APPKEY); if (result != ResultCode.SDK已激活) { Console.WriteLine(result.ToString()); return; } IntPtr hengine = EngineFactory.GetEngineInstance(EngineFactory.Image, DetectionOrientPriority.ASF_OP_0_ONLY, 16); //检测角度指人脸在照片中的角度 Bitmap img1 = new Bitmap(pathImg); var face = new FaceDetection(hengine, img1); var r = face.GetGender(); LocalUserMod temp1 = new LocalUserMod(); temp1.Name = args.Regist.Name; temp1.Num = args.Regist.Id; //用Base64转码 temp1.Freature = Convert.ToBase64String(face.getFaceFeature(img1)); //销毁图片 img1.Dispose(); //提取特征值保存 switch (r) { case "男": XmlUtil.AddOneData(temp1, "Male"); break; case "女": XmlUtil.AddOneData(temp1, "Female"); break; default: Console.WriteLine("获取性别失败!用户:{0} , 学号:{1},注册时间:{2}", args.Regist.Name, args.Regist.Id, DateTime.Now.ToString()); return; } //提示用户注册 Console.WriteLine("User registed: {0} at {1}", args.Regist.Name, DateTime.Now.ToString()); //更新用户信息 //令写一个函数 getAllUserInfo(); } catch (Exception ex) { Console.WriteLine("Regist Error: {0}", ex.Message); } finally { EngineFactory.DisposeEngine(); } }