<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

7.100ASK_V853-PRO開發板支持人形檢測和人臉識別

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-05-12 10:28 ? 次閱讀

1.前言

? V853 芯片內置一顆 NPU核,其處理性能為最大 1 TOPS 并有 128KB 內部高速緩存用于高速數據交換,支持 OpenCL、OpenVX、android NN 與 ONNX 的 API 調用,同時也支持導入大量常用的深度學習模型。本章提供一個例程,展示如何使用V853芯片中的NPU部分進行人形檢測和人臉識別。

資源包(含有應用程序和yuvplayer軟件包):source.zip
100ASK_V853-PRO開發板資料匯總:

鏈接:100ASK_100ASK-PRO 資料匯總 - Allwinner / V853-Pro - 嵌入式開發問答社區

100ASK_V853-PRO開發板購買鏈接:100ASK_V853-PRO開發板

pYYBAGRdo4yAf_iVAASQ3zSjFR0352.png

2.示例程序目錄

將上述資源包下載完成解壓后,把示例程序100ASK_viplite-driver放在Ubuntu中的任意目錄中。假設我放在/home/book/workspaces目錄下,下面為人形識別和人臉識別應用程序的目錄結構。

book@100ask:~/workspaces/100ASK_viplite-driver$ tree
.
├── 100ASK_Algo
│   ├── det_demo
│   │   ├── 100ASK_det_demo
│   │   ├── aw_errors.c
│   │   ├── aw_errors.h
│   │   ├── body_384x216.yuv
│   │   ├── body_640x360.yuv
│   │   ├── demo.cc
│   │   ├── face_480x270.nv12
│   │   ├── list.c
│   │   ├── list.h
│   │   ├── Makefile
│   │   ├── Readme.txt
│   │   └── testcase.txt
│   ├── fdet
│   │   └── 100ASK_Facedet_480_288_nv12.nb
│   ├── include
│   │   ├── awnn_det.h
│   │   ├── awnn.h
│   │   ├── awnn_info.h
│   │   ├── awnn_lib.h
│   │   └── cross_utils.h
│   ├── libawnn.a
│   ├── libawnn.so
│   ├── pdet
│   │   ├── 100ASK_humandet_384_224_V0.nb
│   │   ├── 100ASK_humandet_384_224_V1.nb
│   │   ├── 100ASK_humandet_640_384_V0.nb
│   │   └── 100ASK_humandet_640_384_V1.nb
│   └── Readme.txt
└── sdk_release
    ├── libVIPlite.a
    ├── libVIPlite.so
    ├── libVIPuser.a
    ├── libVIPuser.so
    └── sdk
        ├── vip_lite_common.h
        └── vip_lite.h

7 directories, 31 files

其中100ASK_Algo文件包含了:

? 1.det_demo目錄包含應用程序和測試圖片

? 2.fdet目錄包含人臉模型

? 3.include目錄包含應用程序頭文件和

? 4.pdet目錄包含人形模型

sdk_release中包含了NPU相關的模型處理文件

3.主函數demo.cc

下面僅對應用程序中的demo.cc程序中的main.cc進行講解,對于其他代碼,您可以直接查看應用程序壓縮包的其他文件。

int main(int argc, char* argv[]) {
    if (argc != 2) {
        printf("%s testcase.txtn", argv[0]);
        return 0;
    }
    int count = 0;
    /*創建一個結構體獲取參數1的中的數據,該結構體是輸入nbg路徑,返回awnn_info_t結構體。包含庫名稱,網絡輸入圖像寬高,內存占用大小,閾值信息等,其中count為處理的圖像和網絡模型個數*/
    network_info_t **infos = create_infos_from_testcase(argv[1], count);
    printf("count=%dn", count);

    if (count && infos) {
        awnn_info_t * nbinfo;
        unsigned int mem_size = 0;
        pthread_t thread[count] = {0};
		//獲取參數1獲取對應模型個數
        for (int i = 0; i < count; i++) {
            nbinfo = awnn_get_info(infos[i]->nbg);
            printf("info %s %s %u %u %u %fn", nbinfo->name, nbinfo->md5,
                    nbinfo->width, nbinfo->height, nbinfo->mem_size, nbinfo->thresh);
            infos[i]->nbinfo = nbinfo;
            mem_size += nbinfo->mem_size;
        }
		//根據內存初始化申請NPU模型所需的內存大小
        printf("mem_size: %un", mem_size);
        awnn_init(mem_size);
		//創建線程處理模型和圖片
        for (int i = 0; i < count; i++) {
            pthread_create(&thread[i], NULL, detect_thread, infos[i]);
        }
		
        for (int i = 0; i < count; i++) {
            if (thread[i] != 0)
                pthread_join(thread[i], NULL);
        }
        awnn_uninit();
    }
	//銷毀結構體內存
    destroy_infos(infos, count);
    return 0;
}

