久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

瀏覽:7日期:2022-09-24 17:06:18

【尊重原創(chuàng),轉(zhuǎn)載請注明出處】https://blog.csdn.net/guyuealian/article/details/79672257

項目Github下載地址:https://github.com/PanJinquan/Mnist-tensorFlow-AndroidDemo

本博客將以最簡單的方式,利用TensorFlow實現(xiàn)了MNIST手寫數(shù)字識別,并將Python TensoFlow訓練好的模型移植到Android手機上運行。網(wǎng)上也有很多移植教程,大部分是在Ubuntu(Linux)系統(tǒng),一般先利用Bazel工具把TensoFlow編譯成.so庫文件和jar包,再進行Android配置,實現(xiàn)模型移植。不會使用Bazel也沒關(guān)系,實質(zhì)上TensoFlow已經(jīng)為開發(fā)者提供了最新的.so庫文件和對應的jar包了(如libtensorflow_inference.so和libandroid_tensorflow_inference_java.jar),我們只需要下載文件,并在本地Android Studio導入jar包和.so庫文件,即可以在Android加載TensoFlow的模型了。

當然了,本博客的項目代碼都上傳到Github:https://github.com/PanJinquan/Mnist-tensorFlow-AndroidDemo

先說一下,本人的開發(fā)環(huán)境:

Windows 7 Python3.5 TensoFlow 1.6.0(2018年3月23日—當前最新版) Android Studio 3.0.1(2018年3月23日—當前最新版)

一、利用Python訓練模型

以MNIST手寫數(shù)字識別為例,這里首先使用Python版的TensorFlow實現(xiàn)單隱含層的SoftMax Regression分類器,并將訓練好的模型的網(wǎng)絡拓撲結(jié)構(gòu)和參數(shù)保存為pb文件。首先,需要定義模型的輸入層和輸出層節(jié)點的名字(通過形參 ’name’指定,名字可以隨意,后面加載模型時,都是通過該name來傳遞數(shù)據(jù)的):

x = tf.placeholder(tf.float32,[None,784],name=’x_input’)#輸入節(jié)點:x_input...pre_num=tf.argmax(y,1,output_type=’int32’,name='output')#輸出節(jié)點:output

PS:說一下鄙人遇到坑:起初,我參照網(wǎng)上相關(guān)教程訓練了一個模型,在Windows下測試沒錯,但把模型移植到Android后就出錯了,但用別人的模型又正常運行;后來折騰了半天才發(fā)現(xiàn),是類型轉(zhuǎn)換出錯啦!!!!TensorFlow默認類型是float32,但我們希望返回的是一個int型,因此需要指定output_type=’int32’;但注意了,在Windows下測試使用int64和float64都是可以的,但在Android平臺上只能使用int32和float32,并且對應Java的int和float類型。

將訓練好的模型保存為.pb文件,這就需要用到tf.graph_util.convert_variables_to_constants函數(shù)了。

# 保存訓練好的模型#形參output_node_names用于指定輸出的節(jié)點名稱,output_node_names=[’output’]對應pre_num=tf.argmax(y,1,name='output'),output_graph_def = graph_util.convert_variables_to_constants(sess, sess.graph_def,output_node_names=[’output’])with tf.gfile.FastGFile(’model/mnist.pb’, mode=’wb’) as f:#’wb’中w代表寫文件,b代表將數(shù)據(jù)以二進制方式寫入文件。 f.write(output_graph_def.SerializeToString())

關(guān)于tensorflow保存模型和加載模型的方法,請參考本人另一篇博客:https://www.jb51.net/article/138932.htm

這里給出Python訓練模型完整的代碼如下:

