libctk shared library的設計及編碼實踐記錄

一、引言

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++庫來方便地讀取和修改配置文件,從而實現程序的靈活配置和參數設置。
spdlogspdlog是一個快速、可擴展的C++日志記錄庫,提供了多種日志記錄方式和格式化選項。它支持多線程并發日志記錄,可以輕松地集成到各種應用程序中。
MySQL  Connector/C++MySQL官方提供的C++庫,用于在Linux系統上連接和操作MySQL數據庫。需要在官網上下載對應OS版本的安裝包。
libcurl-devlibcurl-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文件)
srcc++源代碼文件的存放路徑。
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

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

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

相關文章

鴻蒙開發設備管理:【@ohos.geolocation (位置服務)】

位置服務 說明&#xff1a; 本模塊首批接口從API version 7開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。 導入模塊 import geolocation from ohos.geolocation;geolocation.on(‘locationChange’) on(type: ‘locationChange’, request: L…

安卓開發自定義時間日期顯示組件

安卓開發自定義時間日期顯示組件 問題背景 實現時間和日期顯示&#xff0c;左對齊和對齊兩種效果&#xff0c;如下圖所示&#xff1a; 問題分析 自定義view實現一般思路&#xff1a; &#xff08;1&#xff09;自定義一個View &#xff08;2&#xff09;編寫values/attrs.…

poi-tl 生成 word 文件(插入文字、圖片、表格、圖表)

文章說明 本篇文章主要通過代碼案例的方式&#xff0c;展示 poi-tl 生成 docx 文件的一些常用操作&#xff0c;主要涵蓋以下內容 &#xff1a; 插入文本字符&#xff08;含樣式、超鏈接&#xff09;插入圖片插入表格引入標簽&#xff08;通過可選文字的方式&#xff0c;這種方…

俄羅斯防空系統

俄羅斯的S系列防空系統是一系列先進的地對空導彈系統&#xff0c;旨在防御各類空中威脅&#xff0c;包括飛機、無人機、巡航導彈和彈道導彈。以下是幾種主要的S系列防空系統&#xff1a; 1. **S-300系統**&#xff1a; - **S-300P**&#xff1a;最早期的版本&#xff0c;用…

翻譯造句練習

翻譯練習 翻譯 1&#xff1a;經常做運動會提高人的自信 翻譯 2&#xff1a;教學的質量對學生成績有很大的影響。 翻譯 3&#xff1a;家長和老師應該努力去減少小孩看電視的時間。 翻譯 4&#xff1a;經濟的下滑&#xff08;economic slowdown&#xff09;導致失業率的上升 翻譯…

大模型和數據庫最新結合進展

寫在前面 本文主要內容是上次接受 infoQ 訪談&#xff0c;百度智能云朱潔老師介紹了大模型和 AI 結合相關話題&#xff0c;這次整體再刷新下&#xff0c;給到對這個領域感興趣的同學。 當前&#xff0c;百度智能云云數據庫特惠專場開始&#xff01;熱銷規格新用戶免費使用&am…

Android中ViewModel+LiveData+DataBinding的配合使用(kotlin)

Android 中 ViewModel、LiveData 和 Data Binding 的配合使用&#xff08;Kotlin&#xff09; 摘要 本文將介紹如何在 Android 開發中結合使用 ViewModel、LiveData 和 Data Binding 進行數據綁定和狀態更新。我們將詳細探討這三者之間的關系&#xff0c;并展示如何在 Kotlin…

最逼真的簡易交通燈設計

最逼真的簡易交通燈設計 需要資料的請在文章末尾獲取&#xff08;有問題可以私信我哦~~&#xff09; 01 資料內容 Proteus仿真文件程序源碼實物制作&#xff0c;代碼修改&#xff0c;功能定制&#xff08;需額外收費&#xff0c;價格實惠&#xff0c;歡迎咨詢&#xff09; …

實驗場:在幾分鐘內使用 Elasticsearch 進行 RAG 應用程序實驗

作者&#xff1a;來自 Elastic Joe McElroy, Serena Chou 什么是 Playground&#xff08;實驗場&#xff09;&#xff1f; 我們很高興發布我們的 Playground 體驗 —- 一個低代碼界面&#xff0c;開發人員可以在幾分鐘內使用自己的私人數據探索他們選擇的 LLM。 在對對話式搜…

41割隊伍