可以看到上述過程并沒有涉及到模型的處理過程,可以查看100ASK_viplite-driver/100ASK_Algo/include/目錄中對應函數的函數說明。

4.編譯應用程序

假設我將應用程序文件夾100ASK_viplite-driver放在~/workspaces/100ASK_viplite-driver,進入應用程序目錄下

book@100ask:~$ cd ~/workspaces/100ASK_viplite-driver/
book@100ask:~/workspaces/100ASK_viplite-driver$ cd 100ASK_Algo/det_demo/

假設我的Tina SDK放在/home/book/workspaces/tina-v853-open,為應用程序增加環境變量。

book@100ask:~/workspaces/100ASK_viplite-driver/100ASK_Algo/det_demo$ export TINA_TOP=/home/book/workspaces/tina-v853-open
book@100ask:~/workspaces/100ASK_viplite-driver/100ASK_Algo/det_demo$ export STAGING_DIR=~/workspaces/tina-v853-open/openwrt/openwrt/staging_dir/

添加完成后即可編譯應用程序

book@100ask:~/workspaces/100ASK_viplite-driver/100ASK_Algo/det_demo$ make
/home/book/workspaces/tina-v853-open/prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-muslgnueabi-g++ demo.cc list.c aw_errors.c -I./ -I./../../100ASK_Algo/include -L./../../100ASK_Algo -L./../../sdk_release -l:libawnn.a -l:libVIPlite.a -l:libVIPuser.a -o 100ASK_det_demo
book@100ask:~/workspaces/100ASK_viplite-driver/100ASK_Algo/det_demo$ ls
100ASK_det_demo  aw_errors.h       body_640x360.yuv  face_480x270.nv12  list.h    Readme.txt
aw_errors.c      body_384x216.yuv  demo.cc           list.c             Makefile  testcase.txt

編譯完成后,可以在當前目錄下生成一個名為100ASK_det_demo的應用程序。

5.修改testcase.txt

? testcase.txt文件里面包含有模型路徑、待檢測的圖像、圖像尺寸。下面對該文件進行詳細的解讀,testcase.txt原文件為:

# example:
# [network]
# network type thresh loop
# input1 width height
# input2 width height
# input3 width height
#
# network: nbg path
# type: 1(humanoidv1.0),3(humanoidv3.0),4(face)
# thresh: postprocess thresh
# loop: loop count
# input: multi test case each in oneline

[network]
models/100ASK_humandet_640_384_V1.nb 1 0.25 1
body_640x360.yuv 640 360

[network]
models/100ASK_humandet_384_224_V1.nb 3 0.25 1
body_384x216.yuv 384 216

[network]
models/100ASK_Facedet_480_288_nv12.nb 4 0.6 1
face_480x270.nv12 480 270

可以看到文件已經對該文件如何使用和網絡節點的各參數定義有了解釋。testcase.txt文件中可以包含有多個處理的模型,每個需要處理的模型需要有特定的格式要求,假設我現在使用的是100ASK_humandet_640_384_V1.nb模型文件處理test1_640x360.yuv的圖像文件,則可以修改testcase.txt文件為

[network]
models/100ASK_humandet_640_384_V1.nb 1 0.25 1
test1_640x360.yuv 640 360

models/100ASK_humandet_640_384_V1.nb為模型的存放路徑;1為模型的類別;0.25為后處理閾值;1為循環次數;test1_640x360.yuv為測試圖像的名稱;640 360為測試圖像的尺寸。

**注意:**100ASK_humandet_640_384_V1.nb為類別1,100ASK_humandet_384_224_V1.nb為類別3。

如果你還想使用同一個模型,增加一個test2_640x360.yuv測試圖像,可以直接在該模型下增加

test2_640x360.yuv測試圖像和圖像尺寸,例如:

