Kithara與OpenCV (一)

Kithara使用 OpenCV 庫


目錄

  • Kithara使用 OpenCV 庫
    • 簡介
    • 需求和支持的環境
    • 構建 OpenCV 庫
      • 使用 CMake 進行配置以與 Kithara 一起工作
    • 使用 OpenCV 庫設置項目
    • 運行 OpenCV 代碼
    • 圖像采集和 OpenCV
    • 自動并行化
    • 限制和局限性
      • 1.系統建議
      • 2.實時限制
      • 3.不支持的功能和缺失的功能
      • 4.顯示 OpenCV 對象
  • OpenCV 構建實例 (采用可視化操作的方式)
    • 1. 準備工作
    • 2. OpenCV構建


簡介

這些指南將幫助您學習如何使用 OpenCV 3.0、3.4 和 4.1 庫在內核模式下進行實時圖像處理。我們假設您基本上已經知道如何設置項目并打開驅動程序以開始您的工作。如果你對此不熟悉,你應該看看第一個項目 教程。

OpenCV 使用我們的實時 Windows 虛擬化。這種虛擬化在實時環境中模擬 Windows API 的最重要部分。只有在無法進行仿真或不合理的情況下,虛擬化才會離開實時環境并依賴于 Windows。此外,這種虛擬化是有限的,因此在實時使用OpenCV時存在一些限制。

需求和支持的環境

OpenCV 嚴重依賴標準的 C++ 庫。這意味著與 OpenCV 和 OpenCV 庫本身交互的代碼必須使用完全相同的 C/C++ 運行時庫 (CRT) 實例。Kithara不支持任何DLL版本的CRT用于內核模式。因此,要在 Kithara 中使用 OpenCV 庫,它們必須使用靜態鏈接運行時構建為靜態庫。不能使用 OpenCV 的 DLL 版本,因為這需要 OpenCV 使用 CRT 的 DLL 版本。此外,當將 CRT 的調試版本用于其中一個構建配置時,您還需要鏈接到靜態 OpenCV 庫的調試版本(它們的名稱后面附加了一個"d")。

Windows虛擬化僅適用于Kithara實時任務和作為DLL加載到內核模式的代碼。(Kithara還允許通過其他方式將代碼加載到內核模式并實時執行,但它們不適合運行OpenCV代碼)。對于Kithara RealTime Suite 10.11,我們已經使用以下Visual Studio平臺工具集(包括靜態CRT)成功測試了OpenCV 4.1:

  • Visual Studio 2017 (vc14.16) (Visual Studio 2017 版本 15.9.11,更新 9)

  • Visual Studio 2015 (vc14.00) (Visual Studio 2015 版本 14.0.25,更新 3)

我們還對 OpenCv 3.0 和 3.4 進行了等效測試:

  • Visual Studio 2017 (vc14.16) (Visual Studio 2017 版本 15.9.11,更新 9)

  • Visual Studio 2015 (vc14.00) (Visual Studio 2015 版本 14.0.25,更新 3)

  • Visual Studio 2013 (vc12.00) (Visual Studio 2013 版本 12.0.40,Update 5)

  • Visual Studio 2010 (vc10.00) (Visual Studio 2010 版本 10.0.30)

Kithara RealTime Suite 10.11之前的驅動程序(不包括在內)支持OpenCv 3.0,并在上述版本的Visual Studio 2013和2010中進行了測試。

這些測試是通過在實時環境中運行所有 OpenCV 3.0、3.4 和 4.1 準確性測試來執行的。OpenCV 是使用默認靜態庫構建。測試是使用源代碼中的 OpenCV 3.0、3.4 和 4.1 構建執行的,如下所述。請注意,OpenCv 4 使用了 C++11 標準功能,這些功能僅在 Visual Studio 2015 之后才得到充分實現。

構建 OpenCV 庫

OpenCV 附帶了用于不同版本的 Visual Studio(2015 和 2017)的庫構建,這些庫已經可以使用。但是,我們建議您使用將要用于自己的項目的編譯器重新構建 OpenCV 庫。這不僅減少了出現兼容性問題的機會,而且還讓您有機會從 OpenCV 構建中完全刪除一些不需要或不可用的功能。

