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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别)

發布時間:2025/4/14 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引自:http://www.cnblogs.com/tornadomeet/archive/2012/11/04/2753185.html

前言

  這篇文章是本人玩kinect時做的一個小實驗,即不采用機器學習等類似AI的方法來做簡單的手勢數字識別,當然了,該識別的前提是基于本人前面已提取出手部的博文Robert Walter手部提取代碼的分析的基礎上進行的。由于是純數學形狀上來判別手勢,所以只是做了個簡單的0~5的數字識別系統,其手勢的分割部分效果還不錯(因為其核心代碼是由OpenNI提供的),手勢數字識別時容易受干擾,效果一般般,畢竟這只是個簡單的實驗。

?

  實驗基礎

  首先來看下本系統的流程圖,如下所示:

  

?

  其中輪廓的提取,多邊形擬合曲線的求法,凸包集和凹陷集的求法都是采用opencv中自帶的函數。手勢數字的識別是利用凸包點以及凹陷點和手部中心點的幾何關系,簡單的做了下邏輯判別了(可以肯定的是這種方法很爛),具體的做法是先在手部定位出2個中心點坐標,這2個中心點坐標之間的距離閾值由程序設定,其中一個中心點就是利用OpenNI跟蹤得到的手部位置。有了這2個中心點的坐標,在程序中就可以分別計算出在這2個中心點坐標上的凸凹點的個數。當然了,這樣做的前提是用人在做手勢表示數字的同時應該是將手指的方向朝上(因為沒有像機器學習那樣通過樣本來訓練,所以使用時條件要苛刻很多)。利用上面求出的4種點的個數(另外程序中還設置了2個輔助計算點的個數,具體見代碼部分)和簡單的邏輯判斷就可以識別出數字0~5了。其它的數字可以依照具體的邏輯去設計(還可以設計出多位數字的識別),只是數字越多設計起來越復雜,因為要考慮到它們之間的干擾性,且這種不通用的設計方法也沒有太多的實際意義。

?

  OpenCV知識點總結

  void convexityDefects(InputArray contour, InputArray convexhull, OutputArray convexityDefects)

  這個在函數在前面的博文Robert Walter手部提取代碼的分析中已經介紹過,當時是這么解釋的:

  該函數的作用是對輸入的輪廓contour,凸包集合來檢測其輪廓的凸型缺陷,一個凸型缺陷結構體包括4個元素,缺陷起點坐標,缺陷終點坐標,缺陷中離凸包線距離最遠的點的坐標,以及此時最遠的距離。參數3即其輸出的凸型缺陷結構體向量。

  其凸型缺陷的示意圖如下所示:

  

?

  不過這里需要重新對這3個參數做個詳細的說明:

  第1個參數雖然寫的是contour,字面意思是輪廓,但是本人實驗過很多次,發現如果該參數為目標通過輪廓檢測得到的原始輪廓的話,則程序運行到onvexityDefects()函數時會報內存錯誤。因此本程序中采用的不是物體原始的輪廓,而是經過多項式曲線擬合后的輪廓,即多項式曲線,這樣程序就會順利地運行得很好。另外由于在手勢識別過程中可能某一幀檢測出來的輪廓非常小(由于某種原因),以致于少到只有1個點,這時候如果程序運行到onvexityDefects()函數時就會報如下的錯誤:

  查看opencv源碼中對應錯誤提示的位置,其源碼如下:

  

  表示在1969行的位置出錯,也就是CV_Assert( ptnum > 3 );出錯,說明出錯時此處的ptnum <=3;看上面一行代碼ptnum = points.checkVector(2, CV_32S);所以我們需要了解checkVector()函數的功能,進入opencv中關于checkVector的源碼,如下:

int Mat::checkVector(int _elemChannels, int _depth, bool _requireContinuous) const{return (depth() == _depth || _depth <= 0) &&(isContinuous() || !_requireContinuous) &&((dims == 2 && (((rows == 1 || cols == 1) && channels() == _elemChannels) || (cols == _elemChannels))) ||(dims == 3 && channels() == 1 && size.p[2] == _elemChannels && (size.p[0] == 1 || size.p[1] == 1) &&(isContinuous() || step.p[1] == step.p[2]*size.p[2])))? (int)(total()*channels()/_elemChannels) : -1;}

  該函數源碼大概意思就是說對應的Mat矩陣如果其深度,連續性,通道數,行列式滿足一定條件的話就返回Mat元素的個數和其通道數的乘積,否則返回-1;而本文是要求其返回值大于3,有得知此處輸入多邊形曲線(即參數1)的通道數為2,所以還需要求其元素的個數大于1.5,即大于2才滿足ptnum > 3。簡單的說就是用convexityDefects()函數來對多邊形曲線進行凹陷檢測時,必須要求參數1曲線本身至少有2個點(也不知道這樣分析對不對)。因此本人在本次程序convexityDefects()函數前加入了if(Mat(approx_poly_curve).checkVector(2,? CV_32S) > 3)來判斷,只有滿足該if條件,才會進行后面的凹陷檢測。這樣程序就不會再出現類似的bug了。

  第2個參數一般是由opencv中的函數convexHull()獲得的,一般情況下該參數里面存的是凸包集合中的點在多項式曲線點中的位置索引,且該參數以vector的形式存在,因此參數convexhull中其元素的類型為unsigned int。在本次凹陷點檢測函數convexityDefects()里面根據文檔,要求該參數為Mat型。因此在使用convexityDefects()的參數2時,一般將vector直接轉換Mat型。

  參數3是一個含有4個元素的結構體的集合,如果在c++的版本中,該參數可以直接用vector<Vec4i>來代替,Vec4i中的4個元素分別表示凹陷曲線段的起始坐標索引,終點坐標索引,離凸包集曲線最遠點的坐標索引以及此時的最遠距離值,這4個值都是整數。在c版本的opencv中一般不是保存的索引,而是坐標值,如下所示:

struct CvConvexityDefect{CvPoint* start; // point of the contour where the defect begins CvPoint* end; // point of the contour where the defect ends CvPoint* depth_point; // the farthest from the convex hull point within the defectfloat depth; // distance between the farthest point and the convex hull };

?

  C/c++知識點總結:

  std::abs()函數中的參數不能為整型,否則編譯的時候會報錯參數不匹配,因此一般情況下可以傳入long型,這樣就不會報錯了。

?

?

  實驗結果:

  這里顯示的是手勢分割后的效果以及其對應的數字識別結果。

  數字“0”的識別結果:

  

  數字“1”的識別結果:

  

  數字“2”的識別結果:

  

  數字“3”的識別結果:

  

  數字“4”的識別結果:

  

  數字“5”的識別結果:

?

?

  實驗主要部分代碼及注釋:

  本次實驗程序實現過程和上面的系統流程圖類似,大概過程如下:

  1.? 求出手部的掩膜

  2.? 求出掩膜的輪廓

  3.? 求出輪廓的多變形擬合曲線

  4.? 求出多邊形擬合曲線的凸包集,找出凸點

  5.? 求出多變形擬合曲線的凹陷集,找出凹點

  6.? 利用上面的凸凹點和手部中心點的幾何關系來做簡單的數字手勢識別

  copenni類采用前面博文設計的,這里給出主函數代碼部分。