[network]
models/100ASK_humandet_640_384_V1.nb 1 0.25 1
test1_640x360.yuv 640 360
test2_640x360.yuv 640 360

6.運行測試程序

? 我們在示例程序中已經放入供您進行測試使用的圖像,您也可以使用TF卡將虛擬機中的應用程序、模型和測試圖像等文件拷貝到TF卡中 ,TF卡中的文件結構應如下所示

book@100ask:/media/book/B89C-7C55$ tree
.
├── 100ASK_det_demo
├── body_384x216.yuv
├── body_640x360.yuv
├── face_480x270.nv12
├── models
│   ├── 100ASK_Facedet_480_288_nv12.nb
│   ├── 100ASK_humandet_384_224_V1.nb
│   └── 100ASK_humandet_640_384_V1.nb
└── testcase.txt

可以看到應用程序、測試圖片和testcase.txt文件放在TF卡根目錄的文件夾下,單獨創建一個models文件夾將模型文件放在該文件夾下。

? 將開發板板上電,插入12V電源線和2條Type-C數據線后,再將TF卡插入開發板中

pYYBAGRdo6uARhMaAA3vyQOxh0Q240.png

? 啟動完成開發板后,掛載TF卡到/mnt目錄下,輸入mount /dev/mmcblk1p1 /mnt/

root@TinaLinux:/# [ 9866.263682] sunxi-mmc sdc0: sdc set ios:clk 0Hz bm PP pm UP vdd 22 width 1 timing LEGACY(SDR12) dt B
[ 9866.523742] sunxi-mmc sdc0: no vqmmc,Check if there is regulator
[ 9866.553676] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B
[ 9866.593686] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B
[ 9866.606971] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B
[ 9866.619855] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B
[ 9866.633161] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B
[ 9866.855649] sunxi-mmc sdc0: sdc set ios:clk 0Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B
[ 9866.866027] sunxi-mmc sdc0: no vqmmc,Check if there is regulator
[ 9866.893675] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B
[ 9866.914333] mmc1: host does not support reading read-only switch, assuming write-enable
[ 9866.924044] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 4 timing LEGACY(SDR12) dt B
[ 9866.938320] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 4 timing UHS-DDR50 dt B
[ 9866.948838] sunxi-mmc sdc0: sdc set ios:clk 50000000Hz bm PP pm ON vdd 22 width 4 timing UHS-DDR50 dt B
[ 9866.959640] mmc1: new ultra high speed DDR50 SDHC card at address aaaa
[ 9866.967694] mmcblk1: mmc1:aaaa SU08G 7.40 GiB 
[ 9866.990824]  mmcblk1: p1
root@TinaLinux:/# mount /dev/mmcblk1p1 /mnt/
[ 3573.953864] FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

進入mnt目錄下即可看到TF卡內的文件

root@TinaLinux:/# cd /mnt/
root@TinaLinux:/mnt# ls
100ASK_det_demo            face_480x270.nv12
System Volume Information  models
body_384x216.yuv          testcase.txt
body_640x360.yuv
root@TinaLinux:/mnt# ls models/
100ASK_Facedet_480_288_nv12.nb  100ASK_humandet_640_384_V1.nb
100ASK_humandet_384_224_V1.nb

確保應用程序、模型文件夾中的模型文件、測試圖片、testcase.txt都存在后,即可開始運行測試程序,輸入

./100ASK_det_demo testcase.txt

root@TinaLinux:/mnt# ./100ASK_det_demo testcase.txt 
count=3
info  05dc32ee903c08a3abd53ddd829a8dd5 640 384 10061394 0.000000
info  827b3a725d0fd7173338a56fd06c8db0 384 224 2829624 0.000000
info  3d42fcd47490a62d52ea021760[ 7944.592701] npu[665][665] vipcore, device init..
[ 7944.600170] set_vip_power_clk ON

