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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Yolov5训练自己的数据集+TensorRT加速+Qt部署

發布時間:2024/1/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yolov5训练自己的数据集+TensorRT加速+Qt部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本人由于項目要求,需要利用Yolov5網絡訓練自己的目標檢測與分類模型,并利用TensorRT加速將其部署到Qt界面上。目前已經實現了整個流程,寫下這篇博客供需要的各位參考。(本文描述的重點主要是在后續對經過加速的模型進行打包后在Qt中進行部署實現,其余過程可以參考文中相應鏈接的博客與視頻)

目錄

一、環境配置

二、在Pycharm中利用Yolov5網絡進行模型訓練

2.1 Yolov5下載

2.2 訓練自己的數據集

三、利用TensorRT進行模型的加速

3.1 生成.wts文件

3.2 生成.engine文件

四、對模型進行封裝

五、利用Qt進行部署

5.1 Qt的安裝

5.2 Qt與VS2017相關聯

5.3 進行模型的部署

5.3.1 在VS中創建新的Qt項目

5.3.2 進行環境的配置

5.3.3 添加.cu文件

5.3.4編寫Qt代碼

一、環境配置

該項目工程配置的環境是:

Win10

cuda 11.3

cudnn 8.2.0

TensorRT 8.2.1.8

Visual Studio 2017

Opencv 4.1.0

Qt 5.14.2

二、在Pycharm中利用Yolov5網絡進行模型訓練

2.1 Yolov5下載

Yolov5的源代碼下載鏈接:https://github.com/ultralytics/yolov5

在下載Yolov5源代碼時,需要留意下載的版本(需要與后續利用TensorRT加速的版本相同),筆者這里當時也不太了解,因此就是直接下載了master,也就是默認。

2.2 訓練自己的數據集

訓練自己的數據集,需要先使用labelImg進行圖像標注,然后進行數據集的劃分以及相應配置文件的更改。具體的步驟可以參考這位大佬寫的博客:Yolov5訓練自己的數據集(詳細完整版)_締宇diyu的博客-CSDN博客_yolov5訓練自己的數據集

也可以觀看這個視頻了解學習Yolov5的網絡架構和訓練:帶你一行行讀懂yolov5代碼,yolov5源碼_嗶哩嗶哩_bilibili

調整好自己相應的模型和數據集之后,在Pycharm的Terminal中輸入命令:

python train.py --weights weights/yolov5s.pt --cfg models/yolov5s.yaml --data data/myvoc.yaml --batch-size 8 --img 640 --device 0

可以根據自己的需要去修改相應的參數,模型訓練完成后會得到.pt文件,后面會利用該文件生成.wts文件去進行模型的加速。

三、利用TensorRT進行模型的加速

本文采用的技術路線是:.pt文件→.wts文件→.engine文件。利用TensorRT進行Yolov5模型推理,需要下載tensorrtx,具體的下載鏈接:https://github.com/wang-xinyu/tensorrtx,注意!筆者個人理解這里的tensorrtx版本最好與之前下載的Yolov5版本相同,因為不同版本之間的網絡架構是存在一些差異的,可能會導致后續生成的.engine文件與采用的網絡架構不同而出現一系列報錯。筆者這里同樣是下載的master(默認)。

3.1 生成.wts文件

下載完成后,將文件中yolov5子文件中的gen_wts.py文件復制到Yolov5工程目錄下,運行該文件生成.wts文件。

具體方法:打開Pycharm的Terminal,輸入命令:

python gen_wts.py -w yolov5s.pt -o yolov5s.wts

.pt文件就是之前Yolov5網絡訓練完成生成的文件,根據自己的文件名修改即可。命令后半部分就是生成的.wts文件,同樣可以根據自己的需要更改命名。

3.2 生成.engine文件

詳細的操作可以參照這位大佬寫的文章來進行操作,實戰教程:win10環境下用TensorRT推理YOLOv5_脆皮茄條的博客-CSDN博客_tensorrt yolov5

?這位大佬寫的十分詳細,包括從環境配置到工程編譯的全過程。如果需要針對自己的數據集進行更改,需要在VS中打開yololayer.h文件,對分類種類數目進行更改。筆者僅僅是對種類數量進行了更改,可以根據需要修改輸入圖像的尺寸等其他參數。

修改完成后,利用Win+R運行cmd,將當前目錄切換到該工程目錄下,同時將之前生成的.wts文件復制到該文件夾下。輸入命令:

yolov5_tensorrt.exe -s yolov5s.wts yolov5s.engine s

生成.engine文件,利用該.engine文件輸入命令進行模型預測:

yolov5_tensorrt.exe -d yolov5s.engine ./image_dir

?進行預測得到的結果,由于是自己的項目訓練集,不方便展示效果圖。

四、對模型進行封裝

在Qt中調用經過TensorRT推理加速后的模型,需要對模型進行封裝,即封裝成動態鏈接庫(.dll)的形式在Qt中進行調用。我這里是將yolov5模型封裝成了一個類,并且其中包含了兩個成員函數,一個是初始化函數inital(),另外一個是推理檢測函數detect()。在VS中創建與調用動態鏈接庫的方法可以參考以下幾篇博客:

VS2017創建動態鏈接庫與調用_北斗星辰001的博客-CSDN博客_vs2017創建動態鏈接庫

抽象類作為接口使用的DLL實現方法_Christo3的博客-CSDN博客

私有類封裝為DLL的方法_Christo3的博客-CSDN博客

這是我自己封裝模型時的頭文件和源文件,可以根據自己的情況去任意修改。

頭文件YoloV5.h:

// 任何項目上不應定義此符號。這樣,源文件中包含此文件的任何其他項目都會將 // YOLOV5_API 函數視為是從 DLL 導入的,而此 DLL 則將用此宏定義的 // 符號視為是被導出的。 #ifdef YOLOV5_EXPORTS #define YOLOV5_API __declspec(dllexport) #else #define YOLOV5_API __declspec(dllimport) #endif#pragma once#define USE_FP16 // set USE_INT8 or USE_FP16 or USE_FP32 #define DEVICE 0 // GPU id #define NMS_THRESH 0.4 #define CONF_THRESH 0.5 #define BATCH_SIZE 1#define NET s // s m l x #define NETSTRUCT(str) createEngine_##str #define CREATENET(net) NETSTRUCT(net) #define STR1(x) #x #define STR2(x) STR1(x)#include <iostream> #include <chrono> #include "cuda_runtime_api.h" #include "logging.h" #include "common.hpp" #include "utils.h" #include "calibrator.h" #include "cuda_utils.h"using namespace std; using namespace cv;#define USE_FP16 // set USE_INT8 or USE_FP16 or USE_FP32 #define DEVICE 0 // GPU id #define NMS_THRESH 0.4 #define CONF_THRESH 0.5 #define BATCH_SIZE 1#define NET s // s m l x #define NETSTRUCT(str) createEngine_##str #define CREATENET(net) NETSTRUCT(net) #define STR1(x) #x #define STR2(x) STR1(x)YOLOV5_API class YoloV5 { public:YOLOV5_API YoloV5();YOLOV5_API ~YoloV5();YOLOV5_API bool inital(const string& enginePath);YOLOV5_API void detect(const Mat& inputImg, vector<Rect>& vRect);private:char* trtModelStream;size_t size;Logger gLogger;int INPUT_H;int INPUT_W;int CLASS_NUM;int OUTPUT_SIZE;const char* INPUT_BLOB_NAME;const char* OUTPUT_BLOB_NAME;void* buffers[2];float* data;float* prob;IExecutionContext* context;cudaStream_t stream; private:YOLOV5_API void doInference(IExecutionContext& context, cudaStream_t& stream, void **buffers, float* input, float* output, int batchSize);cv::Rect get_rect(cv::Mat& img, float bbox[4]);float iou(float lbox[4], float rbox[4]);//bool cmp(const Yolo::Detection& a, const Yolo::Detection& b);void nms(std::vector<Yolo::Detection>& res, float *output, float conf_thresh, float nms_thresh = 0.5);};inline bool cmp_1(const Yolo::Detection& a, const Yolo::Detection& b) {return a.conf > b.conf; }extern YOLOV5_API int nYoloV5;YOLOV5_API int fnYoloV5(void);