上海市計算機學會競賽平臺 | YACSYACS 是由上海市計算機學會于2019年發起的活動,旨在激發青少年對學習人工智能與算法設計的熱情與興趣,提升青少年科學素養,引導青少年投身創新發現和科研實踐活動。https://www.iai.sh.cn/problem/387 題目描述 給定 ??n 個數字 ??1,?…

一周小計(1):實習初體驗

實習的第一周&#xff0c;從最開始的配環境做好準備工作&#xff0c;到拉項目熟悉項目&#xff0c;然后自己去寫需求&#xff0c;每一步都有很大收獲&#xff0c;得到很多人幫助真的好感謝&#xff0c;以下是個人這幾天的記錄與感想。 &#xff08;這個其實是我寫的周報&#x…

Hi3861 OpenHarmony嵌入式應用入門--LiteOS Semaphore做同步使用

信號量作為同步使用 創建一個Semaphore對象&#xff0c;并指定一個初始的計數值&#xff08;通常稱為“許可”或“令牌”的數量&#xff09;。這個計數值表示當前可用的資源數量或可以同時訪問共享資源的線程數。當一個線程需要訪問共享資源時&#xff0c;它會嘗試從Semaphore…

加油站可視化:打造智能化運營與管理新模式

智慧加油站可視化通過圖撲 HT 構建仿真的三維模型&#xff0c;將加油站的布局、設備狀態、人員活動等信息動態呈現。管理者可以通過直觀的可視化界面實時監控和分析運營狀況&#xff0c;快速做出決策&#xff0c;提高管理效率和安全水平&#xff0c;推動加油站向智能化管理轉型…

后端之路第三站(Mybatis)——結合案例講Mybatis怎么操作sql

先講一下準備工作整體流程要做什么 我們要基于一個員工管理系統作為案例&#xff0c;進行員工信息的【增、刪、改、查】 原理就是用Mybatis通過java語言來執行sql語句&#xff0c;來達到【增、刪、改、查】 一、準備工作 1、引入數據庫數據 首先我們把一個員工、部門表的數…

【51單片機入門】速通定時器

文章目錄 前言定時器是什么初始化定時器初始化的大概步驟TMOD寄存器C/T寄存器 觸發定時器中斷是什么中斷函數定時器點亮led 總結 前言 在嵌入式系統的開發中&#xff0c;定時器是一個非常重要的組成部分。它們可以用于產生精確的時間延遲&#xff0c;或者在特定的時間間隔內觸…

對外發布的PDF文檔進行數字證書簽名的重要性?

對外發布的PDF文檔進行數字證書簽名具有以下幾個重要性&#xff1a; 身份驗證&#xff1a;數字簽名可以證明文檔的來源&#xff0c;即確認文檔的簽署者身份。這如同在紙質文檔上手寫簽名或加蓋公章&#xff0c;但更安全可靠&#xff0c;因為數字簽名是基于加密技術&#xff0c;…

Java--常用類APl(復習總結)

前言: Java是一種強大而靈活的編程語言&#xff0c;具有廣泛的應用范圍&#xff0c;從桌面應用程序到企業級應用程序都能夠使用Java進行開發。在Java的編程過程中&#xff0c;使用標準類庫是非常重要的&#xff0c;因為標準類庫提供了豐富的類和API&#xff0c;可以簡化開發過…

【接口自動化測試】第三節.實現項目核心業務接口自動化

文章目錄 前言一、實現登錄接口對象封裝和調用 1.0 登錄接口的接口測試文檔 1.1 接口對象層&#xff08;封裝&#xff09; 1.2 測試腳本層&#xff08;調用&#xff09;二、課程新增接口對象封裝和調用 2.0 課程新增接口的接口測試文檔 2.1 接口對象層…

AVL樹模擬

1.概念 雖然二叉搜索樹可以縮短查找的效率&#xff0c;但如果數據有序或者接近有序時二叉搜索樹樹將退化為單支樹&#xff0c;查找元素相當于在順序表中搜索元素&#xff0c;效率低下。AVL 樹是具有一下性質的二叉搜索樹&#xff1a; 1.它的左右子樹都是AVL樹 2.左右子…

Mac 如何安裝 wget

1.安裝 Homebrew2.安裝 wget3.檢測 wget 是否安裝成功 1.安裝 Homebrew 在安裝 wget 之前需要安裝一個適用于 mac 的包管理器 Homebrew&#xff0c;打開 mac 終端執行如下命令進行安裝&#xff1a; /usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/h…