mem_size: 16530637
Version: AW[ 7944.608597] enter aw vip mem alloc size 16530637
NN_LIB_1.0.3
[0xb6f8f560]vip_in[ 7944.615697] aw_vip_mem_alloc vir 0xe1328000, phy 0x48800000
it[121], 
The version of Viplit[ 7944.623477] npu[665][665] gckvip_drv_init  kernel logical phy address=0x48800000  virtual =0xe1328000
e is: 1.8.0-0-AW-2023-02-24
VIPLite driver version=0x00010800...
malloc 384x224 nv12 buffer
malloc 480x288 nv12 buffer
malloc 640x384 nv12 buffer
save file: post_body_384x216.yuv
save file: post_face_480x270.nv12
save file: post_body_640x360.yuv
[ 7946.373546] npu[665][665] gckvip_drv_exit, aw_vip_mem_free
[ 7946.379816] aw_vip_mem_free vir 0xe1328000, phy 0x48800000
[ 7946.386027] aw_vip_mem_free dma_unmap_sg_atrs
[ 7946.391003] aw_vip_mem_free ion_unmap_kernel
[ 7946.396101] aw_vip_mem_free ion_free
[ 7946.400118] aw_vip_mem_free ion_client_destroy
[ 7946.410983] npu[665][665] vipcore, device un-init..

執行測試程序完成后可以查看當前目錄下的文件,輸入ls

root@TinaLinux:/mnt# ls
100ASK_det_demo                      post_body_640x360.yuv.input_0.txt
System Volume Information            post_body_640x360.yuv.input_1.txt
body_384x216.yuv                     post_body_640x360.yuv.output_0.txt
body_640x360.yuv                     post_data
face_480x270.nv12                    post_face_480x270.nv12
models                               post_face_480x270.nv12.input_0.txt
post_body_384x216.yuv                post_face_480x270.nv12.input_1.txt
post_body_384x216.yuv.input_0.txt    post_face_480x270.nv12.output_0.txt
post_body_384x216.yuv.input_1.txt    post_face_480x270.nv12.output_1.txt
post_body_384x216.yuv.output_0.txt   post_face_480x270.nv12.output_2.txt
post_body_384x216.yuv.output_1.txt   testcase.txt
post_body_640x360.yuv

上述文件中,帶有post前綴的文件為執行應用程序后生成的文件。其中post_data文件夾含有模型的執行結果和執行性能

post_data/result_TID.txt :輸出每個模型檢測結果,其中 TID 為檢測線程ID號。
post_data/performance_TID.txt :輸出每個模型檢測性能結果,其中 TID 為檢測線程ID號;性能評測時建議運行單個模型且將 stdout 重定向為 /dev/null 。
post_inputN :每個輸入的畫框結果,其中 inputN 為輸入圖像路徑,直接在路徑前添加 post_前綴進行保存,因此輸入圖像路徑請勿添加 ./ 或使用絕對路徑。

post_body_384x216.yuv 、post_body_640x360.yuv、post_face_480x270.nv12為輸出畫框結果的圖像。

卸載TF卡所用的文件系統,輸入

root@TinaLinux:/mnt# cd ../
root@TinaLinux:/# umount /mnt/

7.使用yuvplayer軟件查看圖像

將TF卡放入讀卡器后,插入電腦端,使用yuvplayer軟件打開圖像,該文件放在source目錄下的yuvplayer-2.5.zip,解壓后即可使用。設置圖像尺寸和顏色空間即可查看圖像。

在電腦端,打開U盤文件夾。注意:您之前沒使用過yuvplayer.exe,可能不會出現我的.nv12文件一樣的圖標,但不影響后續的操作。

pYYBAGRdo7iAPa78AACfMVAIQok312.png

選擇我們需要查看的圖像,例如我想查看body_640x360.yuv文件,單擊body_640x360.yuv文件后,右鍵后選擇打開方式。

pYYBAGRdo8GAUtpjAAEjKNbcZD8375.png

點擊更多應用

pYYBAGRdo8eALRn6AAAtgxPOX8s495.png

使用滾輪往下滑,點擊在這臺電腦上查找其他應用

poYBAGRdo9SAaARZAAAxubdp_ec005.png

找到yuvplayer-2.5.zip解壓出來的yuvplayer-2.5文件夾中的yuvplayer.exe文件,選中該文件后點擊打開

poYBAGRdo-GAd_PhAACOq8iRZn0560.png

打開后,會出現如下畫面,該畫面是由于沒有設置尺寸和顏色空間導致的

pYYBAGRdo-yAS_vaAAMr8ofQmW0663.png

在選項欄中點擊Size后,選擇Custom。這樣的選擇意思是選擇自定義尺寸

pYYBAGRdo_SAUYnqAAIELzaId14269.png