源文件YoloV5.cpp:

// YoloV5.cpp : 定義 DLL 的導出函數。 //#include "YoloV5.h" YOLOV5_API YoloV5::YoloV5() { }YOLOV5_API YoloV5::~YoloV5() { }YOLOV5_API bool YoloV5::inital(const string& enginePath) {INPUT_H = Yolo::INPUT_H;INPUT_W = Yolo::INPUT_W;CLASS_NUM = Yolo::CLASS_NUM;OUTPUT_SIZE = Yolo::MAX_OUTPUT_BBOX_COUNT * sizeof(Yolo::Detection) / sizeof(float) + 1;INPUT_BLOB_NAME = "data";OUTPUT_BLOB_NAME = "prob";data = new float[BATCH_SIZE * 3 * INPUT_H * INPUT_W];prob = new float[BATCH_SIZE * OUTPUT_SIZE];std::ifstream file(enginePath, std::ios::binary);if (file.good()) {file.seekg(0, file.end);size = file.tellg();file.seekg(0, file.beg);trtModelStream = new char[size];assert(trtModelStream);file.read(trtModelStream, size);file.close();}IRuntime* runtime = createInferRuntime(gLogger);assert(runtime != nullptr);ICudaEngine* engine = runtime->deserializeCudaEngine(trtModelStream, size);assert(engine != nullptr);context = engine->createExecutionContext();assert(context != nullptr);delete[] trtModelStream;assert(engine->getNbBindings() == 2);// In order to bind the buffers, we need to know the names of the input and output tensors.// Note that indices are guaranteed to be less than IEngine::getNbBindings()const int inputIndex = engine->getBindingIndex(INPUT_BLOB_NAME);const int outputIndex = engine->getBindingIndex(OUTPUT_BLOB_NAME);assert(inputIndex == 0);assert(outputIndex == 1);// Create GPU buffers on deviceCUDA_CHECK(cudaMalloc(&buffers[inputIndex], BATCH_SIZE * 3 * INPUT_H * INPUT_W * sizeof(float)));CUDA_CHECK(cudaMalloc(&buffers[outputIndex], BATCH_SIZE * OUTPUT_SIZE * sizeof(float)));// Create streamCUDA_CHECK(cudaStreamCreate(&stream));return true; }YOLOV5_API void YoloV5::detect(const Mat& inputImg, vector<Rect>& vRect) {Mat imgCopy;inputImg.copyTo(imgCopy);cv::Mat pr_img = preprocess_img(imgCopy, INPUT_W, INPUT_H); // letterbox BGR to RGBint i = 0;int b = 0;for (int row = 0; row < INPUT_H; ++row) {uchar* uc_pixel = pr_img.data + row * pr_img.step;for (int col = 0; col < INPUT_W; ++col) {data[b * 3 * INPUT_H * INPUT_W + i] = (float)uc_pixel[2] / 255.0;data[b * 3 * INPUT_H * INPUT_W + i + INPUT_H * INPUT_W] = (float)uc_pixel[1] / 255.0;data[b * 3 * INPUT_H * INPUT_W + i + 2 * INPUT_H * INPUT_W] = (float)uc_pixel[0] / 255.0;uc_pixel += 3;++i;}}// Run inferenceauto start = std::chrono::system_clock::now();YoloV5::doInference(*context, stream, buffers, data, prob, BATCH_SIZE);auto end = std::chrono::system_clock::now();std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << "ms" << std::endl;int fcount = 1;std::vector<std::vector<Yolo::Detection>> batch_res(fcount);for (int b = 0; b < fcount; b++) {auto& res = batch_res[b];nms(res, &prob[b * OUTPUT_SIZE], CONF_THRESH, NMS_THRESH);}for (int b = 0; b < fcount; b++) {auto& res = batch_res[b];//std::cout << res.size() << std::endl;Mat img;inputImg.copyTo(img);if (inputImg.channels() == 1){cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);}for (size_t j = 0; j < res.size(); j++) {cv::Rect r = get_rect(img, res[j].bbox);if (res[j].class_id == 0){vRect.push_back(r);}cv::rectangle(img, r, cv::Scalar(0, 0, 255), 2);if ((int)res[j].class_id == 0){cv::putText(img, "First", cv::Point(r.x - 50, r.y - 1), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 2);cv::putText(img, std::to_string((float)res[j].conf), cv::Point(r.x + 50, r.y - 1), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 2);}if ((int)res[j].class_id == 1){cv::putText(img, "Second", cv::Point(r.x - 50, r.y - 1), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 2);cv::putText(img, std::to_string((float)res[j].conf), cv::Point(r.x + 50, r.y - 1), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 2);}if ((int)res[j].class_id == 2){cv::putText(img, "Third", cv::Point(r.x - 50, r.y - 1), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 2);cv::putText(img, std::to_string((float)res[j].conf), cv::Point(r.x + 50, r.y - 1), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 2);}if ((int)res[j].class_id == 3){cv::putText(img, "Fourth", cv::Point(r.x - 50, r.y - 1), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 2);cv::putText(img, std::to_string((float)res[j].conf), cv::Point(r.x + 50, r.y - 1), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0, 0, 255), 2);}}//img.copyTo(outputImg);cv::imwrite("E:\\res.jpg", img);}}YOLOV5_API void YoloV5::doInference(IExecutionContext& context, cudaStream_t& stream, void **buffers, float* input, float* output, int batchSize) {// DMA input batch data to device, infer on the batch asynchronously, and DMA output back to hostCUDA_CHECK(cudaMemcpyAsync(buffers[0], input, batchSize * 3 * INPUT_H * INPUT_W * sizeof(float), cudaMemcpyHostToDevice, stream));context.enqueue(batchSize, buffers, stream, nullptr);CUDA_CHECK(cudaMemcpyAsync(output, buffers[1], batchSize * OUTPUT_SIZE * sizeof(float), cudaMemcpyDeviceToHost, stream));cudaStreamSynchronize(stream); }cv::Rect YoloV5::get_rect(cv::Mat& img, float bbox[4]) {int l, r, t, b;float r_w = Yolo::INPUT_W / (img.cols * 1.0);float r_h = Yolo::INPUT_H / (img.rows * 1.0);if (r_h > r_w) {l = bbox[0] - bbox[2] / 2.f;r = bbox[0] + bbox[2] / 2.f;t = bbox[1] - bbox[3] / 2.f - (Yolo::INPUT_H - r_w * img.rows) / 2;b = bbox[1] + bbox[3] / 2.f - (Yolo::INPUT_H - r_w * img.rows) / 2;l = l / r_w;r = r / r_w;t = t / r_w;b = b / r_w;}else {l = bbox[0] - bbox[2] / 2.f - (Yolo::INPUT_W - r_h * img.cols) / 2;r = bbox[0] + bbox[2] / 2.f - (Yolo::INPUT_W - r_h * img.cols) / 2;t = bbox[1] - bbox[3] / 2.f;b = bbox[1] + bbox[3] / 2.f;l = l / r_h;r = r / r_h;t = t / r_h;b = b / r_h;}return cv::Rect(l, t, r - l, b - t); }float YoloV5::iou(float lbox[4], float rbox[4]) {float interBox[] = {(std::max)(lbox[0] - lbox[2] / 2.f , rbox[0] - rbox[2] / 2.f), //left(std::min)(lbox[0] + lbox[2] / 2.f , rbox[0] + rbox[2] / 2.f), //right(std::max)(lbox[1] - lbox[3] / 2.f , rbox[1] - rbox[3] / 2.f), //top(std::min)(lbox[1] + lbox[3] / 2.f , rbox[1] + rbox[3] / 2.f), //bottom};if (interBox[2] > interBox[3] || interBox[0] > interBox[1])return 0.0f;float interBoxS = (interBox[1] - interBox[0])*(interBox[3] - interBox[2]);return interBoxS / (lbox[2] * lbox[3] + rbox[2] * rbox[3] - interBoxS); }void YoloV5::nms(std::vector<Yolo::Detection>& res, float *output, float conf_thresh, float nms_thresh) {int det_size = sizeof(Yolo::Detection) / sizeof(float);std::map<float, std::vector<Yolo::Detection>> m;for (int i = 0; i < output[0] && i < Yolo::MAX_OUTPUT_BBOX_COUNT; i++) {if (output[1 + det_size * i + 4] <= conf_thresh) continue;Yolo::Detection det;memcpy(&det, &output[1 + det_size * i], det_size * sizeof(float));if (m.count(det.class_id) == 0) m.emplace(det.class_id, std::vector<Yolo::Detection>());m[det.class_id].push_back(det);}for (auto it = m.begin(); it != m.end(); it++) {//std::cout << it->second[0].class_id << " --- " << std::endl;auto& dets = it->second;std::sort(dets.begin(), dets.end(), cmp);for (size_t m = 0; m < dets.size(); ++m) {auto& item = dets[m];res.push_back(item);for (size_t n = m + 1; n < dets.size(); ++n) {if (iou(item.bbox, dets[n].bbox) > nms_thresh) {dets.erase(dets.begin() + n);--n;}}}} }