  main.cpp:

#include <iostream>#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <opencv2/core/core.hpp> #include "copenni.cpp"#include <iostream>#define DEPTH_SCALE_FACTOR 255./4096. #define ROI_HAND_WIDTH 140 #define ROI_HAND_HEIGHT 140 #define MEDIAN_BLUR_K 5 #define XRES 640 #define YRES 480 #define DEPTH_SEGMENT_THRESH 5 #define MAX_HANDS_COLOR 10 #define MAX_HANDS_NUMBER 10 #define HAND_LIKELY_AREA 2000 #define DELTA_POINT_DISTENCE 25 //手部中心點1和中心點2距離的閾值 #define SEGMENT_POINT1_DISTANCE 27 //凸點與手部中心點1遠近距離的閾值 #define SEGMENT_POINT2_DISTANCE 30 //凸點與手部中心點2遠近距離的閾值using namespace cv; using namespace xn; using namespace std;int main (int argc, char **argv) {unsigned int convex_number_above_point1 = 0;unsigned int concave_number_above_point1 = 0;unsigned int convex_number_above_point2 = 0;unsigned int concave_number_above_point2 = 0;unsigned int convex_assist_above_point1 = 0;unsigned int convex_assist_above_point2 = 0;unsigned int point_y1 = 0;unsigned int point_y2 = 0;int number_result = -1;bool recognition_flag = false; //開始手部數字識別的標志 vector<Scalar> color_array;//采用默認的10種顏色 {color_array.push_back(Scalar(255, 0, 0));color_array.push_back(Scalar(0, 255, 0));color_array.push_back(Scalar(0, 0, 255));color_array.push_back(Scalar(255, 0, 255));color_array.push_back(Scalar(255, 255, 0));color_array.push_back(Scalar(0, 255, 255));color_array.push_back(Scalar(128, 255, 0));color_array.push_back(Scalar(0, 128, 255));color_array.push_back(Scalar(255, 0, 128));color_array.push_back(Scalar(255, 128, 255));}vector<unsigned int> hand_depth(MAX_HANDS_NUMBER, 0);vector<Rect> hands_roi(MAX_HANDS_NUMBER, Rect(XRES/2, YRES/2, ROI_HAND_WIDTH, ROI_HAND_HEIGHT));namedWindow("color image", CV_WINDOW_AUTOSIZE);namedWindow("depth image", CV_WINDOW_AUTOSIZE);namedWindow("hand_segment", CV_WINDOW_AUTOSIZE); //顯示分割出來的手的區域namedWindow("handrecognition", CV_WINDOW_AUTOSIZE); //顯示0~5數字識別的圖像 COpenNI openni;if(!openni.Initial())return 1;if(!openni.Start())return 1;while(1) {if(!openni.UpdateData()) {return 1;}/*獲取并顯示色彩圖像*/Mat color_image_src(openni.image_metadata_.YRes(), openni.image_metadata_.XRes(),CV_8UC3, (char *)openni.image_metadata_.Data());Mat color_image;cvtColor(color_image_src, color_image, CV_RGB2BGR);Mat hand_segment_mask(color_image.size(), CV_8UC1, Scalar::all(0));for(auto itUser = openni.hand_points_.cbegin(); itUser != openni.hand_points_.cend(); ++itUser) {point_y1 = itUser->second.Y;point_y2 = itUser->second.Y + DELTA_POINT_DISTENCE;circle(color_image, Point(itUser->second.X, itUser->second.Y),5, color_array.at(itUser->first % color_array.size()), 3, 8);/*設置不同手部的深度*/hand_depth.at(itUser->first % MAX_HANDS_COLOR) = (unsigned int)(itUser->second.Z* DEPTH_SCALE_FACTOR);//itUser->first會導致程序出現bug/*設置不同手部的不同感興趣區域*/hands_roi.at(itUser->first % MAX_HANDS_NUMBER) = Rect(itUser->second.X - ROI_HAND_WIDTH/2, itUser->second.Y - ROI_HAND_HEIGHT/2,ROI_HAND_WIDTH, ROI_HAND_HEIGHT);hands_roi.at(itUser->first % MAX_HANDS_NUMBER).x = itUser->second.X - ROI_HAND_WIDTH/2;hands_roi.at(itUser->first % MAX_HANDS_NUMBER).y = itUser->second.Y - ROI_HAND_HEIGHT/2;hands_roi.at(itUser->first % MAX_HANDS_NUMBER).width = ROI_HAND_WIDTH;hands_roi.at(itUser->first % MAX_HANDS_NUMBER).height = ROI_HAND_HEIGHT;if(hands_roi.at(itUser->first % MAX_HANDS_NUMBER).x <= 0)hands_roi.at(itUser->first % MAX_HANDS_NUMBER).x = 0;if(hands_roi.at(itUser->first % MAX_HANDS_NUMBER).x > XRES)hands_roi.at(itUser->first % MAX_HANDS_NUMBER).x = XRES;if(hands_roi.at(itUser->first % MAX_HANDS_NUMBER).y <= 0)hands_roi.at(itUser->first % MAX_HANDS_NUMBER).y = 0;if(hands_roi.at(itUser->first % MAX_HANDS_NUMBER).y > YRES)hands_roi.at(itUser->first % MAX_HANDS_NUMBER).y = YRES;}imshow("color image", color_image);/*獲取并顯示深度圖像*/Mat depth_image_src(openni.depth_metadata_.YRes(), openni.depth_metadata_.XRes(),CV_16UC1, (char *)openni.depth_metadata_.Data());//因為kinect獲取到的深度圖像實際上是無符號的16位數據 Mat depth_image;depth_image_src.convertTo(depth_image, CV_8U, DEPTH_SCALE_FACTOR);imshow("depth image", depth_image);//取出手的mask部分//不管原圖像時多少通道的,mask矩陣聲明為單通道就okfor(auto itUser = openni.hand_points_.cbegin(); itUser != openni.hand_points_.cend(); ++itUser) {for(int i = hands_roi.at(itUser->first % MAX_HANDS_NUMBER).x; i < std::min(hands_roi.at(itUser->first % MAX_HANDS_NUMBER).x+hands_roi.at(itUser->first % MAX_HANDS_NUMBER).width, XRES); i++)for(int j = hands_roi.at(itUser->first % MAX_HANDS_NUMBER).y; j < std::min(hands_roi.at(itUser->first % MAX_HANDS_NUMBER).y+hands_roi.at(itUser->first % MAX_HANDS_NUMBER).height, YRES); j++) {hand_segment_mask.at<unsigned char>(j, i) = ((hand_depth.at(itUser->first % MAX_HANDS_NUMBER)-DEPTH_SEGMENT_THRESH) < depth_image.at<unsigned char>(j, i))& ((hand_depth.at(itUser->first % MAX_HANDS_NUMBER)+DEPTH_SEGMENT_THRESH) > depth_image.at<unsigned char>(j,i));}}medianBlur(hand_segment_mask, hand_segment_mask, MEDIAN_BLUR_K);Mat hand_segment(color_image.size(), CV_8UC3);color_image.copyTo(hand_segment, hand_segment_mask);/*對mask圖像進行輪廓提取,并在手勢識別圖像中畫出來*/std::vector< std::vector<Point> > contours;findContours(hand_segment_mask, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);//找出mask圖像的輪廓Mat hand_recognition_image = Mat::zeros(color_image.rows, color_image.cols, CV_8UC3);for(int i = 0; i < contours.size(); i++) { //只有在檢測到輪廓時才會去求它的多邊形,凸包集,凹陷集recognition_flag = true;/*找出輪廓圖像多邊形擬合曲線*/Mat contour_mat = Mat(contours[i]);if(contourArea(contour_mat) > HAND_LIKELY_AREA) { //比較有可能像手的區域std::vector<Point> approx_poly_curve;approxPolyDP(contour_mat, approx_poly_curve, 10, true);//找出輪廓的多邊形擬合曲線std::vector< std::vector<Point> > approx_poly_curve_debug;approx_poly_curve_debug.push_back(approx_poly_curve);drawContours(hand_recognition_image, contours, i, Scalar(255, 0, 0), 1, 8); //畫出輪廓// drawContours(hand_recognition_image, approx_poly_curve_debug, 0, Scalar(256, 128, 128), 1, 8); //畫出多邊形擬合曲線/*對求出的多邊形擬合曲線求出其凸包集*/vector<int> hull;convexHull(Mat(approx_poly_curve), hull, true);for(int i = 0; i < hull.size(); i++) {circle(hand_recognition_image, approx_poly_curve[hull[i]], 2, Scalar(0, 255, 0), 2, 8);/*統計在中心點1以上凸點的個數*/if(approx_poly_curve[hull[i]].y <= point_y1) {/*統計凸點與中心點1的y軸距離*/long dis_point1 = abs(long(point_y1 - approx_poly_curve[hull[i]].y));int dis1 = point_y1 - approx_poly_curve[hull[i]].y;if(dis_point1 > SEGMENT_POINT1_DISTANCE && dis1 >= 0) {convex_assist_above_point1++;}convex_number_above_point1++;}/*統計在中心點2以上凸點的個數*/if(approx_poly_curve[hull[i]].y <= point_y2) {/*統計凸點與中心點1的y軸距離*/long dis_point2 = abs(long(point_y2 - approx_poly_curve[hull[i]].y));int dis2 = point_y2 - approx_poly_curve[hull[i]].y;if(dis_point2 > SEGMENT_POINT2_DISTANCE && dis2 >= 0) {convex_assist_above_point2++;}convex_number_above_point2++;}}// /*對求出的多邊形擬合曲線求出凹陷集*/std::vector<Vec4i> convexity_defects;if(Mat(approx_poly_curve).checkVector(2, CV_32S) > 3)convexityDefects(approx_poly_curve, Mat(hull), convexity_defects);for(int i = 0; i < convexity_defects.size(); i++) {circle(hand_recognition_image, approx_poly_curve[convexity_defects[i][2]] , 2, Scalar(0, 0, 255), 2, 8);/*統計在中心點1以上凹陷點的個數*/if(approx_poly_curve[convexity_defects[i][2]].y <= point_y1)concave_number_above_point1++;/*統計在中心點2以上凹陷點的個數*/if(approx_poly_curve[convexity_defects[i][2]].y <= point_y2)concave_number_above_point2++;}}}/**畫出手勢的中心點**/for(auto itUser = openni.hand_points_.cbegin(); itUser != openni.hand_points_.cend(); ++itUser) {circle(hand_recognition_image, Point(itUser->second.X, itUser->second.Y), 3, Scalar(0, 255, 255), 3, 8);circle(hand_recognition_image, Point(itUser->second.X, itUser->second.Y + 25), 3, Scalar(255, 0, 255), 3, 8);}/*手勢數字0~5的識別*///"0"的識別if((convex_assist_above_point1 ==0 && convex_number_above_point2 >= 2 && convex_number_above_point2 <= 3 &&concave_number_above_point2 <= 1 && concave_number_above_point1 <= 1) || (concave_number_above_point1 ==0|| concave_number_above_point2 == 0) && recognition_flag == true)number_result = 0;//"1"的識別if(convex_assist_above_point1 ==1 && convex_number_above_point1 >=1 && convex_number_above_point1 <=2 &&convex_number_above_point2 >=2 && convex_assist_above_point2 == 1)number_result = 1;//"2"的識別if(convex_number_above_point1 == 2 && concave_number_above_point1 == 1 && convex_assist_above_point2 == 2/*convex_assist_above_point1 <=1*/ && concave_number_above_point2 == 1)number_result = 2;//"3"的識別if(convex_number_above_point1 == 3 && concave_number_above_point1 <= 3 &&concave_number_above_point1 >=1 && convex_number_above_point2 >= 3 && convex_number_above_point2 <= 4 &&convex_assist_above_point2 == 3)number_result = 3;//"4"的識別if(convex_number_above_point1 == 4 && concave_number_above_point1 <=3 && concave_number_above_point1 >=2 &&convex_number_above_point2 == 4)number_result = 4;//"5"的識別if(convex_number_above_point1 >=4 && convex_number_above_point2 == 5 && concave_number_above_point2 >= 3 &&convex_number_above_point2 >= 4)number_result = 5;if(number_result !=0 && number_result != 1 && number_result != 2 && number_result != 3 && number_result != 4 && number_result != 5)number_result == -1;/*在手勢識別圖上顯示匹配的數字*/std::stringstream number_str;number_str << number_result;putText(hand_recognition_image, "Match: ", Point(0, 60), 4, 1, Scalar(0, 255, 0), 2, 0 );if(number_result == -1)putText(hand_recognition_image, " ", Point(120, 60), 4, 2, Scalar(255, 0 ,0), 2, 0);elseputText(hand_recognition_image, number_str.str(), Point(150, 60), 4, 2, Scalar(255, 0 ,0), 2, 0);imshow("handrecognition", hand_recognition_image);imshow("hand_segment", hand_segment);/*一個循環中對有些變量進行初始化操作*/convex_number_above_point1 = 0;convex_number_above_point2 = 0;concave_number_above_point1 = 0;concave_number_above_point2 = 0;convex_assist_above_point1 = 0;convex_assist_above_point2 = 0;number_result = -1;recognition_flag = false;number_str.clear();waitKey(20);}}

?

