Esempio n. 1
0
        /// <summary>
        /// 口罩检测
        /// </summary>
        /// <param name="pEngine">引擎Handle</param>
        /// <param name="imageInfo">图像数据</param>
        /// <param name="singleFaceInfo">单人脸信息</param>
        /// <returns>口罩检测结果</returns>
        public static MaskInfo MaskEstimation(FaceEngine faceEngine, Image image, SingleFaceInfo singleFaceInfo, out int retCode)
        {
            MaskInfo maskInfo = new MaskInfo();

            retCode = -1;
            try
            {
                MultiFaceInfo multiFaceInfo = new MultiFaceInfo();
                multiFaceInfo.faceNum             = 1;
                multiFaceInfo.faceOrients         = new int[1];
                multiFaceInfo.faceOrients[0]      = singleFaceInfo.faceOrient;
                multiFaceInfo.faceRects           = new MRECT[1];
                multiFaceInfo.faceRects[0]        = singleFaceInfo.faceRect;
                multiFaceInfo.faceDataInfoList    = new FaceDataInfo[1];
                multiFaceInfo.faceDataInfoList[0] = singleFaceInfo.faceDataInfo;
                //人脸信息处理
                retCode = faceEngine.ASFProcessEx(image, multiFaceInfo, FaceEngineMask.ASF_MASKDETECT);
                if (retCode == 0)
                {
                    //获取口罩检测结果
                    retCode = faceEngine.ASFGetMask(out maskInfo);
                }
            }
            catch (Exception ex)
            {
                LogUtil.LogInfo(typeof(FaceUtil), ex);
            }
            return(maskInfo);
        }
 public void SelectMask(MaskInfo maskInfo)
 {
     foreach (var child in _masks)
     {
         child.gameObject.SetActive(child.GetMask() == maskInfo);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// 提取单人脸特征
        /// </summary>
        /// <param name="pEngine">人脸识别引擎</param>
        /// <param name="image">图片</param>
        /// <param name="singleFaceInfo">单人脸信息</param>
        /// <returns>单人脸特征</returns>
        public static FaceFeature ExtractFeature(FaceEngine faceEngine, Image image, SingleFaceInfo singleFaceInfo)
        {
            FaceFeature faceFeature = null;

            try
            {
                MultiFaceInfo multiFaceInfo = new MultiFaceInfo();
                multiFaceInfo.faceNum             = 1;
                multiFaceInfo.faceOrients         = new int[1];
                multiFaceInfo.faceOrients[0]      = singleFaceInfo.faceOrient;
                multiFaceInfo.faceRects           = new MRECT[1];
                multiFaceInfo.faceRects[0]        = singleFaceInfo.faceRect;
                multiFaceInfo.faceDataInfoList    = new FaceDataInfo[1];
                multiFaceInfo.faceDataInfoList[0] = singleFaceInfo.faceDataInfo;
                //口罩检测
                int      retCode  = -1;
                MaskInfo maskInfo = MaskEstimation(faceEngine, image, singleFaceInfo, out retCode);
                if (retCode != 0 || maskInfo.maskArray == null || maskInfo.maskArray.Length <= 0)
                {
                    return(faceFeature);
                }
                bool isMask = maskInfo.maskArray[0].Equals(1);
                faceEngine.ASFFaceFeatureExtractEx(image, multiFaceInfo, ASF_RegisterOrNot.ASF_RECOGNITION, out faceFeature, 0, isMask);
            }
            catch (Exception ex)
            {
                LogUtil.LogInfo(typeof(FaceUtil), ex);
            }
            return(faceFeature);
        }
 // Token: 0x060002AB RID: 683 RVA: 0x00016864 File Offset: 0x00014A64
 public void SetSlotVisibles(Maid maid, Dictionary <TBody.SlotID, MaskInfo> maskDic, bool temporary)
 {
     foreach (KeyValuePair <TBody.SlotID, MaskInfo> keyValuePair in maskDic)
     {
         MaskInfo value = keyValuePair.Value;
         if (value.state != SlotState.NotLoaded)
         {
             value.slot.boVisible = value.value;
             if (!temporary)
             {
                 TBodySkin slot = maid.body0.GetSlot((int)keyValuePair.Key);
                 if (!value.value)
                 {
                     slot.listMaskSlot.Add((int)keyValuePair.Key);
                 }
                 else
                 {
                     foreach (TBodySkin tbodySkin in maid.body0.goSlot)
                     {
                         tbodySkin.listMaskSlot.Remove((int)keyValuePair.Key);
                     }
                 }
             }
         }
     }
 }
Esempio n. 5
0
        /// <summary>
        /// 提取人脸特征,多人脸默认取第一个人脸特征
        /// </summary>
        /// <param name="pEngine">引擎Handle</param>
        /// <param name="image">图像</param>
        /// <param name="thresold">图像质量检测阈值</param>
        /// <returns>保存人脸特征结构体指针</returns>
        public static FaceFeature ExtractFeature(FaceEngine faceEngine, Image image, float thresoldImg, float thresoleImgMask, ASF_RegisterOrNot registerOrNot, out SingleFaceInfo singleFaceInfo, out bool isMask, ref string featureResult, out int retCode, int faceIndex = 0)
        {
            FaceFeature faceFeature = new FaceFeature();

            singleFaceInfo = new SingleFaceInfo();
            isMask         = false;
            retCode        = -1;
            try
            {
                if (image == null)
                {
                    return(faceFeature);
                }
                MultiFaceInfo multiFaceInfo;
                //人脸检测
                retCode = faceEngine.ASFDetectFacesEx(image, out multiFaceInfo);
                if (retCode != 0 || multiFaceInfo.faceNum <= 0)
                {
                    featureResult = string.Format("{1},接口返回值:{0}", retCode, retCode != 0 ? "人脸检测失败" : "检测到的人脸数为0");
                    return(faceFeature);
                }

                singleFaceInfo.faceOrient   = multiFaceInfo.faceOrients[faceIndex];
                singleFaceInfo.faceRect     = multiFaceInfo.faceRects[faceIndex];
                singleFaceInfo.faceDataInfo = multiFaceInfo.faceDataInfoList[faceIndex];

                //口罩检测
                MaskInfo maskInfo = MaskEstimation(faceEngine, image, singleFaceInfo, out retCode);
                if (retCode != 0 || maskInfo.maskArray == null || maskInfo.maskArray.Length <= 0)
                {
                    featureResult = string.Format("{1},接口返回值:{0}", retCode, retCode != 0 ? "口罩检测失败" : "检测到的口罩结果为空");
                    return(faceFeature);
                }
                isMask = maskInfo.maskArray[0].Equals(1);
                //图像质量检测
                float confidenceLevel = 0.0f;
                retCode = faceEngine.ASFImageQualityDetectEx(image, multiFaceInfo, out confidenceLevel, faceIndex, isMask);
                if (retCode != 0 || confidenceLevel < (isMask ? thresoleImgMask : thresoldImg))
                {
                    featureResult = string.Format("{1},接口返回值:{0}", retCode, retCode != 0 ? "图像质量检测失败" : "图像质量过低");
                    return(faceFeature);
                }
                //特征提取
                retCode = faceEngine.ASFFaceFeatureExtractEx(image, multiFaceInfo, registerOrNot, out faceFeature, faceIndex, isMask);
                if (retCode != 0)
                {
                    featureResult = string.Format("特征提取失败,接口返回值:{0}", retCode);
                }
            }
            catch (Exception ex)
            {
                LogUtil.LogInfo(typeof(FaceUtil), ex);
            }
            return(faceFeature);
        }
        private void Menu_AddStat_Click(object sender, System.EventArgs e)
        {
            MaskInfo info = new MaskInfo();

            TreeNode node = new TreeNode(info.ToString());

            node.Tag = info;

            this.C_GroupInfoTree.Nodes.Add(node);

            UpdateTextDisplay();
        }
        private void ConvertOldMaskInfos()
        {
            #region Convert Old Mask Info
            if (_MaskInfoSetting.Count > 0 && this._MakeChanges)
            {
                MaskInfo maskInfo = this._MaskInfoSetting[0] as MaskInfo;

                if (maskInfo != null)
                {
                    if (maskInfo.ShowTitle)
                    {
                        this._ColumnsWidth.Add(maskInfo.TitleWidth);
                    }

                    this.ColumnsWidth.Add(maskInfo.MaskedWidth);

                    MaskInfo maskInfoCopy = maskInfo.Copy();

                    maskInfoCopy.BrotherMaskInfos = new MaskInfoCollection();

                    for (int i = 1; i < this._MaskInfoSetting.Count; i++)
                    {
                        MaskInfo brotherMaskInfo = this._MaskInfoSetting[i] as MaskInfo;

                        if (brotherMaskInfo.ShowTitle)
                        {
                            this._ColumnsWidth.Add(brotherMaskInfo.TitleWidth);
                        }

                        this._ColumnsWidth.Add(brotherMaskInfo.MaskedWidth);

                        maskInfoCopy.BrotherMaskInfos.Add(brotherMaskInfo.Copy());
                    }

                    this._MaskInfoSetting.Clear();

                    this._MaskInfoSetting.Add(maskInfoCopy);

                    this._MakeChanges = false;
                }
            }
            #endregion
        }
        /// <summary>
        /// スロットの可視性を設定する.
        /// temporaryにtrueを設定すると可視性のみ設定するがfalseの場合は、スロットへのマスク設定を行う
        /// </summary>
        /// <param name="maskDic">マスク設定Dic</param>
        /// <param name="temporary">一時適用フラグ</param>
        public void SetSlotVisibles(Dictionary <TBody.SlotID, MaskInfo> maskDic, bool temporary)
        {
//            Hashtable m_foceHide = GetMaskTable();
//            if (m_foceHide == null) {
//                LogUtil.Error("cannot take MaskTable");
//                return;
//            }

            foreach (KeyValuePair <TBody.SlotID, MaskInfo> pair in maskDic)
            {
                MaskInfo maskInfo = pair.Value;
                // 未読み込みの場合はスキップ

                if (maskInfo.state == SlotState.NotLoaded)
                {
                    continue;
                }

                maskInfo.slot.boVisible = maskInfo.value;

                if (!temporary)
                {
                    TBodySkin slot = currentMaid.body0.GetSlot((int)pair.Key);
                    if (!maskInfo.value)
                    {
                        slot.listMaskSlot.Add((int)pair.Key);
                    }
                    else
                    {
                        // 全スロットから削除する
                        //slot.listMaskSlot.Remove((int)pair.Key);
                        foreach (TBodySkin tBodySkin in currentMaid.body0.goSlot)
                        {
                            tBodySkin.listMaskSlot.Remove((int)pair.Key);
                        }
                    }
                    // 下記の情報はGetMaskで取得されるフラグに関するものであるが、
                    // maskItemとは別で、下着モード、ヌードモードなどの指定で使われるフラグ
                    //if (!tmp) m_foceHide[pair.Key] = !maskInfo.value;
                }
            }
        }
Esempio n. 9
0
        private void refreshMaskBounds(bool[][] mask, Vector2 offset)
        {
            int   width  = mask.Length;
            int   height = width == 0 ? 0 : mask[0].Length;
            float minX   = refreshBoundsUpwards(mask, width, height, isThereMaskInRow) + (int)offset.X;
            float maxX   = refreshBoundsDownwards(mask, width, height, isThereMaskInRow) + (int)offset.X;
            float minY   = refreshBoundsUpwards(mask, height, width, isThereMaskInColumn) + (int)offset.Y;
            float maxY   = refreshBoundsDownwards(mask, height, width, isThereMaskInColumn) + (int)offset.Y;

            _maskInfo = new MaskInfo
            {
                Width  = width,
                Height = height,
                Offset = offset,
                Mask   = mask,
                MinX   = minX,
                MaxX   = maxX,
                MinY   = minY,
                MaxY   = maxY
            };
        }
Esempio n. 10
0
        private void Menu_CopyStat_Click(object sender, System.EventArgs e)
        {
            TreeNode node = this.C_GroupInfoTree.SelectedNode;

            if (node == null)
            {
                return;
            }

            MaskInfo info = node.Tag as MaskInfo;

            MaskInfo newInfo = info.Copy();

            TreeNode newNode = new TreeNode(newInfo.ToString());

            newNode.Tag = newInfo;

            this.C_GroupInfoTree.Nodes.Add(newNode);

            this.UpdateTextDisplay();

            this.C_GroupInfoTree.SelectedNode = node;
        }
Esempio n. 11
0
 internal void AddExempt(MaskInfo channelListItemInfo)
 {
     exempts.Add(channelListItemInfo);
 }
Esempio n. 12
0
 internal void AddInvite(MaskInfo channelListItemInfo)
 {
     invite.Add(channelListItemInfo);
 }
Esempio n. 13
0
 internal void AddBan(MaskInfo banInfo)
 {
     bans.Add(banInfo);
 }