資源管理器:

該項目同樣需要引入yolov5文件夾中的頭文件和.cu文件。配置好相應的環境(與3.2節中在VS中生成.engine文件的環境配置相同),編寫好封裝的函數后(YoloV5.h和YoloV5.cpp),在Release環境下開始進行編譯運行,會生成yolov5.dll的動態鏈接庫文件以及對應的lib文件。

完成之后,可以先在VS中進行檢測封裝好的模型是否能夠運行。創建一個test項目,創建一個新的源文件Test.cpp,并且將yololayer.cu添加進項目中,同樣需要跟之前一樣配置相應的環境才能夠正常運行。

源文件Test.cpp:

// Test.cpp : 定義控制臺應用程序的入口點。 // #pragma warning(disable:4996)#include <iostream> #include "..//Yolov5/YoloV5.h" #include "..//Yolov5/dirent.h"int main() {YoloV5 yolov5_1;string enginePath = "E:\\PyTorch\\TensorRT\\C_VS\\yolov5_tensorrt\\x64\\Release\\yolov5s.engine";yolov5_1.inital(enginePath);vector<cv::String> vImgPath;string filter = "E:\\PyTorch\\淘汰的網絡\\make_dataset_Faster_RCNN\\photo\\12.jpg";glob(filter, vImgPath);for (auto i = 0; i < vImgPath.size(); i++){//cout << "vImgPath.size() : " << vImgPath.size() << endl;Mat img = imread(vImgPath[i]);if (img.channels() == 1){cvtColor(img, img, cv::COLOR_GRAY2BGR);}vector<Rect> res1;yolov5_1.detect(img, ref(res1));}return 0; }

運行Test.cpp文件,可以看到生成的檢測圖像。正確生成檢測圖像之后,就可以開始利用Qt進行模型的部署了。

五、利用Qt進行部署

5.1 Qt的安裝

筆者個人建議可以在VS中進行Qt代碼的編寫以及界面的設計,個人認為相較于在Qt Creator中進行代碼編寫在VS中更有利于代碼的調試。首先需要進行Qt的安裝,安裝教程可以參考這位老師寫的博客:Qt 入門 | 愛編程的大丙 (subingwen.cn)里面的第二章詳細描述了Qt的安裝。

5.2 Qt與VS2017相關聯

由于在VS中進行程序調試更方便一些,因此需要將安裝好的Qt與VS進行關聯,從而可以在VS中進行Qt代碼的編寫。Qt與VS相關聯的方法可以參考這篇博客:Qt5.11.1安裝與VS2017配置_GJXAIOU的博客-CSDN博客_qt vs2017

5.3 進行模型的部署

5.3.1 在VS中創建新的Qt項目

在VS中進行Qt的編寫,從而進行模型的部署。先創建一個新項目,選擇Qt Widgets Application,點擊確定→Next→勾選對應的Qt版本以及開發系統和平臺,Next→根據自己的情況命名,Finish→項目→重新生成解決方案。

當看到生成成功時,即代表Qt和VS的關聯成功。

5.3.2 進行環境的配置

右鍵項目,選擇屬性,進入項目頁點擊VC++目錄,選擇包含目錄,將TensorRT、CUDA以及Qt的include文件夾路徑添加到包含目錄中。添加完成后再選擇庫目錄,同樣將TensorRT、CUDA以及Qt的lib文件夾路徑添加進庫目錄中。

添加完成后點擊應用,在選擇鏈接器→輸入→附加依賴項,添加上相應的.lib文件,這是筆者添加的文件:

$(Qt_LIBS_) YoloV5.lib opencv_world410.lib nvparsers.lib nvonnxparser.lib nvinfer_plugin.lib nvinfer.lib cublas.lib cublasLt.lib cuda.lib cudadevrt.lib cudart.lib cudart_static.lib cudnn.lib cudnn64_8.lib cudnn_adv_infer.lib cudnn_adv_infer64_8.lib cudnn_adv_train.lib cudnn_adv_train64_8.lib cudnn_cnn_infer.lib cudnn_cnn_infer64_8.lib cudnn_cnn_train.lib cudnn_cnn_train64_8.lib cudnn_ops_infer.lib cudnn_ops_infer64_8.lib cudnn_ops_train.lib cudnn_ops_train64_8.lib cufft.lib cufftw.lib curand.lib cusolver.lib cusolverMg.lib cusparse.lib nppc.lib nppial.lib nppicc.lib nppidei.lib nppif.lib nppig.lib nppim.lib nppist.lib nppisu.lib nppitc.lib npps.lib nvblas.lib nvjpeg.lib nvml.lib nvrtc.lib OpenCL.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