OpenCV 依賴于工具"CMake"為不同的編譯器和 IDE 生成項目文件。請參閱 OpenCV 文檔,了解如何將 CMake 與 OpenCV 一起使用。CMake 允許您配置構建并禁用對第三方庫和 API 的特定依賴項。

使用 CMake 進行配置以與 Kithara 一起工作

最重要的配置步驟是將 BUILD_SHARED_LIBS 設置為禁用,因為它默認設置為"啟用"。此外,請確保已啟用 BUILD_WITH_STATIC_CRT。

我們還建議禁用有關 OpenCL、OpenGL、CUDA 和 Windows Media(DirectShow、VFW 等)的所有條目。這些 API 不能在內核模式下使用。如果您沒有禁用它們,OpenCV 將在運行時將缺少依賴項。但是,在這種情況下,OpenCV 應該仍然可以使用。

請使用 Windows 平臺的默認并行化框架(Microsoft 并發運行時,它包含在 CRT 中)。這意味著,WITH_OPENMP 和 WITH_TBB 都應該被禁用,這已經是默認設置。否則,這些框架的 DLL 將存在依賴性,這些 DLL 無法加載到內核模式,從而可能導致錯誤。

建議啟用 INSTALL_CREATE_DISTRIB,尤其是在處理我們的示例時。它將生成一個目標項目"INSTALL",在構建時,它將把庫和包含文件放在一個共享的根目錄下。然后,您應該創建一個指向該目錄的環境變量 OPENCV_DIR。我們的示例使用此環境變量,因此它們能夠找到要鏈接到的包含文件和庫。

這可以通過 CMakeGUI 或命令行完成,如下所示:

cmake -Bbuild
-DBUILD_SHARED_LIBS=false 
-DBUILD_WITH_STATIC_CRT=true 
-DWITH_OPENCL=false 
-DWITH_OPENGL=false 
-DWITH_DIRECTX=false 
-DWITH_VFW=false
-DWITH_CUDA=false 
-DWITH_MSMF=false 
-DWITH_IPP=true 
-DWITH_OPENCLAMDBLAS=false 
-DWITH_OPENCLAMDFFT=false 
-DBUILD_TESTS=false 
-DBUILD_PERF_TESTS=false 
-DBUILD_opencv_world=false 
-G "Visual Studio 15 2017" --arch x64 .\\sources\\

OpenCv 在從主要版本 3 過渡到 4 的過程中,已將其一些以前的核心模塊移動到 contrib 存儲庫中。這些是 shape、superres 和
videostab,它們與它們的構建依賴項 ximgproc 和 optflow 一起出現。4.1 也支持所有這些功能。要獲取這些內容,請參閱 他們的文檔。

使用 OpenCV 庫設置項目

除了設置內核模式DLL項目的默認方法外,您還需要將OpenCV構建的包含目錄添加到編譯器設置的包含目錄中,并將靜態庫的路徑以及要使用的庫添加到鏈接器設置中。包含文件將在" ( O P E N C V D I R ) / i n c l u d e " 下找到。庫路徑取決于使用的實際 C R T 和目標體系結構。通用路徑為 " (OPENCV_DIR)/include"下找到。庫路徑取決于使用的實際 CRT 和目標體系結構。通用路徑為" (OPENCVD?IR)/include"下找到。庫路徑取決于使用的實際CRT和目標體系結構。通用路徑為"(OPENCV_DIR)///staticlibs",其中是目標架構(x86 或 x64)和使用的 CRT 版本(vc10、vc11、vc12、vc14 或 vc15)。例如,在 Visual Studio 2013 中使用 64 位版本會導致其他鏈接器目錄為"$(OPENCV_DIR)/x64/vc12/staticlibs"。請注意,CRT 是以增量方式進行版本控制的,而不是像 Visual Studio 產品命名所建議的那樣按年份進行版本控制(即 Visual Studio 2013 使用 vc12,Visual Studio 2017 使用 vc15)。實際需要哪些庫取決于您正在使用的 OpenCV 部分。在下文中,列出了所需的可能庫。請將 XXX 替換為您想要的不帶點的 OpenCv 版本,例如 340 或 410。另請注意,Debug 版本將附加字母"d"):

  • opencv_calib3dXXX.lib

  • opencv_coreXXX.lib

  • opencv_features2dXXX.lib

  • opencv_flannXXX.lib

  • opencv_halXXX.lib

  • opencv_highguiXXX.lib

  • opencv_imgcodecsXXX.lib

  • opencv_imgprocXXX.lib

  • opencv_mlXXX.lib

  • opencv_objdetectXXX.lib

  • opencv_photoXXX.lib

  • opencv_shapeXXX.lib

  • opencv_stitchingXXX.lib

  • opencv_superresXXX.lib

  • opencv_videoXXX.lib

  • opencv_videoioXXX.lib