  copenni.h:

#ifndef COPENNI_H #define COPENNI_H#include <XnCppWrapper.h> #include <XnCyclicStackT.h> #include <XnHashT.h> #include <XnListT.h> #include <iostream> #include <map>using namespace xn; using namespace std;class COpenNI { public:COpenNI();~COpenNI();/*OpenNI的內部初始化,屬性設置*/bool Initial();/*啟動OpenNI讀取Kinect數據*/bool Start();/*更新OpenNI讀取到的數據*/bool UpdateData();/*得到色彩圖像的node*/ImageGenerator& getImageGenerator();/*得到深度圖像的node*/DepthGenerator& getDepthGenerator();/*得到人體的node*/UserGenerator& getUserGenerator();/*得到手勢姿勢的node*/GestureGenerator& getGestureGenerator();/*得到手部的node*/HandsGenerator& getHandGenerator();DepthMetaData depth_metadata_; //返回深度圖像數據ImageMetaData image_metadata_; //返回彩色圖像數據std::map<XnUserID, XnPoint3D> hand_points_; //為了存儲不同手的實時點而設置的std::map< XnUserID, vector<XnPoint3D> > hands_track_points_; //為了繪畫后面不同手部的跟蹤軌跡而設定的private:/*該函數返回真代表出現了錯誤,返回假代表正確*/bool CheckError(const char* error);/*表示有人體進入的回調函數*/static void XN_CALLBACK_TYPE CBNewUser(UserGenerator &generator, XnUserID user, void *p_cookie);/*表示骨骼校正完成的回調函數*/static void XN_CALLBACK_TYPE CBCalibrationComplete(SkeletonCapability &skeleton,XnUserID user, XnCalibrationStatus calibration_error, void *p_cookie);/*表示某個手勢動作已經完成檢測的回調函數*/static void XN_CALLBACK_TYPE CBGestureRecognized(xn::GestureGenerator &generator, const XnChar *strGesture,const XnPoint3D *pIDPosition, const XnPoint3D *pEndPosition,void *pCookie);/*表示檢測到某個手勢開始的回調函數*/static void XN_CALLBACK_TYPE CBGestureProgress(xn::GestureGenerator &generator, const XnChar *strGesture,const XnPoint3D *pPosition, XnFloat fProgress, void *pCookie);/*手部開始建立的回調函數*/static void XN_CALLBACK_TYPE HandCreate(HandsGenerator& rHands, XnUserID xUID, const XnPoint3D* pPosition,XnFloat fTime, void* pCookie);/*手部開始更新的回調函數*/static void XN_CALLBACK_TYPE HandUpdate(HandsGenerator& rHands, XnUserID xUID, const XnPoint3D* pPosition, XnFloat fTime,void* pCookie);/*手部銷毀的回調函數*/static void XN_CALLBACK_TYPE HandDestroy(HandsGenerator& rHands, XnUserID xUID, XnFloat fTime, void* pCookie);XnStatus status_;Context context_;XnMapOutputMode xmode_;UserGenerator user_generator_;ImageGenerator image_generator_;DepthGenerator depth_generator_;GestureGenerator gesture_generator_;HandsGenerator hand_generator_; };#endif // COPENNI_H

?

