一、引言
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