在Ultra96 V2平臺(tái)上用Python實(shí)現(xiàn)人臉檢測(cè)和人臉跟蹤
資料介紹
描述
介紹
本指南提供了在 Ultra96-V2 平臺(tái)上用 Python 實(shí)現(xiàn)人臉檢測(cè)和人臉跟蹤的詳細(xì)說明。
本教程建立在以下“Avnet Vitis 平臺(tái)的 Vitis-AI 1.1 流程”兩部分教程的基礎(chǔ)之上:
https://www.hackster.io/AlbertaBeef/vitis-ai-1-1-flow-for-avnet-vitis-platforms-part-1-007b0e
https://www.hackster.io/AlbertaBeef/vitis-ai-1-1-flow-for-avnet-vitis-platforms-part-2-f18be4
雖然本教程專門針對(duì) Ultra96-V2 平臺(tái),但它可以針對(duì)以下任何平臺(tái):
- Ultra96-V2開發(fā)板
- UltraZed-EV SOM (7EV) + FMC 載卡
- UltraZed-EG SOM (3EG) + IO 載卡
- UltraZed-EG SOM (3EG) + PCIEC 載卡
在本教程中,我們將構(gòu)建以下 AI 管道,用 Python 實(shí)現(xiàn),它可以作為未來算法探索的基礎(chǔ)。
有許多算法可用于人臉檢測(cè):
- 哈爾級(jí)聯(lián)
- 梯度直方圖 (HOG) + 狀態(tài)向量機(jī) (SVM)
- 深度神經(jīng)網(wǎng)絡(luò) (DNN):Single-Shot Detectors (SSD)、DenseBox 等……
還有幾種算法可用于對(duì)象跟蹤:
- 光流
- 卡爾曼濾波
- 均值偏移/凸輪偏移
將“檢測(cè)”算法與“跟蹤”算法結(jié)合起來的一種可能策略是利用“跟蹤”算法通常比“檢測(cè)”算法更快的事實(shí)。一種可能的實(shí)現(xiàn)可以從一次“檢測(cè)”迭代開始,然后是幾次“跟蹤”迭代,以優(yōu)化有限的計(jì)算資源。
在本教程中,我將采用不同的策略。由于我們已經(jīng)有一個(gè)實(shí)時(shí)運(yùn)行的優(yōu)化人臉檢測(cè)算法(DenseBox),我將在每一幀上執(zhí)行人臉“檢測(cè)”,并使用一個(gè)更簡(jiǎn)單的跟蹤算法,也在每一幀上執(zhí)行。
我決定使用的對(duì)象跟蹤是一個(gè)簡(jiǎn)單的質(zhì)心跟蹤器,由 PyImageSearch 的 Adrian Rosebrock 實(shí)現(xiàn):
Adrian Rosebrock,使用 OpenCV 進(jìn)行簡(jiǎn)單對(duì)象跟蹤,PyImageSearch,https: //www.pyimagesearch.com/2018/07/23/simple-object-tracking-with-opencv/ 于 2020 年 6 月 15 日訪問
如前所述,本教程將重用現(xiàn)有的預(yù)優(yōu)化densebox模型進(jìn)行人臉檢測(cè)。我們已經(jīng)在“Vitis-AI 1.1. Avnet Vitis 平臺(tái)的流程”教程。這一次,我們將從 Python 腳本而不是 C++ 應(yīng)用程序調(diào)用它。使用 Python 的動(dòng)機(jī)很簡(jiǎn)單,因?yàn)?Python 語言在業(yè)界主要用于快速算法探索。有大量的 Python 包和示例可用于快速構(gòu)建創(chuàng)意原型。
本教程將執(zhí)行以下步驟:
- 步驟 0 – Python 腳本概述
- 第 1 步 – 為支持 Vitis-AI 1.1 的平臺(tái)創(chuàng)建 SD 卡映像
- 第 2 步 – 安裝教程文件和所需的軟件包
- 第 3 步 - 執(zhí)行人臉檢測(cè)和跟蹤 Python 腳本
步驟 0 – Python 腳本概述
人臉檢測(cè)的Python實(shí)現(xiàn)
賽靈思提供的 Vitis-AI 1.1 為賽靈思器件上的 AI 推理提供了開發(fā)流程。該流程包括一個(gè)稱為 DPU(深度學(xué)習(xí)處理單元)的 AI 引擎,以及一個(gè)用于 Linux 應(yīng)用程序的 API,稱為 VART。
此 VART API 可用于 C++ 應(yīng)用程序以及 Python 腳本。
提供的大多數(shù)示例都是用 C++ 編寫的,而其中兩個(gè)分類示例是用 Python 提供的:
- 初始-v1
- 資源網(wǎng)50
但是,沒有為以下人臉檢測(cè)模型提供 Python 示例:
- 密集盒
由于理解 API 的最佳方式是編寫利用它的代碼,因此我著手編寫 Python 版本的人臉檢測(cè)示例,利用 Model Zoo 中的 densebox 模型。
事實(shí)證明,我在模型動(dòng)物園中找到了一個(gè)驗(yàn)證腳本,用于 cf_densebox_wider_360_640_1.11G 模型,
models/cf_densebox_wider_360_640_1.11G/code/test/visualTest/detect.py
這個(gè)腳本被用作我的代碼實(shí)現(xiàn)的參考。
首先,使用 VART API 的 Python 示例的一般格式如下:
dpu = runner.Runner("vitis_rundir")[0]
""" Prepare input/output buffers """
...
""" Execute model on DPU """
job_id = dpu.execute_async( inputData, outputData )
dpu.wait(job_id)
""" Retrieve output results """
...
第一行初始化 VART API,并指定可以找到模型元數(shù)據(jù)的目錄。在我們的Vitis-AI 1.1平臺(tái)中,我們感興趣的是640x360版本的densebox模型,它位于“/usr/share/vitis-ai_library/models/densebox_640_360”目錄下,內(nèi)容如下:
/usr/share/vitis_ai_library/models/densebox_640_360/
│
│ densebox_640_360.elf
│ densebox_640_360.prototxt
│ meta.json
“meta.json”文件包含模型的元數(shù)據(jù):
{
"target": "DPUv2",
"lib": "libvart-dpu-runner.so",
"filename": "densebox_640_360.elf",
"kernel": [ "densebox_640_360" ],
"config_file": "densebox_640_360.prototxt"
}
該文件表明我們使用“l(fā)ibvart-dpu-runner.so”API 以“DPUv2”硬件內(nèi)核為目標(biāo)。該模型有一個(gè)內(nèi)核,它是構(gòu)成 CNN 模型的連續(xù)層序列。內(nèi)核名稱為“densebox_640_360”,該內(nèi)核的可執(zhí)行代碼/數(shù)據(jù)包含在“densebox_640_360.elf”二進(jìn)制文件中。
prototxt 文件指示了我們 Python 實(shí)現(xiàn)所需的重要預(yù)處理信息(平均值、比例因子)。
model {
name : "dense_box_640x360"
kernel {
name: "tiling_v7_640"
mean: 128.0
mean: 128.0
mean: 128.0
scale: 1.0
scale: 1.0
scale: 1.0
}
model_type : DENSE_BOX
dense_box_param {
num_of_classes : 2
nms_threshold: 0.3
det_threshold: 0.9
}
}
第一步是對(duì)輸入圖像進(jìn)行預(yù)處理,并準(zhǔn)備輸入/輸出緩沖區(qū):
""" Image pre-processing """
# normalize
img = img - 128.0
# resize
img = cv2.resize(img,(inputWidth,inputHeight))
""" Prepare input/output buffers """
inputData = []
inputData.append(np.empty((inputShape), dtype=np.float32,order='C'))
inputImage = inputData[0]
inputImage[0,...] = img
outputData = []
outputData.append(np.empty((output0Shape), dtype=np.float32,order='C'))
outputData.append(np.empty((output1Shape), dtype=np.float32,order='C'))
預(yù)處理包括減去均值 (128)、縮放(在本例中為 1.0,因此不執(zhí)行),以及將輸入圖像的大小調(diào)整為模型的輸入尺寸 inputWidth x inputHeight (640 x 360)。
接下來,需要準(zhǔn)備一個(gè)包含輸入圖像的輸入緩沖區(qū),并且需要為以下兩個(gè)輸出分配兩個(gè)輸出緩沖區(qū):
- 邊界框:160 x 90 x {xmin, ymin, xmax, ymax}
- 分?jǐn)?shù):160 x 90 x {score0,score1}
請(qǐng)注意,模型輸出由 2D 網(wǎng)格結(jié)果組成,比輸入圖像小 4 倍(寬度和高度)。
模型在 DPU 上執(zhí)行,然后從內(nèi)存中檢索兩個(gè)輸出結(jié)果。
""" Execute model on DPU """
job_id = dpu.execute_async( inputData, outputData )
dpu.wait(job_id)
""" Retrieve output results """
OutputData0 = outputData[0].reshape(1,output0Size)
bboxes = np.reshape( OutputData0, (-1, 4) )
#
outputData1 = outputData[1].reshape(1,output1Size)
scores = np.reshape( outputData1, (-1, 2))
邊界框坐標(biāo)是相對(duì)于每個(gè)網(wǎng)格位置的,因此需要進(jìn)行后處理,將每個(gè)網(wǎng)格位置的絕對(duì)坐標(biāo)添加到邊界框結(jié)果中。以下 Python 代碼以矢量化方式實(shí)現(xiàn)了這一點(diǎn),以保持最佳性能:
""" Get original face boxes """
gy = np.arange(0,output0Height)
gx = np.arange(0,output0Width)
[x,y] = np.meshgrid(gx,gy)
x = x.ravel()*4
y = y.ravel()*4
bboxes[:,0] = bboxes[:,0] + x
bboxes[:,1] = bboxes[:,1] + y
bboxes[:,2] = bboxes[:,2] + x
bboxes[:,3] = bboxes[:,3] + y
每個(gè)網(wǎng)格位置的兩個(gè)分?jǐn)?shù)結(jié)果對(duì)應(yīng)于與不存在和存在的邊界框相關(guān)聯(lián)的分?jǐn)?shù)。這兩個(gè)結(jié)果需要?dú)w一化為總和為 1.0 的概率分布。我們使用 softmax 函數(shù)來執(zhí)行這一步。更具體地說,我們使用了一個(gè)特殊版本的 softwax,softmax_2,它執(zhí)行 2 類歸一化的幾次迭代 (160x90)。一旦歸一化,我們只保留邊界框出現(xiàn)的概率高于某個(gè)閾值的結(jié)果。
""" Run softmax """
softmax = softmax_2( scores )
""" Only keep faces for which prob is above detection threshold """
prob = softmax[:,1]
keep_idx = prob.ravel() > self.detThreshold
bboxes = bboxes[ keep_idx, : ]
bboxes = np.array( bboxes, dtype=np.float32 )
prob = prob[ keep_idx ]
此時(shí),仍有許多邊界框,其中大部分是彼此的重復(fù)(重疊實(shí)體)。為了去除這些重復(fù),使用了非最大抑制算法,該算法測(cè)量每個(gè)邊界框相對(duì)于彼此的重疊(IOU)。
""" Perform Non-Maxima Suppression """
face_indices = []
if ( len(bboxes) > 0 ):
face_indices = nms_boxes( bboxes, prob, self.nmsThreshold );
faces = bboxes[face_indices]
最后一步是將檢測(cè)到的人臉坐標(biāo)縮放回原始輸入圖像大小。對(duì)于這一步,我沒有以矢量化風(fēng)格進(jìn)行編碼,但這應(yīng)該可以忽略不計(jì),因?yàn)槲覀兺ǔ?yīng)該有少于十幾個(gè)面孔。
# extract bounding box for each face
for i, face in enumerate(faces):
xmin = max(face[0] * scale_w, 0 )
ymin = max(face[1] * scale_h, 0 )
xmax = min(face[2] * scale_w, imgWidth )
ymax = min(face[3] * scale_h, imgHeight )
faces[i] = ( int(xmin),int(ymin),int(xmax),int(ymax) )
留給讀者作為練習(xí),以向量化的形式重新編碼本節(jié)。請(qǐng)?jiān)谙旅娴脑u(píng)論中分享您的實(shí)施。
上面所有的代碼都被封裝在了下面的類中:
vitis_ai_vart/facedetect.py
這使得演示腳本更易于編碼和閱讀。例如,以下是人臉檢測(cè)示例的代碼摘錄:
...
import runner
from vitis_ai_vart.facedetect import FaceDetect
...
# Initialize Vitis-AI/DPU based face detector
dpu = runner.Runner("/usr/share/vitis_ai_library/models/densebox_640_360")[0]
dpu_face_detector = FaceDetect(dpu,detThreshold,nmsThreshold)
dpu_face_detector.start()
...
while True:
...
faces = dpu_face_detector.process(frame)
...
# Stop the face detector
dpu_face_detector.stop()
del dpu
人臉追蹤
為了實(shí)現(xiàn)人臉跟蹤,人臉檢測(cè)之后是一個(gè)簡(jiǎn)單的基于質(zhì)心的對(duì)象跟蹤算法。對(duì)于每個(gè)檢測(cè)到的人臉,計(jì)算邊界框的質(zhì)心,并逐幀跟蹤。有關(guān)此跟蹤實(shí)現(xiàn)的更多詳細(xì)信息,請(qǐng)參閱 PyImageSearch.com 上的原始教程:
Adrian Rosebrock,使用 OpenCV 進(jìn)行簡(jiǎn)單對(duì)象跟蹤,PyImageSearch,https: //www.pyimagesearch.com/2018/07/23/simple-object-tracking-with-opencv/ 于 2020 年 6 月 15 日訪問
單線程與多線程
單線程演示腳本的主要流程如下圖所示,其中“Worker”指的是我們的“Face Detection”和“Face Tracking”應(yīng)用示例。
單線程實(shí)現(xiàn)的最大幀率受限于整個(gè)應(yīng)用流水線的總執(zhí)行時(shí)間:Capture + Worker + Display。這并不理想,因?yàn)槲覀冎?CPU 在等待來自 USB 攝像頭的新幀時(shí)可能處于空閑狀態(tài),并且肯定會(huì)等待 DPU 完成每個(gè)內(nèi)核的執(zhí)行。
為了提高幀速率,還提供了一個(gè)多線程實(shí)現(xiàn),它將應(yīng)用程序分解為三個(gè)主要任務(wù):
- 捕獲任務(wù)
- 工作任務(wù)
- 顯示任務(wù)
任務(wù)通過同步隊(duì)列相互通信。
下一個(gè)簡(jiǎn)化圖說明了每個(gè)任務(wù)如何可以并行開始執(zhí)行。
為 CaptureTask 和 DisplayTask 線程提供了一個(gè)線程,而為 WorkerTask 提供了用戶可配置數(shù)量的線程,允許對(duì) DPU 的多個(gè)請(qǐng)求進(jìn)行流水線化。
下表概述了本教程提供的 Python 腳本。
第 1 步 – 為支持 Vitis-AI 1.1 的平臺(tái)創(chuàng)建 SD 卡映像
有關(guān)創(chuàng)建支持 Vitis-AI 1.1 的平臺(tái)的詳細(xì)說明,請(qǐng)參閱“Avnet Vitis 平臺(tái)的 Vitis-AI 1.1 流程”2 部分教程:
https://www.hackster.io/AlbertaBeef/vitis-ai-1-1-flow-for-avnet-vitis-platforms-part-1-007b0e
https://www.hackster.io/AlbertaBeef/vitis-ai-1-1-flow-for-avnet-vitis-platforms-part-2-f18be4
有關(guān)創(chuàng)建支持 Vitis-AI 1.1 的 Ultra96-V2 平臺(tái)的快速說明,請(qǐng)執(zhí)行以下步驟:
1) 下載并解壓以下預(yù)構(gòu)建 SD 卡映像
- ULTRA96V2:http ://avnet.me/avnet-ultra96v2-vitis-ai-1.1-image (MD5SUM = 7f54ceed152a0c704f5da18c4738b3fc)
2) 使用 Balena Etcher 將“Avnet-ULTRA96V2-Vitis-AI-1-1-2020-05-15.img”映像編程到 16GB micro SD 卡
3) 下載 Vitis-AI 1.1 教程的以下解決方案存檔,并解壓到 micro SD 卡的 BOOT 分區(qū):
- 常見:http ://avnet.me/Avnet-COMMON-Vitis-AI-1-1-image (MD5SUM = 464ecc94368d1cb7deb184b653e740a1)
4) 使用 SD 卡啟動(dòng) Ultra96-V2 開發(fā)板
5) 對(duì) WAYLAND 桌面進(jìn)行如下配置,可以改變顯示器的分辨率(詳見 Vitis-AI 1.1 教程)
$ cd /mnt/runtime/WAYLAND
$ source ./install.sh
$ cat weston_append.ini >> /etc/xdg/weston/weston.ini
$ source ./change_resolution_1920x1080.sh
6)對(duì)VART運(yùn)行時(shí)進(jìn)行如下配置
$ cd /mnt/runtime/VART
$ source ./install.sh
$ cd /mnt/runtime
$ dpkg -i vitis_ai_model_ULTRA96V2_2019.2-r1.1.1.deb
要驗(yàn)證支持 Vitis-AI 1.1 的平臺(tái),請(qǐng)執(zhí)行以下步驟:
7)更改為較低的分辨率,例如1280x720
$ source /mnt/runtime/WAYLAND/change_resolution_1280x720.sh
8)定義DISPLAY環(huán)境變量
$ export DISPLAY=:0.0
9)運(yùn)行C++版本的人臉檢測(cè)示例
$ cd /mnt/Vitis-AI-Library/overview/samples/facedetect
$ ./test_video_facedetect densebox_640_360 0
第 2 步 – 安裝教程文件和所需的軟件包
本教程的文件可以在 Avnet github 存儲(chǔ)庫中找到:
https://github.com/Avnet/face_py_vart
在 Ultra96-V2 嵌入式平臺(tái)上啟用以太網(wǎng)連接后,使用“pip3 install ...”安裝 Python 包:
$ cd /mnt
$ git clone https://github.com/Avnet/face_py_vart
如果您的嵌入式平臺(tái)上沒有可用的以太網(wǎng)連接,請(qǐng)從存儲(chǔ)庫下載教程文件:
然后,將其復(fù)制到 SD 卡的 BOOT 分區(qū),在名為“face_py_vart”的目錄下。
本教程具有以下項(xiàng)目結(jié)構(gòu):
/mnt/face_py_vart/
│
│ avnet_face_detection.py
│ avnet_face_detection_mt.py
│ avnet_face_tracking.py
│ avnet_face_tracking_mt.py
│ avnet_passthrough.py
│ avnet_passthrough_mt.py
│
├───pyimagesearch
│ │ centroidtracker.py
│ │ __init__.py
│ └───__pycache__
│
└───vitis_ai_vart
│ facedetect.py
│ __init__.py
└───__pycache__
“avnet_*.py”腳本是主要的演示腳本。
“vitis_??ai_vart”目錄包含基于 VART 的人臉檢測(cè)的 Python 實(shí)現(xiàn)。
“pyimagesearch”目錄包含來自 PyImageSearch.com 的重用質(zhì)心跟蹤代碼
本教程需要以下 Python 包。
在 Ultra96-V2 嵌入式平臺(tái)上啟用以太網(wǎng)連接后,使用“pip3 install ...”安裝 Python 包:
$ pip3 install imutils
如果您的嵌入式平臺(tái)上沒有可用的以太網(wǎng)連接,請(qǐng)從以下網(wǎng)站下載“imutils.0.5.3.tar.gz”包:
然后,將其復(fù)制到您的 SD 卡,并使用以下命令進(jìn)行安裝:
$ pip3 install imutils.0.5.3.tar.gz
第 3 步 - 執(zhí)行人臉檢測(cè)和跟蹤 Python 腳本
提供了以下三個(gè)演示的 Python 腳本,每個(gè)演示都有一個(gè)單線程和多線程實(shí)現(xiàn):
要在本教程中使用 Python 腳本,請(qǐng)導(dǎo)航到您在 SD 卡的 BOOT 分區(qū)上提取的“face_py_vart”目錄:
$ cd /mnt/face_py_vart
為了獲得有關(guān)如何使用每個(gè)演示 Python 腳本的幫助,請(qǐng)使用“-h”選項(xiàng),如下所述:
$ python3 avnet_passthrough_mt.py -h
usage: avnet_passthrough_mt.py [-h] [-i INPUT] [-t THREADS]
optional arguments:
-h, --help show this help message and exit
-i INPUT, --input INPUT
input camera identifier (default = 0)
-t THREADS, --threads THREADS
number of worker threads (default = 4)
$ python3 avnet_face_detection_mt.py -h
usage: avnet_face_detection_mt.py [-h] [-i INPUT] [-d DETTHRESHOLD] [-n NMSTHRESHOLD] [-t THREADS]
optional arguments:
-h, --help show this help message and exit
-i INPUT, --input INPUT
input camera identifier (default = 0)
-d DETTHRESHOLD, --detthreshold DETTHRESHOLD
face detector softmax threshold (default = 0.55)
-n NMSTHRESHOLD, --nmsthreshold NMSTHRESHOLD
face detector NMS threshold (default = 0.35)
-t THREADS, --threads THREADS
number of worker threads (default = 4)
$ python3 avnet_face_tracking_mt.py -h
usage: avnet_face_tracking_mt.py [-h] [-i INPUT] [-d DETTHRESHOLD] [-n NMSTHRESHOLD] [-t THREADS]
optional arguments:
-h, --help show this help message and exit
-i INPUT, --input INPUT
input camera identifier (default = 0)
-d DETTHRESHOLD, --detthreshold DETTHRESHOLD
face detector softmax threshold (default = 0.55)
-n NMSTHRESHOLD, --nmsthreshold NMSTHRESHOLD
face detector NMS threshold (default = 0.35)
-t THREADS, --threads THREADS
number of worker threads (default = 4)
人臉檢測(cè)
啟動(dòng)多線程人臉檢測(cè) Python 腳本:
$ python3 avnet_face_detection_mt.py -i 0 -d 0.55 -n 0.35 -t 4
人臉追蹤
啟動(dòng)多線程人臉跟蹤 Python 腳本:
$ python3 avnet_face_tracking_mt.py -i 0 -d 0.55 -n 0.35 -t 4
試驗(yàn)參數(shù)
如果您為一個(gè)獨(dú)特的人臉檢測(cè)到重復(fù)的 ROI,您可以嘗試使用“-d 0.90”命令行參數(shù)將檢測(cè)閾值detThreshold增加到更高的值。
基于質(zhì)心的對(duì)象跟蹤器允許檢測(cè)到的人臉消失一定數(shù)量的幀,這可以在 pyimageserach/centroidtracker.py 腳本中更改。這允許暫時(shí)“丟失”的面孔在重新出現(xiàn)時(shí)保持其關(guān)聯(lián)的“id”。在“pyimagesearch/centroidtracker.py”腳本中定義了面部被暫時(shí)丟失的幀數(shù) maxDisappeared :
class CentroidTracker():
def __init__(self, maxDisappeared=20):
概括
本教程介紹了如何從 Xilinx Model Zoo 訪問預(yù)訓(xùn)練的 densebox 模型以在 python 中進(jìn)行人臉檢測(cè)。
這個(gè)基于 python 的示例增加了一個(gè)簡(jiǎn)單的對(duì)象跟蹤算法。
最后,采用多線程實(shí)現(xiàn),更好地利用 CPU 和 DPU(硬件 AI 引擎),以實(shí)現(xiàn)更高的吞吐量。
我希望本教程將作為進(jìn)一步探索的基礎(chǔ)!
- Ultra96硬件用戶指南
- Ultra96 CSI-2視頻輸出到Raspberry Pi攝像頭輸入
- Ultra96上的實(shí)時(shí)攝像頭饋送網(wǎng)頁
- 使用PYNQ的Ultra96面部識(shí)別鎖栓
- 使用Tensil、TF-Lite和PYNQ在Ultra96板上運(yùn)行YOLO v4 Tiny
- 用于Ultra96的夾層板96AnalogXperience
- Ultra96 FPGA上的Live NYC Subway Monitor應(yīng)用程序
- 關(guān)于Ultra96的Xilinx DDS編譯器IP教程
- 與Ultra96聯(lián)網(wǎng)端口轉(zhuǎn)發(fā)
- Ultra96 V2上基于標(biāo)記的增強(qiáng)現(xiàn)實(shí)
- 使用Ultra96 PYNQ測(cè)定織物GSM
- Ultra96皮膚癌AI構(gòu)建
- 一種融合人臉跟蹤和聚類的人臉圖像去重方法 7次下載
- 一起玩Ultra96之GPIO操作
- 基于Mega2560的人臉檢測(cè)與定位跟蹤 4次下載
- 人臉識(shí)別技術(shù)的原理是什么 人臉識(shí)別技術(shù)的特點(diǎn)有哪些 1111次閱讀
- 中興車用操作系統(tǒng)SafetyLinux在A1000平臺(tái)上的適配 700次閱讀
- SpringBoot+Vue實(shí)現(xiàn)網(wǎng)頁版人臉登錄、人臉識(shí)別 950次閱讀
- 基于SeetaFace2和OpenCV實(shí)現(xiàn)人臉識(shí)別 2221次閱讀
- 什么是人臉識(shí)別?如何使用10行代碼實(shí)現(xiàn)人臉識(shí)別 5310次閱讀
- 人臉識(shí)別技術(shù)原理與實(shí)現(xiàn)方式 1.9w次閱讀
- 基于Arm技術(shù)的16nm MPSoC開發(fā)套件Ultra96 6099次閱讀
- 用Go語言實(shí)現(xiàn)人臉識(shí)別,怎么做到的 7386次閱讀
- 人臉識(shí)別發(fā)展歷程、市場(chǎng)研究、核心技術(shù)、商業(yè)應(yīng)用以及產(chǎn)業(yè)落地研究 7144次閱讀
- 如何用40行代碼實(shí)現(xiàn)人臉識(shí)別? 4699次閱讀
- Python搭建人臉識(shí)別系統(tǒng)最有價(jià)值的40行代碼 7269次閱讀
- 在Python中利用dlib進(jìn)行人臉檢測(cè) 6501次閱讀
- 滴滴人臉識(shí)別怎么破解 11.8w次閱讀
- 人臉識(shí)別技術(shù)原理分析及典例詳解 9014次閱讀
- 人臉識(shí)別成金融業(yè)“新寵” 1035次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多