添加完成后,同樣點擊應用,完成環境配置。

環境配置好之后,需要將之前封裝好的.dll文件與.lib文件復制到當前項目文件夾中。

5.3.3 添加.cu文件

在源文件中添加上之前的yololayer.cu文件,

添加完成后, 右鍵項目,選擇生成依賴項,點擊生成自定義,勾選CUDA。

?完成后,右鍵yololayer.cu文件,選擇屬性,在項類型中選擇CUDA C/C++,點擊應用,完成.cu文件的生成配置。

5.3.4編寫Qt代碼

完成相關的環境配置之后,就可以開始進行Qt代碼的編寫。 首先可以先進入.ui文件中,進行相應控件添加,設計自己的UI界面。

設計完ui界面之后,進行相應代碼的編寫,分別給每個空間添加上相應的功能。

Test2.h頭文件:

#pragma once #ifndef TEST2_H #define TEST2_H #include <QtWidgets/QMainWindow> #include "ui_Test2.h" #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif #include "opencv2/opencv.hpp" #include "opencv.hpp"using namespace std;QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass Test2 : public QMainWindow {Q_OBJECTpublic:Test2(QWidget *parent = nullptr);~Test2();// 聲明全局變量// 存放原圖像static cv::Mat image;private:Ui::Test2Class *ui; private slots:// 載入圖像void on_load_picture_clicked();// 模型預測void on_model_predict_clicked(); }; #endif

Test2.cpp源文件:

#include "Test2.h" #include "qfile.h" #include "E://PyTorch//TensorRT/C_VS/yolov5_dll/YoloV5/YoloV5/YoloV5.h" // 封裝模型的頭文件路徑 #include "E://PyTorch//TensorRT/C_VS/yolov5_dll/YoloV5/YoloV5/dirent.h" // dirent.h的路徑// 定義全局變量 // 存放原圖像 Mat Test2::image;// 構造函數 Test2::Test2(QWidget *parent): QMainWindow(parent) {ui->setupUi(this); } // 析構函數 Test2::~Test2() {} // 加載圖像 void Test2::on_load_picture_clicked() {// 利用Qt的方式去讀入圖像QFile file("E:/1.jpg");//判斷當前路徑是否存在 一定要添加上if else 判斷QFile文件是否讀取成功if (!file.open(QFile::ReadOnly)){// 路徑不存在 則提示讀取失敗ui->textEdit->append(QString("圖像載入失敗..."));}else{QByteArray ba = file.readAll();// 再使用imdecode函數將比特流解碼成Mat類image = imdecode(std::vector<char>(ba.begin(), ba.end()), 1);ui->textEdit->append(QString("圖像載入成功..."));}cv::Mat temp;QImage qImg;// 將圖像的三通道格式從BGR改成RGBcv::cvtColor(image, temp, COLOR_BGR2RGB);// 進行圖像的縮放cv::resize(temp, temp, Size(612, 512));// 將Mat類轉換成QImageQImage Qimg = QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_BGR888);// 在Label窗口進行顯示// 先清空之前的圖像,再顯示ui->image_window->clear();ui->image_window->setPixmap(QPixmap::fromImage(Qimg));ui->image_window->resize(Qimg.size());ui->image_window->show(); } // 模型檢測 void Test2::on_model_predict_clicked() {// 輸出提示信息ui->textEdit->append(QString("正在進行模型預測,請耐心等待..."));// 建立YoloV5模型YoloV5 yolov5_1;// 讀入.engine模型string enginePath = "E:\\PyTorch\\TensorRT\\C_VS\\yolov5_tensorrt\\x64\\Release\\yolov5s.engine";// 模型初始化yolov5_1.inital(enginePath);cv::Mat img = image;// 判斷圖像是否是單通道圖像if (img.channels() == 1){// 將單通道圖像轉變為三通道圖像cvtColor(img, img, cv::COLOR_GRAY2BGR);}// 存放預測框坐標vector<Rect> res1;// 進行預測yolov5_1.detect(img, ref(res1));// 利用Qt的方式去讀取圖像QFile file("E:/res.jpg");// 判斷預測結果是否存在 一定要添加上if else 判斷QFile文件是否讀取成功if (!file.open(QFile::ReadOnly)){// 路徑不存在 輸出模型預測失敗ui->textEdit->append(QString("模型預測失敗..."));}else{// 輸出成功信息ui->textEdit->append(QString("模型預測成功..."));// 路徑存在 讀入圖像QByteArray ba = file.readAll();// 再使用imdecode函數將比特流解碼成mat類cv::Mat image = imdecode(std::vector<char>(ba.begin(), ba.end()), 1);cv::Mat temp;// 將圖像的三通道格式從bgr改成rgb//cv::cvtcolor(image, temp, color_bgr2rgb);// 進行圖像的縮放cv::resize(image, temp, Size(612, 512));// 將mat類轉換成qimageQImage Qimg = QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_BGR888);// 在label窗口進行顯示// 先清空之前的圖像,在進行顯示ui->image_window->clear();ui->image_window->setPixmap(QPixmap::fromImage(Qimg));ui->image_window->resize(Qimg.size());ui->image_window->show();} }

注意!筆者的代碼中采用了QFile去進行文件的讀取,后面一定要對QFile文件是否讀取成功進行判斷,即添加上if else的條件判斷語句,否則程序在調試時會出現下圖的報錯情況,并且運行不調試時ui界面會出現閃退的情況。

編寫完成后,就可以在Release環境下運行代碼了。點擊加載圖像和模型預測就可以在顯示框中顯示出圖像內容。(這里由于筆者的個人原因,不方便對模型預測后的圖像進行展示。)

筆者是對自己項目經歷過程中所用到的技術進行了一個粗略的歸納,其中引用了許多位大佬的博客,僅供各位參考,希望能對有需要的人提供一些幫助。文中可能存在筆者有所疏漏或沒有說明到的地方,望海涵。歡迎各位在評論區提出問題和建議。

總結

以上是生活随笔為你收集整理的Yolov5训练自己的数据集+TensorRT加速+Qt部署的全部內容,希望文章能夠幫你解決所遇到的問題。

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

