日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 离线人脸识别 ArcSoft

發布時間:2023/12/4 C# 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 离线人脸识别 ArcSoft 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

人臉識別&比對發展到今天,已經是一個非常成熟的技術了,而且應用在生活的方方面面,比如手機、車站、天網等。


虹軟人臉識別服務是免費的。最重要的是它還支持離線識別,并且提供Android、iOS、C++、C#版SDK,現在已經升級到全新的3.0版本,支持活體識別。包含人臉檢測,人臉對比,人臉檢索功能.

過程如下:

1、 傳入一張單人臉照片;

2、調用檢測人臉函數ASFDetectFaces,成功返回人臉信息的指針;

3、使用 Marshal.ReadByte(intPtr,offset) 函數讀出字節數,發現前16個字節是人臉框范圍。

/// <summary> /// 初始化引擎 /// </summary> private void InitEngines() { //讀取配置文件 AppSettingsReader reader = new AppSettingsReader(); string appId = (string)reader.GetValue("APP_ID", typeof(string)); string sdkKey64 = (string)reader.GetValue("SDKKEY64", typeof(string)); string sdkKey32 = (string)reader.GetValue("SDKKEY32", typeof(string)); rgbCameraIndex = (int)reader.GetValue("RGB_CAMERA_INDEX", typeof(int)); irCameraIndex = (int)reader.GetValue("IR_CAMERA_INDEX", typeof(int)); //判斷CPU位數 var is64CPU = Environment.Is64BitProcess; if (string.IsNullOrWhiteSpace(appId) || string.IsNullOrWhiteSpace(is64CPU?sdkKey64: sdkKey32)) { //禁用相關功能按鈕 ControlsEnable(false, chooseMultiImgBtn, matchBtn, btnClearFaceList, chooseImgBtn); MessageBox.Show(string.Format("請在App.config配置文件中先配置APP_ID和SDKKEY{0}!", is64CPU ? "64" : "32")); return; } //在線激活引擎 如出現錯誤,1.請先確認從官網下載的sdk庫已放到對應的bin中,2.當前選擇的CPU為x86或者x64 int retCode = 0; try { retCode = ASFFunctions.ASFActivation(appId, is64CPU ? sdkKey64 : sdkKey32); } catch (Exception ex) { //禁用相關功能按鈕 ControlsEnable(false, chooseMultiImgBtn, matchBtn, btnClearFaceList, chooseImgBtn); if (ex.Message.Contains("無法加載 DLL")) { MessageBox.Show("請將sdk相關DLL放入bin對應的x86或x64下的文件夾中!"); } else { MessageBox.Show("激活引擎失敗!"); } return; } Console.WriteLine("Activate Result:" + retCode); //初始化引擎 uint detectMode = DetectionMode.ASF_DETECT_MODE_IMAGE; //Video模式下檢測臉部的角度優先值 int videoDetectFaceOrientPriority = ASF_OrientPriority.ASF_OP_0_HIGHER_EXT; //Image模式下檢測臉部的角度優先值 int imageDetectFaceOrientPriority = ASF_OrientPriority.ASF_OP_0_ONLY; //人臉在圖片中所占比例,如果需要調整檢測人臉尺寸請修改此值,有效數值為2-32 int detectFaceScaleVal = 16; //最大需要檢測的人臉個數 int detectFaceMaxNum = 5; //引擎初始化時需要初始化的檢測功能組合 int combinedMask = FaceEngineMask.ASF_FACE_DETECT | FaceEngineMask.ASF_FACERECOGNITION | FaceEngineMask.ASF_AGE | FaceEngineMask.ASF_GENDER | FaceEngineMask.ASF_FACE3DANGLE; //初始化引擎,正常值為0,其他返回值請參考http://ai.arcsoft.com.cn/bbs/forum.php?mod=viewthread&tid=19&_dsign=dbad527e retCode = ASFFunctions.ASFInitEngine(detectMode, imageDetectFaceOrientPriority, detectFaceScaleVal, detectFaceMaxNum, combinedMask, ref pImageEngine); Console.WriteLine("InitEngine Result:" + retCode); AppendText((retCode == 0) ? "引擎初始化成功!\n" : string.Format("引擎初始化失敗!錯誤碼為:{0}\n", retCode)); if (retCode != 0) { //禁用相關功能按鈕 ControlsEnable(false, chooseMultiImgBtn, matchBtn, btnClearFaceList, chooseImgBtn); } //初始化視頻模式下人臉檢測引擎 uint detectModeVideo = DetectionMode.ASF_DETECT_MODE_VIDEO; int combinedMaskVideo = FaceEngineMask.ASF_FACE_DETECT | FaceEngineMask.ASF_FACERECOGNITION; retCode = ASFFunctions.ASFInitEngine(detectModeVideo, videoDetectFaceOrientPriority, detectFaceScaleVal, detectFaceMaxNum, combinedMaskVideo, ref pVideoEngine); //RGB視頻專用FR引擎 detectFaceMaxNum = 1; combinedMask = FaceEngineMask.ASF_FACE_DETECT | FaceEngineMask.ASF_FACERECOGNITION | FaceEngineMask.ASF_LIVENESS; retCode = ASFFunctions.ASFInitEngine(detectMode, imageDetectFaceOrientPriority, detectFaceScaleVal, detectFaceMaxNum, combinedMask, ref pVideoRGBImageEngine); //IR視頻專用FR引擎 combinedMask = FaceEngineMask.ASF_FACE_DETECT | FaceEngineMask.ASF_FACERECOGNITION | FaceEngineMask.ASF_IR_LIVENESS; retCode = ASFFunctions.ASFInitEngine(detectMode, imageDetectFaceOrientPriority, detectFaceScaleVal, detectFaceMaxNum, combinedMask, ref pVideoIRImageEngine); Console.WriteLine("InitVideoEngine Result:" + retCode); initVideo(); } /// <summary> /// 攝像頭初始化 /// </summary> private void initVideo() { filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice); //如果沒有可用攝像頭,“啟用攝像頭”按鈕禁用,否則使可用 if (filterInfoCollection.Count == 0) { btnStartVideo.Enabled = false; } else { btnStartVideo.Enabled = true; } } #endregion #region 注冊人臉按鈕事件 private object locker = new object(); /// <summary> /// 人臉庫圖片選擇按鈕事件 /// </summary> private void ChooseMultiImg(object sender, EventArgs e) { lock (locker) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "選擇圖片"; openFileDialog.Filter = "圖片文件|*.bmp;*.jpg;*.jpeg;*.png"; openFileDialog.Multiselect = true; openFileDialog.FileName = string.Empty; imageList.Refresh(); if (openFileDialog.ShowDialog() == DialogResult.OK) { List<string> imagePathListTemp = new List<string>(); var numStart = imagePathList.Count; int isGoodImage = 0; //保存圖片路徑并顯示 string[] fileNames = openFileDialog.FileNames; for (int i = 0; i < fileNames.Length; i++) { //圖片格式判斷 if (checkImage(fileNames[i])) { imagePathListTemp.Add(fileNames[i]); } } //人臉檢測以及提取人臉特征 ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { //禁止點擊按鈕 Invoke(new Action(delegate { chooseMultiImgBtn.Enabled = false; matchBtn.Enabled = false; btnClearFaceList.Enabled = false; chooseImgBtn.Enabled = false; btnStartVideo.Enabled = false; })); //人臉檢測和剪裁 for (int i = 0; i < imagePathListTemp.Count; i++) { Image image = ImageUtil.readFromFile(imagePathListTemp[i]); if(image == null) { continue; } if (image.Width > 1536 || image.Height > 1536) { image = ImageUtil.ScaleImage(image, 1536, 1536); } if (image == null) { continue; } if (image.Width % 4 != 0) { image = ImageUtil.ScaleImage(image, image.Width - (image.Width % 4), image.Height); } //人臉檢測 ASF_MultiFaceInfo multiFaceInfo = FaceUtil.DetectFace(pImageEngine, image); //判斷檢測結果 if (multiFaceInfo.faceNum > 0) { imagePathList.Add(imagePathListTemp[i]); MRECT rect = MemoryUtil.PtrToStructure<MRECT>(multiFaceInfo.faceRects); image = ImageUtil.CutImage(image, rect.left, rect.top, rect.right, rect.bottom); } else { if(image != null) { image.Dispose(); } continue; } //顯示人臉 this.Invoke(new Action(delegate { if (image == null) { image = ImageUtil.readFromFile(imagePathListTemp[i]); if (image.Width > 1536 || image.Height > 1536) { image = ImageUtil.ScaleImage(image, 1536, 1536); } } imageLists.Images.Add(imagePathListTemp[i], image); imageList.Items.Add((numStart + isGoodImage) + "號", imagePathListTemp[i]); imageList.Refresh(); isGoodImage += 1; if (image != null) { image.Dispose(); } })); } //提取人臉特征 for (int i = numStart; i < imagePathList.Count; i++) { ASF_SingleFaceInfo singleFaceInfo = new ASF_SingleFaceInfo(); Image image = ImageUtil.readFromFile(imagePathList[i]); if (image == null) { continue; } IntPtr feature = FaceUtil.ExtractFeature(pImageEngine, image, out singleFaceInfo); this.Invoke(new Action(delegate { if (singleFaceInfo.faceRect.left == 0 && singleFaceInfo.faceRect.right == 0) { AppendText(string.Format("{0}號未檢測到人臉\r\n", i)); } else { AppendText(string.Format("已提取{0}號人臉特征值,[left:{1},right:{2},top:{3},bottom:{4},orient:{5}]\r\n", i, singleFaceInfo.faceRect.left, singleFaceInfo.faceRect.right, singleFaceInfo.faceRect.top, singleFaceInfo.faceRect.bottom, singleFaceInfo.faceOrient)); imagesFeatureList.Add(feature); } })); if (image != null) { image.Dispose(); } } //允許點擊按鈕 Invoke(new Action(delegate { chooseMultiImgBtn.Enabled = true; btnClearFaceList.Enabled = true; btnStartVideo.Enabled = true; if (btnStartVideo.Text == "啟用攝像頭") { chooseImgBtn.Enabled = true; matchBtn.Enabled = true; } else { chooseImgBtn.Enabled = false; matchBtn.Enabled = false; } })); })); } } } #endregion #region 清空人臉庫按鈕事件 /// <summary> /// 清除人臉庫事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnClearFaceList_Click(object sender, EventArgs e) { //清除數據 imageLists.Images.Clear(); imageList.Items.Clear(); foreach (IntPtr intptr in imagesFeatureList) { MemoryUtil.Free(intptr); } imagesFeatureList.Clear(); imagePathList.Clear(); } #endregion #region 選擇識別圖按鈕事件 /// <summary> /// “選擇識別圖片”按鈕事件 /// </summary> private void ChooseImg(object sender, EventArgs e) { lblCompareInfo.Text = ""; //判斷引擎是否初始化成功 if (pImageEngine == IntPtr.Zero) { //禁用相關功能按鈕 ControlsEnable(false, chooseMultiImgBtn, matchBtn, btnClearFaceList, chooseImgBtn); MessageBox.Show("請先初始化引擎!"); return; } //選擇圖片 OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "選擇圖片"; openFileDialog.Filter = "圖片文件|*.bmp;*.jpg;*.jpeg;*.png"; openFileDialog.Multiselect = false; openFileDialog.FileName = string.Empty; if (openFileDialog.ShowDialog() == DialogResult.OK) { image1Path = openFileDialog.FileName; //檢測圖片格式 if (!checkImage(image1Path)) { return; } DateTime detectStartTime = DateTime.Now; AppendText(string.Format("------------------------------開始檢測,時間:{0}------------------------------\n", detectStartTime.ToString("yyyy-MM-dd HH:mm:ss:ms"))); //獲取文件,拒絕過大的圖片 FileInfo fileInfo = new FileInfo(image1Path); if (fileInfo.Length > maxSize) { MessageBox.Show("圖像文件最大為2MB,請壓縮后再導入!"); AppendText(string.Format("------------------------------檢測結束,時間:{0}------------------------------\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"))); AppendText("\n"); return; } Image srcImage = ImageUtil.readFromFile(image1Path); if (srcImage == null) { MessageBox.Show("圖像數據獲取失敗,請稍后重試!"); AppendText(string.Format("------------------------------檢測結束,時間:{0}------------------------------\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"))); AppendText("\n"); return; } if (srcImage.Width > 1536 || srcImage.Height > 1536) { srcImage = ImageUtil.ScaleImage(srcImage, 1536, 1536); } if (srcImage == null) { MessageBox.Show("圖像數據獲取失敗,請稍后重試!"); AppendText(string.Format("------------------------------檢測結束,時間:{0}------------------------------\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"))); AppendText("\n"); return; } //調整圖像寬度,需要寬度為4的倍數 if (srcImage.Width % 4 != 0) { srcImage = ImageUtil.ScaleImage(srcImage, srcImage.Width - (srcImage.Width % 4), srcImage.Height); } //調整圖片數據,非常重要 ImageInfo imageInfo = ImageUtil.ReadBMP(srcImage); if (imageInfo == null) { MessageBox.Show("圖像數據獲取失敗,請稍后重試!"); AppendText(string.Format("------------------------------檢測結束,時間:{0}------------------------------\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"))); AppendText("\n"); return; } //人臉檢測 ASF_MultiFaceInfo multiFaceInfo = FaceUtil.DetectFace(pImageEngine, imageInfo); //年齡檢測 int retCode_Age = -1; ASF_AgeInfo ageInfo = FaceUtil.AgeEstimation(pImageEngine, imageInfo, multiFaceInfo, out retCode_Age); //性別檢測 int retCode_Gender = -1; ASF_GenderInfo genderInfo = FaceUtil.GenderEstimation(pImageEngine, imageInfo, multiFaceInfo, out retCode_Gender); //3DAngle檢測 int retCode_3DAngle = -1; ASF_Face3DAngle face3DAngleInfo = FaceUtil.Face3DAngleDetection(pImageEngine, imageInfo, multiFaceInfo, out retCode_3DAngle); MemoryUtil.Free(imageInfo.imgData); if (multiFaceInfo.faceNum < 1) { srcImage = ImageUtil.ScaleImage(srcImage, picImageCompare.Width, picImageCompare.Height); image1Feature = IntPtr.Zero; picImageCompare.Image = srcImage; AppendText(string.Format("{0} - 未檢測出人臉!\n\n", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); AppendText(string.Format("------------------------------檢測結束,時間:{0}------------------------------\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"))); AppendText("\n"); return; } MRECT temp = new MRECT(); int ageTemp = 0; int genderTemp = 0; int rectTemp = 0; //標記出檢測到的人臉 for (int i = 0; i < multiFaceInfo.faceNum; i++) { MRECT rect = MemoryUtil.PtrToStructure<MRECT>(multiFaceInfo.faceRects + MemoryUtil.SizeOf<MRECT>() * i); int orient = MemoryUtil.PtrToStructure<int>(multiFaceInfo.faceOrients + MemoryUtil.SizeOf<int>() * i); int age = 0; if (retCode_Age != 0) { AppendText(string.Format("年齡檢測失敗,返回{0}!\n\n", retCode_Age)); } else { age = MemoryUtil.PtrToStructure<int>(ageInfo.ageArray + MemoryUtil.SizeOf<int>() * i); } int gender = -1; if (retCode_Gender != 0) { AppendText(string.Format("性別檢測失敗,返回{0}!\n\n", retCode_Gender)); } else { gender = MemoryUtil.PtrToStructure<int>(genderInfo.genderArray + MemoryUtil.SizeOf<int>() * i); } int face3DStatus = -1; float roll = 0f; float pitch = 0f; float yaw = 0f; if (retCode_3DAngle != 0) { AppendText(string.Format("3DAngle檢測失敗,返回{0}!\n\n", retCode_3DAngle)); } else { //角度狀態 非0表示人臉不可信 face3DStatus = MemoryUtil.PtrToStructure<int>(face3DAngleInfo.status + MemoryUtil.SizeOf<int>() * i); //roll為側傾角,pitch為俯仰角,yaw為偏航角 roll = MemoryUtil.PtrToStructure<float>(face3DAngleInfo.roll + MemoryUtil.SizeOf<float>() * i); pitch = MemoryUtil.PtrToStructure<float>(face3DAngleInfo.pitch + MemoryUtil.SizeOf<float>() * i); yaw = MemoryUtil.PtrToStructure<float>(face3DAngleInfo.yaw + MemoryUtil.SizeOf<float>() * i); } int rectWidth = rect.right - rect.left; int rectHeight = rect.bottom - rect.top; //查找最大人臉 if (rectWidth * rectHeight > rectTemp) { rectTemp = rectWidth * rectHeight; temp = rect; ageTemp = age; genderTemp = gender; } AppendText(string.Format("{0} - 人臉坐標:[left:{1},top:{2},right:{3},bottom:{4},orient:{5},roll:{6},pitch:{7},yaw:{8},status:{11}] Age:{9} Gender:{10}\n", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), rect.left, rect.top, rect.right, rect.bottom, orient, roll, pitch, yaw, age, (gender >= 0 ? gender.ToString() : ""), face3DStatus)); } AppendText(string.Format("{0} - 人臉數量:{1}\n\n", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), multiFaceInfo.faceNum)); DateTime detectEndTime = DateTime.Now; AppendText(string.Format("------------------------------檢測結束,時間:{0}------------------------------\n", detectEndTime.ToString("yyyy-MM-dd HH:mm:ss:ms"))); AppendText("\n"); ASF_SingleFaceInfo singleFaceInfo = new ASF_SingleFaceInfo(); //提取人臉特征 image1Feature = FaceUtil.ExtractFeature(pImageEngine, srcImage, out singleFaceInfo); //清空上次的匹配結果 for (int i = 0; i < imagesFeatureList.Count; i++) { imageList.Items[i].Text = string.Format("{0}號", i); } //獲取縮放比例 float scaleRate = ImageUtil.getWidthAndHeight(srcImage.Width, srcImage.Height, picImageCompare.Width, picImageCompare.Height); //縮放圖片 srcImage = ImageUtil.ScaleImage(srcImage, picImageCompare.Width, picImageCompare.Height); //添加標記 srcImage = ImageUtil.MarkRectAndString(srcImage, (int)(temp.left * scaleRate), (int)(temp.top * scaleRate), (int)(temp.right * scaleRate) - (int)(temp.left * scaleRate), (int)(temp.bottom * scaleRate) - (int)(temp.top * scaleRate), ageTemp, genderTemp, picImageCompare.Width); //顯示標記后的圖像 picImageCompare.Image = srcImage; } } #endregion #region 開始匹配按鈕事件 /// <summary> /// 匹配事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void matchBtn_Click(object sender, EventArgs e) { if (imagesFeatureList.Count == 0) { MessageBox.Show("請注冊人臉!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (image1Feature == IntPtr.Zero) { if (picImageCompare.Image == null) { MessageBox.Show("請選擇識別圖!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show("比對失敗,識別圖未提取到特征值!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } return; } //標記已經做了匹配比對,在開啟視頻的時候要清除比對結果 isCompare = true; float compareSimilarity = 0f; int compareNum = 0; AppendText(string.Format("------------------------------開始比對,時間:{0}------------------------------\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"))); for (int i = 0; i < imagesFeatureList.Count; i++) { IntPtr feature = imagesFeatureList[i]; float similarity = 0f; int ret = ASFFunctions.ASFFaceFeatureCompare(pImageEngine, image1Feature, feature, ref similarity); //增加異常值處理 if(similarity.ToString().IndexOf("E") > -1) { similarity = 0f; } AppendText(string.Format("與{0}號比對結果:{1}\r\n", i, similarity)); imageList.Items[i].Text = string.Format("{0}號({1})", i, similarity); if (similarity > compareSimilarity) { compareSimilarity = similarity; compareNum = i; } } if (compareSimilarity > 0) { lblCompareInfo.Text = " " + compareNum + "號," + compareSimilarity; } AppendText(string.Format("------------------------------比對結束,時間:{0}------------------------------\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"))); } #endregion #region 視頻檢測相關(<攝像頭按鈕點擊事件、攝像頭Paint事件、特征比對、攝像頭播放完成事件>) /// <summary> /// 攝像頭按鈕點擊事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStartVideo_Click(object sender, EventArgs e) { //在點擊開始的時候再坐下初始化檢測,防止程序啟動時有攝像頭,在點擊攝像頭按鈕之前將攝像頭拔掉的情況 initVideo(); //必須保證有可用攝像頭 if (filterInfoCollection.Count == 0) { MessageBox.Show("未檢測到攝像頭,請確保已安裝攝像頭或驅動!"); return; } if (rgbVideoSource.IsRunning || irVideoSource.IsRunning) { btnStartVideo.Text = "啟用攝像頭"; //關閉攝像頭 if (irVideoSource.IsRunning) { irVideoSource.SignalToStop(); irVideoSource.Hide(); } if (rgbVideoSource.IsRunning) { rgbVideoSource.SignalToStop(); rgbVideoSource.Hide(); } //“選擇識別圖”、“開始匹配”按鈕可用,閾值控件禁用 chooseImgBtn.Enabled = true; matchBtn.Enabled = true; txtThreshold.Enabled = false; } else { if (isCompare) { //比對結果清除 for (int i = 0; i < imagesFeatureList.Count; i++) { imageList.Items[i].Text = string.Format("{0}號", i); } lblCompareInfo.Text = ""; isCompare = false; } //“選擇識別圖”、“開始匹配”按鈕禁用,閾值控件可用,顯示攝像頭控件 txtThreshold.Enabled = true; rgbVideoSource.Show(); irVideoSource.Show(); chooseImgBtn.Enabled = false; matchBtn.Enabled = false; btnStartVideo.Text = "關閉攝像頭"; //獲取filterInfoCollection的總數 int maxCameraCount = filterInfoCollection.Count; //如果配置了兩個不同的攝像頭索引 if(rgbCameraIndex != irCameraIndex && maxCameraCount>=2) { //RGB攝像頭加載 rgbDeviceVideo = new VideoCaptureDevice(filterInfoCollection[rgbCameraIndex < maxCameraCount ? rgbCameraIndex : 0].MonikerString); rgbDeviceVideo.VideoResolution = rgbDeviceVideo.VideoCapabilities[0]; rgbVideoSource.VideoSource = rgbDeviceVideo; rgbVideoSource.Start(); //IR攝像頭 irDeviceVideo = new VideoCaptureDevice(filterInfoCollection[irCameraIndex< maxCameraCount? irCameraIndex:0].MonikerString); irDeviceVideo.VideoResolution = irDeviceVideo.VideoCapabilities[0]; irVideoSource.VideoSource = irDeviceVideo; irVideoSource.Start(); //雙攝標志設為true isDoubleShot = true; } else { //僅打開RGB攝像頭,IR攝像頭控件隱藏 rgbDeviceVideo = new VideoCaptureDevice(filterInfoCollection[rgbCameraIndex <= maxCameraCount ? rgbCameraIndex : 0].MonikerString); rgbDeviceVideo.VideoResolution = rgbDeviceVideo.VideoCapabilities[0]; rgbVideoSource.VideoSource = rgbDeviceVideo; rgbVideoSource.Start(); irVideoSource.Hide(); } } } private FaceTrackUnit trackRGBUnit = new FaceTrackUnit(); private FaceTrackUnit trackIRUnit = new FaceTrackUnit(); private Font font = new Font(FontFamily.GenericSerif, 10f, FontStyle.Bold); private SolidBrush yellowBrush = new SolidBrush(Color.Yellow); private SolidBrush blueBrush = new SolidBrush(Color.Blue); private bool isRGBLock = false; private bool isIRLock = false; private MRECT allRect = new MRECT(); private object rectLock = new object(); /// <summary> /// RGB攝像頭Paint事件,圖像顯示到窗體上,得到每一幀圖像,并進行處理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void videoSource_Paint(object sender, PaintEventArgs e) { if (rgbVideoSource.IsRunning) { //得到當前RGB攝像頭下的圖片 Bitmap bitmap = rgbVideoSource.GetCurrentVideoFrame(); if (bitmap == null) { return; } //檢測人臉,得到Rect框 ASF_MultiFaceInfo multiFaceInfo = FaceUtil.DetectFace(pVideoEngine, bitmap); //得到最大人臉 ASF_SingleFaceInfo maxFace = FaceUtil.GetMaxFace(multiFaceInfo); //得到Rect MRECT rect = maxFace.faceRect; //檢測RGB攝像頭下最大人臉 Graphics g = e.Graphics; float offsetX = rgbVideoSource.Width * 1f / bitmap.Width; float offsetY = rgbVideoSource.Height * 1f / bitmap.Height; float x = rect.left * offsetX; float width = rect.right * offsetX - x; float y = rect.top * offsetY; float height = rect.bottom * offsetY - y; //根據Rect進行畫框 g.DrawRectangle(Pens.Red, x, y, width, height); if (trackRGBUnit.message != "" && x > 0 && y > 0) { //將上一幀檢測結果顯示到頁面上 g.DrawString(trackRGBUnit.message, font, trackRGBUnit.message.Contains("活體") ? blueBrush : yellowBrush, x, y - 15); } //保證只檢測一幀,防止頁面卡頓以及出現其他內存被占用情況 if (isRGBLock == false) { isRGBLock = true; //異步處理提取特征值和比對,不然頁面會比較卡 ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { if (rect.left != 0 && rect.right != 0 && rect.top != 0 && rect.bottom != 0) { try { lock (rectLock) { allRect.left = (int)(rect.left * offsetX); allRect.top = (int)(rect.top * offsetY); allRect.right = (int)(rect.right * offsetX); allRect.bottom = (int)(rect.bottom * offsetY); } bool isLiveness = false; //調整圖片數據,非常重要 ImageInfo imageInfo = ImageUtil.ReadBMP(bitmap); if (imageInfo == null) { return; } int retCode_Liveness = -1; //RGB活體檢測 ASF_LivenessInfo liveInfo = FaceUtil.LivenessInfo_RGB(pVideoRGBImageEngine, imageInfo, multiFaceInfo, out retCode_Liveness); //判斷檢測結果 if (retCode_Liveness == 0 && liveInfo.num > 0) { int isLive = MemoryUtil.PtrToStructure<int>(liveInfo.isLive); isLiveness = (isLive == 1) ? true : false; } if (imageInfo != null) { MemoryUtil.Free(imageInfo.imgData); } if (isLiveness) { //提取人臉特征 IntPtr feature = FaceUtil.ExtractFeature(pVideoRGBImageEngine, bitmap, maxFace); float similarity = 0f; //得到比對結果 int result = compareFeature(feature, out similarity); MemoryUtil.Free(feature); if (result > -1) { //將比對結果放到顯示消息中,用于最新顯示 trackRGBUnit.message = string.Format(" {0}號 {1},{2}", result, similarity, string.Format("RGB{0}", isLiveness ? "活體" : "假體")); } else { //顯示消息 trackRGBUnit.message = string.Format("RGB{0}", isLiveness ? "活體" : "假體"); } } else { //顯示消息 trackRGBUnit.message = string.Format("RGB{0}", isLiveness ? "活體" : "假體"); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if(bitmap != null) { bitmap.Dispose(); } isRGBLock = false; } } else { lock (rectLock) { allRect.left = 0; allRect.top = 0; allRect.right = 0; allRect.bottom = 0; } } isRGBLock = false; })); } } } /// <summary> /// RGB攝像頭Paint事件,同步RGB人臉框,對比人臉框后進行IR活體檢測 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void irVideoSource_Paint(object sender, PaintEventArgs e) { if (isDoubleShot && irVideoSource.IsRunning) { //如果雙攝,且IR攝像頭工作,獲取IR攝像頭圖片 Bitmap irBitmap = irVideoSource.GetCurrentVideoFrame(); if (irBitmap == null) { return; } //得到Rect MRECT rect = new MRECT(); lock (rectLock) { rect = allRect; } float irOffsetX = irVideoSource.Width * 1f / irBitmap.Width; float irOffsetY = irVideoSource.Height * 1f / irBitmap.Height; float offsetX = irVideoSource.Width * 1f / rgbVideoSource.Width; float offsetY = irVideoSource.Height * 1f / rgbVideoSource.Height; //檢測IR攝像頭下最大人臉 Graphics g = e.Graphics; float x = rect.left * offsetX; float width = rect.right * offsetX - x; float y = rect.top * offsetY; float height = rect.bottom * offsetY - y; //根據Rect進行畫框 g.DrawRectangle(Pens.Red, x, y, width, height); if (trackIRUnit.message != "" && x > 0 && y > 0) { //將上一幀檢測結果顯示到頁面上 g.DrawString(trackIRUnit.message, font, trackIRUnit.message.Contains("活體") ? blueBrush : yellowBrush, x, y - 15); } //保證只檢測一幀,防止頁面卡頓以及出現其他內存被占用情況 if (isIRLock == false) { isIRLock = true; //異步處理提取特征值和比對,不然頁面會比較卡 ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { if (rect.left != 0 && rect.right != 0 && rect.top != 0 && rect.bottom != 0) { bool isLiveness = false; try { //得到當前攝像頭下的圖片 if (irBitmap != null) { //檢測人臉,得到Rect框 ASF_MultiFaceInfo irMultiFaceInfo = FaceUtil.DetectFace(pVideoIRImageEngine, irBitmap); if (irMultiFaceInfo.faceNum <= 0) { return; } //得到最大人臉 ASF_SingleFaceInfo irMaxFace = FaceUtil.GetMaxFace(irMultiFaceInfo); //得到Rect MRECT irRect = irMaxFace.faceRect; //判斷RGB圖片檢測的人臉框與IR攝像頭檢測的人臉框偏移量是否在誤差允許范圍內 if (isInAllowErrorRange(rect.left * offsetX / irOffsetX, irRect.left) && isInAllowErrorRange(rect.right * offsetX / irOffsetX, irRect.right) && isInAllowErrorRange(rect.top * offsetY / irOffsetY, irRect.top) && isInAllowErrorRange(rect.bottom * offsetY / irOffsetY, irRect.bottom)) { int retCode_Liveness = -1; //將圖片進行灰度轉換,然后獲取圖片數據 ImageInfo irImageInfo = ImageUtil.ReadBMP_IR(irBitmap); if (irImageInfo == null) { return; } //IR活體檢測 ASF_LivenessInfo liveInfo = FaceUtil.LivenessInfo_IR(pVideoIRImageEngine, irImageInfo, irMultiFaceInfo, out retCode_Liveness); //判斷檢測結果 if (retCode_Liveness == 0 && liveInfo.num > 0) { int isLive = MemoryUtil.PtrToStructure<int>(liveInfo.isLive); isLiveness = (isLive == 1) ? true : false; } if (irImageInfo != null) { MemoryUtil.Free(irImageInfo.imgData); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { trackIRUnit.message = string.Format("IR{0}", isLiveness ? "活體" : "假體"); if (irBitmap != null) { irBitmap.Dispose(); } isIRLock = false; } } else { trackIRUnit.message = string.Empty; } isIRLock = false; })); } } } /// <summary> /// 得到feature比較結果 /// </summary> /// <param name="feature"></param> /// <returns></returns> private int compareFeature(IntPtr feature, out float similarity) { int result = -1; similarity = 0f; //如果人臉庫不為空,則進行人臉匹配 if (imagesFeatureList != null && imagesFeatureList.Count > 0) { for (int i = 0; i < imagesFeatureList.Count; i++) { //調用人臉匹配方法,進行匹配 ASFFunctions.ASFFaceFeatureCompare(pVideoRGBImageEngine, feature, imagesFeatureList[i], ref similarity); if (similarity >= threshold) { result = i; break; } } } return result; } /// <summary> /// 攝像頭播放完成事件 /// </summary> /// <param name="sender"></param> /// <param name="reason"></param> private void videoSource_PlayingFinished(object sender, AForge.Video.ReasonToFinishPlaying reason) { try { Control.CheckForIllegalCrossThreadCalls = false; chooseImgBtn.Enabled = true; matchBtn.Enabled = true; } catch (Exception e) { Console.WriteLine(e.Message); } } #endregion #region 閾值相關 /// <summary> /// 閾值文本框鍵按下事件,檢測輸入內容是否正確,不正確不能輸入 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void txtThreshold_KeyPress(object sender, KeyPressEventArgs e) { //阻止從鍵盤輸入鍵 e.Handled = true; //是數值鍵,回退鍵,.能輸入,其他不能輸入 if (char.IsDigit(e.KeyChar) || e.KeyChar == 8 || e.KeyChar == '.') { //渠道當前文本框的內容 string thresholdStr = txtThreshold.Text.Trim(); int countStr = 0; int startIndex = 0; //如果當前輸入的內容是否是“.” if (e.KeyChar == '.') { countStr = 1; } //檢測當前內容是否含有.的個數 if (thresholdStr.IndexOf('.', startIndex) > -1) { countStr += 1; } //如果輸入的內容已經超過12個字符, if (e.KeyChar != 8 && (thresholdStr.Length > 12 || countStr > 1)) { return; } e.Handled = false; } } /// <summary> /// 閾值文本框鍵抬起事件,檢測閾值是否正確,不正確改為0.8f /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void txtThreshold_KeyUp(object sender, KeyEventArgs e) { //如果輸入的內容不正確改為默認值 if (!float.TryParse(txtThreshold.Text.Trim(), out threshold)) { threshold = 0.8f; } } #endregion #region 窗體關閉 /// <summary> /// 窗體關閉事件 /// </summary> private void Form_Closed(object sender, FormClosedEventArgs e) { try { if (rgbVideoSource.IsRunning) { btnStartVideo_Click(sender, e); //關閉攝像頭 } //銷毀引擎 int retCode = ASFFunctions.ASFUninitEngine(pImageEngine); Console.WriteLine("UninitEngine pImageEngine Result:" + retCode); //銷毀引擎 retCode = ASFFunctions.ASFUninitEngine(pVideoEngine); Console.WriteLine("UninitEngine pVideoEngine Result:" + retCode); //銷毀引擎 retCode = ASFFunctions.ASFUninitEngine(pVideoRGBImageEngine); Console.WriteLine("UninitEngine pVideoImageEngine Result:" + retCode); //銷毀引擎 retCode = ASFFunctions.ASFUninitEngine(pVideoIRImageEngine); Console.WriteLine("UninitEngine pVideoIRImageEngine Result:" + retCode); } catch (Exception ex) { Console.WriteLine("UninitEngine pImageEngine Error:" + ex.Message); } } #endregion #region 公用方法 /// <summary> /// 恢復使用/禁用控件列表控件 /// </summary> /// <param name="isEnable"></param> /// <param name="controls">控件列表</param> private void ControlsEnable(bool isEnable,params Control[] controls) { if(controls == null || controls.Length <= 0) { return; } foreach(Control control in controls) { control.Enabled = isEnable; } } /// <summary> /// 校驗圖片 /// </summary> /// <param name="imagePath"></param> /// <returns></returns> private bool checkImage(string imagePath) { if (imagePath == null) { AppendText("圖片不存在,請確認后再導入\r\n"); return false; } try { //判斷圖片是否正常,如將其他文件把后綴改為.jpg,這樣就會報錯 Image image = ImageUtil.readFromFile(imagePath); if(image == null) { throw new Exception(); }else { image.Dispose(); } } catch { AppendText(string.Format("{0} 圖片格式有問題,請確認后再導入\r\n", imagePath)); return false; } FileInfo fileCheck = new FileInfo(imagePath); if (fileCheck.Exists == false) { AppendText(string.Format("{0} 不存在\r\n", fileCheck.Name)); return false; } else if (fileCheck.Length > maxSize) { AppendText(string.Format("{0} 圖片大小超過2M,請壓縮后再導入\r\n", fileCheck.Name)); return false; } else if (fileCheck.Length < 2) { AppendText(string.Format("{0} 圖像質量太小,請重新選擇\r\n", fileCheck.Name)); return false; } return true; } /// <summary> /// 追加公用方法 /// </summary> /// <param name="message"></param> private void AppendText(string message) { logBox.AppendText(message); } /// <summary> /// 判斷參數0與參數1是否在誤差允許范圍內 /// </summary> /// <param name="arg0">參數0</param> /// <param name="arg1">參數1</param> /// <returns></returns> private bool isInAllowErrorRange(float arg0, float arg1) { bool rel = false; if (arg0 > arg1 - allowAbleErrorRange && arg0 < arg1 + allowAbleErrorRange) { rel = true; } return rel; } #endregion }