或者,也可以使用 opencv_worldXXX.lib,這是一個將所有其他庫捆綁到一個庫中的庫。

OpenCV 庫大多還依賴于第三方庫,這些庫隨 OpenCV 一起構建,并且與 OpenCV 構建同時構建。包括 IPP 庫、圖像編解碼器和壓縮(調試版本將附加字母"d"):

  • IlmImfd.lib

  • ippiwd.lib

  • ittnotifyd.lib

  • libjasperd.lib

  • libjpeg-turbod.lib

  • libpngd.lib

  • libprotobufd.lib

  • libtiffd.lib

  • libwebpd.lib

  • quircd.lib

  • zlibd.lib文件

某些代碼路徑還需要更多的 Windows 庫。它主要但不僅占模塊"highgui"。請注意,此列表不完整,并考慮推薦的設置。在 OpenCV 中包含對視頻格式的支持也會創建對其他庫的依賴性。

  • user32.lib

  • gdi32.lib

  • advapi32.lib

  • comctl32.lib

如果代碼未使用某些模塊,則這些列表可能會縮短。請參考 OpenCV 文檔來確定模塊的依賴關系。如果遇到來自鏈接器的有關缺少函數的錯誤消息,請首先檢查此列表以查找缺少的依賴項。

請不要忘記仍然鏈接到Kithara圖書館!如果您查看我們的示例,OpenCV 的項目配置是通過使用屬性表來解決的。這些設置將放入屬性表中,實際項目將繼承這些屬性表,并且在 Visual Studio UI 中可能不可見。這為配置階段提供了一些模塊化。

運行 OpenCV 代碼

使用Kithara RealTime Suite實時運行OpenCV代碼需要兩個主要步驟。首先,您需要將包含代碼的DLL加載到內核模式。其次,您將需要一個實際運行代碼的任務。

打開Kithara驅動程序后,可以立即加載DLL。必須使用專用函數 KS_loadVisionKernel,而不是通常的函數 KS_loadKernel。它將加載 DLL 并在適當的環境中執行其入口點。這是正確初始化 CRT 所必需的。

KSHandle hKernel;
KS_loadVisionKernel(&hKernel, "myDll.dll", 0, 0, KSF_KERNEL_EXEC);

下一步是創建一個任務,為此,我們首先需要在加載的DLL內部創建一個函數的回調,其中包含任務的代碼。

KSHandle hCallBack;
KS_createKernelCallBack(&hCallBack, hKernel, "myFunction", 0,KSF_DIRECT_EXEC |KSF_SAVE_FPU, 0);

DLL 中的函數在此處稱為"myFunction"。必須使用標志 KSF_DIRECT_EXEC,以便在觸發回調的同一上下文中運行回調。標志 KSF_SAVE_FPU 是必需的,用于在上下文切換上保存 FPU 和 SSE 寄存器的狀態。

關于結構包裝和對齊的重要通知
如果不使用默認結構打包,請確保包含具有相同結構打包效果的 OpenCV 標頭,就像用于構建 OpenCV 一樣(通常具有 8 個字節的默認打包)。OpenCV 頭文件不強制執行特定的結構打包。結構打包不匹配將導致二進制文件不兼容,從而在運行時導致各種錯誤。
一個例子是我們的樣本。它們使用與默認結構打包不同的結構打包,因此需要包含 OpenCV 標頭,并恢復默認結構打包。

在現在實際創建任務之前,我們還必須提高為其分配的堆棧空間。默認情況下,Windows 為每個線程保留 1 MB 的堆棧空間。Kithara 只保留 3 KB,這對于像 OpenCV 這樣的庫來說是不夠的。因此,我們將 KS_setTaskStackSize 的大小提高到 Windows 線程的典型大小。