在自定義尺寸界面輸入圖像尺寸,該圖像尺寸寬為640,高為360,設置完成后點擊確定

poYBAGRdo_yAOxiEAALU1R9DGOY999.png

確定完成之后可以,看到大致的圖像,但此時還需要修改顯示的圖像空間。

pYYBAGRdpBmASFIbAAgMcJaSbAo664.png

在選項欄中點擊選擇Color后,點擊選擇NV12顏色空間

poYBAGRdpB-AMhEZAAYoxUTe5M8052.png

選擇完成后,即可看到正常的圖像

pYYBAGRdpCWAAy7GAAcO2y-0SW4417.png

其他圖像的查看方式也同理,值得注意的是每張圖像的尺寸可能不一樣,需要根據源圖像的尺寸設置。

使用yuvplayer查看post_face_480x270.nv12 圖像文件為:

pYYBAGRdpCuAXMBNAAL6y4axFzw742.png

7.使用自定義圖片測試

? 由于我們平常使用的圖片格式多為JPG或者PNG格式,其圖像數據格式都為RGB等常見顏色空間,但在視頻編解碼和視頻傳輸應用中通常使用NV12的視頻存儲格式,它將圖片中 Y 軸色度信息和 UV 軸亞像素信息存儲在同一個平面中。這就導致在 NV12 格式中,圖像的每一行都存儲一個 Y 值(代表色度信息),然后每隔兩行存儲一個 U 和 V 值(代表亞像素信息)。所以NV12 格式中的圖像數據通常會比其他格式(如 RGB)少一半。

? 如果您獲取的應用的圖像為NV12就不需要進行格式轉換,如果您想測試的圖像為并不是NV12格式,而是我們常見的RGB格式的JPG或PNG圖像,則需要使用工具進行轉換。

? 下面我們使用的工具是ffmpeg,下面演示如何使用ffmpeg進行圖像存儲格式的轉換。

? 安裝ffmpeg,在虛擬機終端界面輸入sudo apt-get install ffmpeg

book@100ask:~$ sudo apt-get install ffmpeg
[sudo] password for book: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libdumbnet1
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
  i965-va-driver libaacs0 libass9 libavcodec57 libavdevice57 libavfilter6
  libavformat57 libavresample3 libavutil55 libbdplus0 libbluray2 libbs2b0
  libchromaprint1 libcrystalhd3 libdc1394-22 libflite1 libgme0 libgsm1
  libllvm10 libmysofa0 libnorm1 libopenal-data libopenal1 libopenjp2-7
  libopenmpt0 libpgm-5.2-0 libpostproc54 librubberband2 libsdl2-2.0-0
  libshine3 libsnappy1v5 libsndio6.1 libsoxr0 libssh-gcrypt-4 libswresample2
  libswscale4 libva-drm2 libva-x11-2 libva2 libvdpau1 libx264-152 libx265-146
  libxvidcore4 libzmq5 libzvbi-common libzvbi0 mesa-va-drivers
  mesa-vdpau-drivers va-driver-all vdpau-driver-all
Suggested packages:
  ffmpeg-doc i965-va-driver-shaders libbluray-bdj firmware-crystalhd
  libportaudio2 sndiod libvdpau-va-gl1 nvidia-vdpau-driver
  nvidia-legacy-340xx-vdpau-driver
The following NEW packages will be installed:
  ffmpeg i965-va-driver libaacs0 libass9 libavcodec57 libavdevice57
  libavfilter6 libavformat57 libavresample3 libavutil55 libbdplus0 libbluray2
  libbs2b0 libchromaprint1 libcrystalhd3 libdc1394-22 libflite1 libgme0
  libgsm1 libllvm10 libmysofa0 libnorm1 libopenal-data libopenal1 libopenjp2-7
  libopenmpt0 libpgm-5.2-0 libpostproc54 librubberband2 libsdl2-2.0-0
  libshine3 libsnappy1v5 libsndio6.1 libsoxr0 libssh-gcrypt-4 libswresample2
  libswscale4 libva-drm2 libva-x11-2 libva2 libvdpau1 libx264-152 libx265-146
  libxvidcore4 libzmq5 libzvbi-common libzvbi0 mesa-va-drivers
  mesa-vdpau-drivers va-driver-all vdpau-driver-all
