乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C#人臉識(shí)別入門篇

       quasiceo 2017-09-15

      如何識(shí)別多個(gè)人臉

      在開始之前,先解決一個(gè)疑問,這個(gè)SDK可以識(shí)別多個(gè)人臉嗎。答案當(dāng)然是可以的。在上一章節(jié)中我們實(shí)現(xiàn)了識(shí)別單個(gè)人臉的功能。

      你可以下面的地址下載
      http://download.csdn.net/download/feishixin/9942684 本教程的相關(guān)Demo代碼。

      如果要識(shí)別多個(gè)人臉,需要進(jìn)行下面的設(shè)置。

      定義人臉的識(shí)別數(shù)目范圍

         int nMaxFaceNum = 50;/*定義人臉識(shí)別的數(shù)目,有效范圍為1-50*/
      • 1

      修改人臉識(shí)別的程序。

      在上一章節(jié)中, 我們的方法是只取到識(shí)別到的第一個(gè)人臉,因此我們只需要一個(gè)顯示人臉的地方就可以了。要識(shí)別多個(gè)人臉,首先就是修改視圖。

      界面截圖

      然后,修改程序?yàn)檠h(huán)。

      
      //識(shí)別每一幅圖像
      
      for (int i = 0; i < faceRes.nFace; i++)
      {
          MRECT rect = (MRECT)Marshal.PtrToStructure(faceRes.rcFace + Marshal.SizeOf(typeof(MRECT)) * i, typeof(MRECT));
      
         Image image = CutFace(bitmap, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
      
      
         if (i == 0)
         {
          /*第一個(gè)識(shí)別到的人臉保存在原位置*/
             this.pictureBox2.Image = image;
              this.pictureBox2.Tag = faceImageName[i];
          }
         else
         {
              /*后面識(shí)別到的人臉按順序并排顯示在下面,使用臨時(shí)創(chuàng)建PictureBox控件的方式顯示圖片內(nèi)容*/
      
      
             PictureBox tempPicture = new PictureBox();
             tempPicture.Width = 100;
             tempPicture.Height = 120;
             tempPicture.SizeMode = PictureBoxSizeMode.Zoom;
             tempPicture.Location = new System.Drawing.Point(10 + ((i-1) % 7) * 120, 10 + ((i-1) / 7) * 120);
             tempPicture.Image = image;
             tempPicture.Tag =faceImageName[i];
             this.panel1.Controls.Add(tempPicture);
         }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30

      一步步實(shí)現(xiàn)人臉識(shí)別

      先來看一下我們這節(jié)的效果

      效果圖

      本節(jié)我們主要講解如何根據(jù)識(shí)別到的人臉信息提取人臉數(shù)據(jù)特征,并在此基礎(chǔ)上講解一下如何做人臉識(shí)別

      在人臉識(shí)別領(lǐng)域,首先是檢測(cè)是否有人臉,人臉的區(qū)域是哪里,然后對(duì)這個(gè)區(qū)域進(jìn)行特征點(diǎn)提取,在提取結(jié)束后,告訴計(jì)算機(jī),這個(gè)人臉是誰。

      image

      計(jì)算機(jī)把這些特征信息和人臉的名稱保存下來,就形成了人臉庫,在識(shí)別人臉時(shí),計(jì)算機(jī)通過一定的算法,檢索庫中是否有匹配到的人臉結(jié)果,給出相似度數(shù)據(jù)。當(dāng)人臉的相似度數(shù)據(jù)達(dá)到一定的數(shù)值時(shí),就可以認(rèn)為同一張人臉。

      相似度通常是一個(gè)0-1的小數(shù)。一般來說,數(shù)值越大,表示兩個(gè)人越相近。

      注:不同人臉引擎的人臉相似度不具有可比性,例如,我們從Face ++ 拿到的同一個(gè)人的人臉相似度可能會(huì)在0.8-0.9,虹軟的只能在0.6-0.8之間,這并不能說明Face ++ ,它們只是算法的標(biāo)準(zhǔn)不同,例如,虹軟在不同人臉0.1-0.2的時(shí)候,F(xiàn)ace++達(dá)到了0.3-0.5
      人臉檢測(cè)并建立人臉庫的過程如下

      建立人臉庫

      通過人臉檢測(cè)或者人臉跟蹤,獲取到人臉信息并識(shí)別人臉的過程如下:

      從人臉庫中識(shí)別

      本次教程我們以目錄結(jié)構(gòu)作為人臉的存檔方式,每張人臉對(duì)應(yīng)一張人臉標(biāo)識(shí)和一個(gè)人臉特征。人臉標(biāo)識(shí)和特征使用同一個(gè)文件名稱來關(guān)聯(lián),例如人臉a.jpg的特征用a.dat來表示。

      好,我們開始我們的課程

      集成人臉識(shí)別SDK庫

      我們本次使用到的虹軟的SDK包中,提供了人臉識(shí)別的庫,它的名字叫face_recongnition.dll,我們找到它的SDK文檔。
      來建立各個(gè)結(jié)構(gòu)體和API的C#映射。

      首先是結(jié)構(gòu)體

      從本節(jié)開始,我們不再講解原始SDK文檔中的數(shù)據(jù)結(jié)構(gòu)和C#數(shù)組結(jié)構(gòu)如何映射的,也不再講解P/Invoke的知識(shí),如果需要了解相關(guān)知識(shí),請(qǐng)參考我們上篇文檔的相關(guān)內(nèi)容。

      AFR_FSDK_FaceInput

          public struct AFR_FSDK_FaceInput
          {
              public  MRECT rcFace;
              public int lOrient;
          }
      • 1
      • 2
      • 3
      • 4
      • 5

      這個(gè)結(jié)構(gòu)體是FD識(shí)別的輸出結(jié)構(gòu)體,我們?cè)谏弦徽鹿?jié)標(biāo)記人臉時(shí)使用了此結(jié)構(gòu)體。

      AFR_FSDK_FaceModel

        public  struct AFR_FSDK_FaceModel
          {
           public IntPtr pbFeature;
           public int lFeatureSize;
          }
      • 1
      • 2
      • 3
      • 4
      • 5

      這個(gè)結(jié)構(gòu)體是人臉模型數(shù)據(jù),也就是我們說的人臉特征。人臉識(shí)別就基于這個(gè)結(jié)構(gòu)。

      參數(shù)名 說明
      pbFeature 提取到的臉部特征
      lFeatureSize 特征信息長度

      其中pbFeature是人臉數(shù)據(jù),虹軟當(dāng)前版本的人臉數(shù)據(jù)為一個(gè)20K大小的二進(jìn)制數(shù)組,在使用時(shí),我們把它保存為byte[]數(shù)組。

      AFR_FSDK_Version

         public struct AFR_FSDK_Version
          {
      
              public int lCodebase;
              public int lMajor;
              public int lMinor;
              public int lBuild;
              public int lFeatureLevel;
              public string Version;
              public string BuildDate;
              public string CopyRight;
          }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      定義識(shí)別方法類

      我們將SDK中的對(duì)應(yīng)方法提取到C#類中,和上面的章節(jié)保持一致,我們稱之為AFRFunction。

         public class AFRFunction
          {
             /**
              *Init Engine 
              */
             [System.Runtime.InteropServices.DllImportAttribute("libarcsoft_fsdk_face_recognition.dll", EntryPoint = "AFR_FSDK_InitialEngine", CallingConvention = CallingConvention.Cdecl)]
             public static extern int AFR_FSDK_InitialEngine(string AppId, string SDKKey,  System.IntPtr pMem, int lMemSize, ref System.IntPtr phEngine);
      
              /**
              * 提取人臉特征值
              */
             [System.Runtime.InteropServices.DllImportAttribute("libarcsoft_fsdk_face_recognition.dll", EntryPoint = "AFR_FSDK_ExtractFRFeature", CallingConvention = CallingConvention.Cdecl)]
             public static extern int AFR_FSDK_ExtractFRFeature(System.IntPtr hEngine,  System.IntPtr pInputImage,  System.IntPtr pFaceRes, System.IntPtr pFaceModels);
      
              /*
              * 比較兩個(gè)人臉特征值之間的相似度
              **/
             [System.Runtime.InteropServices.DllImportAttribute("libarcsoft_fsdk_face_recognition.dll", EntryPoint = "AFR_FSDK_FacePairMatching", CallingConvention = CallingConvention.Cdecl)]
             public static extern int AFR_FSDK_FacePairMatching(System.IntPtr hEngine, ref System.IntPtr reffeature, ref System.IntPtr probefeature, ref float pfSimilScore);
      
      
              /**
              *銷毀引擎
              */
             [System.Runtime.InteropServices.DllImportAttribute("libarcsoft_fsdk_face_recognition.dll", EntryPoint = "AFR_FSDK_UninitialEngine", CallingConvention = CallingConvention.Cdecl)]
             public static extern int AFR_FSDK_UninitialEngine(System.IntPtr hEngine);
      
      
              /**
              *獲取人臉的版本號(hào)
              */
      
             [System.Runtime.InteropServices.DllImportAttribute("libarcsoft_fsdk_face_recognition.dll", EntryPoint = "AFR_FSDK_GetVersion", CallingConvention = CallingConvention.Cdecl)]
             public static extern System.IntPtr AFR_FSDK_GetVersion(System.IntPtr hEngine);
      
      
         }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37

      開始之前的準(zhǔn)備

      定義人臉庫的位置

      本次我們使用簡單的基于目錄存儲(chǔ)人臉庫

       private String FaceLibraryPath = "G:\\Test\\";
      • 1

      定義人臉識(shí)別引擎的變量

      IntPtr detectEngine = IntPtr.Zero;
      //新增人臉識(shí)別引擎的定義
      IntPtr recognizeEngine = IntPtr.Zero;
      • 1
      • 2
      • 3

      在構(gòu)造函數(shù)中我們對(duì)人臉識(shí)別引擎進(jìn)行初始化

      int detectSize = 40 * 1024 * 1024;
      int nScale = 50;
      int nMaxFaceNum = 50;
      IntPtr pMem = Marshal.AllocHGlobal(detectSize);
      IntPtr pMemRecongnize = Marshal.AllocHGlobal(detectSize);
      • 1
      • 2
      • 3
      • 4
      • 5

      注意:detectSize為人臉識(shí)別的內(nèi)存大小,一般來說,你可以根據(jù)你的應(yīng)用程序的規(guī)模來設(shè)置一個(gè)適當(dāng)?shù)臄?shù)值,數(shù)值過小會(huì)報(bào)內(nèi)存不足的ERROR。

      int retCode2 = AFR.AFRFunction.AFR_FSDK_InitialEngine(appId, sdkFRKey, pMemRecongnize, detectSize, ref recognizeEngine);
      
      
       if (retCode2 != 0)
      {
          MessageBox.Show("引擎FR初始化失敗:錯(cuò)誤碼為:" + retCode2);
          this.Close();
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      這里需要注意FR Key,虹軟這次開源了1:1和1:N的SDK,不同的SDK,其對(duì)應(yīng)的KEY是不一樣的。

      提取人臉特征值

      我們來提取人臉特征值。打開我們的checkAndMarkFace方法。

      人臉特征值是一個(gè)二進(jìn)制的byte數(shù)組,其內(nèi)容對(duì)虹軟來說是屬于技術(shù)機(jī)密,里面保存了人臉的特征。這里的特征可以在人臉相似度比較時(shí)用到,人臉的特征包含了人臉的關(guān)鍵點(diǎn)信息??上У氖牵畿涍@方面并沒有開源。同樣的,人臉的相似度比較算法也沒有開源。不過不開源也有不開源的好處,至少我們用起來不用擔(dān)心這里面的細(xì)節(jié)。

      首先,我們定義一個(gè)變量數(shù)組,用于保存圖片名稱的數(shù)組。 這里我們簡單的對(duì)每個(gè)識(shí)別到的人臉,用GUID命名。

      在我們上一節(jié)的,輸出識(shí)別到的人臉數(shù)據(jù)之前,我們?cè)黾右幌挛覀兊臉I(yè)務(wù)邏輯。找到下面的代碼

      if (faceRes.nFace > 0)
      • 1

      我們?cè)诤竺嬖黾佣x

      //定義用到保存識(shí)別到的圖片的名稱的數(shù)組
      List<string> faceImageName = new List<string>(faceRes.nFace);
      
      for (int i = 0; i < faceRes.nFace; i++)
      {
          faceImageName.Add(Guid.NewGuid().ToString());
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      在識(shí)別到的每個(gè)人臉以后,我們把識(shí)別到的人臉保存下來

      Image image = CutFace(bitmap, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
      
      image.Save(FaceLibraryPath+faceImageName[i]+".jpg",ImageFormat.Jpeg);
      • 1
      • 2
      • 3

      如何進(jìn)行人臉特征值的讀取

      人臉特征值依賴于人臉識(shí)別的結(jié)果,其原理是利用識(shí)別到的人臉區(qū)域信息,在原圖中對(duì)人臉部分進(jìn)行運(yùn)算,輸出人臉的特征數(shù)據(jù)。
      通過前面的定義,可以知道人臉特征提取函數(shù)的需要的參數(shù)信息如下
      - recognizeEngine:人臉識(shí)別引擎
      - offInputPtr:輸入的圖像信息,和FD的信息相同。同為ASVLOFFSCREEN結(jié)構(gòu)體,我們可以直接使用上一步已經(jīng)定義好的這個(gè)變量。
      - faceInputPtr:人臉區(qū)域信息,包括人臉的角度信息,以及人臉的坐標(biāo)范圍,對(duì)應(yīng)的參數(shù)類型為MRECT,也就是在FD中識(shí)別到的人臉的區(qū)域坐標(biāo),
      - 輸出參數(shù)為faceModel結(jié)構(gòu)體。包括長度信息和人臉特征數(shù)組

      我們來一步步解決。

      定義faceInput結(jié)構(gòu)體并指定它的引用互操作類型

      AFR_FSDK_FaceInput faceinput = new AFR_FSDK_FaceInput();
      faceinput.lOrient =(int)Marshal.PtrToStructure( faceRes.lfaceOrient,typeof(int));
      
      MRECT rect = (MRECT)Marshal.PtrToStructure(faceRes.rcFace + Marshal.SizeOf(typeof(MRECT)) * i, typeof(MRECT));
      faceinput.rcFace = rect;
      
      IntPtr faceInputPtr = Marshal.AllocHGlobal(Marshal.SizeOf(faceinput));
                      Marshal.StructureToPtr(faceinput, faceInputPtr, false);
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      定義faceModel變量用于保存識(shí)別到的特征值信息

      AFR_FSDK_FaceModel faceModel = new AFR_FSDK_FaceModel();
      IntPtr faceModelPtr = Marshal.AllocHGlobal(Marshal.SizeOf(faceModel));
      • 1
      • 2

      調(diào)用FR引擎進(jìn)行特征信息提取

         int ret = AFRFunction.AFR_FSDK_ExtractFRFeature(recognizeEngine, offInputPtr, faceInputPtr,
                              faceModelPtr);
      • 1
      • 2

      如果ret=0,則提取成功,我們?cè)僬{(diào)用Marshal的方法將對(duì)應(yīng)的信息取出來

      faceModel = (AFR_FSDK_FaceModel) Marshal.PtrToStructure(faceModelPtr, typeof (AFR_FSDK_FaceModel));
      Marshal.FreeHGlobal(faceModelPtr);
      
      
      
      byte[] featureContent = new byte[faceModel.lFeatureSize];
      Marshal.Copy(faceModel.pbFeature, featureContent, 0, faceModel.lFeatureSize);
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      保存獲取到的結(jié)果,為了后面的匹配方便,和圖片命名保持一致

      System.IO.File.WriteAllBytes(FaceLibraryPath+faceImageName[i]+".dat",featureContent);
      • 1

      通過圖像庫識(shí)別圖像中的特征

      現(xiàn)在我們要做的是人臉識(shí)別功能呢,我們想要的功能是,打開一張照片,如果里面有人臉,那么我們就識(shí)別這個(gè)人臉是否已經(jīng)在我們的人臉庫中出現(xiàn)過,如果已經(jīng)出現(xiàn) ,就顯示人臉的圖像編號(hào)。

      依然打開項(xiàng)目,增加一個(gè)按鈕。識(shí)別人臉,并增加一個(gè)pictureBox用于保存匹配到的人臉的對(duì)應(yīng)的人臉信息。雙擊剛才新加的按鈕進(jìn)入事件處理代碼編輯窗口。

      為了不增加重新提取特征臉的工作量,我們將上一步獲取到的特征臉重用。在上一步中,對(duì)識(shí)別到的人臉的第一個(gè)保存在了pictureBox中,并把相關(guān)的特征信息保存在對(duì)應(yīng)命名的dat文件中。在保存時(shí),使用

               this.pictureBox2.Tag = faceImageName[i];
      • 1

      保存圖像特征數(shù)據(jù)的文件名,因此在這里我們使用

      string faceFeaturePath = pictureBox2.Tag as string;
      • 1

      獲取圖像文件名。

      這里我們需要讀文件,讀取這個(gè)特征信息。

      C# 讀取二進(jìn)制文件和寫二進(jìn)制文件都相當(dāng)?shù)姆奖悖憧梢允褂肅#的序列化操作把變量保為dat文件,然后使用反操作把文件重新讀取以初始化對(duì)象。這里使用的是簡單的二進(jìn)制讀取的方法,當(dāng)然你也可以嘗試序列化來完成這個(gè)操作。

      byte[] sourceFeature = System.IO.File.ReadAllBytes(FaceLibraryPath + faceFeaturePath + ".dat");
      • 1

      接下來我們要使用人臉匹配的方法來進(jìn)行匹配。這里使用的方法是AFR_FSDK_FacePairMatching
      方法。再來看一下這個(gè)方法的定義

      參數(shù)名稱 輸入輸出 說明
      hEngine [in] 引擎 handle
      reffeature [in] 已有臉部特征信息
      probefeature [in] 被比較的臉部特征信息
      pfSimilScore [out] 相似程度數(shù)值

      我們先來定義被比較的臉部信息。這里原來的參數(shù)名稱有點(diǎn)拗口,我們使用localFaceModel來定義本地的

      AFR_FSDK_FaceModel localFaceModels = new AFR_FSDK_FaceModel();
      IntPtr sourceFeaturePtr = Marshal.AllocHGlobal(sourceFeature.Length);
      Marshal.Copy(sourceFeature, 0, sourceFeaturePtr, sourceFeature.Length);
      localFaceModels.lFeatureSize = sourceFeature.Length;
      localFaceModels.pbFeature = sourceFeaturePtr;
      • 1
      • 2
      • 3
      • 4
      • 5

      由于使用了文件保存人臉特征信息,因此我們的人臉遍歷算法就變得很簡單了。我們這里使用1:1的方法。

      我們直接使用存儲(chǔ)的人臉信息來進(jìn)行搜索,方法自然是先遍歷讀取所有特征數(shù)據(jù),提取特征值并進(jìn)行比較

           foreach (var b in System.IO.Directory.GetFiles(FaceLibraryPath,"*.dat"))
                      {
                          byte[] libaryFeature = System.IO.File.ReadAllBytes(b);
                          float result=0f;
      
                          //TODO:構(gòu)造AFR_FSDK_FaceModel,調(diào)用API,獲取比較結(jié)果
      
                          if (result>0.7&&result<0.99)
                          {
                              //  MessageBox.Show(b);
      
                              Image image = Image.FromFile(b.Replace(".dat",".jpg"));
      
                              this.pictureBox3.Image = new Bitmap(image);
                              MessageBox.Show(result.ToString());
                              break;
      
                          }
                      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19

      我們來完成TODO的部分
      首先我們定義庫Model和本地Model的結(jié)構(gòu)體指針
      定義庫的指針

      IntPtr libaryFeaturePtr = Marshal.AllocHGlobal(libaryFeature.Length);
      
      Marshal.Copy(libaryFeature, 0, libaryFeaturePtr, libaryFeature.Length);
      
      AFR_FSDK_FaceModel libraryFaceModel = new AFR_FSDK_FaceModel();
      
      libraryFaceModel.lFeatureSize = libaryFeature.Length;
      
      libraryFaceModel.pbFeature = libaryFeaturePtr;
      IntPtr firstPtr = Marshal.AllocHGlobal(Marshal.SizeOf(localFaceModels));
      
      Marshal.StructureToPtr(localFaceModels, firstPtr, false);
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      定義本地Model的指針

      IntPtr firstPtr = Marshal.AllocHGlobal(Marshal.SizeOf(localFaceModels));
      
      Marshal.StructureToPtr(localFaceModels, firstPtr, false);
      • 1
      • 2
      • 3

      調(diào)用方法輸出匹配結(jié)果

      int ret = AFRFunction.AFR_FSDK_FacePairMatching(recognizeEngine, firstPtr, secondPtr, ref result);
      
      • 1
      • 2

      從這里可以看出,人臉識(shí)別并沒有特別高深的地方,其基礎(chǔ)理論依然是特征值匹配搜索的理論,
      雖然這里面的難點(diǎn)是特征值的提取和匹配算法,但因?yàn)楹畿浺呀?jīng)免費(fèi)給我們提供了對(duì)應(yīng)的SDK,我們只需要調(diào)用相關(guān)的接口就可能了。如果要提高人臉匹配的速度,除了可以聯(lián)系虹軟尋找技術(shù)支持以外,也可以利用我們?cè)谄渌惴ǚ矫娴姆e累來嘗試解決方案。

      后記

      本次我們學(xué)習(xí)了人臉特征的提取和人臉特征的保存,實(shí)際上,在業(yè)務(wù)系統(tǒng)中,人臉通常是保存在數(shù)據(jù)庫中的,并且在匹配的時(shí)候,為了性能考慮,更多的是把特征保存在內(nèi)存中,20K的特征值如果在2GB的業(yè)務(wù)系統(tǒng)中,可以很輕松的保存10W+的特征信息。人臉檢測(cè)和識(shí)別是CPU密集型和內(nèi)存密集型的應(yīng)用,保持良好的計(jì)算機(jī)配置有助于提高識(shí)別的性能,離線SDK的良好擴(kuò)展性也為我們提高系統(tǒng)的性能提供了可行性。

      這兩章節(jié)都是從靜態(tài)圖像出發(fā)的人臉檢測(cè)和人臉識(shí)別,從下一章節(jié)開始,我們將先從視頻的人臉識(shí)別講起。然后結(jié)合攝像頭的實(shí)時(shí)圖像采集,我們來講解一下簡單的人臉識(shí)別門禁系統(tǒng)的實(shí)現(xiàn)。請(qǐng)繼續(xù)關(guān)注。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多