KS_setTaskStackSize(0x100000, 0);

最后,我們創建任務。必須使用標志 KSF_CUSTOM_STACK_SIZE 創建任務,才能使用我們剛剛設置的更大的堆棧大小。

KSHandle hTask;
KS_createTask(&hTask, hCallBack, 250, KSF_CUSTOM_STACK_SIZE);

有關任務的更多信息,請參見 任務模塊。

請注意,只有實際調用 OpenCV 函數的函數才能作為任務執行。處理程序等的其他回調可以正常使用,并同時駐留在同一個 DLL 中。

圖像采集和 OpenCV

由于無法實時使用OpenCV附帶的圖像捕捉功能,因此必須使用相機模塊進行圖像采集。使用相機模塊中的函數 KS_recvCameraImage,您可以檢索指向圖像數據的指針以及有關寬度、高度、像素格式和行填充的信息。像素格式是 像素格式命名約定 (PFNC) 中定義的格式之一。有了這些信息,您可以使用 OpenCV 函數來創建 OpenCV 圖像 (cv::Mat),您可以進行處理。請注意,并非所有格式都適合轉換,例如幾種不同的包裝類型。如果沒有適合轉換的函數組合,則必須自行提供轉換函數。

cv::Mat 的構造函數非常靈活,因為它允許直接使用幾種不同的圖像格式而無需復制。此外,cv::cvtColorcv::mixChannels 可用于demosaic 、從不同的顏色空間轉換和重新排序通道,或合并來自不同圖像的通道。cv::Mat 構造函數的一個重要參數是參數"step",它描述了 to 行之間的字節計數。它取決于像素格式的單個像素的位大小和圖像的行填充。該步驟的計算方式如下:

step = 寬度 * bitSize / 8 + linePadding

如果行填充為零,則可以使用自動步驟。

以下是 PFNC 像素格式和匹配的 OpenCV 類型的映射:

PFNCOpenCV TypebitSizebits/Channel備注
Mono8CV_8UC188
Mono8sCV_8SC188
Mono10CV_16UC11610
Mono12CV_16UC11612
Mono14CV_16UC11614
Mono16CV_16UC11616
BayerGR8, BayerBG8, BayerRG8, BayerGB8CV_8UC1881)
BayerGR10, BayerBG10, BayerRG10, BayerGB10CV_16UC116101)
BayerGR12, BayerBG12, BayerRG12, BayerGB12CV_16UC116121)
BayerGR16, BayerBG16, BayerRG16, BayerGB16CV_16UC116161)
YUV8_UYV, YCbCr_8_CbYCr, YCbCr601_8_CbYCr, YCbCr709_8_CbYCrCV_8UC32482) 4)
RGB8, BGR8CV_8UC32482)
RGB10, BGR10CV_16UC348102)
RGB12, RGB12CV_16UC348122)
RGB16, RGB16CV_16UC348162)
RGBa8, BGRa8CV_8UC43282)
RGB565p, BGR565pCV_16UC1165, 63)
  1. 使用 cv::cvtColor demosaic 為 3 通道圖像。

  2. 使用 cv::cvtColor 轉換為不同的顏色空間和/或 cv::mixChannels 對組件進行重新排序。

  3. 使用 cv::cvtColor 轉換為 3 通道圖像。

  4. 對于 YUV 和相關類型,luma 通道始終是第二個通道,因此要轉換為更常見的格式,其中 luma 是第一個通道,您必須交換通道。

平面RGB格式(‘RGB8_Planar’、‘RGB10_Planar’、‘RGB12_Planar’、‘RGB16_Planar’)應被視為’單聲道’格式,創建三個圖像,然后可以將其組合成具有_cv::mixChannels_的多通道圖像。

自動并行化

我們的軟件支持 OpenCV 使用的 Microsoft 并發運行時。不支持其他并行化框架(如 OpenMP)。

自動并行化會在其他 CPU 上啟動其他任務,這可能會與您的實時應用程序設計沖突。如果沒有明確需要,我們建議通過調用 cv::setNumThreads(0) 來禁用自動并行化。