0 upgraded, 51 newly installed, 0 to remove and 242 not upgraded.
Need to get 32.5 MB/47.9 MB of archives.
After this operation, 222 MB of additional disk space will be used.
Do you want to continue? [Y/n] y

此時會提示您將有222M空間需要被使用,此時輸入y,即可進行下載安裝

等待安裝完成后,輸入ffmpeg -h

book@100ask:~$ ffmpeg -h
ffmpeg version 3.4.11-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  ...

可以看到ffmpeg的版本號和適用的Ubuntu,后續的使用指南可自行觀看,這里就不展示全部輸出信息。

下面我們使用《RISC-V嵌入式開發線下交流會》中的照片,尺寸為480×270,圖像格式為JPG

pYYBAGRdpDaAJguzAAPwBHz768I691.png
book@100ask:~/workspaces/testImg$ ls
test_480-270.jpg

使用ffmpeg進行格式轉換,在終端輸入ffmpeg -i test_480-270.jpg -s 480x288 -pix_fmt nv12 100ask_face-480-270.yuv

book@100ask:~/workspaces/testImg$ ffmpeg -i test_480-270.jpg -s 480x270 -pix_fmt nv12 100ask_face-480-270.yuv
ffmpeg version 3.4.11-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
Input #0, image2, from 'test_480-270.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 5699 kb/s
    Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 480x270 [SAR 96:96 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> rawvideo (native))
Press [q] to stop, [?] for help
[swscaler @ 0x55787ff64b20] deprecated pixel format used, make sure you did set range correctly
Output #0, rawvideo, to '100ask_face-480-270.yuv':
  Metadata:
    encoder         : Lavf57.83.100
    Stream #0:0: Video: rawvideo (NV12 / 0x3231564E), nv12, 480x270 [SAR 1:1 DAR 16:9], q=2-31, 38880 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.107.100 rawvideo
frame=    1 fps=0.0 q=-0.0 Lsize=     190kB time=00:00:00.04 bitrate=38880.0kbits/s speed=0.664x    
video:190kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

執行完成沒有出現報錯,并可以輸入ls查看轉換后的圖像文件

book@100ask:~/workspaces/testImg$ ls 
test_480-270.jpg	100ask_face-480-270.yuv

可以發現生成了一個名為100ask_face-480-270.yuv文件,該文件的圖像尺寸為480×270,圖像存儲格式為NV12。

將其拷貝到開發板上,與應用程序100ASK_det_demo放在同一目錄中,例如:

root@TinaLinux:/mnt# ls
100ASK_det_demo
100ask_face-480-270.yuv
System Volume Information
body_384x216.yuv
body_640x360.yuv
face_480x270.nv12
models
post_100ask_face-480_288.yuv.input_0.txt
post_100ask_face-480_288.yuv.input_1.txt
post_100ask_face-480_288.yuv.output_0.txt
post_100ask_face-480_288.yuv.output_1.txt
post_100ask_face-480_288.yuv.output_2.txt
post_body_384x216.yuv
post_body_384x216.yuv.input_0.txt
post_body_384x216.yuv.input_1.txt
post_body_384x216.yuv.output_0.txt
post_body_384x216.yuv.output_1.txt
post_body_640x360.yuv
post_body_640x360.yuv.input_0.txt
post_body_640x360.yuv.input_1.txt
post_body_640x360.yuv.output_0.txt
post_data
post_face_480x270.nv12
post_face_480x270.nv12.input_0.txt
post_face_480x270.nv12.input_1.txt
post_face_480x270.nv12.output_0.txt
post_face_480x270.nv12.output_1.txt
post_face_480x270.nv12.output_2.txt
testcase.txt

修改testcase.txt,增加人臉模型的輸入圖像,在串口終端輸入

root@TinaLinux:/mnt# vi testcase.txt

修改文件內容為:

# example:
# [network]
# network type thresh loop
# input1 width height
# input2 width height
# input3 width height
#
# network: nbg path
# type: 1(humanoidv1.0),3(humanoidv3.0),4(face)
# thresh: postprocess thresh
# loop: loop count
# input: multi test case each in oneline

[network]
models/100ASK_humandet_640_384_V1.nb 1 0.25 1
body_640x360.yuv 640 360

[network]
models/100ASK_humandet_384_224_V1.nb 3 0.25 1
body_384x216.yuv 384 216

