一、引言
1.1 <libctk>的由來
1.2 <libctk>的設計理論依據
1.3 <libctk>的設計理念
二、<libctk>的依賴庫
三、<libctk>的目錄說明
四、<libctk>的功能模塊及使用實例說明
4.1 日志模塊
4.2 mysql client模塊
4.3 ftp client模塊
4.4 cv人臉檢測與識別模塊
五、下一步計劃
5.1 后續版本規劃
5.2 編寫SDK
5.3 開源計劃
一、引言
1.1 <libctk>的由來
設計初衷是作為<Smart-park-FaceDR-SVC>項目的輔助項目,個中緣由可查閱:智慧園區項目人臉檢測與識別子項目之-總體設計
實際上,<libctk>發展到現在,已經完全獨立于<Smart-park-FaceDR-SVC>項目,已經完完全全是linux下的一個shared library。
https://mp.csdn.net/mp_blog/creation/editor/139818825
1.2 <libctk>的設計理論依據:
筆者為了為本文作鋪墊,專門在之前編寫了:linux下的動態鏈接庫的編碼實現。
本文就不再描述<shared library>理論上的說明,一句話"干就完事!"(碼農最喜歡的就是實操)。
1.3 <libctk>的設計理念
(1) 不重復造輪子
利用現有的開源庫來避免重復造輪子,提高開發效率和代碼質量。同時,通過學習這些開源庫的源代碼,提升自己的編程技能和代碼水平。
(2) 優雅、簡潔、易用
優雅:共享庫的設計應該優雅簡潔,遵循UNIX哲學,即"簡單就是美"。避免過分復雜的設計,保持功能的簡潔性和易懂性。
簡潔:共享庫應該提供清晰簡潔的接口,盡量少暴露內部實現細節,使用戶可以方便地調用庫的功能,而不需要了解其具體實現。
易用:共享庫應該易于安裝、配置和使用,提供簡單的API和文檔,使用戶能夠快速上手并應用庫的功能。
總的來說,Linux下共享庫的設計應該遵循優雅、簡潔、易用的原則,以提高代碼的可維護性和可擴展性,同時提供良好的用戶體驗,讓用戶能夠方便地使用和擴展庫的功能。
二、<libctk>的依賴庫
庫名稱 | 說明 |
---|---|
libconfig++ | libconfig++是一個C++版本的libconfig配置文件解析庫。在Linux系統上,可以使用libconfig++庫來方便地讀取和修改配置文件,從而實現程序的靈活配置和參數設置。 |
spdlog | spdlog是一個快速、可擴展的C++日志記錄庫,提供了多種日志記錄方式和格式化選項。它支持多線程并發日志記錄,可以輕松地集成到各種應用程序中。 |
MySQL Connector/C++ | MySQL官方提供的C++庫,用于在Linux系統上連接和操作MySQL數據庫。需要在官網上下載對應OS版本的安裝包。 |
libcurl-dev | libcurl-dev 是用于 Linux 系統的 libcurl 的開發包,用于編譯和鏈接程序需要使用 libcurl 庫的程序。通過安裝 libcurl-dev,開發人員可以在其代碼中使用 libcurl 的功能,如 HTTP 請求、FTP 傳輸等等。 |
opencv4.9 | 是一個開源的計算機視覺庫,提供了很多計算機視覺和圖像處理的功能,如圖像處理、目標識別、特征檢測等。OpenCV庫可以在Linux下使用,并且提供了很多用于C++、Python和Java等編程語言的接口。 |
特別說明:以上庫,筆者全部選擇下載源碼編譯安裝(從版本、個性化方面考慮)。當然,你也可選擇apt-get方式安裝。至于編譯安裝方法,你可以自行擺渡,也可以在筆者的博文中查找相關文章。
三、<libctk>的目錄及CMakeList.txt文件說明
<libctk>的clion-IDE界面:
大概的目錄結構是這樣的:
libctk
│-- cmake
├-- conf
│-- include
|-----ctk
|-------cvFace.h
|-------cvUtils.h
|-------error.h
|-- onnx
├── src
│ ├── cvFace.cpp
│ ├── cvUtils.cpp
│ ├── error.cpp
│ └── ...
│-- build
└── CMakeList.txt
目錄說明:
目錄 | 說明 |
---|---|
cmake | .cmake文件的存放路徑。如:FindOpencv.cmake、utils.cmake |
conf | 配置文件的存放路徑。如:log.conf,mysql.conf,faceDR.conf |
include/ctk | 頭文件的存放路徑。 |
onnx | 存放<物體檢測>的訓練模型文件(ONNX文件) |
src | c++源代碼文件的存放路徑。 |
CMakeList.txt | 不用說明吧。 |
CMakeList.txt:
# ----------------------------------------------------------------------------
# Root CMake file for libctk
#
# From the off-tree build directory, invoke:
# $ cmake <PATH_TO_CTK_ROOT>
# Author: RemonLin
# ----------------------------------------------------------------------------
# Disable in-source builds to prevent source tree corruption.
if(" ${CMAKE_SOURCE_DIR}" STREQUAL " ${CMAKE_BINARY_DIR}")message(FATAL_ERROR "
FATAL: In-source builds are not allowed.You should create a separate directory for build files.
")
endif()list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
# message(STATUS "cmake_module_path is: ${CMAKE_MODULE_PATH}")
include(DepVersions)#cmake_minimum_required(VERSION "${MIN_VER_CMAKE}" FATAL_ERROR)
cmake_minimum_required(VERSION 3.21..3.29 FATAL_ERROR)# ---------------------------------------------------------------------------------------
# Start ctk project
# ---------------------------------------------------------------------------------------
include(cmake/utils.cmake)
ctk_extract_version()
message(STATUS "Build libctk: ${CTK_VERSION}")project(ctk VERSION ${CTK_VERSION} LANGUAGES CXX)
# ---------------------------------------------------------------------------------------
# Dependencies
# ---------------------------------------------------------------------------------------
# Find libconfig++
# find_package(libconfig ${LIBCONFIG_VERSION} REQUIRED HINTS ${LIBCONFIG_INSTALLATION_PATH})
# Find spdlog 1.13.0
include(Findspdlog)
find_package(spdlog ${SPDLOG_VERSION} REQUIRED HINTS ${SPDLOG_INSTALLATION_PATH})# Find OpenCV
include(FindOpenCV)
find_package(OpenCV ${OPENCV_VERSION} REQUIRED HINTS ${OPENCV_INSTALLATION_PATH})# Find CURL
include(FindCURL)
find_package(CURL REQUIRED)# must go before the project()/enable_language() commands
ctk_update(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Configs" FO