色视频网站免费观看 | 黄色亚洲免费 | 99久高清在线观看视频99精品热在线观看视频 | 精品视频在线播放 | 免费观看的av | 欧美性高跟鞋xxxxhd | 亚洲视频精品 | 91免费版在线 | 久久国产精品99久久人人澡 | 最新日本中文字幕 | 一级做a视频 | 婷婷丁香在线视频 | wwwwww国产 | 欧美精品中文字幕亚洲专区 | 在线观看的av | 久久国产精品久久精品国产演员表 | 小草av在线播放 | 国内精品视频在线播放 | 亚洲人成网站精品片在线观看 | 日韩精选在线观看 | 欧美国产日韩一区 | 亚洲精品乱码白浆高清久久久久久 | 亚洲涩涩涩涩涩涩 | 91男人影院 | 97视频免费在线观看 | 国产四虎影院 | 国产做aⅴ在线视频播放 | 国产涩涩在线观看 | 久久久成人精品 | 91av中文| 欧美久久久一区二区三区 | 国产剧情一区 | 国产精品久久久久三级 | 久久视频| 色在线亚洲 | 国产福利免费看 | 在线a人片免费观看视频 | 亚洲女人天堂成人av在线 | 国产高清av在线播放 | 国产精品久久久久久久婷婷 | 97精品国自产拍在线观看 | 日韩国产精品毛片 | 欧美性护士 | 午夜12点| 丝袜美腿在线 | 久久综合九色综合欧美就去吻 | 久久99国产精品久久99 | 亚洲综合色播 | 毛片网站免费在线观看 | 五月婷婷综合在线观看 | 成人va天堂 | 免费成人在线观看 | 中文字幕亚洲高清 | 中文字幕在线日亚洲9 | 亚洲欧美激情插 | 久久久久国产精品午夜一区 | 美国人与动物xxxx | 在线一区观看 | 亚洲精品中文字幕在线观看 | 天堂在线一区 | 久草视频免费播放 | 免费欧美 | 国产精品久久99综合免费观看尤物 | av片在线看 | 久久男人视频 | 69av国产 | 米奇狠狠狠888 | 亚洲黄色成人av | 一级片黄色片网站 | 国产91丝袜在线播放动漫 | 亚洲精品久久久久58 | 国产不卡高清 | 在线观看免费 | 99在线视频精品 | 狠狠色综合欧美激情 | 国产手机在线观看 | 免费黄色特级片 | 亚洲日本精品 | 免费黄在线看 | 伊人激情网 | 欧美视频日韩视频 | 日本xxxx.com | av电影一区二区三区 | 久日视频 | 波多野结衣一区 | 日韩av电影免费在线观看 | 精品免费久久久久 | 亚洲国产av精品毛片鲁大师 | 久久精品视频网址 | 免费国产一区二区视频 | 热久久国产精品 | 91福利社区在线观看 | 91人人爽人人爽人人精88v | av永久网址 | 黄色日本免费 | 久久国产精品99精国产 | 中文字幕亚洲欧美日韩 | 成人动漫视频在线 | 久久久天天操 | 精品国产一区二区三区久久 | 久久99国产视频 | 色91在线| 成人日韩av | 亚洲天天做 | 丁香花在线视频观看免费 | 亚洲影院天堂 | 青青草国产精品 | 精品视频不卡 | 午夜免费视频网站 | 亚洲区色 | 黄色片网站免费 | 色综合狠狠干 | 91麻豆免费视频 | 五月婷婷六月丁香在线观看 | 色多多污污 | 国产自在线观看 | 日本精品视频在线 | 视频91| 久视频在线 | 免费欧美 | 国产中年夫妇高潮精品视频 | av色一区 | 国产色拍拍拍拍在线精品 | 国产剧情久久 | 中文字幕一区av | 特黄色大片 | 三级在线国产 | 欧美精品国产综合久久 | 99精品视频免费看 | 99热精品在线观看 | 九九九毛片| 婷婷精品在线 | 久久精品一区二区三区视频 | 激情视频在线高清看 | 婷婷久久综合九色综合 | 久草精品电影 | 日韩精品免费在线播放 | 亚洲国产精品激情在线观看 | 色国产精品 | 99r在线| 天天综合天天做 | 亚洲天堂激情 | 97成人在线 | 成人av影院在线观看 | 日韩成人免费观看 | 欧美人交a欧美精品 | 网站免费黄 | 国产一级一级国产 | 中文在线字幕免费观 | 久草在线电影网 | 蜜臀久久99静品久久久久久 | 337p日本大胆噜噜噜噜 | 国产精品久久一区二区三区, | av免费播放| 黄色高清视频在线观看 | 99在线免费视频观看 | av大片免费在线观看 | 不卡的av电影在线观看 | 亚洲一级黄色 | 黄网站色欧美视频 | 久久精品99国产精品酒店日本 | 国产福利一区二区在线 | 看国产黄色片 | 亚洲欧美日韩国产 | 久久精品国产免费 | 色婷婷国产在线 | 少妇bbbb搡bbbb搡bbbb| 伊人伊成久久人综合网站 | 国产精品久久久久久久久久久久 | 黄色小说视频在线 | 国产午夜精品免费一区二区三区视频 | 92国产精品久久久久首页 | 亚洲黄色av | 日产av在线播放 | www久久99 | 亚洲欧美在线观看视频 | 香蕉一区 | 亚洲精品国产精品国 | 久久黄网站 | 午夜国产影院 | 又黄又刺激又爽的视频 | 免费黄a | 91精品国产自产老师啪 | 精品免费久久久久久 | 日韩videos高潮hd | 国产中文在线观看 | 国产在线资源 | 91大神在线观看视频 | 成人免费在线网 | 国产黄色精品视频 | 337p西西人体大胆瓣开下部 | 99久久99久久免费精品蜜臀 | 午夜 久久 tv | 中文字幕在线观看网 | 久久亚洲区 | 久久久精品在线观看 | 五月婷婷电影网 | 久久福利在线 | 三级黄色免费 | 久草视频免费 | 色综合色综合色综合 | www.国产在线 | 免费看片黄色 | 久久理论片 | 在线观看91精品国产网站 | 夜夜爽88888免费视频4848 | 69xx视频 | 色综合天天在线 | 欧美粗又大 | 在线婷婷| 久久免费福利 | 免费日韩一区二区三区 | 91精品国产综合久久福利 | 国产护士hd高朝护士1 | 色妞色视频一区二区三区四区 | 久久久久久久久久久免费视频 | 国产美女精品久久久 | 久久亚洲欧美日韩精品专区 | 久草免费在线视频 | 九色精品免费永久在线 | 午夜黄色| 日韩理论片在线 | 色婷婷激情综合 | 日韩最新在线 | 国产亚洲精品无 | 国产在线播放一区 | 色婷婷www| 日韩欧美xxx | 日韩欧美视频免费看 | 91视频国产免费 | 亚洲人视频在线 | 超碰在线98 | 黄网站免费久久 | 最近中文字幕 | 欧美一二三区播放 | 久久久久久久久毛片精品 | 久久亚洲婷婷 | 69精品在线观看 | 国产专区精品 | 亚洲国产精品成人va在线观看 | 91网站在线视频 | 国产在线免费 | 伊人春色电影网 | 99视频播放| 91精品91| 亚洲精品视频中文字幕 | 日韩免费网址 | 中文字幕在线字幕中文 | 久草在线视频资源 | 九色琪琪久久综合网天天 | 狠狠躁日日躁 | 国产精品99久久久 | 手机av看片 | 日韩欧美一级二级 | 日韩久久久久 | 国产亚洲小视频 | 99久久久久久久久 | 亚洲伦理精品 | 我要看黄色一级片 | 精品国产免费人成在线观看 | 97色在线| 操少妇视频 | 少妇bbb好爽| 黄av免费在线观看 | 国产精品乱码一区二区视频 | 国产91在线免费视频 | 99热国产在线中文 | 久久看片 | 色免费在线 | 午夜国产福利在线 | 亚洲在线成人精品 | 国产伦精品一区二区三区照片91 | 国产精品观看在线亚洲人成网 | 久草在线电影网 | 国产精品日韩 | 五月婷婷丁香网 | 日韩在线免费播放 | 色综合天天综合在线视频 | 97视频在线观看视频免费视频 | 五月天激情视频在线观看 | 日本狠狠干 | 婷婷综合伊人 | 免费高清在线观看电视网站 | 亚洲国产小视频在线观看 | 天天综合网 天天 | 国产精品wwwwww | 久久艹久久 | 正在播放国产一区二区 | 很黄很污的视频网站 | 在线日韩视频 | 91福利区一区二区三区 | 成人看片 | 久久www免费人成看片高清 | 一区二区 不卡 | 免费成人在线观看视频 | av电影在线免费 | 天天干天天拍 | 日韩av一区二区三区四区 | 中文字幕无吗 | 成人av中文字幕在线观看 | 九九免费在线观看视频 | 毛片网站免费 | 在线观av | 国产黄色免费看 | 九九视频免费观看视频精品 | 午夜在线观看 | 色www精品视频在线观看 | 免费久久99精品国产婷婷六月 | 99久久免费看 | www在线观看视频 | 精品亚洲国产视频 | 国内精品久久久久久久97牛牛 | 国产亚洲精品中文字幕 | 91一区啪爱嗯打偷拍欧美 | 精品在线视频观看 | 国产美女主播精品一区二区三区 | 日日夜夜艹 | 日韩视频一区二区三区 | 香蕉网在线播放 | 久久久久麻豆v国产 | 欧美一区二视频在线免费观看 | 日韩视频二区 | 精品1区2区| 国产一线二线三线在线观看 | 日韩激情影院 | 美女久久 | 欧美视频99 | 美女黄视频免费看 | 9热精品| 国产精品久久久久久欧美 | 国产精品成久久久久三级 | 久久综合久久鬼 | 视频在线观看国产 | 九九热在线视频 | 欧美最猛性xxxxx(亚洲精品) | 国产精品黄色 | www.天天射 | 91亚洲狠狠婷婷综合久久久 | 国产精品成久久久久 | 亚洲欧美怡红院 | 成人v| 中文字幕在线字幕中文 | 成人国产精品久久久春色 | 国产99久久久国产 | 九九热免费观看 | 国产精品二区在线观看 | 国产精品久久久久久吹潮天美传媒 | 中文字幕高清免费日韩视频在线 | 国产精品精品国产婷婷这里av | 久久99精品久久久久久久久久久久 | 国产片网站| 亚洲精品国久久99热 | 亚洲永久字幕 | 国产破处视频在线播放 | 国产区网址 | 一级欧美一级日韩 | 狠狠狠狠狠狠干 | 久久久综合香蕉尹人综合网 | 精品嫩模福利一区二区蜜臀 | 99久久精品国产系列 | 成人不用播放器 | 字幕网资源站中文字幕 | 国产精品久久久久久麻豆一区 | www91在线| 亚洲综合成人专区片 | 一区二区三区四区免费视频 | 日韩免费视频网站 | 在线免费观看欧美日韩 | 中文字幕日韩有码 | 天天操,夜夜操 | 在线网址你懂得 | 激情五月亚洲 | 激情伊人五月天久久综合 | 欧美日韩在线精品一区二区 | 国产91小视频 | 久久精品国产一区 | 日韩激情第一页 | 久久九九久久精品 | 奇米7777狠狠狠琪琪视频 | 亚洲综合射 | 欧美网址在线观看 | 91九色最新地址 | 手机在线视频福利 | 日韩网页| 欧美日韩国产精品一区二区三区 | 国产偷国产偷亚洲清高 | 成人黄大片 | 成人在线观看免费视频 | 日本精品一区二区三区在线播放视频 | 亚洲人成影院在线 | 九色精品免费永久在线 | 日产乱码一二三区别在线 | 最近更新好看的中文字幕 | 开心色激情网 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 日日干狠狠操 | 超碰免费观看 | 国产精品高潮在线观看 | 免费手机黄色网址 | 99精品免费网 | 精品在线观看一区二区三区 | 国产精品久久久久一区二区国产 | 成人av一二三区 | 日本一区二区三区免费观看 | 日日操操 | 中文字幕中文中文字幕 | 最近中文字幕mv免费高清在线 | 亚洲综合色婷婷 | 国产免费视频一区二区裸体 | 欧美坐爱视频 | 一级久久久 | 四虎在线免费观看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 国产视频美女 | av片无限看| 亚洲丝袜中文 | 国产不卡一二三区 | 91高清视频免费 | 四虎影视成人永久免费观看亚洲欧美 | 国产视频中文字幕在线观看 | 亚洲视频免费 | 日本久久免费视频 | 片黄色毛片黄色毛片 | 麻豆小视频在线观看 | 91在线视频精品 | 国内精品小视频 | 中文字幕第一页在线播放 | 激情开心网站 | 久久久久久免费网 | 国产原创91| 九九热99视频 | 91精品视频网站 | 欧美国产在线看 | 久久久精品网 | 免费看污的网站 | 国产一区观看 | 欧美精品一区二区免费 | 国产一区高清在线 | 国产不卡在线播放 | 久久经典国产 | 久久成人午夜视频 | 久久草视频 | 天天摸天天操天天舔 | 99久久精品电影 | 91精品网站在线观看 | 久久久久成人精品 | 亚洲综合涩 | www.99在线观看 | 成人啊 v| 干天天 | 97视频免费看 | 日韩精品在线视频免费观看 | 亚洲国产精品影院 | 婷婷av综合 | 国产精品高潮呻吟久久久久 | 国产欧美精品一区二区三区 | 伊人中文网 | 日日草天天干 | 99精品在线看 | 天天干,天天射,天天操,天天摸 | 丁香色婷 | 欧美成人按摩 | 月丁香婷婷 | 色综合中文综合网 | 超碰97在线资源站 | 夜夜躁日日躁狠狠躁 | 国产一卡二卡在线 | 欧美日韩亚洲第一页 | 亚洲天天在线 | 欧洲亚洲国产视频 | 永久精品视频 | 探花视频在线观看免费版 | 久久久国产日韩 | 亚洲一区二区麻豆 | 国外av在线 | 99久热在线精品视频观看 | 一区二区三区精品在线视频 | 精品国精品自拍自在线 | 亚洲欧洲成人精品av97 | 四虎www. | 日韩黄色av网站 | 日本在线观看中文字幕 | 成年人三级网站 | 精品91视频 | 97国产在线 | 日韩在线视频播放 | 中文字幕中文字幕 | 伊人狠狠干 | 婷婷六月中文字幕 | 久草在线视频新 | 免费网站色 | 国产精品久久久久一区二区 | 五月激情综合婷婷 | 亚洲精品国产高清 | 四虎最新入口 | 日本夜夜草视频网站 | 九九爱免费视频在线观看 | 在线免费看黄网站 | 久久国产欧美日韩精品 | 在线观看国产www | 久久久久久久av麻豆果冻 | 国产69久久精品成人看 | 国产香蕉97碰碰久久人人 | 欧美一进一出抽搐大尺度视频 | 午夜手机电影 | 人人澡人人爽欧一区 | 精品麻豆入口免费 | 二区三区av | 成人久久18免费 | 久久91久久久久麻豆精品 | 日韩av在线看 | 国产亚洲在 | 99久久99久久免费精品蜜臀 | 97在线视频免费看 | 色综合天天射 | 99精品欧美一区二区蜜桃免费 | 成人黄色毛片 | 中国一级片在线 | 国产91在线 | 美洲 | 国产精品丝袜久久久久久久不卡 | 日本夜夜草视频网站 | 国产高清视频在线免费观看 | 日日爽日日操 | 国产小视频免费观看 | 国产精品毛片一区二区在线 | 免费电影播放 | 奇米影视在线99精品 | 中文字幕国产一区 | 天天爽人人爽夜夜爽 | 韩国一区二区av | 久久久久欠精品国产毛片国产毛生 | 黄色影院在线免费观看 | 日韩毛片一区 | 亚洲精品视频网址 | 欧美日韩三级 | 一区二区三区四区五区在线 | 欧美另类网站 | 久久深爱网 | 国产成人精品一区二区三区免费 | 国产精品久久久久久久久久三级 | 国模视频一区二区三区 | 精品欧美日韩 | 探花视频在线版播放免费观看 | 亚洲a成人v| 中文在线免费视频 | www日韩精品| 中文欧美字幕免费 | 欧美日韩不卡一区 | 日韩在线视频看看 | 中文字幕高清在线 | 国内精品美女在线观看 | 久久99精品久久久久蜜臀 | 日韩精品一区二区三区不卡 | 特黄一级毛片 | 国产网红在线观看 | www.福利视频 | 色婷婷国产精品 | 欧美日韩国产一区二区三区在线观看 | 国产一区视频导航 | 丁香九月婷婷 | 中文字幕国产 | 夜夜视频 | 国产亚洲精品女人久久久久久 | 在线亚洲小视频 | 国产精品高清在线 | 黄色a大片 | 四虎影视成人永久免费观看视频 | 婷婷久久国产 | 色射色 | 欧美 日韩 视频 | 日韩色一区二区三区 | 色综合天天在线 | 久久国产视屏 | 免费99精品国产自在在线 | 欧美少妇影院 | 亚洲麻豆精品 | 久久九九久久精品 | 久久国产视频网站 | 国产精品 亚洲精品 | 久久精品中文字幕 | 日韩一区二区三区高清免费看看 | 国产精品一区二区在线观看免费 | 国产亚洲精品成人av久久影院 | 精品久久九九 | 久久久久黄 | 亚洲经典视频在线观看 | 天天综合中文 | 欧美尹人 | 日韩欧美精品一区二区 | 天天操夜夜曰 | 婷婷综合成人 | 夜夜爱av| 91成版人在线观看入口 | 亚洲 欧洲 国产 精品 | 亚洲高清免费在线 | 在线亚洲免费视频 | 精品国产亚洲在线 | 日韩av影视在线 | 亚洲精品一区二区久 | 一级黄色电影网站 | 六月天色婷婷 | 日韩av高潮 | 亚洲精品88欧美一区二区 | 国产一区福利在线 | av在线播放快速免费阴 | 色香com. | 久久夜色精品国产欧美乱极品 | 久久久久欧美精品 | 8x成人免费视频 | 伊人激情网 | 亚洲国产成人高清精品 | 一本一道久久a久久精品 | 免费观看av网站 | 色婷婷中文| 天堂视频一区 | 国产免费黄色 | 亚洲欧美999 | 麻豆视频免费在线 | 国产成人精品一区二区三区网站观看 | 狠狠操影视 | 日韩免| 99精品一区二区三区 | 亚洲人成网站精品片在线观看 | 亚洲精品一区二区三区在线观看 | 黄色福利网站 | 精品一区二区三区久久 | 久久五月精品 | 亚洲男男gaygayxxxgv | 精品免费久久久久 | 成年人视频在线免费观看 | 午夜精品99久久免费 | 日日操操 | av超碰在线观看 | 五月天天av | av黄网站| 在线观看中文字幕 | 国产精品视频内 | 欧美国产大片 | av电影一区二区三区 | www操操操 | 久久精品美女视频网站 | 亚洲成年人免费网站 | 日日夜夜天天综合 | www.色婷婷.com | 成人性生交大片免费看中文网站 | 成人a免费看 | 国产精品h在线观看 | 色综合天天天天做夜夜夜夜做 | 国产小视频精品 | 国产精品 视频 | 色婷婷www | 毛片基地黄久久久久久天堂 | 看v片| 国产日韩欧美在线观看 | 日韩精品大片 | 亚洲专区 国产精品 | 日韩美女免费线视频 | 日韩18p| 午夜精品一区二区三区可下载 | 骄小bbw搡bbbb揉bbbb | 亚洲网站在线 | 国产精品久久久久久影院 | 黄色三级在线观看 | 99久高清在线观看视频99精品热在线观看视频 | 亚洲精品视频在线播放 | 99久久日韩精品视频免费在线观看 | 国产在线观看你懂得 | 中文字幕久久亚洲 | 亚洲精品在线资源 | 天天干一干 | 欧美在线视频二区 | 91色欧美| 亚洲精品免费观看视频 | 99久久精品国产观看 | 天天艹日日干 | 91片黄在线观看动漫 | 999久久久久久久久6666 | 国产成人av免费在线观看 | 91视频 - v11av| 在线只有精品 | 在线观看91视频 | 中文字幕电影一区 | 欧美日韩伦理在线 | 亚洲 欧洲 国产 日本 综合 | 黄色软件在线观看视频 | 香蕉视频在线看 | 国产123av | 精品福利在线视频 | 热久久视久久精品18亚洲精品 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 久久精品99久久久久久2456 | 超碰97国产 | 久久成人欧美 | 911国产精品| 国产福利小视频在线 | 欧美成人在线网站 | 91福利免费 | 最近日韩免费视频 | 国产色拍拍拍拍在线精品 | 久久免费播放 | 欧美日韩国产在线 | 91在线视频免费91 | 日韩中文字幕免费在线观看 | 国产麻豆成人传媒免费观看 | 97日日碰人人模人人澡分享吧 | 欧美成人免费在线 | 久久成人国产 | 午夜精品久久久久久久久久 | 国产一级二级视频 | 国产区av在线 | 欧美先锋影音 | 在线观看国产区 | 日韩av中文在线观看 | 亚洲免费视频在线观看 | 国产精品久久免费看 | 欧美日韩亚洲国产一区 | 久色伊人| 日日夜夜网 | 久久久久亚洲国产 | 亚洲国产精品va在线看黑人 | 免费看片网址 | 日韩欧美综合视频 | 久久九九视频 | 国产视频二 | 久久综合免费视频 | 婷婷 综合 色| 最近中文字幕免费视频 | 成人在线视频论坛 | 91丨九色丨国产在线 | 激情五月综合网 | 亚洲精品国产综合99久久夜夜嗨 | 黄色片网站av | 亚洲综合激情 | 中文字幕亚洲五码 | 国产淫片免费看 | 啪一啪在线| 99久久99久久综合 | av综合网址| 欧美日韩亚洲在线观看 | 久久综合久久综合这里只有精品 | 色婷婷激情四射 | 久久亚洲影视 | 亚洲国产视频网站 | 天天综合网国产 | 久久全国免费视频 | 免费观看日韩av | 日本中文字幕久久 | 亚洲乱码国产乱码精品天美传媒 | 国内精品久久久久久久 | 亚洲激情 在线 | 免费福利在线播放 | 亚洲精品在线观看免费 | av中文字幕在线免费观看 | 亚洲成熟女人毛片在线 | 国产第一二区 | 久久久久久久久国产 | 国产小视频免费观看 | 69欧美视频| 久久久2o19精品 | 操久| 欧美在线91 | 色偷偷男人的天堂av | 91国内产香蕉 | 最近免费观看的电影完整版 | 国产在线色视频 | 精品亚洲va在线va天堂资源站 | 17videosex性欧美 | 69国产精品视频 | 成人一级免费视频 | 国产在线视频一区 | 精品国产伦一区二区三区 | 六月丁香综合 | 一区二区三区精品在线 | 黄色网大全 | www黄com | 一区二区理论片 | 中文国产字幕在线观看 | 深夜福利视频在线观看 | 蜜臀久久99精品久久久久久网站 | 91私密视频| 中文字幕韩在线第一页 | 在线播放亚洲 | 国产精品va在线播放 | 在线不卡a| 在线观看一区二区视频 | 视色网站 | 97看片| www在线观看视频 | www.久久婷婷 | 国内精品久久影院 | 探花在线观看 | 中字幕视频在线永久在线观看免费 | 国产高清中文字幕 | 一区二区三区四区在线免费观看 | 十八岁以下禁止观看的1000个网站 | 一本—道久久a久久精品蜜桃 | 激情伊人 | 国产探花 | 国产91全国探花系列在线播放 | 午夜三级在线 | 中文字幕在线观看av | www国产亚洲精品久久网站 | 91尤物国产尤物福利在线播放 | 国产午夜精品一区 | 亚洲一片黄 | 久久精品中文字幕少妇 | 色综合婷婷久久 | 九九色综合 | 免费看成人av | 亚洲国产精品小视频 | 九色91福利 | av中文字幕网 | 国产精品永久免费视频 | 国产精品麻豆一区二区三区 | 中文字幕免费高 | 五月花激情 | 一级a性色生活片久久毛片波多野 | 亚洲视屏一区 | 国产999精品久久久久久绿帽 | 久久国产精品99精国产 | 亚洲成人网在线 | 欧美亚洲一级片 | 久草网站在线 | 天天爽天天搞 | 久久情网 | 成人免费视频视频在线观看 免费 | 国产精品videossex国产高清 | 国产电影黄色av | 欧美日韩大片在线观看 | 国产精品成人一区二区 | 精品久久久亚洲 | 欧美另类69 | 91精品久久久久久久91蜜桃 | 免费在线观看av电影 | 国产视频在线观看免费 | 国产精品一区二区久久 | 日本中文字幕在线观看 | 在线国产精品一区 | 中文字幕在线色 | 国产在线一线 | 欧美精品一区二区蜜臀亚洲 | 激情丁香久久 | 日韩中文字幕在线 | 国产一区二区高清视频 | 日韩高清免费在线观看 | 精品美女久久久久久免费 | 精品久久久久国产免费第一页 | 91污在线观看 | 少妇bbb| 天天艹天天干天天 | 亚洲国产精品va在线看 | 国产视频18 | 99这里有精品 | 成人久久电影 | 最新日韩在线 | 在线观看av国产 | 一区二区三区国产精品 | 日韩理论电影网 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 亚洲乱码国产乱码精品天美传媒 | 欧美一区二视频在线免费观看 | 免费在线观看日韩欧美 | 美女啪啪图片 | 中文一区在线观看 | 女人18片| 色国产在线 | 国产免费小视频 | 97超碰资源 | 亚洲精品国偷自产在线91正片 | 亚洲精品777 | 日韩在线一二三区 | 99视频在线免费看 | 国产高清一 | 国产一区二区在线免费视频 | 午夜在线免费视频 | 超碰av免费 | 国产九九九九九 | 国产精品福利在线 | 一级c片| 国语精品免费视频 | 一级黄色在线免费观看 | 日韩欧美视频免费在线观看 | 在线观看国产www | 开心综合网 | 91久久偷偷做嫩草影院 | 亚洲天堂免费视频 | 在线免费黄色片 | 波多野结衣一区二区 | 91在线播放视频 | 成人av免费在线看 | 国产亚洲精品久久久久久无几年桃 | 99国产精品一区 | 亚洲精品久久久久久久不卡四虎 | 一区二区三区在线看 | 91完整版| 国产精品嫩草69影院 | av电影中文字幕 | 国产精品高清一区二区三区 | 毛片网站在线观看 | 久精品在线观看 | 91成人免费看 | 免费久久99精品国产婷婷六月 | 少妇搡bbbb搡bbb搡忠贞 | 成人影片在线免费观看 | 日韩欧美一区二区三区免费观看 | av成人免费在线看 | 久久国精品 | 美女网站在线免费观看 | 丁香激情综合久久伊人久久 | 91精品久久久久久久久 | 亚洲国产高清在线观看视频 | av成人免费 | av电影免费 | 欧美一级裸体视频 | 亚洲精品乱码久久久久久 | 国产在线播放一区二区 | 久久人人97超碰com | 欧美性受极品xxxx喷水 | 久久久久久电影 | 久久人人添人人爽添人人88v | 中文字幕日韩电影 | 久久久久久久久免费视频 | 五月婷婷六月丁香 | 久久久精品欧美一区二区免费 | 99精品一区二区三区 | 日韩在线电影一区 | 亚洲精品国久久99热 | 三级动态视频在线观看 | 亚洲视频免费在线 | 天天躁日日躁狠狠躁av麻豆 | 中文字幕 国产 一区 | 国内一区二区视频 | 午夜在线观看影院 | 在线免费观看亚洲视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 久久视精品 | 日韩久久精品一区二区三区 | 手机在线小视频 | 激情黄色av | 99精品视频播放 | 国产视频亚洲 | 岛国av在线 | 在线观看黄网站 | 久久黄色精品视频 | 天天射色综合 | 日韩三级久久 | 日日操日日干 | 天天操夜夜逼 | 五月天久久 | 在线观看成年人 | 日本黄色特级片 | 亚洲精品乱码久久久久久蜜桃欧美 | 99精品区 | 日韩av影视 | 久久久久免费精品视频 | 97视频网站 | 久久久91精品国产 | 亚洲午夜精品一区 | 日韩av一区二区三区 | 天天撸夜夜操 | 久草精品视频在线看网站免费 | 精品国产乱码久久久久久1区2匹 | 九九九视频在线 | 国产亚洲久一区二区 | 亚洲日本激情 | 国产夫妻av在线 | 正在播放国产91 | 亚洲精品视频在线播放 | 精品自拍网 | 国产午夜精品一区二区三区欧美 | 欧美视频国产视频 | 友田真希av | 国产一区在线视频播放 | 欧美人体xx| 在线成人一区二区 | 91久久国产露脸精品国产闺蜜 | 97超碰人人澡| 欧美午夜a| 国产精品a成v人在线播放 | 婷婷av网 | www四虎影院 | 亚洲国产一区二区精品专区 | 日韩一区正在播放 | 在线观看爱爱视频 | 五月天开心 | 一区二区三区播放 | 黄色一级网| 亚洲专区在线播放 | 日韩av免费大片 | 国产精品久久久久毛片大屁完整版 | 91九色视频网站 | 综合久久久久久久 | 亚洲综合成人婷婷小说 | 91.dizhi永久地址最新 | 成人午夜电影在线观看 | 99精品久久只有精品 | 91精品小视频 | 久久99精品国产91久久来源 |