[network]
models/100ASK_Facedet_480_288_nv12.nb 4 0.6 1
face_480x270.nv12 480 270
100ask_face-480-270.yuv 480 270

運行100ASK_det_demo應用程序

root@TinaLinux:/mnt# ./100ASK_det_demo testcase.txt
count=3
info  05dc32ee903c08a3abd53ddd829a8dd5 640 384 10061394 0.000000
info  827b3a725d0fd7173338a56fd06c8db0 384 224 2829624 0.000000
info  3d42fcd47490a62d52ea021760[  212.538113] npu[465][465] vipcore, device init..
[  212.545449] set_vip_power_clk ON

mem_size: 16530637
Version: AW[  212.553935] enter aw vip mem alloc size 16530637
NN_LIB_1.0.3
[0xb6fe0560]vip_init[121], 
The version of Viplite is: 1.8.0-0-AW-2023-02-24
[  212.569158] aw_vip_mem_alloc vir 0xe1353000, phy 0x48800000
[  212.575548] npu[465][465] gckvip_drv_init  kernel logical phy address=0x48800000  virtual =0xe1353000
VIPLite driver version=0x00010800...
malloc 480x288 nv12 buffer
malloc 384x224 nv12 buffer
malloc 640x384 nv12 buffer
save file: post_body_384x216.yuv
save file: post_face_480x270.nv12
save file: post_body_640x360.yuv
save file: post_100ask_face-480-270.yuv
[  215.019076] npu[465][465] gckvip_drv_exit, aw_vip_mem_free
[  215.025231] aw_vip_mem_free vir 0xe1353000, phy 0x48800000
[  215.031525] aw_vip_mem_free dma_unmap_sg_atrs
[  215.036451] aw_vip_mem_free ion_unmap_kernel
[  215.041627] aw_vip_mem_free ion_free
[  215.045646] aw_vip_mem_free ion_client_destroy
[  215.051785] npu[465][465] vipcore, device un-init..

使用yuvplayer軟件查看圖像,配置圖像的尺寸:寬480、高270;配置圖像顏色空間為NV12

pYYBAGRdpEGAS5LsAAOjKqA2NR4916.png

可以看到該模型已經檢測到大部分人臉模型,可能由于圖像過于模糊導致有個別未能識別到,但該模型的精度還是比較高的。這里僅演示人臉識別,對于人形識別大家也可以參考這個示例自行去修改增加。參考這個示例大家可以去自己嘗試獲取自定義的圖像進行人臉識別或人形檢測。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    447

    文章

    47995

    瀏覽量

    410374
  • Linux
    +關注

    關注

    87

    文章

    11001

    瀏覽量

    206847
  • AI
    AI
    +關注

    關注

    87

    文章

    26679

    瀏覽量

    264337
  • 開發板
    +關注

    關注

    25

    文章

    4506

    瀏覽量

    94458
  • 人臉識別
    +關注

    關注

    76

    文章

    3962

    瀏覽量

    80701