自動并行化任務從創建它們的任務繼承實時優先級。它們大多是在首次使用時或更新線程數時創建的。因此,顯式調用 cv::setNumThreads 以受控方式創建任務可能很有用。任務以循環方式分發到可用的 CPU,同時遵循 Windows 虛擬化中的進程關聯掩碼。Windows 函數 SetProcessAffinityMask、GetProcessAffinityMask 和 GetCurrentProcess 在實時上下文中可用,使你能夠控制允許啟動哪些 CPU 新任務。

限制和局限性

1.系統建議

由于所有分配都在非分頁池中,因此內核級別的內存資源受到限制,而非分頁池本身在 Windows 中是有限的資源。此問題對于 32 位 Windows XP 尤其適用,對于非分頁池,其最大大小為 256 MBytes。對于 64 位版本或高于 XP 的版本,這些限制設置得更高,如果您安裝了足夠的物理內存,則不會造成問題。另請注意,許多數據結構需要連續內存。這在 32 位平臺上可能很少見。

2.實時限制

某些 OpenCV 操作無法實時執行,因為它們需要與 Windows 系統交互。這些是文件處理和用戶交互(Windows、輸入)等功能。這些操作需要與用戶模式線程進行通信,但用戶模式線程的優先級很高,但當然無法滿足內核模式實時任務的實時約束。

3.不支持的功能和缺失的功能

以下功能不能在內核模式下使用:

  • 除 Microsoft 并發運行時以外的并行化框架

  • GPU 加速(OpenGL、OpenCL、CUDA、IPP Async、DirectX) 1)

  • 任何用于圖像捕獲和視頻解碼的第三方庫(DirectShow、VfW、FFMpeg、相機 API) 2)

  • OpenCV 模塊 HighGUI 3)

  1. 目前沒有計劃支持 GPU 加速。我們計劃支持將基于 CPU 的加速與 IPP 一起使用,包括 AVX 和 AVX2。

  2. 您可以使用我們的 相機模塊 從 GigE Vision? 和 USB 3 VisionTM 相機采集圖像。

  3. 對模塊"HighGUI"功能的基本子集只有基本的支持。我們不建議使用內核模式中的任何 GUI 元素(另請參閱下一段)。

4.顯示 OpenCV 對象

盡管您可以從內核級別使用簡單的 HighGUI 窗口,但不建議從內核級別打開窗口。顯示 OpenCV 對象的假定方法是使用共享內存區域將序列化的 OpenCV 項復制到其中,從而使用到用戶模式的進程間通信。

OpenCV 構建實例 (采用可視化操作的方式)

不想動手的話,也能獲取我們編譯好的資源: OpenCV - 4.1.0 靜態庫下載

1. 準備工作

  • 下載源碼:OpenCV官網 OpenCV - 4.1.0 下載
  • 安裝 Visual Studio 2017 (參考第一個項目中 Visual Studio 2022 C++ 開發環境安裝)

Visual Studio Community 2017 (version 15.7) (x86 and x64) - (Multiple Languages)
文件名: mu_visual_studio_community_2017_version_15.3_x86_x64_11100062.exe
SHA1: EC5E128EDC90FAC0BBADECD6DB32F8F008A4D669
文件大小: 1.02GB
發布時間 : 2017-08-14
方法: 復制ed2k鏈接,打開eMule或迅雷,新建下載,粘貼鏈接,開始下載

ed2k://|file|mu_visual_studio_community_2017_version_15.3_x86_x64_11100062.exe|1069960|5984B3CD547F9F213DE21EFE5887F08D|
  • 安裝CMake CMake下載 CMake 使用教程

2. OpenCV構建

  • 解壓OpenCV4.1.0的源碼后,打開源碼目錄創建 【build】 文件夾

  • 在這里插入圖片描述

  • 打開【cmake-gui.exe】開始構建項目,選擇源碼路徑,選擇構建目錄(使用創建的build目錄),點擊【Configure】
    在這里插入圖片描述

  • 選擇構建的版本(推薦 Visual Studio 2017) ,選擇構建平臺,點擊 【Finished】,等待配置完成
    在這里插入圖片描述

  • 根據上文中的一些說明進行配置
    配置選項:

選項操作
BUILD_SHARED_LIBSfalse
BUILD_WITH_STATIC_CRTtrue
WITH_OPENCLfalse
WITH_OPENGLfalse
WITH_DIRECTXfalse
WITH_CUDAfalse
WITH_MSMFfalse
WITH_IPPtrue
WITH_OPENCLAMDBLASfalse
WITH_OPENCLAMDFFTfalse
BUILD_TESTSfalse
BUILD_PERF_TESTSfalse
BUILD_opencv_worldfalse

在這里插入圖片描述
在這里插入圖片描述

  • 配置完成后點擊【Generate】生成Visual Studio 2017項目,等待執行完成
  • 在這里插入圖片描述
  • 執行成功后,點擊打開項目【Open Project】
  • 在這里插入圖片描述
    在這里插入圖片描述
  • 選擇構建版本,全部構建后,再點擊安裝,Release切換構建版本后同樣操作。
    在這里插入圖片描述在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 全部構建完成后,再【build】->【install】 目錄中就是已經編譯后的程序,你可以把他保存到你電腦的任意位置,以方便你在程序中調用;

  • 在這里插入圖片描述
    注意: 生成的庫 后綴中【d】結尾代表debug版本。
    在這里插入圖片描述
    現在,你可以嘗試運行一些Kithara執行OpenCV的一些示例了

          smp\LibraryOpenCVsmp\LibraryOpenCVDisplaysmp\LibraryOpenCVWithCamera
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44598.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44598.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44598.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 數據類型與基礎概念

在 Python 編程中,理解和掌握數據類型和基礎概念是至關重要的。這些概念不僅幫助我們更有效地編寫代碼,還使我們能夠創建更加復雜和功能豐富的應用程序。本文將詳細介紹 Python 中的基本數據類型及其相關操作,并涵蓋一些重要的基礎概念。 1.…

數字化打造行業生態產業鏈,企業新增益全知道

在當今數字化時代,利用數字化打造行業生態產業鏈成為企業發展的重要戰略選擇。那么,這一舉措究竟能為企業帶來哪些新增益呢?讓我們一探究竟。 一、運營效率大幅提高 數字化技術就像一條神奇的紐帶,將產業鏈上的各個環節緊緊相…

Python函數 之 匿名函數

1.概念 匿名函數: 使用 lambda 關鍵字 定義的表達式,稱為匿名函數. 2.語法 lambda 參數, 參數: 一行代碼 # 只能實現簡單的功能,只能寫一行代碼 # 匿名函數 一般不直接調用,作為函數的參數使用的 3.代碼 4.練習 # 1, 定義匿名函數, 參數…

32路串口服務器 應用領域

32路串口服務器在多個領域有著廣泛的應用,以下是詳細的應用實例: 一、工業自動化 在工業自動化領域,32路串口服務器發揮著舉足輕重的作用。傳統的工業設備往往采用串口通信方式,而串口服務器能夠將這些設備接入網絡,…

C++ 開源庫

1 PDFium PDFium 是一個開源的 PDF 渲染和處理庫,最初由 Foxit Software 開發,并于2014年捐贈給了 Chromium 項目。PDFium 旨在為各種應用程序提供高效、靈活的 PDF 渲染和操作功能。 2 代碼地址 https://github.com/chromium/pdfium 主要特性 渲染…

集訓 Day 3 總結 虛樹 + dfs tree + 基環樹

虛樹 虛樹,顧名思義是 只關注原樹上的某些 關鍵點,在保留原樹祖孫關系的前提下建出的一棵邊數、點數大大減少的樹 適用于優化某些在整棵樹上進行 d p dp dp、 d f s dfs dfs 的問題 通常是題目中出現多次詢問,每次給出樹上的一些關鍵點&a…

11網絡層-分組轉發算法