#coding=utf-8# 單隱層SoftMax Regression分類器:訓練和保存模型模塊from tensorflow.examples.tutorials.mnist import input_dataimport tensorflow as tffrom tensorflow.python.framework import graph_utilprint(’tensortflow:{0}’.format(tf.__version__)) mnist = input_data.read_data_sets('Mnist_data/', one_hot=True) #create modelwith tf.name_scope(’input’): x = tf.placeholder(tf.float32,[None,784],name=’x_input’)#輸入節(jié)點名:x_input y_ = tf.placeholder(tf.float32,[None,10],name=’y_input’)with tf.name_scope(’layer’): with tf.name_scope(’W’): #tf.zeros([3, 4], tf.int32) ==> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] W = tf.Variable(tf.zeros([784,10]),name=’Weights’) with tf.name_scope(’b’): b = tf.Variable(tf.zeros([10]),name=’biases’) with tf.name_scope(’W_p_b’): Wx_plus_b = tf.add(tf.matmul(x, W), b, name=’Wx_plus_b’) y = tf.nn.softmax(Wx_plus_b, name=’final_result’) # 定義損失函數(shù)和優(yōu)化方法with tf.name_scope(’loss’): loss = -tf.reduce_sum(y_ * tf.log(y))with tf.name_scope(’train_step’): train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss) print(train_step)# 初始化sess = tf.InteractiveSession()init = tf.global_variables_initializer()sess.run(init)# 訓練for step in range(100): batch_xs,batch_ys =mnist.train.next_batch(100) train_step.run({x:batch_xs,y_:batch_ys}) # variables = tf.all_variables() # print(len(variables)) # print(sess.run(b)) # 測試模型準確率pre_num=tf.argmax(y,1,output_type=’int32’,name='output')#輸出節(jié)點名:outputcorrect_prediction = tf.equal(pre_num,tf.argmax(y_,1,output_type=’int32’))accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))a = accuracy.eval({x:mnist.test.images,y_:mnist.test.labels})print(’測試正確率:{0}’.format(a)) # 保存訓練好的模型#形參output_node_names用于指定輸出的節(jié)點名稱,output_node_names=[’output’]對應pre_num=tf.argmax(y,1,name='output'),output_graph_def = graph_util.convert_variables_to_constants(sess, sess.graph_def,output_node_names=[’output’])with tf.gfile.FastGFile(’model/mnist.pb’, mode=’wb’) as f:#’wb’中w代表寫文件,b代表將數(shù)據(jù)以二進制方式寫入文件。 f.write(output_graph_def.SerializeToString())sess.close()

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

上面的代碼已經(jīng)將訓練模型保存在model/mnist.pb,當然我們可以先在Python中使用該模型進行簡單的預測,測試方法如下:

import tensorflow as tfimport numpy as npfrom PIL import Imageimport matplotlib.pyplot as plt #模型路徑model_path = ’model/mnist.pb’#測試圖片testImage = Image.open('data/test_image.jpg'); with tf.Graph().as_default(): output_graph_def = tf.GraphDef() with open(model_path, 'rb') as f: output_graph_def.ParseFromString(f.read()) tf.import_graph_def(output_graph_def, name='') with tf.Session() as sess: tf.global_variables_initializer().run() # x_test = x_test.reshape(1, 28 * 28) input_x = sess.graph.get_tensor_by_name('input/x_input:0') output = sess.graph.get_tensor_by_name('output:0') #對圖片進行測試 testImage=testImage.convert(’L’) testImage = testImage.resize((28, 28)) test_input=np.array(testImage) test_input = test_input.reshape(1, 28 * 28) pre_num = sess.run(output, feed_dict={input_x: test_input})#利用訓練好的模型預測結(jié)果 print(’模型預測結(jié)果為:’,pre_num) #顯示測試的圖片 # testImage = test_x.reshape(28, 28) fig = plt.figure(), plt.imshow(testImage,cmap=’binary’) # 顯示圖片 plt.title('prediction result:'+str(pre_num)) plt.show()

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

二、移植到Android

相信大家看到很多大神的博客,都是要自己編譯TensoFlow的so庫和jar包,說實在的,這個過程真TM麻煩,反正我弄了半天都沒成功過,然后放棄了……。本博客的移植方法不需要安裝Bazel,也不需要構(gòu)建TensoFlow的so庫和jar包,因為Google在TensoFlow github中給我們提供了,為什么不用了!!!

1、下載TensoFlow的jar包和so庫

TensoFlow在Github已經(jīng)存放了很多開發(fā)文件:https://github.com/PanJinquan/tensorflow

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

我們需要做的是,下載Android: native libs ,打包下載全部文件,其中有我們需要的libtensorflow_inference.so和libandroid_tensorflow_inference_java.jar,有了這兩個文件,剩下的就是在Android Studio配置的問題了

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

2、Android Studio配置

(1)新建一個Android項目

(2)把訓練好的pb文件(mnist.pb)放入Android項目中app/src/main/assets下,若不存在assets目錄,右鍵main->new->Directory,輸入assets。

(3)將下載的libtensorflow_inference.so和libandroid_tensorflow_inference_java.jar如下結(jié)構(gòu)放在libs文件夾下

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

(4)appbuild.gradle配置

在defaultConfig中添加

multiDexEnabled true ndk { abiFilters 'armeabi-v7a' }

增加sourceSets

sourceSets { main { jniLibs.srcDirs = [’libs’] } }

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

在dependencies中增加TensoFlow編譯的jar文件libandroid_tensorflow_inference_java.jar:

compile files(’libs/libandroid_tensorflow_inference_java.jar’)

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

OK了,build.gradle配置完成了,剩下的就是java編程的問題了。

3、模型調(diào)用

在需要調(diào)用TensoFlow的地方,加載so庫“System.loadLibrary('tensorflow_inference');并”import org.tensorflow.contrib.android.TensorFlowInferenceInterface;就可以使用了

注意,舊版的TensoFlow,是如下方式進行,該方法可參考大神的博客:https://www.jb51.net/article/176693.htm

TensorFlowInferenceInterface.fillNodeFloat(); //送入輸入數(shù)據(jù)TensorFlowInferenceInterface.runInference(); //進行模型的推理TensorFlowInferenceInterface.readNodeFloat(); //獲取輸出數(shù)據(jù)

但在最新的libandroid_tensorflow_inference_java.jar中,已經(jīng)沒有這些方法了,換為

TensorFlowInferenceInterface.feed()TensorFlowInferenceInterface.run()TensorFlowInferenceInterface.fetch()

下面是以MNIST手寫數(shù)字識別為例,其實現(xiàn)方法如下:

package com.example.jinquan.pan.mnist_ensorflow_androiddemo; import android.content.res.AssetManager;import android.graphics.Bitmap;import android.graphics.Color;import android.graphics.Matrix;import android.util.Log; import org.tensorflow.contrib.android.TensorFlowInferenceInterface; public class PredictionTF { private static final String TAG = 'PredictionTF'; //設(shè)置模型輸入/輸出節(jié)點的數(shù)據(jù)維度 private static final int IN_COL = 1; private static final int IN_ROW = 28*28; private static final int OUT_COL = 1; private static final int OUT_ROW = 1; //模型中輸入變量的名稱 private static final String inputName = 'input/x_input'; //模型中輸出變量的名稱 private static final String outputName = 'output'; TensorFlowInferenceInterface inferenceInterface; static { //加載libtensorflow_inference.so庫文件 System.loadLibrary('tensorflow_inference'); Log.e(TAG,'libtensorflow_inference.so庫加載成功'); } PredictionTF(AssetManager assetManager, String modePath) { //初始化TensorFlowInferenceInterface對象 inferenceInterface = new TensorFlowInferenceInterface(assetManager,modePath); Log.e(TAG,'TensoFlow模型文件加載成功'); } /** * 利用訓練好的TensoFlow模型預測結(jié)果 * @param bitmap 輸入被測試的bitmap圖 * @return 返回預測結(jié)果,int數(shù)組 */ public int[] getPredict(Bitmap bitmap) { float[] inputdata = bitmapToFloatArray(bitmap,28, 28);//需要將圖片縮放帶28*28 //將數(shù)據(jù)feed給tensorflow的輸入節(jié)點 inferenceInterface.feed(inputName, inputdata, IN_COL, IN_ROW); //運行tensorflow String[] outputNames = new String[] {outputName}; inferenceInterface.run(outputNames); ///獲取輸出節(jié)點的輸出信息 int[] outputs = new int[OUT_COL*OUT_ROW]; //用于存儲模型的輸出數(shù)據(jù) inferenceInterface.fetch(outputName, outputs); return outputs; } /** * 將bitmap轉(zhuǎn)為(按行優(yōu)先)一個float數(shù)組,并且每個像素點都歸一化到0~1之間。 * @param bitmap 輸入被測試的bitmap圖片 * @param rx 將圖片縮放到指定的大小(列)->28 * @param ry 將圖片縮放到指定的大小(行)->28 * @return 返回歸一化后的一維float數(shù)組 ->28*28 */ public static float[] bitmapToFloatArray(Bitmap bitmap, int rx, int ry){ int height = bitmap.getHeight(); int width = bitmap.getWidth(); // 計算縮放比例 float scaleWidth = ((float) rx) / width; float scaleHeight = ((float) ry) / height; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); Log.i(TAG,'bitmap width:'+bitmap.getWidth()+',height:'+bitmap.getHeight()); Log.i(TAG,'bitmap.getConfig():'+bitmap.getConfig()); height = bitmap.getHeight(); width = bitmap.getWidth(); float[] result = new float[height*width]; int k = 0; //行優(yōu)先 for(int j = 0;j < height;j++){ for (int i = 0;i < width;i++){ int argb = bitmap.getPixel(i,j); int r = Color.red(argb); int g = Color.green(argb); int b = Color.blue(argb); int a = Color.alpha(argb); //由于是灰度圖,所以r,g,b分量是相等的。 assert(r==g && g==b);// Log.i(TAG,i+','+j+' : argb = '+argb+', a='+a+', r='+r+', g='+g+', b='+b); result[k++] = r / 255.0f; } } return result; }}簡單說明一下:項目新建了一個PredictionTF類,該類會先加載libtensorflow_inference.so庫文件;PredictionTF(AssetManager assetManager, String modePath) 構(gòu)造方法需要傳入AssetManager對象和pb文件的路徑; 從資源文件中獲取BitMap圖片,并傳入 getPredict(Bitmap bitmap)方法,該方法首先將BitMap圖像縮放到28*28的大小,由于原圖是灰度圖,我們需要獲取灰度圖的像素值,并將28*28的像素轉(zhuǎn)存為行向量的一個float數(shù)組,并且每個像素點都歸一化到0~1之間,這個就是bitmapToFloatArray(Bitmap bitmap, int rx, int ry)方法的作用; 然后將數(shù)據(jù)feed給tensorflow的輸入節(jié)點,并運行(run)tensorflow,最后獲取(fetch)輸出節(jié)點的輸出信息。

MainActivity很簡單,一個單擊事件獲取預測結(jié)果:

package com.example.jinquan.pan.mnist_ensorflow_androiddemo; import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.TextView; public class MainActivity extends AppCompatActivity { // Used to load the ’native-lib’ library on application startup. static { System.loadLibrary('native-lib');//可以去掉 } private static final String TAG = 'MainActivity'; private static final String MODEL_FILE = 'file:///android_asset/mnist.pb'; //模型存放路徑 TextView txt; TextView tv; ImageView imageView; Bitmap bitmap; PredictionTF preTF; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Example of a call to a native method tv = (TextView) findViewById(R.id.sample_text); txt=(TextView)findViewById(R.id.txt_id); imageView =(ImageView)findViewById(R.id.imageView1); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test_image); imageView.setImageBitmap(bitmap); preTF =new PredictionTF(getAssets(),MODEL_FILE);//輸入模型存放路徑,并加載TensoFlow模型 } public void click01(View v){ String res='預測結(jié)果為:'; int[] result= preTF.getPredict(bitmap); for (int i=0;i<result.length;i++){ Log.i(TAG, res+result[i] ); res=res+String.valueOf(result[i])+' '; } txt.setText(res); tv.setText(stringFromJNI()); } /** * A native method that is implemented by the ’native-lib’ native library, * which is packaged with this application. */ public native String stringFromJNI();//可以去掉} activity_main布局文件:

activity_main布局文件:

<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='match_parent' android:orientation='vertical' android:paddingBottom='16dp' android:paddingLeft='16dp' android:paddingRight='16dp' android:paddingTop='16dp'> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:text='https://blog.csdn.net/guyuealian' android:layout_gravity='center'/> <Button android:onClick='click01' android:layout_width='match_parent' android:layout_height='wrap_content' android:text='click' /> <TextView android: android:layout_width='match_parent' android:layout_height='wrap_content' android:gravity='center' android:text='結(jié)果為:'/> <ImageView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:layout_gravity='center'/></LinearLayout>

最后一步,就是run,run,run,效果如下,

如何將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)

本博客的項目代碼都上傳到Github:下載地址:https://github.com/PanJinquan/Mnist-tensorFlow-AndroidDemo

相關(guān)參考資料:https://www.jb51.net/article/180291.htm

https://www.jb51.net/article/185206.htm

到此這篇關(guān)于將tensorflow訓練好的模型移植到Android (MNIST手寫數(shù)字識別)的文章就介紹到這了,更多相關(guān)tensorflow模型識別MNIST手寫數(shù)字內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Android
相關(guān)文章:
主站蜘蛛池模板: 亚洲第一区国产精品 | 男女午夜视频 | 国产精品成人观看视频国产奇米 | 精品日韩| 在线观看成人国产 | 欧美一区二区在线免费观看 | 亚洲日韩欧美一区二区在线 | 久久国产精品99久久久久久牛牛 | 亚洲欧美一区二区三区在线 | 亚洲国产一区二区在线 | 99这里只有精品视频 | 亚洲 欧美 日韩在线 | 成年免费视频 | 亚洲一区二区在线看 | 国产亚洲女人久久久久毛片 | 久久精品国产视频 | 精品一区二区三区免费毛片爱 | 成人免费xxxxx在线视频软件 | 色综合久久久久 | 日本中文字幕一区 | 亚洲青涩在线 | 91视频免费看 | 天天噜天天干 | 亚洲 欧美 激情 另类 校园 | 伊人影院久久 | 日韩三区在线 | 久久精品视频网 | 黄色在线免费观看 | 激情欧美一区二区三区中文字幕 | 欧美激情国产日韩精品一区18 | 中文字幕在线日韩 | 亚洲一区日韩 | 99久久99久久久精品色圆 | 97国产免费 | 91亚洲精品在线观看 | 国产精品久久精品 | 九九热精品免费视频 | 国产精成人| 日韩欧美一级 | 狠狠躁夜夜躁人人爽天天高潮 | 福利视频一区 | 狠狠色狠狠色综合网 | 黄色小视频免费观看 | 亚洲国产精品18久久 | 日韩婷婷 | 精品国产一区二区三区四 | 国产精品久久久久久久久免费高清 | 欧美一区2区三区3区公司 | 国产综合精品 | 成人精品一区二区三区 | 91网站免费| 日本a视频 | 国产三级在线播放 | 狠狠色综合欧美激情 | 国产女人网 | 精品一区二区在线观看 | av成人在线观看 | 美女福利视频网站 | 亚洲精品一二三 | 亚洲女人天堂网 | 国产99久久久精品视频 | 国产精品免费av | 日韩激情免费视频 | 久在线视频 | 插插射啊爱视频日a级 | 99精品一区二区三区 | 日韩拍拍| 日精品| 欧洲精品一区 | 一级篇 | 99国产精品99久久久久久 | 国产欧美一区二区三区国产幕精品 | 国产精品美女久久久久aⅴ国产馆 | 日韩视频精品在线 | 国内精品成人 | 午夜在线 | 欧美国产一区二区 | 精品欧美一区二区三区久久久 | 91精品国产91综合久久蜜臀 | 国产成人高清视频 | 国产精品免费看 | 国产999精品久久久影片官网 | 日韩精品视频网 | 亚洲欧美在线综合 | 91中文字幕在线观看 | 伊人青青久久 | 热久久这里只有精品 | 成人高清视频在线观看 | 欧美日韩电影一区二区三区 | 美女久久| 久久亚洲综合 | 亚洲精品影院 | 亚洲嫩草 | 日韩视频精品在线 | 日韩精品在线观看视频 | 中文字幕一区二区三区乱码图片 | 国产精品久久国产精麻豆99网站 | 亚洲欧美一 | 99久久精品免费看国产一区二区三区 | 国产在线看片 | 亚洲精品毛片一区二区 | 精品一区二区久久久久久久网站 | 日本黄色毛片 | 精品一区不卡 | 综合久久综合久久 | 国产精品视频 | www.一区 | 午夜免费电影 | www欧美| 香蕉久久夜色精品国产使用方法 | 国产成人高清 | 永久91嫩草亚洲精品人人 | 一区二区视频在线 | 精品在线一区二区 | 99色资源| 国产一区二区视频在线播放 | 蜜桃视频网站在线观看 | 欧美色欧美亚洲另类七区 | 欧美激情一区二区 | 久久久久久久影院 | 天天插天天操天天干 | 亚洲视频免费 | 日韩国产高清在线 | 97色综合| 日本中文字幕一区 | 欧美精品1区2区3区 欧美视频在线一区 | 一区二区三区久久 | 在线二区 | xxxx欧美 | 亚洲精品一区二三区不卡 | 精品一区二区在线观看 | 一区二区不卡视频 | 四虎成人免费电影 | 不卡成人 | 久久九九国产精品 | 欧美福利一区 | 伊人夜夜躁av伊人久久 | 特级淫片日本高清视频免费 | 午夜一区二区三区 | 精品一区视频 | 欧美福利影院 | 91在线看片 | 99亚洲国产 | 99er视频| www.国产.com | 成人二区 | 成人午夜激情 | 国产免费av在线 | 在线看国产 | 精品国产乱码久久久久久影片 | 午夜免费观看网站 | 婷婷色av| 免费在线成人av | 久久久网 | 亚洲精品国产偷自在线观看 | 欧美视频在线播放 | 久久久精品综合 | 成人av在线看 | 亚洲免费视频一区二区 | 国产黄色在线观看 | 久久线视频 | 精品久久久久一区二区国产 | 在线国产一区二区 | 久久伊人在 | 一区二区免费在线视频 | 国产日韩欧美在线观看 | 日韩午夜一级片 | 国产欧美久久久久久 | 男女羞羞视频免费观看 | 成人在线免费视频 | 一区二区三区在线看 | 国产老头老太作爱视频 | 毛片大全 | 成人精品视频在线观看 | 久久影院一区 | 懂色av一区二区三区在线播放 | 古装三级在线播放 | 国产精品久久久久久久久免费桃花 | 日韩三区在线 | 日韩精品久久久 | 在线观看国精产品二区1819 | 国产乱码精品1区2区3区 | 亚洲 欧美 日韩在线 | 天天噜天天干 | 日本全黄裸体片 | 欧美成人a | 懂色av一区二区三区在线播放 | 亚洲视频综合 | 91精产国品一二三区在线观看 | 亚洲成人高清 | 91在线免费观看 | 欧美九九九 | 国产精品久久久久久久久久久新郎 | 久久久久久久成人 | 亚洲视频在线观看免费 | 欧美成人综合在线 | 日韩成人免费av | 国产91精品在线 | 欧美日韩亚洲国产 | 亚洲国产精品自拍 | 日韩精品 | av中文网 | 男女免费在线观看视频 | 国产99久久精品 | 亚洲美女性视频 | 黄色av网站在线观看 | 伊人春色成人 | 国产精品视频一区二区免费不卡 | 国产日韩在线视频 | 日韩婷婷| 久久久久久国产 | 欧美一区二区三区 | 亚洲视频在线观看免费 | 午夜影院在线观看 | 日韩精品在线播放 | 得得啪在线视频 | 看片天堂| 1000部羞羞视频在线看视频 | 亚洲精品一区二区三区在线 | 99爱视频 | 免费一区在线 | 97精品| 青青草国产成人av片免费 | 午夜电影网址 | 四虎永久免费在线 | 久久综合亚洲 | 精品亚洲一区二区 | 青青久久| 依人成人综合网 | 精品精品 | 国产成人精品一区二区三区 | 国产99久久精品一区二区永久免费 | 亚洲一区二区三区在线免费观看 | 精品免费 | 伊人久久国产 | 久久亚洲一区二区三区四区 | 色黄网站| 亚洲国产精品99久久久久久久久 | 亚洲免费网 | 精品国产欧美一区二区 | 一区二区三区四区在线 | 美女视频一区 | 久久人人爽人人爽人人片av不 | 亚洲综合二区 | www久久精品 | 欧洲亚洲精品久久久久 | 亚洲伦理一区 | h片在线看| 最新国产精品精品视频 | 四色成人av永久网址 | aaa久久| 亚洲一本 | 91国产精品 | 精品国产髙清在线看国产毛片 | 成人一区二区三区久久精品嫩草 | 国产精品免费视频一区 | 国产精品久久久久久久久久久久 | 日日撸 | 91文字幕巨乱亚洲香蕉 | 天天天干夜夜夜操 | 久久久久久极品 | 成人免费看 | 久在线视频 | 日韩一区在线视频 | 国产在线播 | 91精品综合久久久久久五月天 | 国产视频2021| √天堂在线 | 一区二区三区的视频 | 亚洲成人中文字幕 | 91精品国产一区二区三区免费 | 自拍视频在线观看免费 | 国产一区二区日韩 | 精品国产一区二区三区性色av | 懂色中文一区二区在线播放 | 欧美久久久久久 | 成人不卡在线观看 | а天堂中文最新一区二区三区 | 成人影院网站ww555久久精品 | 日韩6699人妻熟女毛片 | 日本一级中文字幕久久久久久 | 欧美电影一区 | 亚洲国产91 | 欧美国产一区二区 | 久久手机视频 | 一区二区日韩在线观看 | 国产精品99视频 | 精品国产91乱码一区二区三区 | 亚洲欧洲免费视频 | 国产成人 综合 亚洲 | 国产成人精品久久二区二区 | 欧美日韩在线免费观看 | 在线影院av | 久久艹99 | 国产精品久久久久久久久久久免费看 | 日日干天天操 | a级片视频在线观看 | 美女天堂网 | 91精品久久久久久久 | 国产精品一区av | 欧美午夜在线观看 | 成人情趣视频 | 毛片99| 日韩一区二区三区视频 | 国产大学生一区 | 精品一区二区久久 | www.国产在线 | 伊人一区 | 日本不卡免费新一二三区 | 精品一区二区在线观看 | 国产精品永久 | 免费在线a| 亚洲aⅴ | 国产精品高潮呻吟 | 亚洲精彩视频 | 久久久蜜桃| 日韩av免费在线观看 | 一级黄色片美国 | 免费一区二区 | 成人国产在线观看 | 精品国产乱码久久久久久88av | 成av在线 | 色天天综合久久久久综合片 | 久久婷婷国产麻豆91天堂 | 久久99深爱久久99精品 | 日日骚 | 亚洲不卡视频 | 精品成人在线 | 天堂久久精品 | 亚洲精品乱码久久久久久不卡 | 中文字幕一区日韩精品欧美 | 四虎免费在线播放 | 成人精品鲁一区一区二区 | 国产精品99一区二区三区 | 日韩欧美二区 | 在线免费黄 | 欧美精品一区二区三区视频 | 欧美亚洲国产一区 | 成人一区电影 | 国产一区二区黑人欧美xxxx | 精品国产精品 | 91在线精品一区二区三区 | 欧美激情一区二区三区蜜桃视频 | 高清av网址| 久草新视频在线观看 | av一级毛片| 色综合天天综合网国产成人网 | 国产免费一区二区三区 | 91精品免费 | 久久精品一区二区三区四区 | 久久国产精品首页 | 在线一区观看 | 亚洲欧洲日韩 | 欧洲亚洲精品久久久久 | 日本阿v视频高清在线中文 中文二区 | 亚洲精品一区二区三区 | 日韩有码一区 | 日韩精品一区二区三区在线播放 | 久久久国产一区二区三区 | a在线观看| 99re在线 | 亚洲成av人片一区二区梦乃 | 国产真实精品久久二三区 | 国产日韩精品视频 | 国产精品视频久久久 | 日韩精品亚洲专区在线观看 | 亚洲高清在线观看 | 亚洲激情综合 | 日韩一级免费在线观看 | 午夜电影网 | 一级片在线免费观看视频 | 看亚洲a级一级毛片 | 国产精品天天干 | 北条麻妃国产九九九精品小说 | 国产在线在线 | 亚洲一区二区三区四区在线观看 | 老司机深夜福利视频 | 欧美一级做a爰片免费视频 亚洲精品一区在线观看 | 一本a道v久大| 欧美性hd | 日韩av免费看| 日韩午夜电影 | 天天爽夜夜爽夜夜爽精品视频 | 亚洲欧美日韩国产综合精品二区 | 中文字幕 国产精品 | 国产精品美女久久久久久免费 | 91精品国产自产精品男人的天堂 | 精品欧美一区二区在线观看 | 黄色国产精品 | 亚洲a精品 | 久热免费在线观看 | 国产日韩精品一区二区在线观看播放 | 欧美激情第二页 | 日本久久久久 | 日韩久色| 69av片| 九一视频在线播放 | 免费一区二区三区视频在线 | 国产男女免费视频 | 欧美久久a | 毛片一区二区三区 | 亚洲精选久久 | 成人免费激情视频 | 日韩欧美中文字幕在线视频 | 夸克满天星在线观看 | 91视频88av| 国产精品45p| av网站推荐 | 国产精品久久九九 | 欧美大片在线看免费观看 | 国产伦精品一区二区 | 国产成人av免费 | 男女视频在线观看 | 免费看一区二区三区 | 91精品久久久久久久久久入口 | 中文字幕一区二区在线观看 | 久久久欧美 | 成人h漫在线观看 | 亚洲性爰 | 日韩一区二区不卡 | 欧美激情在线精品一区二区三区 | 欧美精品日韩 | 国产欧美在线播放 | 日韩欧美国产一区二区 | 中文字幕乱码一区二区三区 | 欧美日韩在线视频一区 | 国产亚洲一区在线 | 亚洲一区二区三区免费看 | 一区二区三区在线视频播放 | 国产欧美精品一区二区三区 | 国产成人精品免费视频大全最热 | 久久久久国产一级毛片高清版小说 | 精品视频在线播放 | 日韩中字在线观看 | 狠狠干av| 国产精品日韩 | 精品 99 | 精品国产乱码久久久久久丨区2区 | 538在线精品 | 中文无码日韩欧 | 不卡免费在线视频 | 国产欧美一区二区精品忘忧草 | 黄色片网站在线免费观看 | 欧美色综合 | 国产亚洲精品久久久久久豆腐 | 精品亚洲一区二区三区 | 精品少妇一区二区 | 国产精品亚洲综合 | 亚洲精品二区 | www.日本精品 | 欧美日韩三区 | 亚洲精久久| 免费啪啪网站 | www伊人 | 天天干人人 | 日韩免费在线观看视频 | 久久青草国产 | 亚洲视频在线看 | 黄色av免费看 | av在线播放网站 | 91精品国产91久久久久久吃药 | 久久精品一 | 久久亚洲欧美日韩精品专区 | 中文在线一区 | 国产小视频在线播放 | 久久www免费人成看片高清 | 国产日韩精品在线观看 | 亚洲欧美一区二区三区在线 | 欧美亚洲一区 | 久久99这里只有精品 | 日本一区二区三区免费观看 | 日韩中文在线 | 国产精品一区二区三 | 免费观看一级特黄欧美大片 | 亚洲社区在线 | 国产精品二区三区 | 日韩免费区 | 91春色 | 91视频在线播放视频 | 日韩免费一区二区 | 精品国产一区三区 | www.日韩.com | 精品欧美日韩 | 国产精品视频一区二区三区 | 北条麻妃99精品青青久久 | 91夜夜 | 剑来在线观看 | 韩国av片在线观看 | 国产一区视频网站 | 亚洲免费视频在线观看 | 91中文字幕在线 | 91精品国产色综合久久不卡98 | 精品国产九九 | 免费黄色欧美 | 国产性色 | 日韩中文视频 | 亚洲高清在线观看 | 影音先锋亚洲精品 | 国产综合视频在线播放 | 久久久日韩精品一区二区三区 | 婷婷综合五月天 | 国产精品大片 | 国产免费国产 | 美女视频一区二区三区 | 精品久久久久久久久福利 | 日韩在线视频一区 | 日本亚洲欧美 | 日韩av免费看 | 精品久久久一 | 中文字幕国产视频 | 欧美大片一区二区 | 国产精品一区二 | av一区二区在线观看 | 狠狠躁天天躁夜夜添人人 | 色偷偷噜噜噜亚洲男人 | 亚洲一区视频在线 | 成年人在线视频 | 久久精品系列 | 完全免费av | 亚洲精品乱码 | 人妖 丝袜 另类 亚洲 | 亚洲欧美日韩在线一区 | 国产欧美日韩一区二区三区 | 成年人性视频 | 一级电影在线观看 | 三级无遮挡污在线观看 | 一级篇| 亚洲专区在线播放 | 欧美日韩一区二区三区在线电影 | 国产精品久久久久久一区二区三区 | 欧美成人免费在线观看 | 成人免费aaa| 黄版视频在线观看 | 开操网 | 一级毛片一级毛片一级毛片 | 免费成人av网 | 国产成人精品一区二区三区视频 | 亚洲国产成人一区二区精品区 | 日韩电影一区二区三区 | 黑人巨大精品欧美一区二区小视频 | 欧美一级黄色网 | 北条麻妃一区二区在线 | 国产精品久久一区二区三区 | 午夜视频免费 | 国产中文字幕一区 | 黄色一级在线观看 | 91高清视频 | 亚洲欧美日韩另类一区二区 | 97视频在线 | 国产成人精品久久二区二区91 | 日本不卡高字幕在线2019 | 久久精品欧美一区二区三区不卡 | 午夜一级片 | 午夜欧美 | 亚洲一区成人 | 在线日韩欧美 | 久久久久女人精品毛片九一韩国 | 国产日韩精品在线观看 | 一区二区三区四区免费观看 | 日韩成人免费av | 亚洲精品综合在线 | 亚洲不卡视频 | 精品国产一区一区二区三亚瑟 | 狠狠操天天干 | 精品欧美一区二区三区 | 亚洲成av人片一区二区三区 | 亚洲国产一区二区在线观看 | 亚洲久久一区 | 国产精品成人一区二区 | 99久久婷婷| 国产欧美日韩在线观看 | 欧美在线视频播放 | 久久久久女人精品毛片九一韩国 | 亚洲黄色一区二区三区 | 少妇一级淫免费放 | 日本成人中文字幕在线观看 | 91在线视频免费观看 | 蜜桃一区二区 | 久久不卡日韩美女 | 国产深夜视频在线观看 | 日本成人中文字幕在线观看 | 国产v日产∨综合v精品视频 | 九九亚洲视频 | www.国产高清 | 久久蜜桃精品一区二区三区综合网 | 黄色片免费在线观看视频 | 日韩毛片在线观看 | 久久这里只有精品首页 | 99精品视频免费 | 欧美日韩亚洲二区 | 欧美视频免费在线观看 | 国产在亚洲 线视频播放 | 成人在线免费小视频 | 91精品国产综合久久久久久 | 日本高清视频网站 | 亚洲国产午夜 | 国产精彩视频 | 欧美一区免费 | aaa在线| 干狠狠 | 中国特级黄色片 | 国产日韩精品一区二区 | 日本久久久久久 | 黄色在线免费观看 | 成人精品一区二区三区中文字幕 | 欧洲成人午夜免费大片 | 免费看国产片在线观看 | 久草综合网 | 久久免费小视频 | 精品国产乱码久久久久久闺蜜 | 亚洲福利av| 亚洲狠狠久久综合一区77777 | 一区二区三区四区免费观看 | 日本一区二区三区免费观看 | 久久国产精品系列 |