Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        //刷新脸的核心事件
        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); //释放内存
        }
Ejemplo n.º 3
0
        //匹配人脸
        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);
        }
Ejemplo n.º 4
0
 public bool CompareFace(PictureBox pictureBox, out FaceDataStruct suitFace)
 {
     return(CompareFace(faceFR.GetFaceData(new Bitmap(pictureBox.Image), faceFD), out suitFace));
 }