  copenni.cpp:

#include "copenni.h" #include <XnCppWrapper.h> #include <iostream> #include <map>using namespace xn; using namespace std;COpenNI::COpenNI() { }COpenNI::~COpenNI() { }bool COpenNI::Initial() {status_ = context_.Init();if(CheckError("Context initial failed!")) {return false;}context_.SetGlobalMirror(true);//設置鏡像xmode_.nXRes = 640;xmode_.nYRes = 480;xmode_.nFPS = 30;//產生顏色nodestatus_ = image_generator_.Create(context_);if(CheckError("Create image generator error!")) {return false;}//設置顏色圖片輸出模式status_ = image_generator_.SetMapOutputMode(xmode_);if(CheckError("SetMapOutputMdoe error!")) {return false;}//產生深度nodestatus_ = depth_generator_.Create(context_);if(CheckError("Create depth generator error!")) {return false;}//設置深度圖片輸出模式status_ = depth_generator_.SetMapOutputMode(xmode_);if(CheckError("SetMapOutputMdoe error!")) {return false;}//產生手勢nodestatus_ = gesture_generator_.Create(context_);if(CheckError("Create gesture generator error!")) {return false;}/*添加手勢識別的種類*/gesture_generator_.AddGesture("Wave", NULL);gesture_generator_.AddGesture("click", NULL);gesture_generator_.AddGesture("RaiseHand", NULL);gesture_generator_.AddGesture("MovingHand", NULL);//產生手部的nodestatus_ = hand_generator_.Create(context_);if(CheckError("Create hand generaotr error!")) {return false;}//產生人體nodestatus_ = user_generator_.Create(context_);if(CheckError("Create gesturen generator error!")) {return false;}//視角校正status_ = depth_generator_.GetAlternativeViewPointCap().SetViewPoint(image_generator_);if(CheckError("Can't set the alternative view point on depth generator!")) {return false;}//設置與手勢有關的回調函數 XnCallbackHandle gesture_cb;gesture_generator_.RegisterGestureCallbacks(CBGestureRecognized, CBGestureProgress, this, gesture_cb);//設置于手部有關的回調函數 XnCallbackHandle hands_cb;hand_generator_.RegisterHandCallbacks(HandCreate, HandUpdate, HandDestroy, this, hands_cb);//設置有人進入視野的回調函數 XnCallbackHandle new_user_handle;user_generator_.RegisterUserCallbacks(CBNewUser, NULL, NULL, new_user_handle);user_generator_.GetSkeletonCap().SetSkeletonProfile(XN_SKEL_PROFILE_ALL);//設定使用所有關節(共15個)//設置骨骼校正完成的回調函數 XnCallbackHandle calibration_complete;user_generator_.GetSkeletonCap().RegisterToCalibrationComplete(CBCalibrationComplete, this, calibration_complete);return true; }bool COpenNI::Start() {status_ = context_.StartGeneratingAll();if(CheckError("Start generating error!")) {return false;}return true; }bool COpenNI::UpdateData() {status_ = context_.WaitNoneUpdateAll();if(CheckError("Update date error!")) {return false;}//獲取數據 image_generator_.GetMetaData(image_metadata_);depth_generator_.GetMetaData(depth_metadata_);return true; }ImageGenerator &COpenNI::getImageGenerator() {return image_generator_; }DepthGenerator &COpenNI::getDepthGenerator() {return depth_generator_; }UserGenerator &COpenNI::getUserGenerator() {return user_generator_; }GestureGenerator &COpenNI::getGestureGenerator() {return gesture_generator_; }HandsGenerator &COpenNI::getHandGenerator() {return hand_generator_; }bool COpenNI::CheckError(const char *error) {if(status_ != XN_STATUS_OK) {cerr << error << ": " << xnGetStatusString( status_ ) << endl;return true;}return false; }void COpenNI::CBNewUser(UserGenerator &generator, XnUserID user, void *p_cookie) {//得到skeleton的capability,并調用RequestCalibration函數設置對新檢測到的人進行骨骼校正generator.GetSkeletonCap().RequestCalibration(user, true); }void COpenNI::CBCalibrationComplete(SkeletonCapability &skeleton, XnUserID user, XnCalibrationStatus calibration_error, void *p_cookie) {if(calibration_error == XN_CALIBRATION_STATUS_OK) {skeleton.StartTracking(user);//骨骼校正完成后就開始進行人體跟蹤了 }else {UserGenerator *p_user = (UserGenerator*)p_cookie;skeleton.RequestCalibration(user, true);//骨骼校正失敗時重新設置對人體骨骼繼續進行校正 } }void COpenNI::CBGestureRecognized(GestureGenerator &generator, const XnChar *strGesture, const XnPoint3D *pIDPosition, const XnPoint3D *pEndPosition, void *pCookie) {COpenNI *openni = (COpenNI*)pCookie;openni->hand_generator_.StartTracking(*pEndPosition); }void COpenNI::CBGestureProgress(GestureGenerator &generator, const XnChar *strGesture, const XnPoint3D *pPosition, XnFloat fProgress, void *pCookie) { }void COpenNI::HandCreate(HandsGenerator &rHands, XnUserID xUID, const XnPoint3D *pPosition, XnFloat fTime, void *pCookie) {COpenNI *openni = (COpenNI*)pCookie;XnPoint3D project_pos;openni->depth_generator_.ConvertRealWorldToProjective(1, pPosition, &project_pos);pair<XnUserID, XnPoint3D> hand_point_pair(xUID, XnPoint3D());//在進行pair類型的定義時,可以將第2個設置為空hand_point_pair.second = project_pos;openni->hand_points_.insert(hand_point_pair);//將檢測到的手部存入map類型的hand_points_中。 pair<XnUserID, vector<XnPoint3D>> hand_track_point(xUID, vector<XnPoint3D>());hand_track_point.second.push_back(project_pos);openni->hands_track_points_.insert(hand_track_point); }void COpenNI::HandUpdate(HandsGenerator &rHands, XnUserID xUID, const XnPoint3D *pPosition, XnFloat fTime, void *pCookie) {COpenNI *openni = (COpenNI*)pCookie;XnPoint3D project_pos;openni->depth_generator_.ConvertRealWorldToProjective(1, pPosition, &project_pos);openni->hand_points_.find(xUID)->second = project_pos;openni->hands_track_points_.find(xUID)->second.push_back(project_pos); }void COpenNI::HandDestroy(HandsGenerator &rHands, XnUserID xUID, XnFloat fTime, void *pCookie) {COpenNI *openni = (COpenNI*)pCookie;openni->hand_points_.erase(openni->hand_points_.find(xUID));openni->hands_track_points_.erase(openni->hands_track_points_.find(xUID )); }

?

?

?

  實驗總結:

  由本次實驗的操作過程可以看出,識別效果抗干擾能力比較差差。因此后續的工作是建立一個手勢識別的數據庫,尋找一個好的手部特征向量,和一個好的分類器。這有可能將是本人研究生畢業論文的研究方向,加油!

?

?

