久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

工業(yè)相機(jī)SDK C++ Demo:枚舉取流、回調(diào)落盤與插件集成

工業(yè)相機(jī)SDK C++ Demo:枚舉取流、回調(diào)落盤與插件集成 簡介面向機(jī)器視覺工程師的這份C示例工程圍繞??倒I(yè)相機(jī)SDK的API調(diào)用展開重點解決相機(jī)參數(shù)配置、圖像采集與實時顯示、設(shè)備枚舉連接及異常反饋等開發(fā)入門問題適合具備C基礎(chǔ)、希望用Qt搭建工業(yè)相機(jī)上位機(jī)的開發(fā)者參考。壓縮包共239個文件約11.02MB主要由h/hh頭文件、cpp源文件、lib靜態(tài)庫、vcxproj與sln工程文件構(gòu)成并包含ui/qrc界面資源、pro工程配置、def導(dǎo)出定義及exe示例程序覆蓋從工程組織到編譯運行的完整結(jié)構(gòu)。已有約1300人學(xué)習(xí)。其價值在于提供可對照的完整Qt工程與SDK調(diào)用實例讀者可據(jù)此理解觸發(fā)模式、分辨率、幀率、曝光時間等參數(shù)設(shè)置以及圖像緩存管理和錯誤捕獲思路對多相機(jī)系統(tǒng)的自動發(fā)現(xiàn)與配置也有參考意義。在此基礎(chǔ)上讀者可進(jìn)一步擴(kuò)展圖像處理、特征檢測等功能減少從零搭建環(huán)境的成本并在二次開發(fā)時更快定位接口調(diào)用與工程配置問題。1. 工業(yè)相機(jī) SDK 的 C Demo 源碼包先別急著編譯先看它替你省了哪幾步工業(yè)相機(jī) SDK 的 C Demo 源碼包最容易被當(dāng)成“編譯一下就能出圖”的樣例。實際在制造現(xiàn)場的軟件/插件式 C 集成里它更像一張接線圖設(shè)備枚舉、打開句柄、配置曝光增益、注冊回調(diào)、落盤取圖每一步都對應(yīng)產(chǎn)線調(diào)試中的一個卡點。你拿到這份源碼包真正值錢的地方不是幾行調(diào)用而是它把這些步驟按最小閉環(huán)串了起來讓你先跑通一條鏈路再替換成自己的業(yè)務(wù)插件。這份資源適合三類人剛接觸工業(yè)相機(jī) SDK、需要從 C 側(cè)把相機(jī)接進(jìn)制造軟件的人手上已有 SDK 頭文件和動態(tài)庫、但不想從零寫初始化流程的人以及需要把采集功能做成獨立模塊或插件的熟手。先跑枚舉再跑取流最后再談參數(shù)和落盤順序別亂。2. 拆開 Demo 工程從設(shè)備枚舉到取流回調(diào)的最小閉環(huán)拿到源碼包后我一般不會先改業(yè)務(wù)代碼而是先確認(rèn)工程依賴、運行目錄和 SDK 調(diào)用順序。工業(yè)相機(jī) Demo 的翻車點往往不在算法而在“編譯過了、運行時找不到庫”“枚舉不到設(shè)備”“回調(diào)一進(jìn)來就卡住”這些工程細(xì)節(jié)。第 2 章先把最小閉環(huán)拆開依賴怎么擺、設(shè)備怎么枚舉、句柄怎么打開、回調(diào)怎么注冊。制造現(xiàn)場的軟件/插件 c 集成尤其吃這一套因為最終交付的不是一個控制臺程序而是一個能被主程序加載、能反復(fù)啟停的采集模塊。2.1 工程目錄與依賴關(guān)系頭文件、動態(tài)庫、運行目錄怎么擺Demo 源碼包里的 C 工程通常圍繞三類東西轉(zhuǎn)SDK 頭文件、鏈接用的庫文件、運行時動態(tài)庫。頭文件決定你能不能編譯庫文件決定鏈接能不能過運行時動態(tài)庫決定程序啟動時會不會直接退出。很多新手把這三類文件混在一個目錄里編譯命令寫得很長換一臺機(jī)器就重新翻車。我習(xí)慣在工程里固定一個third_party/vendor_sdk目錄下面再分include、lib、binCMake 只認(rèn)這個根路徑換 SDK 時改一個變量就行。下面這段 CMake 腳本是 Demo 工程里最常見的骨架作用是把 SDK 根目錄、頭文件目錄、鏈接目錄和運行時庫復(fù)制動作固定下來。代碼里的vendor_camera是示意庫名實際換成你手上 SDK 的庫名VendorCam_*這類接口名也是通用寫法落到項目里按 SDK 頭文件替換。cmake_minimum_required(VERSION 3.16) project(camera_sdk_cpp_demo LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # SDK根目錄頭文件、庫、運行庫都從這里取 set(SDK_ROOT ${CMAKE_SOURCE_DIR}/third_party/vendor_sdk CACHE PATH 工業(yè)相機(jī)SDK根目錄) add_executable(camera_sdk_cpp_demo src/main.cpp src/frame_sink.cpp ) target_include_directories(camera_sdk_cpp_demo PRIVATE ${SDK_ROOT}/include ) target_link_directories(camera_sdk_cpp_demo PRIVATE ${SDK_ROOT}/lib ) target_link_libraries(camera_sdk_cpp_demo PRIVATE vendor_camera ) # Windows下把運行庫復(fù)制到exe旁邊避免啟動時報找不到dll if(WIN32) add_custom_command(TARGET camera_sdk_cpp_demo POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${SDK_ROOT}/bin $TARGET_FILE_DIR:camera_sdk_cpp_demo COMMENT 復(fù)制SDK運行庫到輸出目錄 ) else() # Linux下先給構(gòu)建目錄一個rpath方便本機(jī)調(diào)試 set_target_properties(camera_sdk_cpp_demo PROPERTIES BUILD_RPATH ${SDK_ROOT}/lib INSTALL_RPATH $ORIGIN/../lib ) endif()這段腳本的邏輯很直白SDK_ROOT是唯一入口頭文件目錄和庫目錄都從它派生target_link_libraries負(fù)責(zé)編譯期鏈接Windows 的POST_BUILD負(fù)責(zé)把動態(tài)庫復(fù)制到可執(zhí)行文件旁邊Linux 的BUILD_RPATH讓程序在構(gòu)建目錄里先跑起來。參數(shù)上CMAKE_CXX_STANDARD 17不是硬性要求但 Demo 里一旦用到std::filesystem、std::thread、std::atomic17 更省心。SDK_ROOT用CACHE PATH是為了后續(xù)在 IDE 或命令行里覆蓋不要把絕對路徑寫死在源碼里。目錄/文件作用常見錯誤third_party/vendor_sdk/includeSDK 頭文件頭文件層級多一層include 路徑寫錯third_party/vendor_sdk/lib鏈接庫只放了運行庫沒有導(dǎo)入庫third_party/vendor_sdk/bin運行時動態(tài)庫編譯通過啟動時報找不到庫src/main.cpp初始化、枚舉、啟動采集把業(yè)務(wù)邏輯和 SDK 調(diào)用混在一起src/frame_sink.cpp回調(diào)后的隊列與落盤在回調(diào)里直接寫文件導(dǎo)致丟幀依賴擺好之后先不要急著寫取流。把工程編譯出來運行一個只做初始化和釋放的空程序確認(rèn)動態(tài)庫能加載、SDK 能初始化。這個動作看起來慢但能省掉后面一半的排查時間。我見過太多人一上來就調(diào)取流最后發(fā)現(xiàn)是運行目錄少了動態(tài)庫日志里只有一句“初始化失敗”白查半天。2.2 初始化與設(shè)備枚舉為什么先跑通枚舉再碰取流設(shè)備枚舉是整條鏈路里最值得先跑通的一步。枚舉成功說明 SDK 初始化、網(wǎng)絡(luò)發(fā)現(xiàn)、權(quán)限、運行庫加載這幾件事至少通了枚舉失敗則說明問題還在入口沒必要去調(diào)曝光和回調(diào)。工業(yè)相機(jī)常見的發(fā)現(xiàn)方式有廣播發(fā)現(xiàn)、固定 IP 直連、串口或 USB 枚舉不同 SDK 的接口名不一樣但邏輯差不多初始化 SDK拿設(shè)備列表打印序列號、型號、IP 或接口類型最后釋放資源。下面這段 C 代碼用通用接口名示意枚舉流程。實際項目里把VendorCam_Init、VendorCam_EnumDevices替換成 SDK 頭文件里的同義函數(shù)即可。代碼重點不在 API 名字而在“初始化有返回值檢查、枚舉結(jié)果有遍歷、退出前釋放”這三件事。#include iostream #include vector #include vendor_camera_sdk.h int main() { // 1. 初始化SDK參數(shù)一般傳nullptr或配置結(jié)構(gòu)體指針 if (VendorCam_Init(nullptr) ! CAM_OK) { std::cerr SDK初始化失敗先查運行庫和權(quán)限 std::endl; return 1; } // 2. 枚舉設(shè)備結(jié)果放進(jìn)vector std::vectorDeviceInfo devices; int ret VendorCam_EnumDevices(devices); if (ret ! CAM_OK) { std::cerr 設(shè)備枚舉失敗錯誤碼 ret std::endl; VendorCam_Release(); return 2; } if (devices.empty()) { std::cerr 沒有發(fā)現(xiàn)設(shè)備檢查網(wǎng)段、供電和連接 std::endl; VendorCam_Release(); return 3; } // 3. 打印關(guān)鍵字段序列號用于后續(xù)打開設(shè)備 for (const auto dev : devices) { std::cout serial dev.serial model dev.model ip dev.ip interface dev.interface_type std::endl; } // 4. 釋放SDK資源 VendorCam_Release(); return 0; }這段代碼的邏輯分四步初始化、枚舉、打印、釋放。VendorCam_Init(nullptr)里的參數(shù)通常是配置指針傳空表示用默認(rèn)配置如果 SDK 要求指定日志路徑或回調(diào)按頭文件補(bǔ)結(jié)構(gòu)體。VendorCam_EnumDevices(devices)的返回值必須檢查錯誤碼要打出來不要只打印“失敗”兩個字。dev.serial是后面打開設(shè)備的穩(wěn)定標(biāo)識比 IP 更可靠因為 IP 可能被改序列號一般不變。VendorCam_Release()放在每個失敗分支和正常分支里避免 SDK 內(nèi)部資源沒釋放第二次運行枚舉不到設(shè)備。枚舉跑通后再確認(rèn)一件事程序運行時的工作目錄在哪里。Windows 下雙擊 exe 和從命令行啟動工作目錄可能不同Linux 下從 systemd 或主程序加載插件工作目錄也可能不是你以為的目錄。Demo 里如果有配置文件、日志目錄、保存目錄盡量用可執(zhí)行文件路徑或環(huán)境變量推導(dǎo)不要寫相對路徑就完事。2.3 打開設(shè)備與注冊回調(diào)取流鏈路的最小參數(shù)集枚舉到設(shè)備后下一步是打開句柄、設(shè)置采集模式、注冊幀回調(diào)、啟動取流。這里最容易犯的錯是“參數(shù)設(shè)太多”。第一次跑通取流只需要最小參數(shù)集觸發(fā)模式設(shè)為連續(xù)采集或關(guān)閉觸發(fā)、曝光時間給一個中間值、增益先歸零、像素格式用 Mono8 或 BayerRG8、回調(diào)里只做深拷貝。等圖像能穩(wěn)定出來再去調(diào) ROI、伽馬、白平衡這些參數(shù)。下面這段代碼把打開設(shè)備、設(shè)置參數(shù)、注冊回調(diào)、啟動取流串起來。Grabber類只是示意實際工程里可以拆成CameraSession和FrameSink兩個類?;卣{(diào)函數(shù)里不要做耗時操作先入隊后面用工作線程落盤。#include atomic #include cstdint #include iostream #include vendor_camera_sdk.h class Grabber { public: bool Start(const std::string serial) { // 1. 按序列號打開設(shè)備 if (VendorCam_OpenBySerial(serial.c_str(), handle_) ! CAM_OK) { std::cerr 打開設(shè)備失敗 serial std::endl; return false; } // 2. 最小參數(shù)集連續(xù)采集、固定曝光、增益歸零 VendorCam_SetEnum(handle_, TriggerMode, 0); VendorCam_SetEnum(handle_, AcquisitionMode, 2); VendorCam_SetFloat(handle_, ExposureTime, exposure_us_); VendorCam_SetFloat(handle_, Gain, gain_db_); VendorCam_SetEnumStr(handle_, PixelFormat, Mono8); // 3. 注冊回調(diào)user指針把this傳進(jìn)去 if (VendorCam_RegisterFrameCallback(handle_, Grabber::OnFrame, this) ! CAM_OK) { std::cerr 注冊回調(diào)失敗 std::endl; VendorCam_Close(handle_); handle_ nullptr; return false; } // 4. 啟動取流 if (VendorCam_StartGrabbing(handle_) ! CAM_OK) { std::cerr 啟動取流失敗 std::endl; VendorCam_Close(handle_); handle_ nullptr; return false; } return true; } void Stop() { if (handle_ ! nullptr) { VendorCam_StopGrabbing(handle_); VendorCam_Close(handle_); handle_ nullptr; } } private: static void OnFrame(FrameInfo* frame, void* user) { auto* self static_castGrabber*(user); // 回調(diào)里只做拷貝或入隊不在這里寫文件 self-Enqueue(frame); } void Enqueue(FrameInfo* frame) { // 省略深拷貝到有界隊列具體實現(xiàn)見第4章 (void)frame; } CameraHandle handle_{nullptr}; double exposure_us_{8000.0}; double gain_db_{0.0}; }; int main() { Grabber grabber; if (!grabber.Start(替換成枚舉到的序列號)) { return 1; } std::this_thread::sleep_for(std::chrono::seconds(5)); grabber.Stop(); return 0; }這段代碼的關(guān)鍵參數(shù)有四個TriggerMode0表示關(guān)閉觸發(fā)或連續(xù)采集具體枚舉值看 SDK 頭文件AcquisitionMode2通常表示連續(xù)采集ExposureTime單位多為微秒8000 微秒是 8 毫秒適合室內(nèi)中等亮度Gain單位多為 dB先歸零避免噪聲被放大。VendorCam_RegisterFrameCallback的第三個參數(shù)是用戶指針回調(diào)里再轉(zhuǎn)回Grabber*這是 C 對接 C 風(fēng)格 SDK 的常見寫法。StartGrabbing之后不要立刻Stop至少給幾秒讓回調(diào)進(jìn)來確認(rèn)有幀再退出。取流鏈路跑通后先看三件事回調(diào)有沒有進(jìn)來、幀寬高和像素格式對不對、停止取流后句柄有沒有關(guān)?;卣{(diào)沒進(jìn)來優(yōu)先查觸發(fā)模式和取流命令幀寬高不對查 ROI 和像素格式停止后再次啟動失敗查StopGrabbing和Close是否成對。第 2 章的目標(biāo)不是把 Demo 改成產(chǎn)品而是讓你確認(rèn)這條最小閉環(huán)在你機(jī)器上真的能走通。3. 曝光、增益與像素格式Demo 里最容易被忽略的參數(shù)配置工業(yè)相機(jī) Demo 能出圖不代表圖像能用。制造現(xiàn)場常見的“圖像偏暗、過曝、顏色不對、邊緣發(fā)糊”很多時候不是相機(jī)壞了而是曝光、增益、像素格式和 ROI 沒配對。第 3 章把參數(shù)配置拆成兩塊曝光增益的聯(lián)動策略以及像素格式與 ROI 的選擇。這里的思路是先讓圖像亮度落在可用區(qū)間再讓數(shù)據(jù)格式匹配后續(xù)算法或插件。3.1 曝光時間與增益的聯(lián)動先鎖曝光再調(diào)增益曝光時間和增益都會影響亮度但兩者的代價不一樣。曝光時間拉長進(jìn)光量增加圖像亮度上來但運動物體容易拖影增益放大的是電信號亮度也能上來但噪聲會跟著放大暗部尤其明顯。我一般先把增益歸零調(diào)曝光到目標(biāo)亮度再在曝光已經(jīng)接近運動拖影上限時才少量加增益。這個順序在制造現(xiàn)場的軟件/插件 c 集成里很重要因為插件后面往往接的是檢測算法噪聲放大比亮度不足更難處理。下面這張表是 Demo 調(diào)參時常用的起點不是萬能值。實際項目里按光源、鏡頭光圈、被拍物反光程度再改。參數(shù)常見單位起步建議調(diào)整方向注意點曝光時間微秒500010000暗了先加曝光運動場景注意拖影增益dB0曝光到上限再加增益越高噪聲越明顯觸發(fā)模式枚舉連續(xù)采集產(chǎn)線節(jié)拍明確后改硬觸發(fā)觸發(fā)源不配對會沒圖像素格式枚舉Mono8 或 BayerRG8按算法輸入選Bayer 要轉(zhuǎn) RGBROI像素先全幅確認(rèn)視野后再裁偏移和寬度要對齊參數(shù)設(shè)置代碼不要散落在業(yè)務(wù)邏輯里我習(xí)慣收成一個CameraParams結(jié)構(gòu)體統(tǒng)一校驗、統(tǒng)一應(yīng)用。下面這段代碼示意“停流、設(shè)參數(shù)、再啟流”的順序。部分 SDK 允許取流中改曝光但像素格式和 ROI 往往要求停流統(tǒng)一按停流處理更穩(wěn)。#include string #include vendor_camera_sdk.h struct CameraParams { double exposure_us{8000.0}; double gain_db{0.0}; std::string pixel_format{Mono8}; int roi_x{0}; int roi_y{0}; int roi_w{1280}; int roi_h{1024}; }; bool ApplyParams(CameraHandle h, const CameraParams p) { // 先停流避免部分SDK在取流中拒絕修改 VendorCam_StopGrabbing(h); if (VendorCam_SetFloat(h, ExposureTime, p.exposure_us) ! CAM_OK) { return false; } if (VendorCam_SetFloat(h, Gain, p.gain_db) ! CAM_OK) { return false; } if (VendorCam_SetEnumStr(h, PixelFormat, p.pixel_format.c_str()) ! CAM_OK) { return false; } if (VendorCam_SetInt(h, OffsetX, p.roi_x) ! CAM_OK) { return false; } if (VendorCam_SetInt(h, OffsetY, p.roi_y) ! CAM_OK) { return false; } if (VendorCam_SetInt(h, Width, p.roi_w) ! CAM_OK) { return false; } if (VendorCam_SetInt(h, Height, p.roi_h) ! CAM_OK) { return false; } return VendorCam_StartGrabbing(h) CAM_OK; }這段代碼的邏輯是先把采集停下來再逐項設(shè)置最后重新啟動。ExposureTime和Gain用浮點接口因為很多 SDK 支持小數(shù)PixelFormat用字符串枚舉方便在配置文件里改OffsetX/OffsetY/Width/Height用整數(shù)接口單位是像素。每次設(shè)置都檢查返回值失敗就直接返回不要繼續(xù)設(shè)后面的參數(shù)否則日志里會出現(xiàn)“最后一個參數(shù)失敗”實際根因在第一個。停流再啟流會帶來短暫斷流產(chǎn)線集成時要把這段時間算進(jìn)節(jié)拍或者在初始化階段一次設(shè)好運行中不改。曝光調(diào)好后再看直方圖或灰度均值。Demo 里如果沒有圖像分析工具可以先把圖存成 PGM 或 BMP用常見看圖工具看亮度分布。不要只憑屏幕上的顯示判斷顯示端可能做了自動拉伸。制造現(xiàn)場的光源如果可調(diào)優(yōu)先調(diào)光源再動曝光和增益圖像質(zhì)量會更干凈。3.2 像素格式與 ROIMono8、BayerRG8、RGB8 怎么選像素格式選錯后面算法全白做。Mono8 是單通道 8 位灰度數(shù)據(jù)量小、處理簡單適合尺寸測量、定位、條碼識別這類不依賴顏色的場景。BayerRG8 是彩色相機(jī)常見的原始格式每個像素只有一個顏色分量需要做去馬賽克才變成 RGB如果直接把 Bayer 數(shù)據(jù)當(dāng)灰度用圖像會有網(wǎng)格感。RGB8 是三通道 8 位數(shù)據(jù)量大但算法端不用再做顏色轉(zhuǎn)換。選型時先看算法輸入再看帶寬不要為了“彩色好看”把產(chǎn)線帶寬吃滿。ROI 也不是越小越好。ROI 縮小能提高幀率、減少數(shù)據(jù)量但偏移和寬高要滿足相機(jī)的最小步進(jìn)和對齊要求。部分相機(jī)的 ROI 寬度要求是 8 的倍數(shù)偏移也有步進(jìn)設(shè)成奇數(shù)可能報參數(shù)錯誤。Demo 里最好在應(yīng)用參數(shù)前做一次校驗寬高大于 0、偏移加寬高不超過傳感器范圍、寬高按步進(jìn)對齊。bool ValidateRoi(const CameraParams p, int sensor_w, int sensor_h, int step) { if (p.roi_w 0 || p.roi_h 0) { return false; } if (p.roi_x 0 || p.roi_y 0) { return false; } if (p.roi_x p.roi_w sensor_w || p.roi_y p.roi_h sensor_h) { return false; } if (p.roi_w % step ! 0 || p.roi_h % step ! 0) { return false; } if (p.roi_x % step ! 0 || p.roi_y % step ! 0) { return false; } return true; }這段校驗函數(shù)的參數(shù)含義sensor_w/sensor_h是相機(jī)傳感器全幅寬高step是 SDK 要求的對齊步進(jìn)常見是 2、4、8 或 16具體看手冊。先查正負(fù)和邊界再查對齊順序不要反。roi_x roi_w不能超過傳感器寬度否則部分 SDK 會直接返回參數(shù)錯誤部分 SDK 會靜默裁切后者更麻煩。Demo 里把校驗放在ApplyParams之前參數(shù)錯了在本地就攔住不要等下發(fā)到相機(jī)才報錯。像素格式和 ROI 都確認(rèn)后再檢查幀數(shù)據(jù)里的stride或padding。有些相機(jī)每行末尾會補(bǔ)齊字節(jié)幀寬乘以像素字節(jié)數(shù)不一定等于行跨度。保存圖像時如果按width * height * channels直接寫可能出現(xiàn)圖像錯位。Demo 里如果有FrameInfo結(jié)構(gòu)體先看它有沒有stride字段沒有的話按 SDK 文檔確認(rèn)行對齊規(guī)則再決定是否逐行拷貝。4. 圖像回調(diào)與線程安全把 Demo 改成能落盤的采集程序Demo 出圖之后下一步通常是落盤或送算法。很多樣例代碼在回調(diào)里直接imwrite或直接調(diào)用檢測函數(shù)幀率一高就丟幀甚至把取流線程卡死。工業(yè)相機(jī)回調(diào)運行在 SDK 的采集線程里回調(diào)里做耗時操作等于讓相機(jī)等你。第 4 章把回調(diào)改成“只入隊”用獨立工作線程做保存再補(bǔ)上文件命名和半截文件處理。這個模型不復(fù)雜但能讓 Demo 從“能看”變成“能連續(xù)采集”。4.1 回調(diào)里只做拷貝隊列 工作線程的落盤模型回調(diào)里最安全的動作是深拷貝一幀到有界隊列然后立刻返回。隊列要有上限滿了就丟幀并計數(shù)不要無限增長。無限隊列在短時間卡頓時看起來沒事時間一長內(nèi)存吃滿程序直接崩日志里還看不出原因。工作線程從隊列取幀、保存、釋放采集線程和保存線程通過互斥量和條件變量解耦。下面這段代碼是簡化版重點看Push的丟幀策略和Loop的退出條件。#include atomic #include condition_variable #include cstdint #include deque #include mutex #include thread #include vector struct Frame { std::string serial; std::string pixel_format; int width{0}; int height{0}; std::vectoruint8_t data; }; class FrameSink { public: explicit FrameSink(size_t max_frames 8) : max_frames_(max_frames), running_(true), worker_(FrameSink::Loop, this) {} ~FrameSink() { running_ false; cv_.notify_all(); if (worker_.joinable()) { worker_.join(); } } bool Push(Frame frame) { std::lock_guardstd::mutex lock(mu_); if (queue_.size() max_frames_) { dropped_.fetch_add(1, std::memory_order_relaxed); return false; } queue_.push_back(std::move(frame)); cv_.notify_one(); return true; } uint64_t Dropped() const { return dropped_.load(std::memory_order_relaxed); } private: void Loop() { while (running_) { Frame frame; { std::unique_lockstd::mutex lock(mu_); cv_.wait(lock, [this] { return !running_ || !queue_.empty(); }); if (!running_ queue_.empty()) { break; } frame std::move(queue_.front()); queue_.pop_front(); } Save(frame); } } void Save(const Frame frame); size_t max_frames_; std::atomicbool running_; std::mutex mu_; std::condition_variable cv_; std::dequeFrame queue_; std::thread worker_; std::atomicuint64_t dropped_{0}; };這段代碼的參數(shù)和邏輯max_frames8是隊列上限按幀大小和內(nèi)存預(yù)算調(diào)1080p 灰度幀一幀約 1.3MB8 幀不算大running_控制工作線程退出cv_.wait的條件是“停止或隊列非空”避免退出時卡死Push里隊列滿直接丟幀并累加dropped_不要阻塞采集線程。Frame里的data是深拷貝后的像素數(shù)據(jù)回調(diào)里構(gòu)造Frame時要把stride處理掉按有效像素逐行拷貝避免把行尾補(bǔ)齊字節(jié)也存進(jìn)去。Save在工作線程里執(zhí)行這里只聲明具體實現(xiàn)看下一節(jié)?;卣{(diào)對接時OnFrame里不要直接構(gòu)造大對象再拷貝兩次可以復(fù)用緩沖池。常見做法是維護(hù)一個固定大小的Frame池回調(diào)取一個空閑幀填數(shù)據(jù)Push到隊列工作線程保存完再歸還。這樣能減少頻繁分配釋放。Demo 階段可以先不做池先把隊列模型跑通再按幀率和內(nèi)存壓力決定要不要加。4.2 保存圖像與命名避免覆蓋和半截文件保存圖像有兩個細(xì)節(jié)最容易出問題文件名重復(fù)導(dǎo)致覆蓋程序中途退出留下半截文件。文件名我一般用“序列號 微秒時間戳 格式后綴”序列號區(qū)分相機(jī)時間戳區(qū)分幀。半截文件用“先寫臨時文件寫完再重命名”的方式處理重命名在同一文件系統(tǒng)內(nèi)通常是原子操作至少不會讓下游算法讀到寫了一半的圖。#include chrono #include filesystem #include fstream #include sstream #include string void SaveFrame(const Frame frame, const std::string dir) { std::filesystem::create_directories(dir); auto now std::chrono::system_clock::now(); auto us std::chrono::duration_caststd::chrono::microseconds( now.time_since_epoch()) .count(); std::ostringstream name; name dir /cam_ frame.serial _ us (frame.pixel_format Mono8 ? .pgm : .bmp); std::string final_path name.str(); std::string tmp_path final_path .part; std::ofstream out(tmp_path, std::ios::binary); if (!out) { return; } // 這里按Mono8示意實際按像素格式寫文件頭 out.write(reinterpret_castconst char*(frame.data.data()), static_caststd::streamsize(frame.data.size())); out.close(); std::error_code ec; std::filesystem::rename(tmp_path, final_path, ec); if (ec) { std::filesystem::remove(tmp_path, ec); } }這段代碼的邏輯先確保目錄存在再用微秒時間戳拼文件名先寫.part關(guān)閉后重命名。frame.serial用來區(qū)分多相機(jī)避免兩臺相機(jī)同一微秒撞名pixel_format決定后綴Mono8 可以寫 PGM彩色可以寫 BMP 或自定義頭。注意這里只寫了像素數(shù)據(jù)PGM 還需要文件頭實際項目里按格式補(bǔ)P5頭或直接接圖像庫。std::filesystem::rename帶error_code失敗時刪臨時文件不拋異常打斷工作線程。create_directories每次保存都調(diào)用有開銷可以在初始化時調(diào)一次保存函數(shù)里只做寫入。落盤目錄不要放在系統(tǒng)盤根目錄或權(quán)限受限目錄。制造現(xiàn)場常見做法是按日期分目錄例如data/2025-01-01/cam_xxx避免單目錄文件過多。保存線程如果持續(xù)跟不上dropped_會漲這時候先看磁盤寫入速度再看幀大小和隊列上限。不要一上來就加大隊列隊列只是緩沖不是解決磁盤瓶頸的辦法。5. 避坑排查工業(yè)相機(jī) SDK C Demo 最常見的五類翻車現(xiàn)場工業(yè)相機(jī) Demo 的坑很集中枚舉、取流、動態(tài)庫、圖像參數(shù)、多相機(jī)。每一類都有典型現(xiàn)象但根因往往不在表面。第 5 章按“現(xiàn)象 → 原因 → 解決”拆五條都是我見過或自己踩過的翻車現(xiàn)場。排查時先按順序確認(rèn)最小閉環(huán)不要同時改五個參數(shù)否則你都不知道是哪一步修好的。5.1 枚舉不到設(shè)備先查網(wǎng)段、權(quán)限和防火墻現(xiàn)象程序啟動后設(shè)備列表為空或者只顯示一部分相機(jī)SDK 初始化返回成功但枚舉接口返回 0 個設(shè)備。原因通常有三類相機(jī)和主機(jī)不在同一網(wǎng)段廣播發(fā)現(xiàn)包過不去Linux 下當(dāng)前用戶沒有訪問網(wǎng)絡(luò)設(shè)備或 USB 設(shè)備的權(quán)限Windows 防火墻或安全軟件攔了發(fā)現(xiàn)報文。解決順序是先看相機(jī)指示燈和網(wǎng)口燈再用系統(tǒng)命令確認(rèn)主機(jī)網(wǎng)卡地址確保和相機(jī)在同一網(wǎng)段Linux 下用ip addr看網(wǎng)卡用ping測直連相機(jī)權(quán)限問題檢查 udev 規(guī)則或把當(dāng)前用戶加入相應(yīng)用戶組改完重新登錄。防火墻先臨時關(guān)掉做對照確認(rèn)是它再按端口放行不要長期關(guān)閉。5.2 取流超時與丟幀觸發(fā)源、包大小、回調(diào)阻塞現(xiàn)象枚舉正常打開設(shè)備也成功但StartGrabbing后回調(diào)不進(jìn)幀或者進(jìn)幾幀就超時日志里出現(xiàn)取流超時、丟幀計數(shù)上漲。原因常見的是觸發(fā)模式?jīng)]關(guān)相機(jī)在等硬觸發(fā)網(wǎng)絡(luò)相機(jī)包大小設(shè)得過大或過小導(dǎo)致丟包回調(diào)里做了保存或算法采集線程被拖住。解決時先把觸發(fā)模式設(shè)為連續(xù)采集確認(rèn)自由運行能出圖再按 SDK 建議調(diào)包大小和接收緩沖網(wǎng)絡(luò)相機(jī)先跑小分辨率排除帶寬最后把回調(diào)改成只入隊保存放到工作線程。取流超時不要只加超時時間先確認(rèn)幀有沒有到。5.3 編譯通過但運行找不到動態(tài)庫運行目錄與 RPATH現(xiàn)象編譯鏈接都過雙擊 exe 或從主程序加載插件時直接退出提示找不到某個動態(tài)庫Linux 下報error while loading shared libraries。原因通常是運行庫沒復(fù)制到可執(zhí)行文件旁邊或者 Linux 的RPATH沒設(shè)對程序去系統(tǒng)目錄找?guī)?。解決時 Windows 用 CMake 的POST_BUILD把bin目錄復(fù)制到輸出目錄或者把 SDK 的bin加進(jìn)PATH做臨時驗證Linux 用ldd看缺哪個庫構(gòu)建目錄設(shè)BUILD_RPATH安裝目錄設(shè)$ORIGIN/../lib。插件場景還要確認(rèn)主程序加載插件時的工作目錄和環(huán)境變量不要假設(shè)和獨立運行一樣。5.4 圖像偏暗、過曝或顏色異常曝光、增益、像素格式逐項對照現(xiàn)象能出圖但圖像整體偏暗、局部過曝或者彩色圖顏色發(fā)綠、發(fā)紫邊緣有網(wǎng)格。原因可能是曝光時間太短、增益為負(fù)或為零但光源不足也可能是像素格式選錯把 Bayer 數(shù)據(jù)當(dāng) RGB 用或者把 RGB 當(dāng)灰度讀。解決時先把增益歸零調(diào)曝光到灰度均值落在中間區(qū)域再看像素格式是否和保存、顯示鏈路一致BayerRG8 要做去馬賽克Mono8 不要按三通道讀最后檢查 ROI 偏移和行跨度錯位也會讓圖像看起來像顏色異常。每次只改一個參數(shù)改完存一幀對照。5.5 多相機(jī)同時取流句柄隔離與帶寬核算現(xiàn)象單相機(jī)正常接第二臺后開始丟幀、超時或者兩臺相機(jī)圖像串了。原因常見的是句柄沒有按相機(jī)隔離回調(diào)里用了共享緩沖網(wǎng)絡(luò)帶寬或 USB 帶寬不夠兩臺相機(jī)同時全幅高幀率把鏈路打滿保存線程共用隊列一臺相機(jī)拖慢另一臺。解決時每臺相機(jī)一個CameraSession和一個FrameSink回調(diào)的user指針指向各自的會話對象先降分辨率或幀率做帶寬核算確認(rèn)單臺占用再乘相機(jī)數(shù)保存隊列按相機(jī)分開日志里帶序列號。多相機(jī)不要共用全局句柄也不要在回調(diào)里查全局 map鎖競爭會讓丟幀更明顯。排查順序看什么快速判斷1SDK 初始化返回值失敗先查運行庫和權(quán)限2設(shè)備枚舉數(shù)量為 0 查網(wǎng)段、供電、防火墻3打開設(shè)備返回值失敗查序列號是否選錯、設(shè)備是否被占用4取流回調(diào)計數(shù)不進(jìn)幀查觸發(fā)模式和取流命令5丟幀計數(shù)和隊列上限上漲查回調(diào)耗時、磁盤、帶寬6保存文件完整性半截文件查臨時文件重命名和退出流程這張表建議貼在調(diào)試記錄里每次接新相機(jī)按順序走一遍。不要跳步也不要在枚舉沒通的時候去調(diào)曝光。血淚經(jīng)驗是越早把問題鎖在最小閉環(huán)里后面改業(yè)務(wù)代碼越輕松。6. 把 Demo 演進(jìn)成產(chǎn)線插件連續(xù)采集驗證與三個硬指標(biāo)Demo 跑通后最后一步是把它收成一個能被主程序加載的采集插件。我一般不再往main.cpp里堆邏輯而是把初始化、枚舉、打開、取流、停止封裝成CameraSource類對外只暴露Start(serial)、Stop()、PushFrame()三個動作。插件化之后主程序不關(guān)心 SDK 細(xì)節(jié)只關(guān)心幀有沒有進(jìn)來、丟沒丟、保存是否完整。驗證時看三個硬指標(biāo)連續(xù)采集十分鐘的丟幀率、幀時間戳間隔是否均勻、落盤文件是否能被下游完整讀取。丟幀率用dropped_除以總幀數(shù)時間戳間隔看最小值和最大值文件完整性隨機(jī)抽檢尾部字節(jié)。下面這張表是我常用的驗收記錄格式數(shù)值按項目定但三項都要有。指標(biāo)采集方式判斷標(biāo)準(zhǔn)異常時先看丟幀率連續(xù)采集 10 分鐘低于項目允許閾值回調(diào)耗時、隊列上限、磁盤時間戳間隔記錄每幀到達(dá)時間最大值不超過節(jié)拍容忍范圍觸發(fā)模式、網(wǎng)絡(luò)抖動、曝光過長落盤完整性隨機(jī)抽檢文件尾部文件大小和頭信息一致臨時文件重命名、磁盤空間我自己的習(xí)慣是每接一個新 SDK先跑枚舉再跑回調(diào)落盤最后才接業(yè)務(wù)算法三步不亂序。從那以后我每次換機(jī)器、換相機(jī)、換主程序都強(qiáng)制走一遍這張驗收表不憑“昨天還能跑”做判斷。源碼包在項目歸檔里按camera_sdk_cpp_demo目錄取用先把最小閉環(huán)跑通再按你的產(chǎn)線節(jié)拍改參數(shù)。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99久久婷婷国产综合精品草原| 大香蕉啪啪啪啪在线| 久久久婷婷| 亚洲精品91| 黄色小视频日本txt| 精品视频123区小说区| 91无摭挡| 亚洲色图欧美色图日韩色图| 亚洲欧美天堂在线| 精品午夜福利导航| 猛交交| 日韩精品影视| 操逼片中文| 亚洲天堂情色| 青草草免费网站av| 好看的久久不射无码影视影院| 热思思免费视频| 九九热最新| 91中文字幕在线观看| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 九九综合九九综合| sss视频华人在线| av网站国产主播在线| 丁香激情五月天| 97se亚洲综合自| 在线看免费无码AV天堂的| 男人天堂网手机版婷婷| 久久久免费一级黄片| 亚洲日韩狠狠撸视频| 人人操人人叉人人插人人| 大香蕉在线视频重口味毛片在线| 2017人人操,人人摸| 天天激色| 亚洲最大无码中文字幕网站| 久久系列| 999久久久久久久精| 啊啊啊操死我| 女一区二区| 精品视频一区二区| 99热导航| 亚欧国产无码精品在线| 少妇高潮一区二区三区在线| 大香蕉操久久| 黄片免费视频2019| 東南亚性呦成人伦理资源在线视频| 伊人女女资源在线观看| 久久久久久久| 亚洲激情 欧美色图| 亚洲人妻在线一区| 色九久| 狠狠久久四虎| 久久久久久国产手机AV| 亚洲男人天堂手机版| 性感女人网页在线观看视频| 干日本人少妇午夜寂寞影院| 欧美性爱一区二区三区| 精品国产网站| www.91色| 天天激情综合站| 天天综合站| av天堂影视中文在字幕在线中文 | 囯产精品强| 亚洲经典啪啪| 国产精品99精品视频网站| 岛国不卡超碰护士AV在线播放| 97人人模人人爽人人| 亚洲欧美另类激情小说| 色妇91| 99精品在线| 久久综合九色综合欧洲98| 天天日天天屌天天操| 国产精品爽爽va在线观看98| 一级免费精品| 一区二区视频你懂的| 五月丁香社区婷婷日韩欧美精品影院| 国产福利电影| 青青草原av| 大香蕉啪啪啪啪在线| 日韩无码专区| 日韩成人精品视频自拍| 亚洲男人综合| 国产精品高潮久久久无码| 亚洲高清在线se| 2011国产精品| 黑丝内射一区二区三区| 九月丁香综合网| A级在线视频| 中国和日本人色哪个不下载能放| 久久亚洲日韩国产欧| 久插综合| 国产suv精品一区二区四区999 | 亚洲激情AV| 国产一级内射高清视频| 三级色影综合网| 欧美大干日韩| 污污污8888| 淮穴色AV| 亚洲色天堂日韩中| 亚洲aV性爱| 人人摸.人人色| 精…码一二三区| 久久久国产护士丝袜美腿一| 色爱欲亚洲| 亚洲天堂另类小说男人| 六九九九| 欧美视频在线第3页| 最新日韩黄片| 美女操逼福利视频| 狠狠操狠狠插| 99热精品在线| 久久午夜伦| 精品人体无圣光凹凸| 国产精品精品系列在线观看| 精品99999| 超碰在线免费一区二区三区| 校园春色亚洲色图| 天久久久噜噜噜久久国产精品爽爽| 后入日本1234| 一摸二插三插| 91黄站| 大香蕉99999| 激情视频图片| 97美日韩视频| 91网站18禁| 欧美牲| 一区二区不卡视| 亚洲天堂一区| 人人操人人色人人摸| 啪啪视频免费在线观看| 国内毛片无遮挡国产| 操逼免费视频无码国产| 亚洲国产精品成人无码久久久| 久久直播国产| 日本在线视频导航| 狂操嫩妻视频一区二区三区| 自拍欧美| 色好看av| 国产人妻精品一区二区三区秋霞 | 久久中文字幕女同性恋一区| 国产精品人妻无码久久久互動交流| 97国产超碰| 超碰免费人妻人人| 国产精品宅男免费| 亚洲人妻一区二区三区| 日日干夜夜操视频h| 91艹| 青娱乐休闲视频在线观看| 亚州熟女乱伦| 91成人精品在线播放| 在线国产一区二区av| AV中文在线| 天天摸,夜夜摸| 爱爱动态120秒| 日韩精品人妻中文字幕久久久| 好爽免费视频,| 亚洲se91| 少妇xx精品| 人人操人人大香蕉| 日韩精品人妻系列无码天堂| 加勒比综合a∨| 大香蕉综合网| 黄色区免费观看中文字幕| 美日韩成人| 亚洲综合网图| 久久久性爱| 一本色道无码DVD中文字幕| 日韩av在线免费网站| 久操操| 欧美韩国你懂得在线 | 欧美猛交黑寡妇中文字幕| 91 亚欧| 无遮挡一级毛片视频免费的| 91色碰| 亚洲少妇自拍中文字幕懂色| 无码区蜜乳| www99热| 国产十八禁视频| 亚洲欧洲激情卡通另类文学四射小说网站 | 操少妞在线视频| 久久天堂| 色五月婷婷中文字幕| 97综合国产精品高潮久久| 神马久久久久久久久| 性久久久| 夫妻四区五区六区| 火箭成精品视频884必出精品| 久久精品国产99精品亚洲蜜...| 久久久久婷婷| 亚春色色| 国产黄色av大片网站| 日本 免费 一区二区三区 久久香蕉| 欧美色97| 亚洲欧美国产日本一区二区三区| 日韩无码人妻中字久久三区四区| 亚洲AV无码久久久国产精品| 亚洲限制级| 97超碰人人操人人操| 探花激情视频| com 首页 18岁 禁区 女优 免费 精选 同城| 热思思免费视频| 九九亚洲视频| 亚洲天天自拍| 人人考人人摸人人干| A一级色女| 成人麻豆av电影网站| 肉丝网站91| 亚洲天堂一区| 嗯嗯嗯啊啊啊操的我好爽| 亚州男人天堂| 国产欧美伊人| 伊人五月天婷婷| 久久久久9久久久久| 13小男生GAY自慰脱裤子| 精品国产乱码久久久久久影片| 精品超碰色| 婷婷丁香在线| 中文乱码字字幕在线第5页| 天天干天天干天天干| 欲香欲色综合天天伊人| 操碰97| 超碰色大香蕉| 国产乱弄免费在线视频。 | 亚洲欧洲自拍| 嗯嗯啊啊用力视频免费| 精品偷拍13p欧美dodk视频| 日韩 欧美 国产 麻豆| 欧亚乱色熟女一区二区| 一区超碰一区| 国产欧美日韩在线观看麻豆传媒公司| 欧美激情久操网| 欧美精品偷拍| 亚洲中文日韩精品| 一区二区三| 艾草av| 免费精品人妻一区二区三| 九九av| 静品嫩模一区二区| 97在线观看| 国产又大又粗又长视频在线| 丁香五月综合| 色牛aV| 成人麻豆av电影网站| 欲色啪| 天天爱天天韩国日本牛牛牛牛 | 欧美在线中M| 国产精品秘 福利姬在线观看| 色欧洲| 亚州日韩97| 999国产精品999| 99精品九九九九九九| 大香蕉伊人一区在线观看| 亚洲第一精品在线视频| 91操熟女| 欧洲与亚洲欧美精品中文字幕| 欧美日韩国产色图在线| 中文字幕一区二区韩| 97综合在线观看| 操逼逼一区视频| 亚州高清色综合| 国产成人自拍视频在线| 无码高清操逼| 熟女熟妇一区二区三区视频| 久久一区,青青青青草视频在线播放| 国产一级137片内射麻豆| 久久婷婷一区| 品亲网欧美品亲网| 日韩pv中文| 国产一区在线免费播放| 午夜精品久久一区二区| 日日嗷| 99热精品青草在线 | 看日韩操逼| 另类图片五月天| 国产乱弄免费在线视频。| 韩国一级婬片A片AAAAA| 国产AV色黄看到爽| 美女久久久久久久久久久| 99只有精品| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 99热精品在线观看| 舔舔啊| 天天看高清麻豆| 99精品热| 五月天色色网站| 另类小说综合网| 91亚洲人| 18精品一二区| 情色av电影| 国产剧情一区在线观看| 人人扣人人操| 精品国产一区二区三区香蕉欧美| 国产乱伦视频污| 91M一社| 九色 蝌蚪 熟女自 | 精品视频久久久久九九九九9999| 婷婷91| av强奸乱轮| 黄色无码高清黄色无码网站| 亚洲美女AV无码| 不卡二三区人妻少妇| 久久久久久人| 九九碰九九爱97超| 国产黄色剧情影片麻豆免费播放| 久久精品国产精品一区| 日本成a人v网站在线观看| 色综91| 97在线免费看视频| 男人的天堂网页| 天天综合中文字幕 91| 超碰天天去日穴| 超碰97极品9| 草B在线| 日日骚一区二区三区| 蜜桃传媒视频第一区入口在线看| 蜜桃AV天堂| 大香蕉综合在线| 久久曰曰| 天天操夜夜操| 久久久亚洲精品电影免费看| 欧亚乱色熟一区二区三四区| 97欧美精品综合| 大香蕉啪啪啪啪在线| 久久熟女久| 91强在线播放| 中文字幕欧美精品亚洲日韩蜜臀| 亚洲丝袜少妇在线| 狠狠操官网| 中文字幕一区二区三区高清| 国产1769在线| 日日狠狠久久偷偷色综合免费| 天天干,夜夜爽| 亚洲国产一区二区三区在线 | 久久久久久人妻一区精品色欧美| 国产熟女乱论| 无色无码| 伊人影院在线理论播放| 福利一级版子| 青青草色AV| 亚洲性综合11| а√天堂资源官网在线资源| 乱伦av麻豆| 九九热九九| 久久欧洲| 老熟妇91| 久久黄色性爱视频| 大香蕉亚洲中文| 超碰 av 女人天堂| 中文字幕视频二区| 吖在线不卡一区二区国产剧情| 国产欧美一级在线观看| 婷婷尹人大香蕉免费| 97色97好| 亚洲天堂男人天堂网| 色香网| 东京热一区二区中文字幕| 嗯啊抽插大香蕉网页| 国产精品老师| 亚洲的天堂网| 12一15性XXXX粉嫩国产| 啪一啪免费视频| 韩国女主播青草福利视频| 很狠操| 91在线免费精品视频| 欧美人人AAA| 视频在线观看一二三区| 少妇色欲综合网2| 亚川综合视频| 亚洲成人av色网| 人妻黑丝袜电影| 日韩肏逼视频| 91丨九色丨东北熟女| 欧美97日韩精品| 国产路线专区| 精品久久99| 日韩精品怡红院| 日韩少妇无码| www超碰| 97天天插| 久久亚洲AV成人精品无码| 91色鬼| 中文 人妻 制服| 久久精品国产96精品亚洲拳交| 亚洲综合有玛| 呦呦一区| 91视频观看网站| 精品少妇人妻一区二区三区| 久久成人国产| 色臀aV| 岛国激情视频软件| 歐美性天天| 男女啪啪网站免费视频| 国产精品久久9| 中欧人妻丝袜中文字幕| wwwss在线观看| 天天综合网亚洲综合网| 蜜臀操逼黄色视频操的好爽| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 精品国产www久久| 久久99精品国产| 一区二区三区在线美女| 激情亚洲天堂| 熟女乱伦A| 国外91| 国产亚洲日本精品在线| 啊啊啊啊啊啊啊网址在线观看| 婷婷干黄色| 老师充足的奶水小说| 日本成a人v网站在线观看| 青青网三级视频| 日韩欧美加勒比| 后入美女国产| 亚洲性爱免费电影| 色色色色色色色色综合| 牛牛aV| 欧美黑人168页欧美黑人167| 日韩美女操b| 中文字幕第23区| 日韩,欧美,中文在线| 日韩av色图综合| 欧美性爱91| 久久噜噜噜精品国产亚洲综合| 亚洲国产av中文字幕久久 | 久久9精品视频| 国产av激情无码久久天堂| 成人在线视频一区| 操逼操逼逼操操逼91 | 岛国色情视频在线观看| 黄色av播放免不| 丁香五月性爱| 国产午夜精品理论片一二三区区| 超碰97在线色男人??| 小情侣高清国产在线视频| 婷婷人妻激情| 91jk色拍| 狠狠操狠狠| 欧美激情久操网| 欧美极品色| 九九九九九九九精品视频| 日本精品五区| 国产和美国毛片| 99热这里| 3028国产精品| 加勒比综合| 中文字幕AV片| 偷拍欧美激情| 图片区小说区| 亚洲男人久久综合天堂| www久久精品| 免费看美国人人爽,人人操| 国产一区二区三区免费视频在性观看| 中文字幕一区二区三区四五区| 国产精品九9| 亚洲欧美在线观看2021| 97在线播放 | 欧美性色网| 日欧毛片久久| 亚洲另类久操网| 日韩激情啪啪| 亚洲国产欧美另类自拍| 精品人妻一区二区三区四区不卡在| 久久 亚洲 日韩 人妻| www.狠狠| 无码av永久免费专区网站| 亚洲性天堂| 日韩久久超碰色| 色色五月婷| 中文字幕一二区二三区人妻专区| 九九九九九九视频免费| 天天碰久久入| 欧美综合色综合| 亚洲图片欧美制度| 91 手机在线播放 绯色| 国产乱伦一二三区| 国产 无码 一区二区| 日本成人在线不卡一区二区三区| 欧美亚州综合网图片| 久久久久久久久久久久欧美日| 人人操人人大香蕉| 在线A日本| 操操逼视频| 国产精品剧情| 啊啊啊啊啊啊在线| 五月天婷婷社区| 精品中文一区二区| 操曰本熟女| 日本大香蕉| 欧美情色男人的天堂| 伊人五月天青青草婷婷| 中文字幕国产精品1区| 99热思思| 岛国精品视频在线观看| 丁香九月激情啪| 亚洲古典另类欧美在线| 欧美激情另类一区二区| 在线观看无码三级少妇| 91久久久久久久久18| 嗯嗯啊啊啊好爽| 日韩欧美女求操每天更新| 久久久久久无码人妻中文字幕| 国产一区二区三区,在线观看观看| 丝袜综合| 日本精品性生活久久久| 激情文学欧美| 伊人玖玖网| 久久99精品国产| 绑缚麻绳人妻寝取完整版| 欧美 综合| 青青草视频导航官网| 97超级欧美| 黄色网址久久精品欧美喷水| 国产13区| 久久亚码| 色婷婷淫色网| 九九九国产精品| 精品一区二区三区18| 久操国产在线| 欧美九九九| 加勒比综合| 欧美一级AAAAAAA| 国产日韩色综合| 黄片免费久久久久久久| av在线资源| 色妹子A V| 东北女人的毛片| 老熟女中文字幕高清| 碰人碰碰人人开房人肉| 久久精品无码一区二区三区| 欧美组图日韩亚洲中文字幕| 草莓精品视频在线免费观看| 激情久久久| 天天干少妇| 精品国产一区二区三区久久久蜜臀| 1二区9| 国产午夜福利合集| 欧美91在线| 国产极品美女高潮无套在线观看| 亚洲欧美经典一区二区| 啊…啊…操我用力操我| 99ri在线视频| 啊啊啊啊啊啊好湿好爽视频| 久久久成人免费av电影| 久久产精品一区二区三区电影| 操操吧亚洲乱伦视频| 97最新在线播放视频| 日韩精彩免费| 超碰97综合网| 国语对白露脸XXXXXX | 久草电影网| 中文字幕黄片在线| 99亚洲精品| 熟妇人妻一区二区三在线| 欧美一品道| 国产精品久久久久久亚洲色欲| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 亚洲欧美setu| 一本久道久久综合狠狠爱一密臀精| 在线综合 亚洲 欧美中文字幕| 9999久久久久| 97干综合网| 成人国产视频在线观看| 九九在线精品| 亚洲极品| 久久久久久日韩| 国产视频一区二区在线观看| 嗯~啊~轻一点 视频| 四虎国产精品永久地址入口| 超碰 97国产熟女| 亚洲欧美天| 欧美一级久久久丰满| 成年女人一区| 96超碰网| 亚洲第一无码播放立川理惠| 五月天久久婷婷亚洲| 欧美黑人91| 亚洲精品国产熟女| 久久精品国产精品亚洲艾通辽熟妇 | 超碰九九| 亚洲女毛多水多21P| 狠狠夜色午夜久久综合在线| 一级性爱视频免费在线| 欧美精品xxxwww| 国产精品午夜成人福利| 欧美综合自拍| 97超碰jingpin| 91美女在线| 操逼日韩无码 | 欧亚性爱视频免费看| 欧美日韩国产传媒在线精品| 精品欧美乱码久| 成人在线视频网| 一卡二卡在线播放| 国产精品视频精品一二| 超碰这里有精品| 免费久久一级毛片大黄| 青青色综合| 日本媚薬中文字幕在线| 九九九九久久久| 91综合网站| 九色97| 亚洲国产精品久久AV| oumeisetu综合| 亚洲男人天堂av| 九九色逼| 加勒比伊人| 青青青国产| 夜夜操青青草| 老色鬼成人精品视频下载大在线观看| 久久香蕉国产线看观看猫咪av| 亚洲影视高清第一页| 久久成人午夜精品影院 | 久久精品店| 欧美淫乱视频| 天天操天天射青青草| 一本色道久久天天射天天干| 人妻社区男人天堂| 91在线精品| 中文字幕av片| 鲁鲁色综合网| dy888午夜老子影视达达兔| 欧美精品丝袜久久久中文字幕| 好吊色综合| 吻戏激情性巴克| A级在线视频| 欧洲精品久久| 丁香五月电影| 啊啊啊久久| 屌妞视频久久久久久久| 欧美自拍偷拍免费观看| 美女91| 天天干天天中出av| 黄片无码在线制服| AV中亚| 老司机久久| 狠狠色婷婷7777久| 性91| 熟妇女人妻呻吟久久AV| 国产欧美岛国精品一区| 日本媚薬中文字幕在线| 久久亚洲不卡一区二区三区| 熟女视频久久| 亚洲资源站| 国产乱码精品久久久久久| 国产成人精品日本视频| 亚洲欧美高清无码| 国产三级中文字幕粉嫩| 色女网日韩| 久久久久国产无av| 伊人影院日本| 熟女久久| 九九国产热| 六月丁香啪啪| 国产精品视频自拍在线| 人人妻人人澡人人爽久久av| 狠操91,com| 特级大荫道BBwBBwBBW| 思思热免费视频观看| 亚洲一区日韩精品| 在线中文字幕视频| 校园春色亚洲无码| 嗯……啊…嗯嗯…啊…好舒服| 乱伦日本色图AⅤ| 91综合网站| 久久久性少妇| 日本不卡三级网在线播放| 在线国产探花| 上海一级黄片| 久久黄片国产一区二区| 久久久久少妇| 亚洲 中文 女同| 首页亚洲国产高跟丝袜诱惑视频 | 台湾佬中文娱乐网久久久久久久久久com| 午夜情侣自拍网站| 色五月婷婷麻豆在| 99操碰| 伊人网青青| 长久操视频| 一区中文字幕二区日韩| 久久久久久夜夜夜夜夜| h在线看免费版在线看| 日本日皮视频逼| www.99中文字幕| 99热这里只有精品18| 婷婷丁香人妻| 精品人妻一区二区蜜桃视频 | 欧美日日操| 日韩 国产 欧美自拍| 大香蕉一人| 亚洲色综网| 欧美综合自拍亚洲综合图| 色网1| 99国产精品人妻人伦| 五月丁香六月激情| 色婷婷影院| 国产精点久久久成人| 无码高清专| 日韩人妻一区二区| 人妻色偷色噜| A级片日韩欧美国产欧美视频精选观看 | 国产亚洲精品农村妇女| 视频黄色国产一级| av无码av无码专区| av天堂5| 五月丁香啪啪网| 久操网视频| AV网站高清无码在线观看| 国产精品一二三在线看| 日韩av不卡在线观看| 天天看,天天做| 巨爆乳肉感一区二区三区竹菊影视| 精品性爱一区二区| 精品久久99| 麻豆久久视频在线地址| 国产性刺激| 狠色婷婷久久一区二区三区_| 亚洲国成人情色好看电影| laoshunv91| 97看操| www.99热在线只有精品| 欧美影音在线| 伊香蕉综合久久久久久久噜噜噜| 女性91网站| 91成人高清在线观看| 日韩乱伦影音先锋| 这里只有精品视频| 狼人综合婷婷激情四射 | 国产精品国产精品国产| 久久久亚洲Av| 日韩精品永久在线观看| 26uuu久久| 欧美人人曰人人操人人射射| 殴美大黄片| 久久久久久久一级黄色打同平台| 欧美在线伊人色| 人妻天堂综合网| 看看小穴| 日韩精品系列| 国产一国产一级毛片古装| 男人的天堂网页| 欧美中文字幕日韩在线| 男男H黄动漫啪啪无遮挡网站| 1769精品一区二区三区| 青青草自拍视频在线播放| 亚洲欧美色综合| AV在线播放网址| 天堂射| 97国产精品一区二区传媒公司| 一区二区精品日韩欧美在线观看| 精品人妻美妇91job| 日本天堂网| 97在线亚洲| 精品亚洲一区在线观看| 午夜丁香| 精品人妻一区二区三区视频| 亚洲人妻在线精品| 一级A片女人高潮叫床| 少妇六月天| 综合少妇网| 亚洲第2页| 一牛影视久久久一区二区三区| 蜜桃狠狠色伊人亚洲综合 | 亚洲成?V人片在线观看福利| 亚洲1区2区三区高清中文字幕| 91深夜夜| 97久久资源| 99日视频在线免费| TS人妖另类精品视频系列 | 夜夜爽77777| 亚洲不卡不卡中文字幕不卡 | 久超超碰| 91AV入口| 大鸡巴久久久| 人人爽夜夜玩视频| 日韩中文字幕国产| 欧美日韩性爱精品| 激情露脸爱| 天天综合97| 亚洲AV操| 亚洲少妇激情视频| 亚洲国产成人7777| 欧洲Au麻豆| 91综合网站| 999久久久精品国产| 国产精品69久久久久孕妇欧美| 另类小说综合网| 一牛影视久久久一区二区三区| 香蕉99秘 一区精品蜜桃臀| 熟妇操花| 97超碰国产亚洲精品| 国内毛片国产专区二| 欧美78| 国产欧美成人第一页在线观看| 国产天天骚| 极品综合| 欧美 日韩 婷婷 五月| 国产精品国产自产高清AV| 亚洲蜜臀懂色| 影音先锋每日最新资源在线观看| 吉田爱美AV在线| 国产无码久久高清| 亚洲 欧美 中文 日韩超碰| 嗯嗯嗯啊啊啊操的我好爽| 色欧美色交综合| 自拍偷拍2025在线观看| 67914在线兔费成人视频| 日韩乱插| 男人天堂2030| 亚洲激情av| 91爱剪切久久| 丰满欧美少妇| 翔田千里无码一区| 夜夜操老骚逼视频网站| 少妇熟女一区二区三区| 五月丁香综合啪啪| 99国产女人| 国产激情综合| 97在线免费观看| 中文字幕人妻丝袜| 欧美日韩在线视频网站| 国产欧美伊人| 91丨九色丨国产丨人妻在线| 日本九九久久99播| 久草视频观看视频在线| 天天综合站| 国产馆极品诱惑| 欧美日韩另类在线播放| 国产91丝袜 在线播放| 男人亚洲91首页在线| 国产成人午夜视频网址| 亚洲性综合11| 欧美五区| 人人考人人摸人人干| JIZZJIZZ亚洲女人被躁| 欧美日韩天堂| 综合日本女人伊人| 国产精品黄色三级av| 熟妇视频一区二区三区在线| 骚逼一区二区| 精品久久久久久亚洲| 99久久99久久免费精品蜜臀| 爱妻综合网| 深夜激情无码| 91亚洲电影| 超碰免费欧美7| 亚洲欧洲小说图片视频| 日韩激情啪啪| av毛片aaaaa免费看| 人伦四五区| 天天做天天爱天天爽AV| 天堂岛av| xxx0国产在线播放| 日本成人免费一区二区三区| 91丝袜人妻| 麻豆AV短剧| 狠狠色丁香| 亚洲欧美中文一区二区三| 亚洲欧美电影| 女人18精品一区二区三区| 97视频7| 国产一区二区三区中文字幕| 亚洲一区二区中文字幕| 伊人网免费视频| 国产人妻精品一区二区三区秋霞 | 91久久婷婷| 欧美性爱一内片一区二区三区| 亚洲夜夜欢无码一区二区| 岛国片在线播放| 色网亚洲人| 制服丝袜第二页| 97超久碰| 日韩熟女精品无码专区一区二区| 日韩操人| 丁香五月综合| 国产精品自在线发布| 国产精品视频麻豆入口| 色综合av综合久久| 天天综合亚洲综合| 五十路成人在线视频二区三区| 亚洲 另类 丝袜 自拍 动漫| 青青操97| 99热综合在线| 五月婷丁香| 日本福利二区视频| 另类 日韩 熟女| 搞中出久久| 久久国产逼| 欧美精品精品一区二区| 国产精品网址| 91成人无码| 欧美se综合| 欧美激情一| 本道在线| 人妻熟女一区二区在线视频| 人人妻天天做天天爽| 日本最新1区2区3区| 精品9区| 九九九草| 伊人在线大香蕉二。| 亚洲91射| 日日AAvv| 中文字幕在线免费观看 | 999国产精品999| 大香蕉一线视频| 我爱大香蕉| 婷婷五月天丁香花| 一本一道人妻久久一区二区三区| 夜夜操狠狠操| 免費人妻夜夜爽天天爽爽一区| 日韩欧亚太美不卡| 欧美国产一区二区三区麻豆传媒 | 激情丁香五月婷婷| 色婷婷五月综合| 3571色综合一区二区二区| 91丝袜美女国产| 欧美少妇大量自拍视频在线观看| 操九九九九九九| 欧美性,色九九| 91路www| 人妻少妇精品久久久久久| 欧美色图20P| 亚洲一区日韩精品中文字幕| 91色人妻| 91|九色|国产熟女| 97天天爽| 日韩美女高潮喷水视频| 91美女高潮| 骚女天天综合网| 小说区 图片区色 综合区| 国产福利电影| 亚乱色| 成人 日韩欧美一区| 天天淫人人妻日日色| 中文字幕高清20页视频| 东京热亚洲一区二区| 婷婷伊人一区| 欧美人妻另类在线| 夜色91| 国产美女口爆吞精视频| 激情啪啪拍91| 一区二区首页| 欧美91精彩| 国产精品乱码久久久久| 国产精品分类在线观看| 欧美网站免费| 91爱综合| 麻豆黄站| 欧美日韩国产成人高清| 一区二区三区麻豆| 亚洲精品一二牛牛| 九九黄色网| 1204av韩国| 熟女精品日韩一区二区三区 | 久久亚洲天堂| 涩综合导航| 99热精品在线| 操淫穴亚洲五月丁香 | 亚洲国产中文字幕| 91丝袜在线观看| 亚洲第一在线视频| 自拍视频大全亚洲专媒视频/一区二区三区 | 亚洲欧洲综合av在线| 韩国一级婬片A片AAAAA| 久久亚洲天天做| 97超碰欧美精品| 国产精品无码久久久久2028| 亚洲av夫妻操穴网| 精品无人区麻豆乱码1区2区图片| 韩日色费| 婷婷大香蕉| 色呦色呦色精品| 男女啪啪啪18禁网站| 五月丁香| 91美女視頻| 国产Aα| 欧美一区二区在线资源| 91综合网站| 日本成人A片网站| 精品久久在线区一区| 大香蕉日韩| 视频分类 国内精品| 久久综合av| AAAA级日本片免费视频| www.色五月| 天天干1区2区在线| 日韩操p| 精品一区二区三区最新| 亚洲综合20p| 日本操逼视频导航| 欧美亚洲成人在线一区二区三区| 中文字幕久久婷婷丁香五月天| 91久久婷婷| 插入粉嫩少妇视频| 亚洲国产ⅴ高清在线观看| 亚洲欧美另类少妇精品| 91天天| 蜜桃精品一区二区三区ww| 一区二区三区不卡视频| 青青草中文-久久青草精品一区二区三 | 青椒国产97在线熟女| 午夜福利在线视频1000| 亚洲成a人v欧美综合天堂下载| 五月天色图影视| 国产一二三福利视频网| 欧美做爰无码A片视频| 欧美亚洲中文字幕| 大香蕉乱伦视频网| 欧美第五页| 国产版a级片直播在线| 亚洲色棕合| AV免费在线播放一区| 色综九九九一区| 国内毛片无码一级毛片| 床戏久久久av一区二区麻豆| 国产日韩精品无码去免费专区国产| 日本亚洲vr欧美不卡高清专区| 国产自制av蜜乳| 天天摸夜夜摸| 男人天堂黄片| 亚熟在线| 日韩精品一区二区高清| 精吧天堂| 国产精品亚洲免费| 超碰97COm中文| 欧美亚洲玖玖玖| 国产呦精品系列在线观看| 色色色99| 91丨人妻丨国产丨丝袜| 日韩成人午夜精品久久高潮| 国产精品网址| 免费草草草草草视频| 一级免费啪啪片| 激情五月天中文字幕色| 欧美久久婷婷| 日韩乱伦影音先锋| 东北女人性交| 日韩乱码Av| 91丨九色丨国产丨人妻在线 | 激情终合网| 欧美日韩一区二区三区四区蜜桃| 亚洲男人天堂网站| 嗯啊不要在线| 欧美亚洲素人制服精品| 四虎免费在线播放| 国产精品一区二区黄片| 成人精品无码| 国产性刺激| 97欧美性爱| AV色五月天| 久久久久久久亚洲Av无码| 日逼97| 欧美一二三区四五区| 欧美性爱日韩性爱| 超碰偷拍| 成人色女网| 日韩另类| 亚洲无码成人精品| 国产激情在线| 国产精品乱人伊人网| 睡产熟女乱伦| www.av家庭乱伦| 免看60秒涩涩视频| 在线 亚洲 网爆 自拍| 国产女人高潮嗷嗷嗷叫小说| 精品人妻一区二区三区鲁大师| 日韩精品操少妇| 五月天综合在线| 温婉少妇玩3p| 欧美性爱日韩高清| 91N综合网| 国产情色在线| 少妇毛片久久| 亚洲综合婷婷| 免费伦费视频在线观看| 久夜视频| 骚鸭AV| 欧美综合在线91| 97青青操视频| www狠狠| 中文字幕国产| 九九九久久久W精品| 少妇天堂网络| 水野优香在线观看| 91久久精品中文字幕| 精品免费视频国产一区| 亚洲性高潮| 亚洲色图第四色| 亚洲蜜臀懂色| 大香蕉伊人网WWWn0n| 国产99 中文字幕日韩小视频| 久久亚洲AV无码专区首页| 超碰在线欧美性爱激情| 啊啊啊啊操死我| 日本三级精品| 清纯唯美第一页| 久久人体一区二区| 亚洲欧美在线综合| 色欧美天天| 超碰碰碰碰| 日韩精品中文字幕一 | 中文字幕日产av人| 69人妻精品一区二区绯色| 欧美一级黄色18片免费看| av强奸乱轮| 日韩欧洲操屄视频| 亚洲性爱成人| 草草电影院| 日日爱99| 青娱乐休闲视频在线观看| 激情一区二区| 上床啊啊啊| 欧美亚洲首页| 国际精品久久久| 欧美亚洲今日在线| 99中文字幕| 色噜噜国产精品视频一区二区| 酒色综合网| 久久AV无码AV| 99re99在线视频| 欧美色网络| 日韩亚洲欧美中文字幕| 欧美在线|亚洲| 安微少妇操BBB| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 亚洲国产成人精品无码专区| 国产成年女人免费视频播放a| 欧美国产精品| 在线v中文字幕一区二区三区| 国产午夜激片Av毛片不卡| 国产视频一区二区免费| 97色碰| 中文字幕人妻丝袜| 亚洲 欧美 另类 综合 偷拍| 大香蕉伊人一区在线观看| 日韩AV色图| 国产成人精品午夜福利| 国产美女91视频| Av色五月| 精品九九九九九九九九九| 日韩视频小说在线观看| 俺去啦自拍| 九九九九九精品视频| 欧美少妇人妻| 亚洲国产精品9999在线观看| 夜间福利片1000无码| 亚洲精品人妻吞精av| 操狠狠| 日韩欧美丝袜诱惑| 新视频sss国产| 91欧美网| 天天操天天射天天日| 久久精品国产72国产精品福利| 午夜人妻精品综合在线| 玖玖综合色| 综合性视频99| 欧美一级在线观看成人| 91亚洲色人| 日韩性爱视频免费在线 | 草草影院日本第一页| 日本东京热加勒比久久| 狠狠干综合| 精品一区二区三区四区外站|