路由 分組轉發 1)從數據報的首部提取目的主機的IP地址D,得出目的網絡地址N 2)若N就是與此路由器直接相連的某個網絡地址,則進行直接交付,不需要經過其他路由器,直接將數據報交付給目的主機(這…

人為因素:為什么網絡安全不僅僅關乎技術

關注公眾號網絡研究觀獲取更多最新內容。 我們生活在一個生活與技術日益緊密交織的世界。但在構建防火墻和安裝防病毒軟件時,我們常常會忘記一個關鍵因素:人的行為。 網絡犯罪分子正是利用了人為因素,利用巧妙的心理戰術繞過最強大的安全措…

【MySQL基礎篇】事務

事務簡介 事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有的操作作為一個整體一起向系統提交或或撤銷操作請求,即這些操作要么同時成功,要么同時失敗。 典型事例:銀行轉賬操作 假設張三向李四進行轉賬…

Python:正則表達式相關整理

最近因為一些原因頻繁使用正則表達式,因為以前系統整理過關于正則表達式的相關知識,所以這里僅記錄使用期間遇到的問題。 本文內容基于re包 1. match和search方法的區別 在Python中,re.search和re.match都是用于匹配字符串的正則表達式函數&a…

防火墻NAT、智能選路綜合實驗

一、實驗拓撲 二、實驗要求 1,辦公區設備可以通過電信鏈路和移動鏈路上網(多對多的NAT,并且需要保留一個公網IP不能用來轉換) 2,分公司設備可以通過總公司的移動鏈路和電信鏈路訪問到Dmz區的http服務器 3,多出口環境基于帶寬比例…

Curator分布式鎖

Curator 是一個用于 Apache ZooKeeper 的客戶端庫,提供了更高級的抽象和工具,以簡化 ZooKeeper 的使用。Curator 是由 Netflix 開發的,并已成為分布式應用程序中使用 ZooKeeper 的事實標準。它解決了原生 ZooKeeper API 使用復雜、易出錯的問…

node js安裝、配置(Windows版)

目錄 node js 安裝 node js 全局配置 1、全局安裝路徑 2、全局緩存路徑 3、修改環境變量 pnpm安裝、卸載 全局安裝pnpm 驗證pnpm版本 卸載pnpm 1、移除全局安裝的包 2、移除pnpm cli 腳本直接安裝 npm安裝的使用命令直接卸載 node js 安裝 cmd 查看是否存在&…

容器docker 架構命令案例

文章目錄 前言一、docker1.1 為什么有docker1.2 docker架構1.3 docker 安裝1.4 docker中央倉庫1.5 docker 基本指令1.6 docker數據卷,掛載例:nginx 數據卷掛載例:mysql 本地持久化 1.7 鏡像制作鏡像結構dockerfile基礎指令容器生成鏡像 1.8 d…

宿主機訪問docker容器中的mysql被拒絕

問題: 解決方案: 1.進入docker中的mysql容器 docker exec -it 容器名稱/id /bin/bash 2.登錄用戶 mysql -u root -p 3.進去mysql自帶的管理數據庫mysql use mysql; 4.查詢用戶的訪問權限 SELECT user, host FROM user WHERE userroot;5.發現該用…

繪畫平臺小程序的設計

管理員賬戶功能包括:系統首頁,個人中心,學生管理,講師管理,課程類型管理,課程信息管理,課程購買管理,作業類型管理 開發系統:Windows 架構模式:SSM JDK版本&…

AURORA仿真

AURORA 仿真驗證 定義:AURORA是一種高速串行通信協議,通常用于在數字信號處理系統和其他電子設備之間傳輸數據。它提供了一種高效的方式來傳輸大量數據,通常用于需要高帶寬和低延遲的應用中。AURORA協議通常由Xilinx公司的FPGA器件支持&#…

golang 項目打包部署環境變量設置

最近將 golang 項目打包部署在不同環境,總結一下自己的心得體會,供大家參考。 1、首先要明確自己目標服務器的系統類型(例如 windows 或者Linux) ,如果是Linux 還需要注意目標服務器的CPU架構(amd或者arm) 目標服務器的CPU架構可執行命令&…

對Mapper.xml文件進行深入的學習

1. 前言 既上次在Mapper.xml文件出現bug之后&#xff0c;痛改前非&#xff0c;決定吃透Mapper.xml映射文件。 讓我們通過具體的代碼段來進一步理解 MyBatis 的 Mapper XML 文件中的每個組成部分。 <?xml version"1.0" encoding"UTF-8"?> <!…

python 爬取當當網圖書榜

首先查看當當網好評書單頁面&#xff0c;找到翻頁的URL參數 直接用requests請求頁面 resp requests.get(url) 找到想要的信息&#xff0c;使用正則表達式把這些信息提取出來 patternre.compile(list_num.*?(\d).<.*?<img src"(.*?)".*?title"(.*?…