日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

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

工業(yè)相機(jī)SDK C++ Demo:枚舉取流、回調(diào)落盤與插件集成 簡介面向機(jī)器視覺工程師的這份C示例工程圍繞海康工業(yè)相機(jī)SDK的API調(diào)用展開重點(diǎn)解決相機(jī)參數(shù)配置、圖像采集與實(shí)時(shí)顯示、設(shè)備枚舉連接及異常反饋等開發(fā)入門問題適合具備C基礎(chǔ)、希望用Qt搭建工業(yè)相機(jī)上位機(jī)的開發(fā)者參考。壓縮包共239個(gè)文件約11.02MB主要由h/hh頭文件、cpp源文件、lib靜態(tài)庫、vcxproj與sln工程文件構(gòu)成并包含ui/qrc界面資源、pro工程配置、def導(dǎo)出定義及exe示例程序覆蓋從工程組織到編譯運(yùn)行的完整結(jié)構(gòu)。已有約1300人學(xué)習(xí)。其價(jià)值在于提供可對照的完整Qt工程與SDK調(diào)用實(shí)例讀者可據(jù)此理解觸發(fā)模式、分辨率、幀率、曝光時(shí)間等參數(shù)設(shè)置以及圖像緩存管理和錯(cuò)誤捕獲思路對多相機(jī)系統(tǒng)的自動發(fā)現(xiàn)與配置也有參考意義。在此基礎(chǔ)上讀者可進(jìn)一步擴(kuò)展圖像處理、特征檢測等功能減少從零搭建環(huán)境的成本并在二次開發(fā)時(shí)更快定位接口調(diào)用與工程配置問題。1. 工業(yè)相機(jī) SDK 的 C Demo 源碼包先別急著編譯先看它替你省了哪幾步工業(yè)相機(jī) SDK 的 C Demo 源碼包最容易被當(dāng)成“編譯一下就能出圖”的樣例。實(shí)際在制造現(xiàn)場的軟件/插件式 C 集成里它更像一張接線圖設(shè)備枚舉、打開句柄、配置曝光增益、注冊回調(diào)、落盤取圖每一步都對應(yīng)產(chǎn)線調(diào)試中的一個(gè)卡點(diǎn)。你拿到這份源碼包真正值錢的地方不是幾行調(diào)用而是它把這些步驟按最小閉環(huán)串了起來讓你先跑通一條鏈路再替換成自己的業(yè)務(wù)插件。這份資源適合三類人剛接觸工業(yè)相機(jī) SDK、需要從 C 側(cè)把相機(jī)接進(jìn)制造軟件的人手上已有 SDK 頭文件和動態(tài)庫、但不想從零寫初始化流程的人以及需要把采集功能做成獨(dú)立模塊或插件的熟手。先跑枚舉再跑取流最后再談參數(shù)和落盤順序別亂。2. 拆開 Demo 工程從設(shè)備枚舉到取流回調(diào)的最小閉環(huán)拿到源碼包后我一般不會先改業(yè)務(wù)代碼而是先確認(rèn)工程依賴、運(yùn)行目錄和 SDK 調(diào)用順序。工業(yè)相機(jī) Demo 的翻車點(diǎn)往往不在算法而在“編譯過了、運(yùn)行時(shí)找不到庫”“枚舉不到設(shè)備”“回調(diào)一進(jìn)來就卡住”這些工程細(xì)節(jié)。第 2 章先把最小閉環(huán)拆開依賴怎么擺、設(shè)備怎么枚舉、句柄怎么打開、回調(diào)怎么注冊。制造現(xiàn)場的軟件/插件 c 集成尤其吃這一套因?yàn)樽罱K交付的不是一個(gè)控制臺程序而是一個(gè)能被主程序加載、能反復(fù)啟停的采集模塊。2.1 工程目錄與依賴關(guān)系頭文件、動態(tài)庫、運(yùn)行目錄怎么擺Demo 源碼包里的 C 工程通常圍繞三類東西轉(zhuǎn)SDK 頭文件、鏈接用的庫文件、運(yùn)行時(shí)動態(tài)庫。頭文件決定你能不能編譯庫文件決定鏈接能不能過運(yùn)行時(shí)動態(tài)庫決定程序啟動時(shí)會不會直接退出。很多新手把這三類文件混在一個(gè)目錄里編譯命令寫得很長換一臺機(jī)器就重新翻車。我習(xí)慣在工程里固定一個(gè)third_party/vendor_sdk目錄下面再分include、lib、binCMake 只認(rèn)這個(gè)根路徑換 SDK 時(shí)改一個(gè)變量就行。下面這段 CMake 腳本是 Demo 工程里最常見的骨架作用是把 SDK 根目錄、頭文件目錄、鏈接目錄和運(yùn)行時(shí)庫復(fù)制動作固定下來。代碼里的vendor_camera是示意庫名實(shí)際換成你手上 SDK 的庫名VendorCam_*這類接口名也是通用寫法落到項(xiàng)目里按 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根目錄頭文件、庫、運(yùn)行庫都從這里取 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下把運(yùn)行庫復(fù)制到exe旁邊避免啟動時(shí)報(bào)找不到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運(yùn)行庫到輸出目錄 ) else() # Linux下先給構(gòu)建目錄一個(gè)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 或命令行里覆蓋不要把絕對路徑寫死在源碼里。目錄/文件作用常見錯(cuò)誤third_party/vendor_sdk/includeSDK 頭文件頭文件層級多一層include 路徑寫錯(cuò)third_party/vendor_sdk/lib鏈接庫只放了運(yùn)行庫沒有導(dǎo)入庫third_party/vendor_sdk/bin運(yùn)行時(shí)動態(tài)庫編譯通過啟動時(shí)報(bào)找不到庫src/main.cpp初始化、枚舉、啟動采集把業(yè)務(wù)邏輯和 SDK 調(diào)用混在一起src/frame_sink.cpp回調(diào)后的隊(duì)列與落盤在回調(diào)里直接寫文件導(dǎo)致丟幀依賴擺好之后先不要急著寫取流。把工程編譯出來運(yùn)行一個(gè)只做初始化和釋放的空程序確認(rèn)動態(tài)庫能加載、SDK 能初始化。這個(gè)動作看起來慢但能省掉后面一半的排查時(shí)間。我見過太多人一上來就調(diào)取流最后發(fā)現(xiàn)是運(yùn)行目錄少了動態(tài)庫日志里只有一句“初始化失敗”白查半天。2.2 初始化與設(shè)備枚舉為什么先跑通枚舉再碰取流設(shè)備枚舉是整條鏈路里最值得先跑通的一步。枚舉成功說明 SDK 初始化、網(wǎng)絡(luò)發(fā)現(xiàn)、權(quán)限、運(yùn)行庫加載這幾件事至少通了枚舉失敗則說明問題還在入口沒必要去調(diào)曝光和回調(diào)。工業(yè)相機(jī)常見的發(fā)現(xiàn)方式有廣播發(fā)現(xiàn)、固定 IP 直連、串口或 USB 枚舉不同 SDK 的接口名不一樣但邏輯差不多初始化 SDK拿設(shè)備列表打印序列號、型號、IP 或接口類型最后釋放資源。下面這段 C 代碼用通用接口名示意枚舉流程。實(shí)際項(xiàng)目里把VendorCam_Init、VendorCam_EnumDevices替換成 SDK 頭文件里的同義函數(shù)即可。代碼重點(diǎn)不在 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初始化失敗先查運(yùn)行庫和權(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è)備枚舉失敗錯(cuò)誤碼 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)的返回值必須檢查錯(cuò)誤碼要打出來不要只打印“失敗”兩個(gè)字。dev.serial是后面打開設(shè)備的穩(wěn)定標(biāo)識比 IP 更可靠因?yàn)?IP 可能被改序列號一般不變。VendorCam_Release()放在每個(gè)失敗分支和正常分支里避免 SDK 內(nèi)部資源沒釋放第二次運(yùn)行枚舉不到設(shè)備。枚舉跑通后再確認(rèn)一件事程序運(yùn)行時(shí)的工作目錄在哪里。Windows 下雙擊 exe 和從命令行啟動工作目錄可能不同Linux 下從 systemd 或主程序加載插件工作目錄也可能不是你以為的目錄。Demo 里如果有配置文件、日志目錄、保存目錄盡量用可執(zhí)行文件路徑或環(huán)境變量推導(dǎo)不要寫相對路徑就完事。2.3 打開設(shè)備與注冊回調(diào)取流鏈路的最小參數(shù)集枚舉到設(shè)備后下一步是打開句柄、設(shè)置采集模式、注冊幀回調(diào)、啟動取流。這里最容易犯的錯(cuò)是“參數(shù)設(shè)太多”。第一次跑通取流只需要最小參數(shù)集觸發(fā)模式設(shè)為連續(xù)采集或關(guān)閉觸發(fā)、曝光時(shí)間給一個(gè)中間值、增益先歸零、像素格式用 Mono8 或 BayerRG8、回調(diào)里只做深拷貝。等圖像能穩(wěn)定出來再去調(diào) ROI、伽馬、白平衡這些參數(shù)。下面這段代碼把打開設(shè)備、設(shè)置參數(shù)、注冊回調(diào)、啟動取流串起來。Grabber類只是示意實(shí)際工程里可以拆成CameraSession和FrameSink兩個(gè)類?;卣{(diào)函數(shù)里不要做耗時(shí)操作先入隊(duì)后面用工作線程落盤。#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)里只做拷貝或入隊(duì)不在這里寫文件 self-Enqueue(frame); } void Enqueue(FrameInfo* frame) { // 省略深拷貝到有界隊(duì)列具體實(shí)現(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ù)有四個(gè)TriggerMode0表示關(guān)閉觸發(fā)或連續(xù)采集具體枚舉值看 SDK 頭文件AcquisitionMode2通常表示連續(xù)采集ExposureTime單位多為微秒8000 微秒是 8 毫秒適合室內(nèi)中等亮度Gain單位多為 dB先歸零避免噪聲被放大。VendorCam_RegisterFrameCallback的第三個(gè)參數(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ā)糊”很多時(shí)候不是相機(jī)壞了而是曝光、增益、像素格式和 ROI 沒配對。第 3 章把參數(shù)配置拆成兩塊曝光增益的聯(lián)動策略以及像素格式與 ROI 的選擇。這里的思路是先讓圖像亮度落在可用區(qū)間再讓數(shù)據(jù)格式匹配后續(xù)算法或插件。3.1 曝光時(shí)間與增益的聯(lián)動先鎖曝光再調(diào)增益曝光時(shí)間和增益都會影響亮度但兩者的代價(jià)不一樣。曝光時(shí)間拉長進(jìn)光量增加圖像亮度上來但運(yùn)動物體容易拖影增益放大的是電信號亮度也能上來但噪聲會跟著放大暗部尤其明顯。我一般先把增益歸零調(diào)曝光到目標(biāo)亮度再在曝光已經(jīng)接近運(yùn)動拖影上限時(shí)才少量加增益。這個(gè)順序在制造現(xiàn)場的軟件/插件 c 集成里很重要因?yàn)椴寮竺嫱拥氖菣z測算法噪聲放大比亮度不足更難處理。下面這張表是 Demo 調(diào)參時(shí)常用的起點(diǎn)不是萬能值。實(shí)際項(xiàng)目里按光源、鏡頭光圈、被拍物反光程度再改。參數(shù)常見單位起步建議調(diào)整方向注意點(diǎn)曝光時(shí)間微秒500010000暗了先加曝光運(yùn)動場景注意拖影增益dB0曝光到上限再加增益越高噪聲越明顯觸發(fā)模式枚舉連續(xù)采集產(chǎn)線節(jié)拍明確后改硬觸發(fā)觸發(fā)源不配對會沒圖像素格式枚舉Mono8 或 BayerRG8按算法輸入選Bayer 要轉(zhuǎn) RGBROI像素先全幅確認(rèn)視野后再裁偏移和寬度要對齊參數(shù)設(shè)置代碼不要散落在業(yè)務(wù)邏輯里我習(xí)慣收成一個(gè)CameraParams結(jié)構(gòu)體統(tǒng)一校驗(yàn)、統(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; }這段代碼的邏輯是先把采集停下來再逐項(xiàng)設(shè)置最后重新啟動。ExposureTime和Gain用浮點(diǎn)接口因?yàn)楹芏?SDK 支持小數(shù)PixelFormat用字符串枚舉方便在配置文件里改OffsetX/OffsetY/Width/Height用整數(shù)接口單位是像素。每次設(shè)置都檢查返回值失敗就直接返回不要繼續(xù)設(shè)后面的參數(shù)否則日志里會出現(xiàn)“最后一個(gè)參數(shù)失敗”實(shí)際根因在第一個(gè)。停流再啟流會帶來短暫斷流產(chǎn)線集成時(shí)要把這段時(shí)間算進(jìn)節(jié)拍或者在初始化階段一次設(shè)好運(yùn)行中不改。曝光調(diào)好后再看直方圖或灰度均值。Demo 里如果沒有圖像分析工具可以先把圖存成 PGM 或 BMP用常見看圖工具看亮度分布。不要只憑屏幕上的顯示判斷顯示端可能做了自動拉伸。制造現(xiàn)場的光源如果可調(diào)優(yōu)先調(diào)光源再動曝光和增益圖像質(zhì)量會更干凈。3.2 像素格式與 ROIMono8、BayerRG8、RGB8 怎么選像素格式選錯(cuò)后面算法全白做。Mono8 是單通道 8 位灰度數(shù)據(jù)量小、處理簡單適合尺寸測量、定位、條碼識別這類不依賴顏色的場景。BayerRG8 是彩色相機(jī)常見的原始格式每個(gè)像素只有一個(gè)顏色分量需要做去馬賽克才變成 RGB如果直接把 Bayer 數(shù)據(jù)當(dāng)灰度用圖像會有網(wǎng)格感。RGB8 是三通道 8 位數(shù)據(jù)量大但算法端不用再做顏色轉(zhuǎn)換。選型時(shí)先看算法輸入再看帶寬不要為了“彩色好看”把產(chǎn)線帶寬吃滿。ROI 也不是越小越好。ROI 縮小能提高幀率、減少數(shù)據(jù)量但偏移和寬高要滿足相機(jī)的最小步進(jìn)和對齊要求。部分相機(jī)的 ROI 寬度要求是 8 的倍數(shù)偏移也有步進(jìn)設(shè)成奇數(shù)可能報(bào)參數(shù)錯(cuò)誤。Demo 里最好在應(yīng)用參數(shù)前做一次校驗(yàn)寬高大于 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; }這段校驗(yàn)函數(shù)的參數(shù)含義sensor_w/sensor_h是相機(jī)傳感器全幅寬高step是 SDK 要求的對齊步進(jìn)常見是 2、4、8 或 16具體看手冊。先查正負(fù)和邊界再查對齊順序不要反。roi_x roi_w不能超過傳感器寬度否則部分 SDK 會直接返回參數(shù)錯(cuò)誤部分 SDK 會靜默裁切后者更麻煩。Demo 里把校驗(yàn)放在ApplyParams之前參數(shù)錯(cuò)了在本地就攔住不要等下發(fā)到相機(jī)才報(bào)錯(cuò)。像素格式和 ROI 都確認(rèn)后再檢查幀數(shù)據(jù)里的stride或padding。有些相機(jī)每行末尾會補(bǔ)齊字節(jié)幀寬乘以像素字節(jié)數(shù)不一定等于行跨度。保存圖像時(shí)如果按width * height * channels直接寫可能出現(xiàn)圖像錯(cuò)位。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)運(yùn)行在 SDK 的采集線程里回調(diào)里做耗時(shí)操作等于讓相機(jī)等你。第 4 章把回調(diào)改成“只入隊(duì)”用獨(dú)立工作線程做保存再補(bǔ)上文件命名和半截文件處理。這個(gè)模型不復(fù)雜但能讓 Demo 從“能看”變成“能連續(xù)采集”。4.1 回調(diào)里只做拷貝隊(duì)列 工作線程的落盤模型回調(diào)里最安全的動作是深拷貝一幀到有界隊(duì)列然后立刻返回。隊(duì)列要有上限滿了就丟幀并計(jì)數(shù)不要無限增長。無限隊(duì)列在短時(shí)間卡頓時(shí)看起來沒事時(shí)間一長內(nèi)存吃滿程序直接崩日志里還看不出原因。工作線程從隊(duì)列取幀、保存、釋放采集線程和保存線程通過互斥量和條件變量解耦。下面這段代碼是簡化版重點(diǎn)看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是隊(duì)列上限按幀大小和內(nèi)存預(yù)算調(diào)1080p 灰度幀一幀約 1.3MB8 幀不算大running_控制工作線程退出cv_.wait的條件是“停止或隊(duì)列非空”避免退出時(shí)卡死Push里隊(duì)列滿直接丟幀并累加dropped_不要阻塞采集線程。Frame里的data是深拷貝后的像素?cái)?shù)據(jù)回調(diào)里構(gòu)造Frame時(shí)要把stride處理掉按有效像素逐行拷貝避免把行尾補(bǔ)齊字節(jié)也存進(jìn)去。Save在工作線程里執(zhí)行這里只聲明具體實(shí)現(xiàn)看下一節(jié)?;卣{(diào)對接時(shí)OnFrame里不要直接構(gòu)造大對象再拷貝兩次可以復(fù)用緩沖池。常見做法是維護(hù)一個(gè)固定大小的Frame池回調(diào)取一個(gè)空閑幀填數(shù)據(jù)Push到隊(duì)列工作線程保存完再歸還。這樣能減少頻繁分配釋放。Demo 階段可以先不做池先把隊(duì)列模型跑通再按幀率和內(nèi)存壓力決定要不要加。4.2 保存圖像與命名避免覆蓋和半截文件保存圖像有兩個(gè)細(xì)節(jié)最容易出問題文件名重復(fù)導(dǎo)致覆蓋程序中途退出留下半截文件。文件名我一般用“序列號 微秒時(shí)間戳 格式后綴”序列號區(qū)分相機(jī)時(shí)間戳區(qū)分幀。半截文件用“先寫臨時(shí)文件寫完再重命名”的方式處理重命名在同一文件系統(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示意實(shí)際按像素格式寫文件頭 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); } }這段代碼的邏輯先確保目錄存在再用微秒時(shí)間戳拼文件名先寫.part關(guān)閉后重命名。frame.serial用來區(qū)分多相機(jī)避免兩臺相機(jī)同一微秒撞名pixel_format決定后綴Mono8 可以寫 PGM彩色可以寫 BMP 或自定義頭。注意這里只寫了像素?cái)?shù)據(jù)PGM 還需要文件頭實(shí)際項(xiàng)目里按格式補(bǔ)P5頭或直接接圖像庫。std::filesystem::rename帶error_code失敗時(shí)刪臨時(shí)文件不拋異常打斷工作線程。create_directories每次保存都調(diào)用有開銷可以在初始化時(shí)調(diào)一次保存函數(shù)里只做寫入。落盤目錄不要放在系統(tǒng)盤根目錄或權(quán)限受限目錄。制造現(xiàn)場常見做法是按日期分目錄例如data/2025-01-01/cam_xxx避免單目錄文件過多。保存線程如果持續(xù)跟不上dropped_會漲這時(shí)候先看磁盤寫入速度再看幀大小和隊(duì)列上限。不要一上來就加大隊(duì)列隊(duì)列只是緩沖不是解決磁盤瓶頸的辦法。5. 避坑排查工業(yè)相機(jī) SDK C Demo 最常見的五類翻車現(xiàn)場工業(yè)相機(jī) Demo 的坑很集中枚舉、取流、動態(tài)庫、圖像參數(shù)、多相機(jī)。每一類都有典型現(xiàn)象但根因往往不在表面。第 5 章按“現(xiàn)象 → 原因 → 解決”拆五條都是我見過或自己踩過的翻車現(xiàn)場。排查時(shí)先按順序確認(rèn)最小閉環(huán)不要同時(shí)改五個(gè)參數(shù)否則你都不知道是哪一步修好的。5.1 枚舉不到設(shè)備先查網(wǎng)段、權(quán)限和防火墻現(xiàn)象程序啟動后設(shè)備列表為空或者只顯示一部分相機(jī)SDK 初始化返回成功但枚舉接口返回 0 個(gè)設(shè)備。原因通常有三類相機(jī)和主機(jī)不在同一網(wǎng)段廣播發(fā)現(xiàn)包過不去Linux 下當(dāng)前用戶沒有訪問網(wǎng)絡(luò)設(shè)備或 USB 設(shè)備的權(quán)限Windows 防火墻或安全軟件攔了發(fā)現(xiàn)報(bào)文。解決順序是先看相機(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)用戶組改完重新登錄。防火墻先臨時(shí)關(guān)掉做對照確認(rèn)是它再按端口放行不要長期關(guān)閉。5.2 取流超時(shí)與丟幀觸發(fā)源、包大小、回調(diào)阻塞現(xiàn)象枚舉正常打開設(shè)備也成功但StartGrabbing后回調(diào)不進(jìn)幀或者進(jìn)幾幀就超時(shí)日志里出現(xiàn)取流超時(shí)、丟幀計(jì)數(shù)上漲。原因常見的是觸發(fā)模式?jīng)]關(guān)相機(jī)在等硬觸發(fā)網(wǎng)絡(luò)相機(jī)包大小設(shè)得過大或過小導(dǎo)致丟包回調(diào)里做了保存或算法采集線程被拖住。解決時(shí)先把觸發(fā)模式設(shè)為連續(xù)采集確認(rèn)自由運(yùn)行能出圖再按 SDK 建議調(diào)包大小和接收緩沖網(wǎng)絡(luò)相機(jī)先跑小分辨率排除帶寬最后把回調(diào)改成只入隊(duì)保存放到工作線程。取流超時(shí)不要只加超時(shí)時(shí)間先確認(rèn)幀有沒有到。5.3 編譯通過但運(yùn)行找不到動態(tài)庫運(yùn)行目錄與 RPATH現(xiàn)象編譯鏈接都過雙擊 exe 或從主程序加載插件時(shí)直接退出提示找不到某個(gè)動態(tài)庫Linux 下報(bào)error while loading shared libraries。原因通常是運(yùn)行庫沒復(fù)制到可執(zhí)行文件旁邊或者 Linux 的RPATH沒設(shè)對程序去系統(tǒng)目錄找?guī)?。解決時(shí) Windows 用 CMake 的POST_BUILD把bin目錄復(fù)制到輸出目錄或者把 SDK 的bin加進(jìn)PATH做臨時(shí)驗(yàn)證Linux 用ldd看缺哪個(gè)庫構(gòu)建目錄設(shè)BUILD_RPATH安裝目錄設(shè)$ORIGIN/../lib。插件場景還要確認(rèn)主程序加載插件時(shí)的工作目錄和環(huán)境變量不要假設(shè)和獨(dú)立運(yùn)行一樣。5.4 圖像偏暗、過曝或顏色異常曝光、增益、像素格式逐項(xiàng)對照現(xiàn)象能出圖但圖像整體偏暗、局部過曝或者彩色圖顏色發(fā)綠、發(fā)紫邊緣有網(wǎng)格。原因可能是曝光時(shí)間太短、增益為負(fù)或?yàn)榱愕庠床蛔阋部赡苁窍袼馗袷竭x錯(cuò)把 Bayer 數(shù)據(jù)當(dāng) RGB 用或者把 RGB 當(dāng)灰度讀。解決時(shí)先把增益歸零調(diào)曝光到灰度均值落在中間區(qū)域再看像素格式是否和保存、顯示鏈路一致BayerRG8 要做去馬賽克Mono8 不要按三通道讀最后檢查 ROI 偏移和行跨度錯(cuò)位也會讓圖像看起來像顏色異常。每次只改一個(gè)參數(shù)改完存一幀對照。5.5 多相機(jī)同時(shí)取流句柄隔離與帶寬核算現(xiàn)象單相機(jī)正常接第二臺后開始丟幀、超時(shí)或者兩臺相機(jī)圖像串了。原因常見的是句柄沒有按相機(jī)隔離回調(diào)里用了共享緩沖網(wǎng)絡(luò)帶寬或 USB 帶寬不夠兩臺相機(jī)同時(shí)全幅高幀率把鏈路打滿保存線程共用隊(duì)列一臺相機(jī)拖慢另一臺。解決時(shí)每臺相機(jī)一個(gè)CameraSession和一個(gè)FrameSink回調(diào)的user指針指向各自的會話對象先降分辨率或幀率做帶寬核算確認(rèn)單臺占用再乘相機(jī)數(shù)保存隊(duì)列按相機(jī)分開日志里帶序列號。多相機(jī)不要共用全局句柄也不要在回調(diào)里查全局 map鎖競爭會讓丟幀更明顯。排查順序看什么快速判斷1SDK 初始化返回值失敗先查運(yùn)行庫和權(quán)限2設(shè)備枚舉數(shù)量為 0 查網(wǎng)段、供電、防火墻3打開設(shè)備返回值失敗查序列號是否選錯(cuò)、設(shè)備是否被占用4取流回調(diào)計(jì)數(shù)不進(jìn)幀查觸發(fā)模式和取流命令5丟幀計(jì)數(shù)和隊(duì)列上限上漲查回調(diào)耗時(shí)、磁盤、帶寬6保存文件完整性半截文件查臨時(shí)文件重命名和退出流程這張表建議貼在調(diào)試記錄里每次接新相機(jī)按順序走一遍。不要跳步也不要在枚舉沒通的時(shí)候去調(diào)曝光。血淚經(jīng)驗(yàn)是越早把問題鎖在最小閉環(huán)里后面改業(yè)務(wù)代碼越輕松。6. 把 Demo 演進(jìn)成產(chǎn)線插件連續(xù)采集驗(yàn)證與三個(gè)硬指標(biāo)Demo 跑通后最后一步是把它收成一個(gè)能被主程序加載的采集插件。我一般不再往main.cpp里堆邏輯而是把初始化、枚舉、打開、取流、停止封裝成CameraSource類對外只暴露Start(serial)、Stop()、PushFrame()三個(gè)動作。插件化之后主程序不關(guān)心 SDK 細(xì)節(jié)只關(guān)心幀有沒有進(jìn)來、丟沒丟、保存是否完整。驗(yàn)證時(shí)看三個(gè)硬指標(biāo)連續(xù)采集十分鐘的丟幀率、幀時(shí)間戳間隔是否均勻、落盤文件是否能被下游完整讀取。丟幀率用dropped_除以總幀數(shù)時(shí)間戳間隔看最小值和最大值文件完整性隨機(jī)抽檢尾部字節(jié)。下面這張表是我常用的驗(yàn)收記錄格式數(shù)值按項(xiàng)目定但三項(xiàng)都要有。指標(biāo)采集方式判斷標(biāo)準(zhǔn)異常時(shí)先看丟幀率連續(xù)采集 10 分鐘低于項(xiàng)目允許閾值回調(diào)耗時(shí)、隊(duì)列上限、磁盤時(shí)間戳間隔記錄每幀到達(dá)時(shí)間最大值不超過節(jié)拍容忍范圍觸發(fā)模式、網(wǎng)絡(luò)抖動、曝光過長落盤完整性隨機(jī)抽檢文件尾部文件大小和頭信息一致臨時(shí)文件重命名、磁盤空間我自己的習(xí)慣是每接一個(gè)新 SDK先跑枚舉再跑回調(diào)落盤最后才接業(yè)務(wù)算法三步不亂序。從那以后我每次換機(jī)器、換相機(jī)、換主程序都強(qiáng)制走一遍這張驗(yàn)收表不憑“昨天還能跑”做判斷。源碼包在項(xiàng)目歸檔里按camera_sdk_cpp_demo目錄取用先把最小閉環(huán)跑通再按你的產(chǎn)線節(jié)拍改參數(shù)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲阿v天堂在线| 中文字幕91综合| www.91色综合| 精品视频久久区| 果冻传媒A片麻豆熟妇人妻| 超碰78| 人人妻人人爽 97人人看碰人免费公开视频| 国产真实野战在线视频| 婷婷色香| 2020天天色综合| 人人操,人人液| 91精品国产日韩欧美综合| 久久久夜夜嗨免费视频| 99www.bibizy香蕉资源国产一区二区三区高清 | 四虎永久在线精品免费网址| 日日日色色色色色| 国产精品视频内谢女人| 96久久精品一二三区色欲| 久久久工口| 青操影院| 91性高朝久久久久久久久| 欧美亚洲日本激情在线| 欧美日韩大陆黑人少妇99| 亚洲中字慕不卡| 粉嫩av平台| 精品毛片久久久精品毛片| 极品色社| 欧美色图20P| 中文字幕一区二区三区高清| 欧美A√综合网| 天天操妹子| 能直接看AV的网站| 欧美少妇性乱| 操屄日韩| 色婷婷电影| 九九国产热| 亚州熟女乱伦| 精品一区二区三区蜜桃臀赵总 | 一区二区三区精品视频| 操死我了嗯嗯嗯| 九九热九九| 国产成人精品日本视频| 日影院久久婷婷夜夜网| 中国农村熟妇毛片视频| 欧美黑人性猛交91| 欧美亚洲特P| 久久久精品成人国产| 天堂伊人久久| 国产亚洲精品A在线观看下载| 另类视频在线| 草草草视频| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 摸奶性爱视频网站在线免费播放| 久久天天性久久伊人| 插插综合网天天影视网| 精品v日韩欧美国产| 亚洲91网。| 日韩国产精品人妻无码久久久| 九九久久99| 亚洲欧美综合网| 亚洲一卡2卡3卡4卡乱码网站 | 啊啊啊啊网站| 亚洲精品蜜桃久久久一区二区三区| 可乐操亚洲蜜911| 黄片www.| 亚洲成人AB| 国产亚洲精品第一最新| 密臀在线视频| 亚洲无套久久嗯嗯| 精品午夜福利导航| 2025亚洲男人天堂| 国产精品探花色| 日韩AV一区二区三区三州三州| 亚洲精品97| 翘臀vidoes| 偷拍综合网| 青娱乐91| 黄网色一区二区三区四区精品| 国产美女mm131爽爽爽爽| 久久久久久久强迫| 丝袜喷水在线| 狠狠操官网| 成人在线午夜视频一区| 亚洲性爱无码乱伦av| 91精品少妇搡搡搡| 五月天激情四射| 操婷婷逼| 99热这里都是精品| 久久欧美按摩999| 一起草高清无码| 91在线美女| 天天干人人看综合| 精品久久久久久久久久久久| 国产精品亚洲天堂网址| 九九九九九九综合| 欧美美女啪啪视频| 亚川综合视频| 欧美图片校园春色| 天天日老熟妇| 成人一级性爱| 亚洲色棕合| 丰满人妻一区二区三区| 亚洲国产精品无码AV久久久| 亚洲精品九九九九九九| 男人的天堂激情| 欧美日韩另类在线播放| 欧美日韩精品青青| 东京热男人的天堂网| 黄色视频高清无码网站| chaopen97久久| 九九av| 亚洲精品久久久久毛片A片拉屎 | 精品午夜福利| 啊啊啊好舒服好爽啊啊啊视频| 亚洲欧美综合区自拍另类| 日本国产二线女色| 好湿好紧好爽 视频| 小视频国产| rivers-china.com| 91久久久视| 中文字幕狠狠玩| …亚洲黄色厕厕女女在线播…| 亚洲日本男人天堂网| 欧美性爱日韩性爱| 伊人麻豆传媒| 福利在线视频一区二区| 三级三级三级日本99| 国产91av在线播放| 欧美色图20P| 中文字幕少妇色| 郑州宾馆老熟女露脸啪啪| 麻豆av一区二区| 91色爽欧美| 色婷婷五月综合激情中文字幕| 国产精品第一页国产大屁股视频免费区| 东京热一区二区三区四区五区六区| 国产操操日韩三级黄| 一本色道熟妇| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 亚洲国产亚洲天堂| Av色五月| 91粉嫩萝控精品福利网站_精品影音先锋国 | 老司机射| 亚洲欧洲自拍图片专区满春格| 一本色道久久综合狠狠操| 欧美性暴力猛交XXXX| 久久男女激情视频网站| 操逼逼一区视频| 东京太热男人的天堂久久久| 色在线69堂| 欧美一区二区情色| 欧美图片偷拍| 色色综合网站| 国产精品美女在线一区| 亚洲巨爆乳一区二区三区四季网| 成人久久久| 国产欧美日产一区二区三区 - 国产欧美日 | 青青草日本无码| 91操人视频| 日韩一区二区高清在线观看的| 91狠狠综| 啊啊啊操死我| 超碰九区| 麻豆尤物视频网| 日韩人人精品| 欧美精品久久| 韩国女主播青草在线| 中文字幕一区 二区三四五 区日 日骚| 国产操逼逼网| 欧美日韩国产高清在线一二三区| 黄色电影在线播放综合网站| 亚洲中文字幕精品一区| 麻豆成人AV| 精品制服美女中文一区二区三区| 乱久久久| 97精品中文字幕| 诱惑人妻欧美一区在线播放| 欧美日韩大陆黑人少妇99| 久久久久久夜夜夜夜夜| 亚洲天堂区| 午夜免费福利视频一区| 精品成人av一区二区三区在线| 亚洲国产欧美另类自拍| 黄色激情电影在线观看| 日逼视频日本| 美国人人操人人操| 久久精品国产亚洲AV片多多| 风流老熟女一区二区三区l| 先锋激情∨在线视频播放| 翔田千里爆乳巨臀无码| 国语对白露脸XXXXXX| 欧美成人一级麻豆| 综合另类| 日韩欧无码一区二区三区免费不卡 | 欧美性爱在线无码| 日本一级黄色电影| 禁片 高清 在线观看视频网站| 亚洲成人网站在线观看| 色优久久| 亚洲一二三四区机械| 97激情97激情| 99热 按摩 日韩| 久久国模av| 欧美乱妇狂野欧美在线视频| 久久久99999久网站| 日本九九久久99| 亚洲熟女乱综合一区二区三区 | 蜜桃视频精品一区二区三区| 欧美日本天堂| 在线一区| 婷婷久久久精品| 久操电影网| 中文有码9| 九九热精品| 久久97超碰| 91人妻人人澡人人爽人人精品| 亚洲无码国产探花在线观看| 免费观看的黄色的网站| 91人妻Pr| 久久国产三区| 加勒比伊人影院| 中日韩久久久免费看| 蜜臀Av一区二区三区| 老女人综合| 欧美性爱精品七区| 亚洲精品日日夜夜52| 大香蕉婷婷| 国产青一二三| 亚洲欧洲第二视频在线观看色图| 一区二区三区男人的天堂| 熟女人妻一区二区三区| 国产视频一区二区三区在线免费观看| 综合操逼| 九九热精品免费视频| 操B久久| 神马九九九| 干B网| 久久亚州精品成人Av无| 亚洲各类熟们中文字幕| 久9久| 操死我了啊啊啊| 熟女少妇视频| 国产成人精品必看 | 欧美色66| 亚洲成人AB| 欧美视频一| 国产曰批免费观看久久久| 国产精品久久久久av| 久久久999日本大片| 久久有码| 欧美翘臀视频网站一区二区三区| 日韩国产欧美伦理在线| AV 少妇 人妻 偷拍| 久久久久网站-538在线视频-欧美永久乱码| 青青草五月份天| 日本成a人v网站在线观看| 亚乱色| 国产视频三区四区| 四虎免费视频| 91AV入口| 五月天开心网| 加勒比人妻综合| 国产日本一区二区三区蜜臀在线观看| av在线免费一区二区| 欧美日韩国产中文精品字幕自在自线,| 亚洲限制级| 人妻天堂网| 免费伦费视频在线观看| 亚州色站 日韩电影| 九九这里只有精品| 玖玖玖玖精品国产剧情| 97青娱乐超碰久久| 久久超碰97| 久久精品三级影视| 欧美综合色综合| 思思热在线视频免费| 99热在线播放| 怡春院久久| 国产av波波国产精品| 免费看美国人人爽,人人操 | 成人精品一区二区91毛片不卡| 国产成人亚洲精品自产在线| 91国产丝袜美女| 中文字幕精品探花视频| 婷婷五月综合在线| www.av不卡中文字幕| 国产精品一二三区18| 一级黄色影片| 欧美另类天堂| 日本久久天堂| 91在线一起| 天天操夜夜嗨| 久久久久密臀一区二区| 欧美乱伦专区| 久久综合18p| 九九九九九精品视频| 亚洲欧美日韩精品久久久一区二区 | 欧美组图日韩亚洲中文字幕| 人妻啊啊人妻啊| 夜夜国自区| 操逼国产免费| 久久亚洲熟妇在线视频| 人人操人人操人人人操| 色爱欲亚洲| 玖玖爱影院| 性爱动态120秒| 蜜臀久久99精品久久久久久酒店 | 久偷拍| 国语对白露脸XXXXXX| 97九色人妻| 97视频在线观看免费高清| 人人扣人人操| 欧美丝袜91| 妺妺跟我一起洗澡没忍住| 97亚洲国产| 日韩精品黄片免费观看| 欧美熟女丝袜| 亚洲无码一二三区| 老司机午夜精品福利视频一区二区| 美女午夜福利免费视频| 黄色十八禁| 日韩在线观看字幕精品| 另类老少妇| 婷婷五月天色色| 亚洲天堂另类| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 亚av顶级裸体一区二区三区四区五区 | 道久久五香丁月婷婷激情综合| 大黄片做爱的大的| 精品视频久久区| 屁屁影院一区二区三区国产| 五月天精品| 久久伊人大香蕉| 日韩小电影| 69精品在线| 92性色国产午夜福利在线661| 91美女在线视频| 亚洲欧美自拍偷拍| 亚洲狠狠入| 91日韩在线| 97视频在线播放| 欧美日韩淫加| 熟妇操花| 偷拍盗拍亚洲色图图片| 精品久久久中文字幕不| 亚洲成人日韩小说| 极品少妇久久久久| 嗯啊不要啊在线| 日韩成年人性爱视频| 91夜夜蜜桃臀1区2区3区| 国产Aα| 素人伊尹大香蕉免费下载视频| 六月婷婷五月丁香| 无码操逼视频一下| 久久↗↗| 蜜臀久久99精品久久综合| 欧美高清18A片| 久久草视频污视频| 六月婷婷色综合| 丰满人妻被猛烈进入中| 日韩淫色网| 亚洲男人天堂Av| 亚洲国产精品无码AV久久久| 亚洲另类色综合网站| 日韩在线视频1234| 国产精品免费美女视频| 欧美综合网| 久久久久久久六六| 人妻天天夜夜爽一区二区| 天天激情综合站| 毛片99-全集电影手机免费观看完整-B029AV| 成人情色一区二区| 加勒比久久综合网高清| 欧美色图片| 日韩中文9| 天天肏美女| 国产不卡免费在线视频| 成人精品无码| 亚洲欧美变态| 亚洲男人天堂2016| 欧美午夜精品久久久久久3D| 狠狠色噜噜狠狠狠狠狠色综合久久| 丝袜 中出 制服 人妻 美腿 中文字幕| 中文字幕一区二区三区蜜臀| 中文字幕在线观看二区三区| 综合亚洲欧美精品日韩?v| 丰满欧美放荡少妇在线| 欧美爆操91| 久久99视频| 波多野结衣一级视频| 国产AV中文| 国产乱子伦一区二区三区免看| 九色 人妻 大香蕉| 熟女六十路| 色综合V| 俞拍久久国应视频| 丁香7月婷婷| 丰满搜索结果 -第18页- 久久高清无码| 天天爽人人综合免费7799| 丁香六月激情| 黄色AV免费| 操熟女91| 深夜激情| 中文子幕一二三| 欧美少妇一区二区三区| 91人妻爽爽人人做人人澡| 一区二区三区免费岛国片| 青娱乐二区免费| 欧美天天射| 亚洲在线A| 九9热伊人| 国产青视频| 手机av天堂久久久久| 日本色色色| 久久无码电影| 欧美日韩激情无码专区| 99e久久国产精品| 99999精品| 大逼色网站| 欧美专区17页| 熟女91网| 老司机午夜精品福利视频一区二区| 欧美97日韩| 精品久久久av| 美女露胸露屁股| 色色热| 欧美日韩999| 日欧操屄视频| 久久婷婷伊人| 五月婷婷基地| 99热最新| 五月婷婷大香蕉| 高清国产av无码| 91精品啪在线观看国产城中村| 亚洲精品国产专区在线观看| 黄色人人| 久久riav中文精品| 人人摸人人添人人操| 97在线观看播放视频| 一级性爱视频免费观看 | 久热精品在线| 亚洲熟女一区二区| 丝袜加勒比| 蜜区区视频79 | 婷婷精品国产一区二区三区日韩| 人人搡人人肉久久精品| 2019午夜福利视频| 伊人久久亚洲色欲综合网站 | 人妻激情视频| 亚欧美综合网| 91在线欧美| 97综合网| 国产二区三区免费视频| 国产不良强奸视频免费看| 99亚洲精品| 精品无码不卡视频| 女人午夜视频777| 巨爆乳肉感一区二区三区竹菊影视| 熟女乱伦二区| 先锋精品av色鲁| 偷拍网站久久男女男| 香一区二区三区| 欧美性暴力猛交XXXX| 男人的天堂色偷偷青青草视频婷婷网| 青青草日本中文字幕| 人妻酒店出差被中出免费在线播放| av麻豆啪啪| 九一性生活免费视频| 亚洲加勒比色图| 天天综合网~91| 天天噜| 日韩视频精品在线观看| 26uuu国产日韩综合在线观看| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 97超碰色| 日韩性爱毛片操骚逼| 333kkkk·亚洲com久久| 久久久婷| 欧美爆操91| 欲女人妻性色av| 久久在肏| 91露脸熟女专区| 国产树林里野战在线看| 国产欧美精品日韩区二区麻豆天美| 欧美另类色| 99蜜桃臀亚洲成人在线观看| 女人18精品一区二区三区| 嗯嗯不要视频| 在线岛| 熟女视频久久| 国产夜夜艹| 久久妇| 大香蕉99999| 人人干黄色| 久久男女激情视频网站| 蜜臀在线免费观看在线免费观看| 日本熟妇精品九九| 九九九网站| 色在线亚洲视频www| 99啪啪视频| 美女淫穴| 狠狠爱夜夜| 亚洲?V无码专区在线电影| 欧美精品日韩一区二区| 第四色色综合91| 久艹视频在线| 色婷婷六月丁香七月婷婷| 天堂中文资源在线bt| 欧洲综合视频| 91麻豆天美国产欧美高潮| 亚洲AV成人精品网站在AV| 黄色av一区二区在线| 青青草伊人久久| 后入精品| 十八禁的黄污污免费网站| 天天摸,夜夜摸| 亚洲色图自拍| 国产精品分类在线观看| www.色婷婷| 自拍亚洲综合| 久久双插| 亚洲色图超碰在线| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产网站在线播放| 超碰97男人| 日韩十八禁| 乱伦3P视频| 超碰99热中文字幕| 啊v在线观看视频| 人人操,操人人| 97大色网| 97在线视频观看| 婷婷综合五月| 国产91专区| 亚洲天堂一区二区久久| 99999精品视频| 97中文综合| 青娱乐亚洲自拍| 久久av网| www国产无码| 五月丁香综合激情| 色网亚洲人| AA特级绝黄| 北京美女一区二区| 日韩免费簧片| 天天欧美色| 9久久精品| 操99| 欧美啪啪天堂| 亚洲日韩成人性爱视频| 日韩欧美中文字| 日韩黄片视频试看| 国产极品久久久| 美女天天干| 偷拍欧美激情| 中文操逼字幕| 成人AV素股で擦久久| 九九九九9999| 亚洲 欧美 91| 另类天堂| 偷窥自拍亚洲色图| 亚洲欧美综合| 日韩伦理视频| 中文字幕第9页萱萱影音先锋| 四虎永久在线精品免费网址| 2019天天干| 欧美久久草熟女| 一起草高清无码| 伊人久久青青草| 91人妻少妇| 人妻夜夜爽天天爽麻豆三区网站 | 国产视频一区二区三区久久亚洲天堂| 国产精品九九九| 黄色乱论网站| 国产男女边吃边摸视频网站| 91美女在线视频| 五月婷婷六月丁香网址| 色综合超碰超| 亚洲AV成人无码一区二区三区在线观看| 在线色资源| 99re久久| 青青久久艹| 99999久久久久9国产精品| 日本性感人妻91| 97 九色| 最新中文字幕精品在线| 国产深喉| 久久欧美按摩999| 乱伦熟妇一区二区| 亚av顶级裸体一区二区三区四区五区| 粉嫩不卡一区二区性爱 | 色综合天天| 中文字幕午夜精品久久久| 丁香六月激情综合| 免费AV中文网在线观看| 久久动漫精品视频这里只有精品| 国产日本久久免费精品| 热热色91| 99色婷婷中文字幕乱色| 无码 有码 国产18p| 精品免费囯产一区二区三区| 国产夜夜操| 日韩精品人妻一| 久区视频| 性色高清在线| 欧美久久伊人| 久久久久久久唑| 四虎视频在线观看| 高清在线偷拍自拍视频| 欧美人体性爱互联网第一页婷婷日本| 亚洲成人色情五月天丁香花| 亚洲夜夜欢无码一区二区| 2017大香蕉| 国产第二页| 能看的av| 黄色激情电影在线观看| 91色欧美| 97日视频| 99热在线播放| 91精品微拍福利| 精品一区二区2| 精品久久久久9999| 91小视频| 国产美女高潮| 91 国产丝袜在线播放-百度| 亚洲色图大香| 亚洲成人免费中文字幕| 青草地一本线一区二区三区| 一区二区三区四区姦女| 一个人免费HD91视频| 美女诱惑一区| 久久妇| 日韩人妻少妇中文字幕| 美国一区二区三区视频| 欧美黄业| daxiangjiao你懂的| 日韩另类色图| 夜夜影视四色| 伊人热综合| 亚洲欧美天| 97 超碰 人人做 人人爱| 999岛国大片| 伊人久久综合影院精品久久久| 五月天精品| 四虎国产成人精品免费一女五男| 久久草大香蕉| 精品国产人成在线| 91综合色噜噜| 好色美女九七第一页| 97色色色综合网站| 人妻熟女一区在| 日韩欧美午夜视频在线| a片 xxxx受爽视频| 蜜桃传媒视频第一区入口在线看| 老熟妇综合| 欧美有码激情视频一区二区三区| 嫩草影院性色| 一个色导综合| 女色综合| 日韩日韩日韩-国产乱码精品一区二区| 久久AV无码1区2区3区| 五月激情综合网| 香蕉热人人精品| 亚洲丝袜少妇在线| 涩涩久久精品| yellow网站免费观看日韩高清无码| 亚洲中文sv| 国产视频一区二区在线| 91情色在线| 91高清无码下载| 亚洲骚男同com| 乱色视频中文字幕| 成人性生活高清视频在线播放| 99热综合| 亚洲国产精品久久AV| 麻豆影音天美视频| 国产操逼逼网| 综合亚洲欧美| 欧美综合第一| 国内毛片国产专区二| 亚洲精品熟妇1区2区3区。| 日韩成人精品中文字幕| 99久久无码| 中文字幕人乱码中文字的预防方法| 日韩av一级黄片| 四虎影视精品| 97久久精品国产| 一级久久久久久久久久久| av橘色网站| 国产视频一区二区三区久久亚洲天堂| av在线不卡一区二区三区| 亚洲天堂一区二区| 99啪啪视频| 精品国产www久久| 日本色日夜干| 日韩综合97P| 啊…啊…操我用力操我| 手机在线中文字幕国产| 麻豆成人AV| 狠狠色一区二区中文字幕| 自偷自拍的亚洲视频| 国产又黄又粗又猛大片| 搡老女人老91妇女熟女| 日本一区三级韩国| 操逼逼福利视频| 国产成人亚洲精品无| 物业黑人 AV一区| 丝袜内射| 伊人婷婷五月天| 26uuu性| 91人妻熟女| 日韩 欧美 国产 麻豆| 嗯嗯嗯嗯啊啊啊好紧好大| 国产91精品福利在线| 91精品人| 欲香欲色综合天天伊人| 青草视频人妻在线观看| 小草三级久久观看| 婷婷色导航| 国产精品久久久久久久毛片1| 91无遮挡| 人妻丝袜日本| 2020天天色综合| 中国黑人三级片网站上区| 99热精品在线观看| 国产免费一区在线观看| 亚洲国产成人福利在线观看| 2024年最新色情网站在线观看| 色原狠狠天天天| 天天影视网色欲色香| 亚洲综合小视频小说在线观看| 亚洲欧美大| 久久九九99| 日韩午夜啪啪视频| **一级毛片国产| 国产精品成人蜜臀AV在线| 中文字幕乱在线伦视频中文字幕乱码在线 | 一二视频神马久久传媒| 大肉棒导航| 日韩欧美被操黄免费观看| 亚洲另类色图片| 欧美日韩国第一区| 国产视频三区四区| 色999人与兽| 天天看少妇| 欧美日韩情色一区二区| 美女诱惑1区2区| 欧美精品人妻视频| 一区黄二区黄| 久热精品色情| 青青草色情网站视频| 亚洲一本色码中文字幕| 欧美72网页| 91天天c| 超碰午夜| 亚洲 欧美 日本 国内 首页| 久久东京热成人| 伊人麻豆传媒| 精品一区二区三区国产| 中字幕人妻一区二区三区| 久久综合九色综合欧洲98| 69视频入口| 国产成年女人免费视频播放a| 国产日韩区| 亚洲αv一区二区三区| 亚洲乱码尤物193YW| 人妻22p| 超碰资源亚洲97| 诱惑人妻欧美一区在线播放| 亚洲熟女偷拍在线观看| 亚洲AV色图| 中文乱码字字幕在线第5页| 黄片qw| 久久高清欧美国产| 亚洲色图久久精品蜜| 日少妇亚洲版| 超碰伊人在线| 999精品乱码| 情趣丝袜无码操逼视频| 国产伦乱91| 日本一区二区三区欧美日韩中文字幕| 亚洲天堂情色| 日夜精品| 亚洲图片日本AⅤ欧美在线| 抽插无码高清一区| 四虎AV无码| 北野未奈加勒比av| 97超碰美女| 香蕉久久AⅤ...| 蜜桃臀av在线观看| AV在线资源| 久久精品区| 蜜乳Av成人片网站| 亚洲色图大香| 天天超级碰碰碰| 黄骗免费网站| 在免费jIzzjIzz在线视频| 亚欧精品久久久久久久久久久| 色天堂综合| 日韩精品 欧美激情| 人人潮人人摸| caopeng97| 97在线日韩中文字幕| 国产精品分类在线观看| 99欧美| 蜜乳av一区二区三区四区不卡| 熟妇熟女一区二区三区| 人人天天干干| 亚洲涩涩| 久久婷婷电影网| 日本女人操逼| 久热大香蕉网站| 亚洲一区在线观看欧洲| 五月天精品| 中文字幕午夜精品久久久| 国产午夜福利电影免费在线观看 | 88在线一区二区三区| 老子午夜伦不卡影院| 97日本超碰综合| 九七超碰人人乐| 五月天婷精品激情| 午夜啊啊啊| 日本操逼视频免费| 夜夜中出国产| 日韩小电影| www.夜夜操| 91丝袜人妻| 成人三级片无码| 韩国嫰模上门援交视频| 国产中文大片资源中文字幕 | 亚洲国产精品有声| 搞中出视频在线观看| 牛牛操视频逼| 亚洲一二三| 性在久久久久久| 老熟妇一区二区三区啪啪| 天天操夜夜操狠很操| 91nbbbbbb| 太久视频| 五月天人妻综合| 最新国产精品久久精品| 欧美日韩妖精91com| 亚洲精品三| 日韩三级av片| 日韩av女优在线免费一区| 男人的午夜天堂| 精品无码久久久| 精品一区二区三区国产 | 中文字幕一区二区在线日韩精品| 日日日骚女人精品| 国产亚州高清国产拍精| 97在线播放| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 天天操天天舔| 91美女在线| 国产av白丝| 老司机深夜18禁污污网站| 大肉棒导航| 日本理论在线| 亚洲欧美另类图片| 亚洲97P| 老司机射| 屁股久久久久久| 1区2区3区中文字幕日韩| 性色av蜜臀av色欲aV| 干b网| 久久天天摸| 亚洲色系另类精品国产| 亚州高清AV| 午夜福利久久久噜久噜久久综合| 国产亚洲性生活视频播放| 我想要啊 啊 啊| 强奸少妇AV导航网| 人人妻人射| 欧洲亚洲少妇| 乱欲性色| 午夜免费视频1000| 精品日韩中文在线| 国产丝袜啪啪| 啊啊啊快操我视频| 成人日韩欧美| 性爱视频无打码在线观看| 大香蕉2017| 夜夜狠狠躁日日躁色视频| AAA久久| 偷拍亚洲熟女视频播放| 国产精品久久蜜乳av| 色九九九综合| 狠狠狠一区二区三区| 国产 无码 一区二区| 精品午夜福利| 蜜桃臀一区二区aV| 欧亚不卡| 亚洲天堂男人在线| 色色色天美视频| 午夜人人操| 国产一线二线三线av| 天天插夜夜爽| 一二三啪啪专区| 国产乱伦性爱AV| 国产亚洲精品美女久久久| 久久久日本电影| 91亚洲欧美综合高清在线| 九九热超碰97亚洲最新香蕉| 99在线精品视频| 国产大陆天天艹| 国产 日韩 欧美一区| 精品国产乱码久久久久久免费| 欧洲亚洲人妻无码中字久久三区四区| 一区二区三区在线资源| 爽 好舒服 无码刺激久久| 日本三级A片网站com| 91天天看| 亚州性9| 在线洲亚线| 99蜜月精品久久| 国产乱人妻精品入口| 欧美熟妇乱码在线一区| 超踫中文字幕| 狠狠色婷婷| 亚洲高清无码免费观看视频| 人妻日日干| av在线免费一区二区| 免费少妇一区二区| 亚洲欧美一区二区网址| 久久97超碰| 天天综合网~91| 久久九九精品一区二区| 国产精品久久久久久9999| 国精综合一二三区影视| 日日干夜夜操视频h| 超碰 另类 欧美 | 伊人色综合网| 五月婷婷六月色| 婷婷五月激情综合| 97色色婷婷| 97人人干| 亚洲色图91欧美日韩| 欧美亚洲综合色| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 久久内射| 欧美色就是色| 色牛aV| 澳门黄片一香蕉视频| 日韩一级久久毛片| 国产精品久久久久久久久久梁医生| 日韩av在线精品观看| 超碰成人人人爽人人爽| 26UUU欧美日本| 国产精品爱欲| 日韩性爱1级片视频| 久久这里是精品| 国产精品视频一区二区三区八戒| 欧美丝袜制服久久| 欧美国产日韩高清在线| 欧美成人都市人妻| 丝袜狠狠草尤物人妻av91| 亚洲官网在线| 少妇99| 麻豆尤物视频网| 久久老女人| 日本三级A片网站com| 手机在线人成免费视频| 97久久视频| 用力操死我| 欧亚揄拍偷拍精品视频| 成人青青草原伊人| 亚洲精品久久久久毛片A片拉屎 | 伊人成人中文字幕久久网| 91人妻丝袜无码| 99精品丰满人妻| 国产91丝袜 在线播放| 久久夜夜| 国产亚洲中文不卡二区| 久久久久久欧美精品se一二三四| 人妻啊啊人妻啊| 色欲人妻一区二区在线| 日夜尻逼网| 丁香婷婷五月| 新版天堂中文资源8在线| 久久手机好看网站| 高清不卡 中文 人妻| 人妻少妇精品| 熟女精品va中文字幕| 99re9在线| 亚洲性少妇| 欧美熟妇精品黑人巨大91| 啪啪啪东京| 久综合网| 亚州色图欧美| 啊啊啊啊好疼| 日韩Va亚洲va欧美Ⅴa久久| 六月丁香网| 久久久久久久久久精| 亚州欧美色图| 爱做久久久久久| 久久水蜜臀亚洲AV无码精品| 大香蕉中文网| 91足交| 日本一片一区| 久久αⅴ| 国产麻豆一级精品视频| 天天干天天日天天射黄色片| 少妇无码999| 国模无码一区二区三区在线| 亚洲欧美综合色| 中文字幕视频在线观看| 日美免费黄片| 亚洲吊色| 成年人网站在线免费观看| 日本色婷婷| 亚洲情色无码一区二区三区| 亚洲欧洲综合成人av一区| 九九热免费国产视频婷婷伊人五月 | 天天操天天日天天干| PMv在线观看| 综合影院亚洲| 国产激情在线| 亚洲福利中文字幕在线| 熟妇国产免费一区| 久久男人精品| 又摸又舔在线观看网站| 精品欧美不卡在线播放| 亚洲欧美大| 国产欧美另类久久久精品课程| 另类一区| 久久9精品网站| 天天做日日做天天欢。| 久久久久9999精品九九九| 国产亚洲性生活视频播放| 91丝袜美女| 东京热一区二区中文字幕| 久久极品伊人| 清纯唯美亚洲综合| 又黄又爽在线观看视频| 免费视频一二三区| 大香蕉色十月| 97色碰| 富二代亚洲精品99| 国产一级舔足在线观看| 日韩99999色| 亚洲 无码 偷拍| 亚洲棕合电彰| 欧美亚洲第一页| 秋霞鲁丝午夜无码一区二区三| 欧美国产欧美在线观看| 欧美精品久久| 国产视频一区二区免费| 伊人欧美大香蕉视频| www.狠狠| 女沟厕偷窥piss小便| 密臀在线免费观看| 91伊人久| 丝袜av一区二区三区| 大香蕉免费乱伦视频| 超碰 欧美| 一区二区三区精品黑丝白丝酒店对鸡| 97综合在线| 精品国产一区二区三区久久久蜜臀 | 国产又粗又长又爽又色| 男人的天堂Va| 老鸭窝亚洲毛片| 久久 国产 无码| 青操影院| 人妻久久久| 欧美一二三级精品在线| 亚洲综合射| 婷婷色导航| 日本成熟少妇A∨网站| 青青草字幕AV| 色婷婷av在线观看| 粉嫩av平台| 97欧美久久久久久久| 欧美男人一区| 国产9 9在线 | 亚洲| 亚洲天天精品| 麻豆2区1区天美| 国产精品一区午夜福利| 中文字幕丝袜| 激情亚洲天堂| 国产精品视频精品一二| 亚州综合网| 丝袜狠狠草尤物 91| 欧美|91色综合| 激情综合二| 91亚州| 欧美偷偷网| 观看视频图片一区二区三区| 狠狠色噜噜狠狠狠狠狠色综合久久| 91狠狠综合久久| 91草草草| 殴美,日韩国产伦精品| 日韩无码黄色片| 免费a v| 午夜福利 成人 91| 美女主播色欲91抠b在线播放| 丁香九月激情| 操迟操逼在巾线Fre看| 资源新线在线天堂| 9999久久久久| 日欧美色| 九九热在线视频| 伊人五月天激情| 三级日韩一区二区三区| 蜜汁欧美| 伊人少妇久久久| 青青操少妇| 人妻加勒比东京热| 男女一级A片大黄,一进一出| 青娱乐欧美激情一区二区| 91伊人| 五月天久久人妻| 精品中文日韩字幕视频| 色性荡荡荡荡视频| 亚洲激情久久| 国产女生在线| 嫩草一区二区在线观看| 日韩一区二区精彩视频| 另类欧美色| 黑人精品欧美一区二区蜜桃| 国产精品久久久久久久久久久久久久久久 | 97啪啪| 91动漫操逼视频| 欧美日韩不卡a片| 99亚洲国产精品色一区二区三区| 大香蕉99999| 狠狠入| 欧日韩一二三f区| 热久久无毒不卡| 亚洲色图伊人网| 久久日本熟女精品一区| 国产午夜福利视频在线| 男女打扑克高清网站| 麻豆人妻精品一区二区| 丁香五月婷婷五月| 激情综合五月婷婷| 亚洲色综合| 九色视频91| 色色婷婷五月天| 五月香婷婷| 亚洲无码99| 人妻少妇视频在线播放| 五月婷婷激情网| 婷婷久草一区二区三区| 91N欧美| 中文字幕91综合| 啊啊啊在线观看免费视频| 91老司机视频| 欧美天天综合在线| 熟妇女伦乱视频| 美女诱惑一区| 日韩成人无码| 国产亚洲色停停久久99精品91| 亚洲欧美日韩免费观看| 中文字幕蜜乳av| 国产福利电影| 91社操逼| 不卡免费av在线播放| 五月丁香| 九九久久首页|