  參考文獻:

???? Robert Walter手部提取代碼的分析

???? 不需要骨骼跟蹤的人體多個手部分割

???? OpenNI驅動kinect手勢相關的類的設計

?

?

?

作者:tornadomeet出處:http://www.cnblogs.com/tornadomeet歡迎轉載或分享,但請務必聲明文章出處。

轉載于:https://www.cnblogs.com/xjzhao-hhu/archive/2012/12/25/2833027.html

總結

以上是生活随笔為你收集整理的Kinect+OpenNI学习笔记之12(简单手势所表示的数字的识别)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产伦精品一区二区三区… | 亚洲精品福利在线 | 在线免费观看黄色 | 国产精品精品久久久久久 | 99久久精品久久久久久清纯 | 日韩在线视 | 午夜精品一区二区三区在线 | 狠狠色丁香婷婷综合久小说久 | 中文字幕在线日本 | 日韩黄色在线电影 | 日韩不卡高清 | 麻豆成人在线观看 | 97av视频在线 | 天天操网| 天天躁天天躁天天躁婷 | 天天操夜夜想 | 国产精品久久婷婷六月丁香 | a在线播放| 丝袜护士aⅴ在线白丝护士 天天综合精品 | 中文字幕在线观看免费高清完整版 | 国产视频亚洲精品 | 日韩视频在线不卡 | 欧美日韩午夜 | 中文字幕你懂的 | 波多野结衣一区 | 91精品无人成人www | 国产精品九九久久99视频 | 久久69精品久久久久久久电影好 | 日韩理论电影在线观看 | 91视频传媒 | 国产精品尤物视频 | 亚洲精品国产自产拍在线观看 | 日韩国产精品一区 | 日韩欧美综合视频 | 国产日本在线 | av高清一区二区三区 | 在线免费观看黄色av | 国产精品99精品久久免费 | 国产精品久久久久久久免费大片 | 天天天天天天操 | 亚洲免费小视频 | 欧美日韩免费在线观看视频 | 国产高清在线 | 亚洲人成网站精品片在线观看 | 碰碰影院 | 在线观看免费版高清版 | 久久天天躁夜夜躁狠狠85麻豆 | 在线观看中文字幕av | 中文字幕在线观看完整 | 久久福利在线 | 国产精品美女久久久久久网站 | 18国产精品白浆在线观看免费 | av 在线观看| www免费视频com| ,午夜性刺激免费看视频 | 久久这里只有精品23 | 亚洲免费视频在线观看 | 丁香婷婷色综合亚洲电影 | 日韩三级视频在线观看 | 最新国产在线视频 | 91色国产| 日韩欧在线| 97人人人| 天天爽天天搞 | 99精品国产免费久久久久久下载 | 久久久久国产成人精品亚洲午夜 | 91污污视频在线观看 | 免费看三级黄色片 | 国产成人综合图片 | 国产在线播放观看 | 久热久草在线 | 久久99国产精品自在自在app | 欧美色图亚洲图片 | 九九日韩| 中国一级片在线 | 亚洲成aⅴ人在线观看 | 日韩在线免费视频观看 | 亚a在线| 国产精品久久久久国产精品日日 | 婷婷六月丁香激情 | 丁香激情视频 | 中文资源在线观看 | 亚洲一区美女视频在线观看免费 | 99久高清在线观看视频99精品热在线观看视频 | 国产又粗又硬又爽视频 | 亚洲热视频 | 免费a级毛片在线看 | 天天干夜夜想 | 中文字幕在线久一本久 | 99热都是精品 | 五月天天在线 | 国产一级视频在线免费观看 | 婷婷视频在线观看 | 国产成人av电影在线观看 | 日韩免费在线网站 | 中文字幕av一区二区三区四区 | 日韩欧美在线观看一区二区三区 | 香蕉影院在线观看 | 狠狠躁日日躁狂躁夜夜躁 | 亚洲精品小视频在线观看 | 91喷水| av成人动漫 | 有码中文在线 | 成年人看片 | 亚洲一级特黄 | 91大神一区二区三区 | 日韩欧美电影在线 | 在线免费试看 | 亚洲综合欧美精品电影 | 五月天堂色 | 不卡的一区二区三区 | 91九色porn在线资源 | 91视频观看免费 | 九九精品视频在线看 | 国产精品丝袜 | 国产精品毛片网 | 国产 日韩 在线 亚洲 字幕 中文 | 国产午夜三级一区二区三桃花影视 | 亚洲区另类春色综合小说 | 激情网在线观看 | 五月天天av | 亚洲精品黄网站 | 91精品国产成 | 成人免费在线视频 | 91人人在线| 97在线视频网站 | 国产精品一区二区久久 | 欧美一级特黄高清视频 | 国产分类视频 | 色偷偷88888欧美精品久久 | 国产麻豆精品传媒av国产下载 | 亚洲一级黄色片 | www色婷婷com | 欧美人体xx | 日韩乱理 | 亚洲高清视频在线播放 | 超薄丝袜一二三区 | 日韩精品在线看 | 高清日韩一区二区 | 日韩av高清在线观看 | 美女久久久 | 日日夜夜精品免费 | 国产高h视频 | 在线探花| 色网免费观看 | 成人久久18免费 | a v在线视频 | 久久久综合九色合综国产精品 | 国产精品国产三级国产aⅴ9色 | 首页国产精品 | 国产精品成人自产拍在线观看 | 日日碰狠狠添天天爽超碰97久久 | 国产在线观看免费 | 欧美综合色在线图区 | 免费视频久久久 | 69国产精品视频免费观看 | 不卡电影免费在线播放一区 | 国产精品白浆 | 在线观看视频99 | 99人久久精品视频最新地址 | 中文字幕丝袜美腿 | 国产主播大尺度精品福利免费 | 欧美在线1| 亚洲专区在线播放 | 福利视频区 | 欧美黄污视频 | 亚洲精品视频在线免费播放 | 国产精品一区二区av影院萌芽 | 天天干夜夜夜 | 成人在线免费看视频 | 激情欧美在线观看 | 久久区二区 | 日本中文不卡 | 久久理论影院 | 久久精品伊人 | 天天爱综合 | adn—256中文在线观看 | 91亚州| 成人毛片在线视频 | 射久久久 | 久久夜色精品国产欧美乱极品 | 久久激情五月激情 | 中文av网 | 欧美精品亚洲精品 | 久久麻豆精品 | 久久久久免费网 | 人人爽久久涩噜噜噜网站 | 97色婷婷| 色www.| 香蕉免费在线 | 免费久久网站 | 中文伊人| 99久久精品无免国产免费 | 99久久久久免费精品国产 | 国产欧美中文字幕 | 97精品视频在线播放 | 人人爽人人搞 | 国产中文字幕一区二区 | 天天干天天插伊人网 | 国产三级精品三级在线观看 | 一区 二区 精品 | 91在线视频 | 国产精品大片在线观看 | 美女视频永久黄网站免费观看国产 | 成人国产网站 | 色偷偷中文字幕 | 91免费版在线 | 国产精品一区专区欧美日韩 | 99免费观看视频 | 日韩在线观看中文 | 久热爱 | 啪啪免费视频网站 | 久久爱导航 | 欧美在线1 | 亚洲综合五月天 | 亚洲成人动漫在线观看 | 九九视频在线观看视频6 | 亚洲最新视频在线 | 久久毛片高清国产 | 久久电影中文字幕视频 | 国产精品日韩在线观看 | 91亚州| 最近字幕在线观看第一季 | 美女免费视频一区 | 黄色av免费 | 日韩动态视频 | 欧美乱码精品一区二区 | 中文字幕在线观看一区二区 | 九七人人干| 欧美一级裸体视频 | 香蕉视频网站在线观看 | 国产区久久 | 婷婷亚洲五月 | av资源中文字幕 | 狠狠色婷婷丁香六月 | 国产黄在线播放 | 亚洲欧美va | 久视频在线 | 天天躁天天狠天天透 | 日韩理论电影在线观看 | 中文一区在线观看 | 久久综合婷婷国产二区高清 | av成人黄色| 在线观看免费版高清版 | 国产精品小视频网站 | 992tv人人网tv亚洲精品 | 久操中文字幕在线观看 | 最近日本中文字幕a | 91精品视频免费观看 | 亚洲另类xxxx| 九色91在线 | 日韩啪啪小视频 | 伊人五月 | 午夜国产一区二区 | 美女视频黄,久久 | 午夜久久久久久久 | 97在线免费 | www.大网伊人 | 国产一区二区在线播放 | 日日操日日操 | 激情综合五月天 | 免费日韩高清 | 999一区二区三区 | 在线免费观看麻豆视频 | 国产精品不卡在线观看 | 96国产在线 | 伊人婷婷综合 | 国产精品一区二区久久国产 | 免费av观看 | 免费成人av在线看 | 免费高清影视 | 日韩国产精品一区 | 97超碰在线久草超碰在线观看 | 国产精品第7页 | 国产黑丝一区二区三区 | www色网站 | 精品国产一区二区三区在线 | 成人久久网 | 亚洲国产精品va在线看黑人动漫 | 国内久久精品视频 | 亚洲精品久久久久www | 久久人91精品久久久久久不卡 | 亚洲视频 在线观看 | 黄色免费大片 | 免费看黄在线观看 | 国产手机免费视频 | 狠狠躁日日躁夜夜躁av | 久久精品999 | 亚洲欧美成人 | 成人av电影在线 | 欧美国产高清 | 亚洲一级电影视频 | 精品欧美一区二区三区久久久 | 成人免费观看完整版电影 | 中文字幕在线观看视频一区二区三区 | 成年人视频免费在线播放 | 国产九九精品 | 欧美综合在线视频 | 日韩极品在线 | 91精品区 | 91网址在线 | 在线国产专区 | 欧美一二区视频 | 国产中文字幕网 | 日韩动漫免费观看高清完整版在线观看 | 国产精品一区二区精品视频免费看 | 久久久久久久毛片 | 国产亚洲精品久 | 久久精品—区二区三区 | 国产视频欧美视频 | 日本女人的性生活视频 | 制服丝袜成人在线 | 婷婷综合视频 | 在线观看久草 | 黄污在线看 | 91视频电影 | 91视频在线 | 91传媒视频在线观看 | 日韩高清片 | 天天操天天射天天爽 | 中文字幕在线观看免费 | 精品一二三区视频 | 久久久久久看片 | 免费97视频| 国产免费观看高清完整版 | 91精品国产电影 | 国产精品18久久久久久久网站 | 伊人伊成久久人综合网站 | 狠狠夜夜 | 91精品久久久久久久久久久久久 | 91福利视频网站 | 在线a人片免费观看视频 | 96精品视频 | 亚洲精品美女久久久久 | 日韩免费中文字幕 | 国产婷婷一区二区 | 国产美女无遮挡永久免费 | 久久综合99 | 四虎免费在线观看 | 激情五月视频 | 亚洲精品国精品久久99热 | 91亚洲狠狠婷婷综合久久久 | 亚洲婷婷伊人 | av电影在线播放 | www.色com| 91成版人在线观看入口 | 视频福利在线 | 婷婷综合激情 | 色资源二区在线视频 | 又黄又刺激的网站 | 人人狠 | 精品国产一区二区三区久久久蜜臀 | 国产在线精品一区二区 | 国产在线中文字幕 | 毛片的网址 | 国产成人精品亚洲精品 | 中文字幕在线观看你懂的 | 欧美久久久久 | 免费一级特黄录像 | 99免费看片 | 在线免费观看的av | 日黄网站| 成人在线你懂得 | 人人插人人做 | 亚州激情视频 | 精品在线观看国产 | 97在线观看视频免费 | 啪啪精品 | 天天摸天天弄 | 国产精品久久久久久久毛片 | 亚洲精品乱码久久久久久蜜桃欧美 | 精品国产激情 | 精品麻豆入口免费 | 欧美日韩精品影院 | 国产久草在线 | 国产小视频你懂的 | 久久久久久久久久久电影 | 日韩二区三区在线 | 99久久er热在这里只有精品15 | 久久亚洲免费视频 | 精品久久国产 | 在线观看va| 成人午夜电影免费在线观看 | 国产美女被啪进深处喷白浆视频 | 亚洲视频在线观看网站 | 美女免费网视频 | 国产高清在线永久 | 狠狠操影视 | 91成人精品一区在线播放69 | 啪啪免费试看 | 欧美日韩精品在线播放 | 日韩精品一区二区在线观看 | 日日射av | 免费激情网| 午夜色站 | 亚洲欧美国产精品va在线观看 | 久久99深爱久久99精品 | 天堂在线视频免费观看 | 精品久久久亚洲 | 国产精品久久久一区二区三区网站 | 五月婷婷丁香 | 热久久免费视频 | 99爱精品在线 | 最新国产在线视频 | 99热在线这里只有精品 | 成年人免费看片 | 国产电影黄色av | 最新中文字幕在线观看视频 | 在线免费性生活片 | 激情一区二区三区欧美 | 国产午夜免费视频 | 色香蕉在线 | 国产人成在线观看 | 中文字幕在线视频一区 | 国产精品国产三级在线专区 | 欧美成人h版电影 | 成人影片在线免费观看 | 国产不卡视频在线 | 国产精品粉嫩 | 国产一区在线视频观看 | 欧美精品免费在线观看 | 国产手机在线观看视频 | 永久精品视频 | 日批视频 | 97国产超碰在线 | 一本到视频在线观看 | 国内精品小视频 | 中文字幕在线观看不卡 | 色久天| 在线91播放| 亚州精品天堂中文字幕 | 欧美亚洲精品在线观看 | 99热这里只有精品国产首页 | 一级黄色电影网站 | 亚洲综合色站 | 精品久久五月天 | 免费毛片一区二区三区久久久 | 亚洲精品美女久久久久网站 | 久久伊99综合婷婷久久伊 | 免费性网站 | 夜夜干天天操 | 成人av高清在线 | 五月婷婷在线综合 | 又粗又长又大又爽又黄少妇毛片 | 日韩av伦理片 | 成人三级视频 | 天天射天天做 | 久久亚洲精品电影 | 狠狠干狠狠久久 | 亚洲九九影院 | 日韩一级电影在线观看 | 久草在线视频在线观看 | 天天干,夜夜操 | 激情综合亚洲 | 精品国产乱码久久久久久三级人 | 中文字幕文字幕一区二区 | 久久深夜| 国产精品毛片 | 日批视频 | 一 级 黄 色 片免费看的 | 500部大龄熟乱视频使用方法 | 天天干夜夜夜 | 一本一本久久a久久 | 九九九九热精品免费视频点播观看 | 五月亚洲综合 | 亚洲综合激情小说 | 天天天在线综合网 | 亚洲天堂色婷婷 | 天天干夜夜干 | 黄色一级片视频 | 久久久久国产一区二区三区 | 深爱婷婷久久综合 | 91香蕉视频在线 | 国产免费久久久久 | 天天射网 | 精品国产免费人成在线观看 | 日韩午夜在线播放 | 免费在线观看午夜视频 | 西西444www大胆高清视频 | 日韩在线网址 | 久久精品国产第一区二区三区 | 91网在线观看 | 九九视频热 | 波多野结衣电影一区二区 | 免费在线看成人av | 欧美亚洲国产精品久久高清浪潮 | 国产精品igao视频网网址 | 在线视频麻豆 | 久久99热这里只有精品国产 | 国产视频精选 | 国产成人在线免费观看 | 国产精品色婷婷视频 | 久久久久久久久久久精 | 精品久久久精品 | 天天操夜夜摸 | 91成人精品国产刺激国语对白 | 精品一区二区在线免费观看 | 国产系列 在线观看 | 91最新在线观看 | 欧美日韩一区二区三区在线观看视频 | 国产美女精品 | 91精品国自产在线观看欧美 | 久久成人欧美 | 欧美激情综合五月 | 天天操天天干天天摸 | www.黄色 | 日韩欧美国产激情在线播放 | 丝袜美腿在线视频 | 日韩高清 一区 | 久久久久亚洲精品中文字幕 | 国产手机视频在线 | 丁香5月婷婷久久 | 国产黄色在线观看 | 久久爱资源网 | 亚洲精品午夜久久久久久久 | 国产精品99精品 | 毛片的网址 | 欧美日韩另类在线 | 成人国产一区二区 | 亚洲国产精品久久久久婷婷884 | 不卡精品视频 | 中文在线a在线 | 91视频免费视频 | 五月婷婷丁香激情 | 婷婷激情在线观看 | 日日干精品 | 久久久久激情 | 91久久人澡人人添人人爽欧美 | 欧美成人影音 | 人人射人人爽 | 亚洲精品美女久久久久 | 国产精品一区专区欧美日韩 | 99超碰在线观看 | 精品一区三区 | 久久久久久久国产精品 | 久久久久久久久久久久久久电影 | 伊人宗合| 99欧美| 日韩欧美99 | 中文字幕在线免费 | 久久嗨 | 日韩经典一区二区三区 | 免费观看黄色av | 日韩字幕 | 九九在线精品视频 | www色综合 | 久爱精品在线 | 国产成人精品久久久久蜜臀 | 色播五月婷婷 | 亚洲免费a | 国产最新91 | 在线观看亚洲 | 久久人人爽 | 天天操人| 四虎最新入口 | 69国产精品视频 | 韩国av免费观看 | 国产精品一区免费观看 | 国产在线视频在线观看 | 亚洲狠狠婷婷综合久久久 | 久久免费久久 | 婷婷色综| 一区二区三区精品在线视频 | 少妇视频一区 | 最近日本韩国中文字幕 | 欧美国产日韩中文 | 国产黄色大片 | 亚洲精品国产视频 | 国产无套一区二区三区久久 | 国产精品久久久久久久久久久久午 | 欧美人交a欧美精品 | 久久人人97超碰精品888 | 中文字幕av网站 | 狠狠成人 | 国产在线精品福利 | 国产一级不卡视频 | 午夜av片 | 天堂va欧美va亚洲va老司机 | 在线一级片 | 视频精品一区二区三区 | 久久不卡电影 | 亚洲不卡在线 | 国产一级大片免费看 | 天天操天天射天天爽 | www.久久久.cum| 欧美日韩一级久久久久久免费看 | 蜜臀精品久久久久久蜜臀 | 成人动图 | 91精品国产99久久久久 | 丰满少妇在线观看网站 | 香蕉成人在线视频 | av三级在线播放 | 日韩三级视频 | 999成人| 一区二区三区精品久久久 | 国产一区二区在线精品 | 又大又硬又黄又爽视频在线观看 | 亚洲精品视频在线观看免费视频 | 成年人免费看片网站 | 国产欧美在线一区二区三区 | 丁香色天天 | 少妇高潮流白浆在线观看 | 99精品一区二区三区 | 九九热视频在线播放 | 四虎在线免费观看视频 | 91天堂在线观看 | 99精品免费在线观看 | 三级在线国产 | 久久久久福利视频 | 亚洲国产精品第一区二区 | 久久99精品国产91久久来源 | 国产区免费| 久久9精品 | 日日操网 | 欧美福利视频一区 | 国产精品久久久久久久久搜平片 | 色婷婷综合在线 | 欧美日韩视频精品 | 色噜噜日韩精品一区二区三区视频 | 亚洲人成免费网站 | 精品国产乱码久久久久久三级人 | 91热精品视频 | 久久久影院| 蜜桃av久久久亚洲精品 | 中文字幕精品久久 | av一本久道久久波多野结衣 | av在线收看 | 国产视频一区在线播放 | 亚洲网站在线看 | 日韩小视频 | 天天艹天天操 | 欧美日韩视频一区二区 | 午夜婷婷在线观看 | 亚洲不卡av一区二区三区 | av电影在线不卡 | 亚洲午夜av电影 | 中文字幕在线观看完整版 | 日韩三级精品 | 国产福利精品在线观看 | 国产午夜精品一区 | a√天堂中文在线 | 久久综合久久久 | 麻豆视频免费在线观看 | 日韩电影一区二区三区在线观看 | 亚州国产精品 | 亚洲视频h | 国产精品欧美久久久久无广告 | www中文在线| 天天看天天干天天操 | 免费在线观看毛片网站 | 狠狠躁日日躁夜夜躁av | 日日婷婷夜日日天干 | 中文字幕中文字幕中文字幕 | 国产精品黄色 | 中文字幕有码在线 | 免费观看黄 | 国产亚洲免费的视频看 | 国产成人在线精品 | 国产福利在线 | 在线视频 亚洲 | av电影免费观看 | 美女国产 | 99久免费精品视频在线观看 | 在线观看网站黄 | 综合久久网站 | 久久久夜色 | av观看久久久 | a天堂最新版中文在线地址 久久99久久精品国产 | 日韩中文字幕免费在线观看 | 99热在线看 | 国产麻豆剧传媒免费观看 | 国产精品日韩在线观看 | 狠狠色丁香婷婷综合欧美 | 91精品视频免费看 | 草樱av| 狠狠狠狠狠色综合 | 一区二区三区中文字幕在线观看 | 99久久精品午夜一区二区小说 | 久久精品韩国 | 国产精品国产精品 | 一级特黄av| 97视频在线观看网址 | 欧美一级性生活视频 | 日本丶国产丶欧美色综合 | 欧美不卡视频在线 | 欧美一级片 | 99re中文字幕 | 天天射网站 | 天天搞夜夜骑 | 日韩中文在线播放 | 日韩在线观看三区 | 丁香婷婷激情国产高清秒播 | 香蕉视频日本 | www视频在线免费观看 | 五月天久久狠狠 | 国产精品久久久久久久久久三级 | av在线之家电影网站 | 日日干影院 | 日本黄色免费播放 | 国产一区二区在线免费播放 | 99久久精品电影 | 日韩精品一区二区免费视频 | 日本精品视频网站 | 国产原创在线 | 91夜夜夜 | av大片免费看 | 国产成人精品电影久久久 | 日韩毛片在线一区二区毛片 | 在线看岛国av | 免费日韩电影 | 国产精品午夜免费福利视频 | 这里只有精品视频在线 | 99在线精品视频 | 欧美日韩高清免费 | 97在线精品国自产拍中文 | 久久综合导航 | 中文字幕亚洲五码 | 亚洲成人av在线播放 | 午夜久久久久久久久久影院 | 久久99国产精品免费 | 狠狠的干狠狠的操 | 日日射av| 狠狠的干狠狠的操 | 免费性网站 | 二区中文字幕 | 在线国产观看 | 国产一区二区网址 | 香蕉视频久久 | 伊人五月婷 | 97在线观看免费观看高清 | 国产精品嫩草69影院 | 免费看污片 | 2022中文字幕在线观看 | 亚洲国产精品视频在线观看 | 天天色天天骑天天射 | 日本精品久久久久久 | 亚洲日韩中文字幕在线播放 | 国产精品999久久久 久产久精国产品 | 久久艹艹| 久草在线免费看视频 | 久久这里只有精品视频99 | 成人av在线一区二区 | 欧美日韩免费一区 | 久草在线资源观看 | 在线观看免费高清视频大全追剧 | 婷婷丁香综合 | 久草亚洲视频 | 蜜桃av久久久亚洲精品 | 涩涩色亚洲一区 | 中文字幕在线久一本久 | 国产一区二区三区免费视频 | 久久精品一区 | 色综合天天狠天天透天天伊人 | 久久国产二区 | 激情五月六月婷婷 | 久久在线免费观看视频 | 亚洲国内精品视频 | 国产亚洲激情视频在线 | 久久久精品欧美一区二区免费 | 中文字幕黄色 | 国产一级视频在线观看 | 美女黄色网在线播放 | 天天干.com| 精品久久免费 | 黄色91免费观看 | 国产精品久久久99 | 欧美色道 | 午夜视频播放 | 成人精品福利 | 久久综合毛片 | 玖玖视频精品 | 天天操网址 | 中文字幕91在线 | 国产99一区二区 | 欧美精品在线一区 | 欧美久久久一区二区三区 | 国产高清视频在线播放 | 久热电影 | 在线观看网站你懂的 | 国产精品99在线播放 | 日本精品中文字幕在线观看 | 国产精品毛片久久久久久久久久99999999 | 国产精品亚州 | 激情开心| 一区二区网 | 国产手机精品视频 | 欧美日产一区 | 日本黄网站 | 深爱激情站 | 91热爆在线观看 | 午夜黄色影院 | 国产精品国产三级在线专区 | 欧美日韩国产一区 | 日韩三区在线 | 天天操天天舔天天干 | 中文字幕 国产视频 | 国产a国产 | 亚洲区精品视频 | 黄色在线看网站 | 久久精品男人的天堂 | 亚洲欧美在线视频免费 | 日韩xxxxxxxxx | 国产精品美女久久久久久久 | 色婷婷视频在线观看 | 欧美一级视频在线观看 | 欧美黄网站| 久草精品视频在线播放 | 国产精品免费观看在线 | 国产成人一区二区三区 | 国产视频黄| 国产视频精品免费 | 黄色成人影视 | 九七视频在线观看 | 国产福利在线 | 97精品久久 | 国产精品18久久久久久不卡孕妇 | 国产精品 国内视频 | 色综合www| 91在线视频免费播放 | 狠狠干网站 | 91精品国产网站 | 国产精品一区二区av麻豆 | 在线免费观看不卡av | 国产精品久久久久三级 | 欧美一级专区免费大片 | 久久人人97超碰精品888 | 久久综合网色—综合色88 | 欧美成人一区二区 | 国产精品美女久久久 | 国内亚洲精品 | 97视频在线播放 | 国产综合精品一区二区三区 | 日韩免| 五月综合| 黄色片网站 | a级国产乱理论片在线观看 特级毛片在线观看 | 99一级片| 久一在线 | 日韩系列在线 | 超碰在线cao | 五月婷婷久久丁香 | 久久久久99精品成人片三人毛片 | 超碰人人在线观看 | www日| 天天射成人 | 成人av片免费观看app下载 | 欧美精品色 | 色干综合 | 国产精品video| 久草网免费 | 国产日韩精品一区二区三区 | 午夜电影久久久 | 麻豆视频网址 | 国产午夜精品一区二区三区在线观看 | 久久极品 | 欧美日韩精品久久久 | av软件在线观看 | 日韩区欧美久久久无人区 | 蜜臀精品久久久久久蜜臀 | 久久久福利视频 | 成人超碰在线 | 97碰在线视频 | 日韩综合一区二区 | 国产视频在线免费观看 | 国产午夜av | 日韩动漫免费观看高清完整版在线观看 | 日韩在线在线 | 四虎最新域名 | 六月天色婷婷 | 视频在线观看入口黄最新永久免费国产 | 在线视频电影 | 久久久久免费精品 | 高清av不卡 | 日韩av一区二区三区四区 | 欧美激情视频一区二区三区 | 九九有精品 | 日韩免费观看一区二区 | 天天综合日日夜夜 | 国产电影黄色av | 韩国在线一区 | 久久亚洲免费视频 | 成人资源在线播放 | 日本在线观看一区二区 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品99页 | 亚洲成人av在线 | 国产精品久久99 | 久久公开视频 | 97伊人网| 国产成人综合图片 | 日本精品中文字幕在线观看 | 美女视频一区二区 | 日韩一级电影网站 | 国产一区二区综合 | 91大神一区二区三区 | 国产视频九色蝌蚪 | 日韩福利在线观看 | 亚洲 av网站| 国产精品成人久久久 | 天天操天天透 | 中文字幕日韩伦理 | 在线视频99 | 1024在线看片 | 国产精品 亚洲精品 | 91成人午夜| 在线观看日韩精品视频 | 波多野结衣在线中文字幕 | 欧美日韩中文字幕综合视频 | 国产精品美乳一区二区免费 | 九九综合九九综合 | 日本中文字幕一二区观 | 国产精品日韩在线观看 | 精品国模一区二区三区 | 国产亚洲精品成人av久久ww | 又黄又爽的视频在线观看网站 | 欧美日韩首页 | 国产精品久久久久四虎 | 日韩在线视频观看免费 | 日本乱视频 | 五月婷婷在线视频观看 | 欧美日韩二区三区 | 国产又粗又猛又爽又黄的视频免费 | 伊人色播 | 三级黄色免费片 | 毛片网站免费在线观看 | av一级一片 | 中文字幕在线中文 | 超碰在线观看av.com | 91看片看淫黄大片 | 中文字幕日韩高清 | 国产精品色婷婷视频 | 国产成人一区二区三区 | 人成免费网站 | 三级黄色a | 狠狠狠操 | 久久久久久毛片 | 欧美巨乳波霸 | 午夜 久久 tv | av在线播放不卡 | 操综合| 中文字幕国产精品一区二区 | 91完整版观看 | 免费看三级 | 丁香激情婷婷 | 国产午夜三级一二三区 | 国产精品午夜8888 | 国产午夜麻豆影院在线观看 | 久久精品久久精品久久精品 | 最新色站 | 天天干,天天干 | 国产视频导航 | 亚洲一级二级三级 | 99热在线精品观看 | 国产一区二区三区在线 | 国产成人久久精品 | 成人黄色电影在线观看 | 天天玩天天操天天射 | 在线观看成人国产 | 在线a亚洲视频播放在线观看 | 在线成人免费电影 | 亚洲高清国产视频 | 黄色av成人在线观看 | 激情网综合| 欧美精品一区二区在线观看 | 日本精品视频在线观看 | 丁香六月天 | 欧美人人爱 | 天堂在线成人 | 亚洲欧洲精品一区二区 | 天天操夜夜叫 | 在线观看资源 | 日本韩国精品在线 | 国产成人综合在线观看 | 色中色亚洲 | 天天草天天干 | 狠狠色丁香婷婷综合视频 | 亚洲国产精品资源 | 久久久精品久久 | 黄色aaa毛片 | 九九九在线观看视频 | 中文字幕免费国产精品 | av成人在线观看 | 天天综合在线观看 | 久久久精品免费看 | 亚州精品天堂中文字幕 | 国产精品九九视频 | 国产一区二区三区四区在线 | av资源网在线播放 | 国精产品一二三线999 | 亚洲区另类春色综合小说 | www日日夜夜| 亚洲一区二区视频在线播放 | 91成人免费在线视频 | 欧美激情第八页 | 久久激情片 | 婷婷国产视频 | 九九热精品视频在线播放 | 在线视频一区二区 |