public FaceDataStruct[] GetDatas() { object[] faceObjs = GetDatas(new FaceDataString()); FaceDataString[] faceDatas = new FaceDataString[faceObjs.Length]; //转换object数组为FaceDataString数组 int i = 0; foreach (var item in faceObjs) { faceDatas[i++] = (FaceDataString)item; } FaceDataStruct[] ret = new FaceDataStruct[faceObjs.Length]; //转换FaceDataString数组为FaceDataStruct数组 i = 0; foreach (var item in faceDatas) { ret[i++] = new FaceDataStruct() { _uid = Convert.ToInt32(item._uid), _class = item._class, _name = item._name, _face = item._face.GetByte() }; } return(ret); }
//刷新脸的核心事件 private void FaceTimer_Tick(object sender, EventArgs e) { if (faceTimerLock) { return; } if (timerLock) { return; } timerLock = true; Bitmap video = new Bitmap(showPhotoBox.Image); bool hasFace = faceFD.CheckFace(video, out AFD_FSDK_FACERES faceRes, out IntPtr offIntPtr, out IntPtr imageDataPtr); lastRect = hasFace ? nextRect : lastRect; //刷新矩形位置 nextRect = hasFace ? faceRes.DeIntPtr().rect : new MRECT(); if (hasFace) //找到了脸 { if (!compareLock) { compareLock = true; //在下一张脸解锁 byte[] data = faceFR.GetFaceData(faceRes, offIntPtr); if (CompareFace(data, out FaceDataStruct faceData)) { nowFace = faceData; } else { compareLock = false; nowFace = new FaceDataStruct(); } } } else { compareLock = false; nowFace = new FaceDataStruct(); } timerLock = false; Marshal.FreeHGlobal(imageDataPtr); //释放内存 }
//匹配人脸 public bool CompareFace(byte[] byteData, out FaceDataStruct suitFace) { suitFace = new FaceDataStruct(); if (byteData == null) { Error.Log(ErrorType.inputError); return(false); } //Console.WriteLine("Start Compare"); FaceDataStruct[] sqlFaces = GetAllDataFormSQL(); bool hasSuit = false; foreach (var item in sqlFaces) { Console.WriteLine(faceFR.CompareFace(byteData, item._face)); if (faceFR.CompareFace(byteData, item._face) >= compareEdge) { hasSuit = true; suitFace = item; } } return(hasSuit); }
public bool CompareFace(PictureBox pictureBox, out FaceDataStruct suitFace) { return(CompareFace(faceFR.GetFaceData(new Bitmap(pictureBox.Image), faceFD), out suitFace)); }