收藏 人收藏

    評論

    相關推薦

    1.100ASK_V853-PRO 環境配置及編譯燒寫

    本章主要介紹關于100ASK_V853-PRO開發板的Tina SDK包的下載和編譯打包生成鏡像,并將鏡像燒錄到100ASK_V853-PRO開發板上。在進行100
    的頭像 發表于 05-10 11:49 ?1069次閱讀
    1.100<b class='flag-5'>ASK_V853-PRO</b> 環境配置及編譯燒寫

    2.100ASK-V853-PRO開發板支持WIFI和有線網卡

    ? 通過上一章節,我們已經成功下載Tina SDK包,完成編譯并燒寫Tina Linux系統,接下來展示100ASK_V853-PRO開發部如何通過WIFI和有線網卡進行上網。
    的頭像 發表于 05-10 14:44 ?987次閱讀
    2.100<b class='flag-5'>ASK-V853-PRO</b><b class='flag-5'>開發板</b><b class='flag-5'>支持</b>WIFI和有線網卡

    3.100ASK_V853-PRO開發板支持七寸RGB屏

    ? 在前面我們已經學習了關于100ASK_V853-PRO編譯和燒寫,接下來就是在Tina SDK下去適配七寸RGB屏。
    的頭像 發表于 05-10 15:26 ?922次閱讀
    3.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發板</b><b class='flag-5'>支持</b>七寸RGB屏

    5.100ASK_V853-PRO開發板支持按鍵輸入

    ? 100ASK_V853-PRO開發板上共有5個功能按鍵,本章節跟大家討論如何使能這五個按鍵。
    的頭像 發表于 05-11 10:02 ?891次閱讀
    5.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發板</b><b class='flag-5'>支持</b>按鍵輸入

    6.100ASK_V853-PRO開發板支持MIPI攝像頭

    ? 100ASK_V853-PRO開發板支持4LINE的MIPI攝像頭和2LINE的MIPI攝像頭,使用百問網提供的Tina SDK包生成的鏡像,系統已經配置好了,可以直接使用。本章介紹如何去適配一個MIPI攝像頭,本文所用的2
    的頭像 發表于 05-11 10:08 ?1198次閱讀
    6.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發板</b><b class='flag-5'>支持</b>MIPI攝像頭

    9.100ASK_V853-PRO開發板支持E907小核開發

    ? 100ASK_V853-PRO開發板的V853芯片集成Arm Cortex-A7和RISC-V E907 雙CPU,玄鐵E907 是一款完全可綜合的高端 MCU 處理器。它兼容 RV32IMAC
    的頭像 發表于 05-12 10:35 ?1083次閱讀
    9.100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發板</b><b class='flag-5'>支持</b>E907小核<b class='flag-5'>開發</b>

    全志V853開發板原理圖

    ,通過上拉或下拉執行啟動。 開發板預留了SPI NOR、SPI NAND的焊盤,可以焊接 V853 芯片支持的 SPI NOR、SPI NAND 儲存器 BOOT SEL 0BOOT SEL
    發表于 01-12 09:48

    全志V853開發板發布!開發板試用同步開放申請!

    V853開發板購買鏈接:https://www.hqchip.com/p/KFB-V853.html全志V853芯片是全志推出的面向邊緣AI視覺處理的AIoT芯片,
    發表于 07-01 10:46

    【免費試用04期】全志V853開發板試用活動

    本期試用名單:mameng lingxin-yuhe春天一滿屋 大菠蘿AlphaALSET試用報告:mameng【全志V853開發板試用】國產之光——全志V853開發硬件介紹【全志
    發表于 07-21 10:27

    【全志V853開發板試用】全志V853開發板試用測評報告

    SDQ8-SDQ16+SDQSN/P1+SDQM1 這樣可以方便內存的 PCB 布線。V853 芯片支持雙貼DRAM、同時也支持單帖雙RANK的DRAM,最大16Gb。5.開發板初體
    發表于 08-29 02:09

    【全志V853開發板試用】國產之光——全志V853開發硬件介紹

    開發板硬件:V853架構: 開發板亮點全志V853,搭載玄鐵e907-r1s1架構。STM32F103一般大小。功能卻異常強大。V853內置
    發表于 08-29 20:38

    【開源硬件大賽】基于全志V853設計的全功能BTB學習開發板

    100ask_V853-Pro開發簡述核心資源簡述BTB核心,板載EMMC DDR V853 主芯片 AXP電源芯片背面
    發表于 12-07 15:03

    100ASK_全志V853-PRO開發板 環境配置及編譯燒寫

    0.前言 本章主要介紹關于100ASK-V853-PRO開發板的Tina SDK包的下載和編譯打包生成鏡像,并將鏡像燒錄到100ASK-V853-PRO開發板上。在進行100
    發表于 05-04 10:14

    100ASK_全志V853-PRO開發板支持人形檢測人臉識別

    去修改增加。參考這個示例大家可以去自己嘗試獲取自定義的圖像進行人臉識別人形檢測。 對于如何在100ASK_V853-PRO如何實時處理從攝
    發表于 05-10 10:13

    100ASK_V853-PRO開發板支持人形檢測人臉檢測

    本文詳細描述了100ASK_V853-PRO開發板運行測試程序檢測人形人臉的過程,輸出文件包含畫框圖像結果、執行性能、模型精確度。下面直接
    的頭像 發表于 04-27 11:00 ?436次閱讀
    100<b class='flag-5'>ASK_V853-PRO</b><b class='flag-5'>開發板</b><b class='flag-5'>支持</b><b class='flag-5'>人形</b><b class='flag-5'>檢測</b>與<b class='flag-5'>人臉</b><b class='flag-5'>檢測</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>