總結

以上是生活随笔為你收集整理的C# 离线人脸识别 ArcSoft的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

aaa毛片视频| 日韩高清免费在线观看 | 精品视频在线免费观看 | 视频国产一区二区三区 | 午夜久久久久久久久久久 | 国产精品二区在线观看 | 天天操天天射天天操 | 少妇bbbb搡bbbb搡bbbb| 国内精品在线看 | 91亚洲国产成人久久精品网站 | 欧美一级乱黄 | 在线黄色国产电影 | av电影av在线 | 国产精品女人网站 | 黄色av电影网 | 91欧美在线 | 色综合久久久久综合体 | 97超碰色偷偷 | 国产精品手机视频 | 精品久久一区二区三区 | 日本久久免费电影 | 中文字幕乱码一区二区 | 中文字幕韩在线第一页 | 狠狠色丁香九九婷婷综合五月 | 狠狠狠干狠狠 | 日韩系列| 亚洲欧美日韩一级 | 91重口视频 | 久久免费中文视频 | 丁香婷婷射 | 狠狠色丁香婷婷综合最新地址 | 国产在线精品国自产拍影院 | 亚洲精品视频在线播放 | 成人sm另类专区 | 国产成人免费av电影 | 国产福利一区二区三区在线观看 | 色欧美成人精品a∨在线观看 | 蜜臀aⅴ国产精品久久久国产 | 国产免费大片 | 欧美精品免费一区二区 | 超碰免费久久 | 97夜夜澡人人双人人人喊 | 成人国产精品久久久久久亚洲 | 国产视频美女 | 久久久久女人精品毛片九一 | 国产青春久久久国产毛片 | 偷拍区另类综合在线 | 国产精品欧美久久久久天天影视 | 91精品啪在线观看国产 | 免费h精品视频在线播放 | 亚州精品在线视频 | 亚洲成人精品国产 | 在线观看视频国产一区 | 免费看成人片 | 久久婷婷一区二区三区 | 五月天色丁香 | 韩国精品福利一区二区三区 | 日韩久久午夜一级啪啪 | 久久五月婷婷丁香 | 日本视频精品 | 天天操夜夜叫 | 色婷婷综合久久久久 | 日韩精品一区二区三区高清免费 | 国产精品av一区二区 | 国产精品麻豆三级一区视频 | 99久久夜色精品国产亚洲96 | 亚洲女人天堂成人av在线 | 日韩精品一区二区三区免费视频观看 | 久草在线视频网 | 国产精品乱码一区二三区 | 国产爽妇网 | 日本中文字幕网 | 激情婷婷丁香 | 成人av电影免费在线观看 | 黄色在线观看免费网站 | 在线观看91久久久久久 | 亚洲国产精品影院 | 国产精品一区二区av日韩在线 | 精品成人国产 | 免费在线精品视频 | 欧美在线观看小视频 | 久久免费电影网 | 国产精品系列在线观看 | 日韩中文字幕免费在线播放 | 一区二区电影在线观看 | 91麻豆文化传媒在线观看 | 国产成人高清av | 日本视频久久久 | 亚洲成a人片在线观看网站口工 | 中文字幕免费观看 | 欧美在线一二区 | av中文字幕亚洲 | 一区二区三区精品在线视频 | 欧美a级片免费看 | 亚洲 中文 欧美 日韩vr 在线 | 日韩av视屏在线观看 | 97超碰人人澡人人爱 | 国产不卡一区二区视频 | 国产日产av | 五月婷婷综合久久 | 久久亚洲私人国产精品 | 国产一级免费观看视频 | 9i看片成人免费看片 | 91网址在线 | 久久麻豆精品 | 久久成人国产 | 欧洲性视频 | 欧美日韩国产色综合一二三四 | 久免费视频 | 久久一线| 最新国产福利 | 69国产盗摄一区二区三区五区 | 天天人人综合 | 国产午夜一区 | 免费在线中文字幕 | 天天综合视频在线观看 | 激情综合网五月婷婷 | 亚洲乱码精品久久久 | 色视频网站免费观看 | 欧美日韩3p| 色无五月| 欧美 激情 国产 91 在线 | 日韩高清精品一区二区 | 国产99久久久欧美黑人 | 国产精品久久久久久久久免费看 | 黄色三级av | 国产精品久久一区二区三区不卡 | 超碰人人91 | 波多野结衣在线中文字幕 | 中文综合在线 | 国产精品99在线播放 | 亚洲黄色在线 | 欧美性直播| 国产日韩中文字幕 | 国产精品久久久久久久久久久久冷 | 成人av网站在线 | 国产五月婷 | 欧美最爽乱淫视频播放 | 在线三级中文 | 午夜精品视频一区二区三区在线看 | 97超级碰碰碰视频在线观看 | 成人在线观看网址 | www免费看 | 国产69精品久久99不卡的观看体验 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 91超级碰碰 | 探花视频在线观看 | 久久精品99国产精品酒店日本 | www.色爱| 欧美日韩在线观看一区二区三区 | av免费网 | 99久久精品免费看 | 日韩精品在线观看视频 | 欧美一级日韩免费不卡 | 久久国产精品免费视频 | 有没有在线观看av | 永久免费毛片 | 国产一级免费在线观看 | 亚洲精品xxx| 亚洲免费小视频 | 久草在线资源免费 | 日韩精品免费在线观看 | 中日韩三级视频 | 国产成人精品国内自产拍免费看 | 色av网站 | 婷婷 中文字幕 | 精品96久久久久久中文字幕无 | 国产一级免费观看视频 | 婷婷av色综合 | 精品久久久久久久久久久院品网 | 手机看片中文字幕 | 免费人成在线观看网站 | 久久精品视频3 | 精品国产电影 | 中文字幕国产视频 | 国产精品短视频 | 午夜美女福利 | 涩涩网站在线观看 | 九九热在线免费观看 | 91免费观看国产 | 四虎天堂 | www.婷婷com | 日韩一区二区三区免费视频 | 中国一级片免费看 | 九九热视频在线播放 | 精品国产一区二区在线 | 欧美在线一二区 | 91精品国产自产在线观看永久 | 天天天天天天天天操 | 成年人在线 | 色吊丝在线永久观看最新版本 | 国产精品嫩草在线 | 99在线免费视频 | 国产999久久久 | 免费视频99 | 国产午夜麻豆影院在线观看 | 欧美成人tv | 手机av电影在线观看 | 日本公乱妇视频 | 超碰在线个人 | 91人人澡人人爽人人精品 | 91视频国产免费 | 国产性天天综合网 | 久久亚洲综合国产精品99麻豆的功能介绍 | 国产在线观看免 | 成年人视频在线 | 欧美性做爰猛烈叫床潮 | 深夜福利视频一区二区 | 日韩高清不卡在线 | 超碰国产在线观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 久久99热国产 | 久久久久久久电影 | 亚洲精品在线观看的 | 91精品婷婷国产综合久久蝌蚪 | 日韩成人在线一区二区 | av黄色在线观看 | 日韩一区正在播放 | 伊人亚洲综合网 | 综合伊人av | aaa日本高清在线播放免费观看 | 麻豆一精品传二传媒短视频 | 中文字幕在线视频一区二区三区 | 中国精品少妇 | 日韩电影一区二区三区在线观看 | av电影免费看 | 国产精品久久久久久久久久新婚 | 久久99亚洲网美利坚合众国 | 国产福利91精品 | 中文字幕a在线 | 国模一区二区三区四区 | 成人av资源站 | 久久a v电影 | 欧美视屏一区二区 | av黄色av| 夜夜高潮夜夜爽国产伦精品 | 久久网址| 国产高清福利在线 | 午夜视频在线观看一区二区三区 | 激情动态| 精品极品在线 | a视频在线观看 | 欧美激情精品久久久久久免费 | 免费成人在线视频网站 | 高清在线一区 | 日韩成人在线免费观看 | 国产视频二 | 顶级欧美色妇4khd | 91在线视频免费观看 | 日韩在线电影 | 99999精品 | 精品国产aⅴ麻豆 | 综合久久久久久 | 99久久国产免费看 | 黄色av一级 | 国产在线永久 | 久久精品视频一 | 亚洲视频专区在线 | 日韩欧美xxxx | 国产精品成久久久久三级 | 香蕉视频在线免费看 | 免费看91的网站 | 久久私人影院 | 日韩精品aaa | 久久av免费电影 | 久久色在线播放 | 干狠狠 | 激情五月视频 | 精品欧美乱码久久久久久 | 午夜久久久久久久久久久 | 久久在现 | 五月天九九 | 国内精品久久久久影院一蜜桃 | www.天天综合 | 欧美久久电影 | 国产精品一区二区三区四区在线观看 | 99亚洲精品 | 丁香六月天| 久久精精品视频 | 婷婷精品在线 | 国产免费激情久久 | 久久久久亚洲精品中文字幕 | 免费a级观看 | 黄色国产区 | 97人人人人 | 天天干天天干天天干天天干天天干天天干 | 亚洲精品动漫成人3d无尽在线 | 欧美日韩一区二区三区在线观看视频 | 亚洲在线激情 | 最新日本中文字幕 | 国产96在线观看 | aa级黄色大片 | 亚洲视频,欧洲视频 | 亚洲欧美日韩精品久久久 | 天天综合天天做天天综合 | 国产亚洲精品中文字幕 | 中文字幕第一页在线vr | 欧美日韩一区二区三区不卡 | 一区二区三区免费在线 | 人人爽人人爽人人片av免 | 精品国产aⅴ麻豆 | 色av网站| 天天摸天天舔天天操 | 在线观看91视频 | 在线日韩精品视频 | 97超碰影视 | 国内精品二区 | 最近日本mv字幕免费观看 | 色在线观看网站 | 久久香蕉电影 | 国产999免费视频 | 人人澡人人添人人爽一区二区 | 久久看免费视频 | 久久久久久久久久久久久久av | 一区二区久久 | 精品国产诱惑 | 国产日产在线观看 | 久久论理 | 天堂av免费观看 | 国产精品久久久久久妇 | 久草视频在线新免费 | 免费视频91蜜桃 | 国产精品6999成人免费视频 | 日韩www在线| 97理论电影 | 久久精品亚洲综合专区 | 日韩高清观看 | 日本中文字幕在线视频 | 精品国产一区二区三区久久久蜜臀 | 国产日韩精品一区二区三区在线 | 国产免费又爽又刺激在线观看 | 日本午夜在线观看 | 婷婷综合亚洲 | 亚洲第一区精品 | 麻豆一二三精选视频 | 亚洲我射av | 99久久久久久久 | av观看网站 | 色婷婷久久 | 二区三区av | 亚洲最新av| 亚洲毛片久久 | 日韩乱理 | 日韩精选在线 | 久久av不卡 | 午夜色站| 日本丶国产丶欧美色综合 | 国产视频2区| 97色视频在线 | 久久伊人八月婷婷综合激情 | 精选久久 | 国产精品久久久久久一区二区 | 中文字幕在线日本 | 91看片在线 | 日日爽日日操 | 国产精品入口传媒 | 国产成人精品免高潮在线观看 | 久久手机免费观看 | 久久男人中文字幕资源站 | 久久久久久久久久久久久影院 | a v在线观看 | 久爱精品在线 | 日日天天狠狠 | 欧美日韩色婷婷 | 综合久久久久久 | 日韩久久精品一区 | 亚洲精品在线免费播放 | 日本精品久久久久 | 中文字幕在线影院 | 精品999 | 97精品欧美91久久久久久 | 日本xxxx裸体xxxx17 | 国产综合香蕉五月婷在线 | avove黑丝| 日韩电影在线观看一区二区三区 | 美女啪啪图片 | 操操爽 | 成人av电影免费在线观看 | 午夜视频福利 | 成人免费网站视频 | 97视频在线 | 看黄色91| 不卡精品视频 | 国内外激情视频 | 欧美亚洲久久 | 久久婷五月 | 日韩系列 | 色婷婷丁香| 久久精品久久久久 | 人人澡av | 黄色a视频 | 中文字幕一区二区三区四区视频 | 日韩电影一区二区三区 | 人人爱夜夜操 | 啪啪免费观看网站 | 免费不卡中文字幕视频 | 91大神电影 | 国产一二区免费视频 | 国产黄色片一级三级 | 免费观看成年人视频 | 自拍超碰在线 | 黄色片免费在线 | 91麻豆精品国产自产 | 精品久久久久久亚洲 | 亚洲欧洲国产视频 | 免费午夜网站 | 二区三区在线观看 | 国产小视频在线观看 | 一区二区国产精品 | 91视频黄色| 日日干天天操 | 91porny九色在线播放 | 在线观看91久久久久久 | a天堂一码二码专区 | 麻豆视频免费在线 | 日韩网站在线免费观看 | 久久不射电影网 | 国产精品99页 | 精品一区av | 黄色片软件网站 | 国产vs久久 | 日韩精品一区二区三区在线播放 | 成人啪啪18免费游戏链接 | 毛片一区二区 | aaa毛片视频 | 国产 精品 资源 | 成年人免费av网站 | 欧美国产精品久久久久久免费 | 欧美一级片在线观看视频 | 久久国产高清 | a天堂在线看 | 日本中文一级片 | 麻豆传媒视频在线 | 亚洲va欧美va | 欧美国产日韩一区 | 欧美日韩一区二区在线观看 | 最新av网站在线观看 | 国产免费激情久久 | 国产美女主播精品一区二区三区 | 日韩激情视频在线 | 久草男人天堂 | 精品你懂的 | 欧美成人91 | 免费中文字幕在线观看 | 91麻豆产精品久久久久久 | 永久免费在线 | 久久不射电影网 | 日日干av | 精品无人国产偷自产在线 | 亚洲精品午夜一区人人爽 | 午夜在线免费观看视频 | 中文在线a∨在线 | 久草视频在线看 | 成人av电影免费 | 国产一级91| 国产成人av一区二区三区在线观看 | 在线观看视频你懂的 | 啪啪免费观看网站 | 久久激情网站 | 婷婷在线不卡 | 久久精品综合 | 麻豆视频免费观看 | 天天艹天天操 | 在线精品视频在线观看高清 | 中文字幕亚洲欧美 | 91成人免费在线 | 男女男视频 | 欧美另类网站 | av超碰在线 | 国产视频日韩 | 欧美大片在线看免费观看 | 五月天久久久 | 精品中文字幕在线播放 | 日韩免费电影在线观看 | 久久精品一级片 | 亚洲成av | 日韩精品一区二区三区高清免费 | 亚洲麻豆精品 | 狠狠躁夜夜a产精品视频 | 国产成人精品在线播放 | 天天干夜夜| 久久综合久久八八 | 日韩欧美视频在线观看免费 | 91色影院| 亚洲激情影院 | 日本高清久久久 | 国产成人一级电影 | 特级黄色片免费看 | 久久久久久久久久久高潮一区二区 | 97超级碰| 成人黄色大片在线观看 | 国产成人在线免费观看 | 四虎影院在线观看av | 99精品欧美一区二区三区黑人哦 | 国产精品自产拍在线观看蜜 | 99久久精品国产一区二区成人 | 亚洲国产精品电影在线观看 | 日韩在线影视 | 四虎免费在线观看视频 | 96看片| 久久成视频| 亚洲女人天堂成人av在线 | 99色在线播放 | 99精品国产在热久久 | 国产精品自产拍在线观看中文 | 国产色在线视频 | 特黄特色特刺激视频免费播放 | 国产91亚洲 | 在线一区二区三区 | 99久久综合国产精品二区 | 国产精品久久久免费 | 91九色视频国产 | 日本精品久久 | 国产日韩欧美在线一区 | 综合亚洲视频 | 天天干天天拍天天操 | 四虎国产精品成人免费影视 | 最近中文字幕mv免费高清在线 | 久热爱 | 国产精品美女久久久久久久久久久 | 蜜臀av免费一区二区三区 | 日韩在线首页 | 夜夜天天干 | 区一区二区三区中文字幕 | 国产精品自拍在线 | 色婷婷综合视频在线观看 | av电影免费在线播放 | 国产精品免费在线播放 | 国产一级电影网 | 国产小视频你懂的在线 | 亚洲va韩国va欧美va精四季 | 丁香激情综合久久伊人久久 | 五月婷婷在线视频观看 | 亚洲黄色av一区 | 国产亚洲婷婷免费 | 97精品国产aⅴ | a成人v| 日本激情动作片免费看 | 国产精品视频免费 | 色综合综合 | 中国成人一区 | 国产日韩欧美自拍 | 欧美日韩一区二区三区免费视频 | 韩国av一区二区三区在线观看 | 国产aa免费视频 | 草久在线视频 | 美女网站在线观看 | 玖玖爱在线观看 | 亚洲激情 在线 | 狠狠干.com | 国产成人专区 | 精品国内自产拍在线观看视频 | 黄色www| 91看片成人 | 亚洲精品久久久久久久不卡四虎 | 久久人人看 | 永久免费毛片在线观看 | 99精品国产福利在线观看免费 | 欧美日韩网站 | 99精品美女 | 成人欧美在线 | 国产aaa毛片| 国产黄色免费观看 | 999久久国产精品免费观看网站 | 精品视频区 | 日韩欧美在线影院 | 7777精品伊人久久久大香线蕉 | 国产精品久久久久久久久久三级 | a级国产毛片 | 精品美女久久久久 | 久久精品美女视频网站 | 97超碰国产在线 | 国产精品2018| 久久人人97超碰国产公开结果 | 亚洲毛片一区二区三区 | 黄色电影在线免费观看 | 国产精品久久久久久麻豆一区 | 中文字幕有码在线观看 | 久久国产一二区 | 天堂av在线7 | 公与妇乱理三级xxx 在线观看视频在线观看 | 国产高清在线a视频大全 | 久久精品4| 中文字幕乱码日本亚洲一区二区 | 中文字幕日韩精品有码视频 | 欧美成人理伦片 | 六月色婷婷 | 又黄又刺激的视频 | 五月激情五月激情 | 久久久亚洲国产精品麻豆综合天堂 | av一区在线 | 国产精品国产三级国产专区53 | 91污在线观看 | 激情综合网五月激情 | 久久激情小视频 | 久久精品电影 | 超碰成人网| 欧美日韩免费一区二区三区 | 亚洲婷婷免费 | 操老逼免费视频 | 一级α片免费看 | 亚洲黄色在线观看 | 久草在线观看 | 国产免费观看av | 成人午夜精品久久久久久久3d | 欧美成人xxxxxxxx| 欧美成a人片在线观看久 | 97视频亚洲 | av资源网在线播放 | 久久久免费网站 | 在线观看成人小视频 | 97在线观看免费观看 | 激情欧美网| 中文字幕人成人 | 婷婷丁香六月天 | 91热爆视频 | 色99在线| 黄色午夜 | 特级毛片网站 | 国产欧美精品在线观看 | 中文字幕2021 | 超碰在线日本 | 国产精品久久久久久一二三四五 | 欧美精品做受xxx性少妇 | 久久精品国产免费 | 999久久久免费精品国产 | 91免费的视频在线播放 | 伊人五月天综合 | 最新av电影网址 | 成人国产精品 | 日本高清久久久 | 最近中文字幕完整高清 | 国产91精品在线播放 | 黄色aaaaa| 国产免费嫩草影院 | 永久精品视频 | 九九在线免费视频 | 欧美一级片免费在线观看 | 人人添人人 | 国产视频观看 | 在线成人国产 | 亚洲三区在线 | 91久久久久久久一区二区 | 九色精品 | 狠狠操91 | 久久国产精品一二三区 | 国产美腿白丝袜足在线av | 91亚洲国产 | 日韩乱色精品一区二区 | 免费网址你懂的 | 国产精品青草综合久久久久99 | 国产精品久久99精品毛片三a | 91高清完整版在线观看 | 草草草影院 | 操操色 | 欧美91精品久久久久国产性生爱 | 欧美精品免费一区二区 | 成年人免费看的视频 | 久久久国产高清 | 亚洲视频六区 | 五月婷婷中文网 | 热久久免费国产视频 | 麻花豆传媒mv在线观看网站 | 国产午夜视频在线观看 | 91日韩在线播放 | 欧美专区日韩专区 | 亚洲丝袜一区二区 | 亚洲精品在线观看视频 | 午夜天使 | 亚洲成人家庭影院 | 精品伊人久久久 | 欧美日韩亚洲第一页 | 亚洲精品视频一 | 国产精品久久久久久久久搜平片 | 中文字幕国产精品一区二区 | 97福利 | 欧美日韩高清一区二区 国产亚洲免费看 | 欧美精品久久久久久久久久丰满 | 天天做日日爱夜夜爽 | 久久黄色小说 | 免费看的国产视频网站 | 国产中文字幕在线看 | 一区二区伦理电影 | 在线免费色 | 成年人网站免费观看 | 久久久精品二区 | 特级黄色片免费看 | 日韩一区正在播放 | 久久av中文字幕片 | 天天插伊人 | av线上免费观看 | 日韩午夜av | 日日干视频 | 麻豆成人小视频 | 久久曰视频 | 国产精品视频最多的网站 | av电影不卡在线 | 欧美一进一出抽搐大尺度视频 | 在线 视频 一区二区 | 深夜男人影院 | 九草在线视频 | 亚洲精品视频在线看 | 九九电影在线 | 色综合久久久久综合99 | 九月婷婷色 | 亚洲综合婷婷 | 国产黄色片一级三级 | 亚洲一区日韩 | 99久久婷婷国产综合亚洲 | www.久久com | 激情五月播播久久久精品 | 91av视频观看| 欧美日韩在线第一页 | 日韩簧片在线观看 | 亚洲日本色 | 天天草天天摸 | avav99| 欧美人体xx | 国产成人av网站 | 天天曰 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 日韩精品久久久久久中文字幕8 | 在线观看国产一区二区 | 91| 久章操 | 欧美性受极品xxxx喷水 | 天天干干 | 在线视频精品播放 | 一区二区三区国 | 曰本三级在线 | 国产日产高清dvd碟片 | 亚洲专区 国产精品 | 91.麻豆视频 | 西西www4444大胆在线 | 麻豆传媒一区二区 | 粉嫩一二三区 | 色视频在线免费观看 | 亚洲无线视频 | av高清一区 | 亚洲精品456在线播放乱码 | 日韩av不卡播放 | 日韩在线观看视频免费 | 日韩成人免费在线 | 成人日批视频 | 五月婷婷香蕉 | 久久男人中文字幕资源站 | 天天爱天天操天天干 | 国产一区在线不卡 | 日本中文在线播放 | 在线免费色 | 99久久日韩精品免费热麻豆美女 | 九九久久电影 | 成人a级免费视频 | 中文字幕韩在线第一页 | 成人久久18免费网站 | 久久97久久| 国产精品入口麻豆 | 狠狠躁夜夜av | 99热最新地址 | 91黄色在线观看 | 波多野结衣在线视频免费观看 | 欧美成年网站 | 精品国产一区二区三区久久影院 | 国产在线中文字幕 | 99精品视频一区二区 | 亚洲精品国产精品国自产在线 | 国产亚洲一区二区在线观看 | 国产精品精品视频 | 在线观看日本韩国电影 | 国产亚洲在线观看 | 国产精品视频你懂的 | 天天爱天天| 欧美激情视频一区二区三区 | 国产精品嫩草影院123 | 中文一区在线观看 | 成人资源站 | 久久永久免费 | 4438全国亚洲精品在线观看视频 | 天天草天天插 | 中文字幕精品视频 | 亚洲人人射 | 日韩精品一区二区三区外面 | 国产在线观看黄 | 久久久久久久久久久综合 | 亚洲电影网站 | 97人人澡人人爽人人模亚洲 | 国内精品在线看 | 一区二区精| 日韩综合一区二区 | 久久一精品 | 国产精品观看在线亚洲人成网 | 91成人天堂久久成人 | 国产又粗又猛又爽又黄的视频免费 | aa一级片| 91香蕉视频 mp4 | 国产护士在线 | 天天操天天爱天天爽 | 蜜臀av在线一区二区三区 | 亚洲另类xxxx| 日韩av一区二区三区四区 | 精品久久久久久久久久国产 | 一区二区三区韩国免费中文网站 | 999久久久久久久久久久 | 视频1区2区 | 免费三级网 | 麻豆视传媒官网免费观看 | av在线免费观看网站 | 99久久日韩精品免费热麻豆美女 | 色在线最新 | 中文字幕在线观看视频网站 | 日韩大片在线播放 | 日韩精品第一区 | 毛片在线播放网址 | 在线观看视频在线 | 99婷婷狠狠成为人免费视频 | 99热这里只有精品国产首页 | 国产区在线视频 | 日韩视频免费 | 国产69久久久欧美一级 | 国产中文自拍 | 9999在线观看 | 91视频在线| 一区二精品 | 欧美精品三级 | 久久免费视频在线 | 在线看片一区 | 四虎成人网 | 麻豆视频在线 | 成人午夜黄色影院 | 欧美污在线观看 | 少妇精品久久久一区二区免费 | 国产xx在线 | 国产精品自在线拍国产 | 91精品久久香蕉国产线看观看 | 91成人观看 | 国产免费专区 | 中文字幕精品一区 | 91试看| 午夜12点 | 国产三级午夜理伦三级 | 岛国大片免费视频 | 午夜影院一级 | 美女国产精品 | 91精品免费在线视频 | 91高清免费观看 | 亚洲高清色综合 | 成人片在线播放 | 国产精品成人a免费观看 | 欧美精品一区二区免费 | 在线观看黄色小视频 | 国产精品自产拍在线观看网站 | 天天曰夜夜操 | 99精品小视频 | 99精品国产aⅴ | 欧美一区日韩精品 | 免费观看视频的网站 | 欧美激情第八页 | av福利在线播放 | 深爱激情五月婷婷 | 日韩在线色视频 | www欧美色 | 天天干天天操天天做 | 天天操操操操操 | 久久精品视频国产 | 免费在线观看亚洲视频 | 国内视频1区| 欧美日韩一级久久久久久免费看 | 五月天高清欧美mv | 97视频在线观看视频免费视频 | 日本中出在线观看 | 欧美一区二区精品在线 | 久久夜视频 | 日韩毛片在线播放 | 国产精品99久久久久久有的能看 | 久久免费视频8 | 精品国产片 | 日韩性片| 天天色综合三 | 精品一区二区综合 | 麻豆av电影 | 色婷婷综合久久久久中文字幕1 | 国产成人亚洲在线观看 | 中文字幕亚洲不卡 | 99精品久久久久久久久久综合 | 丰满少妇在线观看资源站 | 人人爽人人香蕉 | 国产精品高潮久久av | 中文字幕在线观看资源 | 亚州国产精品久久久 | 久久成人免费视频 | 日韩av高潮 | 超碰在线官网 | 国产在线观看91 | 全久久久久久久久久久电影 | 亚洲精品乱码久久久一二三 | 久久与婷婷 | 青青河边草免费直播 | 久久神马影院 | 国产麻豆精品久久一二三 | 国产一级性生活 | av不卡网站 | 欧美日韩视频在线播放 | 色免费在线 | 天天综合天天综合 | 草久在线| 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产精品成人久久久久久久 | japanese黑人亚洲人4k | 2019中文最近的2019中文在线 | 一区二区视| 丁香视频五月 | 欧美大香线蕉线伊人久久 | 精品在线二区 | 国产在线毛片 | 午夜av免费在线观看 | 久久夜av| 日本公妇在线观看高清 | 91大神免费视频 | 91成人看片| 九九热av | 超碰人人草 | 国产在线黄 | 成人黄色在线 | 色婷婷久久 | 中文字幕免 | 亚洲免费成人av电影 | 亚洲成人资源在线观看 | 麻豆视频免费在线播放 | 九九交易行官网 | 99久久精品一区二区成人 | 中文在线a∨在线 | a视频免费在线观看 | 国产一级视频在线免费观看 | 久草在线观看资源 | 国产91精品一区二区绿帽 | 91丨精品丨蝌蚪丨白丝jk | 精品国产一区二区三区久久影院 | 丁香婷婷激情国产高清秒播 | 日韩中文久久 | 狠狠色丁香久久综合网 | 亚洲在线免费视频 | 毛片久久久 | 久久精品这里精品 | 国产高清永久免费 | 国产视频一区二区在线 | 在线导航av | 久久视频6 | 日韩三级中文字幕 | 久久亚洲国产精品 | 亚州欧美视频 | 国产欧美精品一区二区三区四区 | 久久99精品国产一区二区三区 | 超碰免费97| 久久久精品一区二区 | 国产一区网| 天天色天天爱天天射综合 | 精品久久久久一区二区国产 | 日批视频在线观看免费 | 夜夜操天天 | 九九综合久久 | 欧美日韩免费看 | 中文字幕在线观看三区 | 天天操天天操天天操 | 国产999精品久久久久久绿帽 | 制服丝袜一区二区 | 91av在线免费观看 | 91综合色| 日韩欧美国产精品 | 992tv在线 | 日韩在线欧美在线 | 一区二区中文字幕在线 | 国产黄色片免费在线观看 | 欧美日韩国产区 | 国产免费高清视频 | 亚洲精品乱码久久久久久蜜桃欧美 | 欧美一区影院 | 91在线免费播放 | 国产人成看黄久久久久久久久 | 九九色在线| 美女搞黄国产视频网站 | 免费黄a| 免费a现在观看 | 一区二区三区四区五区在线 | 久久精品一区二区三 | 国产涩涩在线观看 | 天天拍夜夜拍 | 久久天天躁狠狠躁夜夜不卡公司 | 天天操 夜夜操 | 草久在线观看视频 | 国产成人精品一区二区三区福利 | 超碰在线人人草 | www..com黄色片 | 久久视频一区二区 | 久久少妇 | 91最新中文字幕 | av软件在线观看 | 久久国产精品久久精品国产演员表 | 免费视频三区 |