電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>在Ultra96 V2平臺(tái)上用Python實(shí)現(xiàn)人臉檢測(cè)和人臉跟蹤

在Ultra96 V2平臺(tái)上用Python實(shí)現(xiàn)人臉檢測(cè)和人臉跟蹤

2023-06-16 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹

本指南提供了在 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ǔ)。

pYYBAGOX1OmASWJnAAAQrwKdS0E090.png
?

有許多算法可用于人臉檢測(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)用示例。

poYBAGOX1OuARPLEAAAR-m6qBQk112.png
?

單線程實(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í)行。

pYYBAGOX1O2AO2SmAAAs_TF1C6s181.png
?

為 CaptureTask 和 DisplayTask 線程提供了一個(gè)線程,而為 WorkerTask 提供了用戶可配置數(shù)量的線程,允許對(duì) DPU 的多個(gè)請(qǐng)求進(jìn)行流水線化。

下表概述了本教程提供的 Python 腳本。

pYYBAGOX1PGAWbIhAAGwYu-rdhE258.png
?

第 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 卡映像

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 包。

pYYBAGOX1PaABVoCAABJcZEmNRM835.png
?

在 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):

pYYBAGOX1PiAOwJaAAEFz_su6xc076.png
?

要在本教程中使用 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ǔ)!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)