segunda-feira, 25 de novembro de 2024

MILK-V DUO 256 - LENDO IMAGEM COM OPENCV E RECONHECENDO ATÉ 80 OBJETOS COM YOLOV5

 

Opencv-mobile é uma versão leve da biblioteca OpenCV que minimiza a compilação do OpenCV ajustando os parâmetros de compilação e removendo certas partes do código-fonte do OpenCV.

O opencv-mobile fornece funcionalidades comumente usadas do OpenCV, como processamento de imagem, operações de matriz e muito mais. Ele permanece sincronizado com a versão upstream e não tem dependências de terceiros. Na maioria dos casos, ele pode substituir perfeitamente o OpenCV oficial com apenas 1/10 do tamanho, tornando-o particularmente adequado para ambientes móveis e incorporados com requisitos de tamanho específicos.

O opencv-mobile já suporta decodificação JPG acelerada por hardware e aceleração de hardware VPSS (Video Processing Subsystem) no Milk-V Duo/Duo256M/DuoS.

Ver blog

https://milk-v.blogspot.com/2024/11/milkv-duo-riscv64-linux-musl-hw-jpg.html

Foi compilado a seguinte aplicação para o OPENCV

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <unistd.h> // sleep()

int main()
{
cv::VideoCapture cap;
cap.set(cv::CAP_PROP_FRAME_WIDTH, 320);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 240);
cap.open(0);

const int w = cap.get(cv::CAP_PROP_FRAME_WIDTH);
const int h = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
fprintf(stderr, "%d x %d\n", w, h);

cv::Mat bgr[9];
for (int i = 0; i < 9; i++)
{
cap >> bgr[i];

sleep(1);
}

cap.release();

// combine into big image
{
cv::Mat out(h * 3, w * 3, CV_8UC3);
bgr[0].copyTo(out(cv::Rect(0, 0, w, h)));
bgr[1].copyTo(out(cv::Rect(w, 0, w, h)));
bgr[2].copyTo(out(cv::Rect(w * 2, 0, w, h)));
bgr[3].copyTo(out(cv::Rect(0, h, w, h)));
bgr[4].copyTo(out(cv::Rect(w, h, w, h)));
bgr[5].copyTo(out(cv::Rect(w * 2, h, w, h)));
bgr[6].copyTo(out(cv::Rect(0, h * 2, w, h)));
bgr[7].copyTo(out(cv::Rect(w, h * 2, w, h)));
bgr[8].copyTo(out(cv::Rect(w * 2, h * 2, w, h)));

cv::imwrite("out.jpg", out);
}

return 0;
}

A mesma foi transferida para o Duo 256

  • Usa cv::VideoCapture para abrir a câmera e definir a resolução para 320x240
  • Obtem 1 quadro de imagem a cada 1 segundo
  • Desliga a câmera
  • Por fim, costura as 9 imagens e salva-as

O primeiro quadro está preto porque o ISP ainda está contando as informações da imagem e é tarde demais para processá-las automaticamente.

Transfira também o programa cvi_sample_detector_yolo_v5_fused_preprocess (TPU-SDK) para o Duo 256 e execute.

./samples/samples_extra/bin/cvi_sample_detector_yolo_v5_fused_preprocess \ ./yolov5n_int8_fuse.cvimodel \ ./out.jpg \ yolov5n_out.jpg



Ver blog

https://milk-v.blogspot.com/2024/10/milk-v-duo-256-yolov-parte-i.html


Detectou Person (Object)

[root@milkv-duo]/mnt/tpu/tpu-sdk# ./opencv-mobile-test opencv-mobile MIPI CSI camera with cvi opencv-mobile HW JPG decoder with cvi ISP Vipipe(0) Allocate pa(0x868a7000) va(0x0x3fd181f000) size(291120) awbInit ver 6.8@2021500 0 R:1400 B:3100 CT:2850 1 R:1500 B:2500 CT:3900 2 R:2300 B:1600 CT:6500 Golden 1024 1024 1024 WB Quadratic:0 isWdr:0 ViPipe:0,===GC2083 1080P 30fps 10bit LINE Init OK!=== binName = /mnt/cfg/param/cvi_sdr_bin ******************************************************************************** cvi_bin_isp message gerritId: 36403 commitId: c69c5863e md5: cab880835a2ad5184de5ed7762404b84 sensorNum 1 sensorName0 2083 PQBIN message gerritId: 80171 commitId: 5c9d8fc5d md5: ba5a510e093ad42db6788e6c2d13169e sensorNum 3 sensorName0 2053 author: wanqiang.he desc: 思博慧CV1812H_GC2083_RGB_mode_V1.0.0 createTime: 2023-08-04 16:48:08version: V1.1 tool Version: v3.0.5.24 mode: ******************************************************************************** sensorName(0) mismatch, mwSns:2083 != pqBinSns:2053 320 x 240 0 R:1165 B:3087 CT:2688 1 R:1464 B:2327 CT:3937 2 R:1974 B:1613 CT:7225 Golden 1464 1024 2327 wdrLEOnly:1 ISP Vipipe(0) Free pa(0x868a7000) va(0x0x3fd181f000) gc2083_standby [root@milkv-duo]/mnt/tpu/tpu-sdk# ./opencv-mobile-test opencv-mobile MIPI CSI camera with cvi opencv-mobile HW JPG decoder with cvi ISP Vipipe(0) Allocate pa(0x868a7000) va(0x0x3fd8825000) size(291120) awbInit ver 6.8@2021500 0 R:1400 B:3100 CT:2850 1 R:1500 B:2500 CT:3900 2 R:2300 B:1600 CT:6500 Golden 1024 1024 1024 WB Quadratic:0 isWdr:0 ViPipe:0,===GC2083 1080P 30fps 10bit LINE Init OK!=== binName = /mnt/cfg/param/cvi_sdr_bin ******************************************************************************** cvi_bin_isp message gerritId: 36403 commitId: c69c5863e md5: cab880835a2ad5184de5ed7762404b84 sensorNum 1 sensorName0 2083 PQBIN message gerritId: 80171 commitId: 5c9d8fc5d md5: ba5a510e093ad42db6788e6c2d13169e sensorNum 3 sensorName0 2053 author: wanqiang.he desc: 思博慧CV1812H_GC2083_RGB_mode_V1.0.0 createTime: 2023-08-04 16:48:08version: V1.1 tool Version: v3.0.5.24 mode: ******************************************************************************** sensorName(0) mismatch, mwSns:2083 != pqBinSns:2053 320 x 240 0 R:1165 B:3087 CT:2688 1 R:1464 B:2327 CT:3937 2 R:1974 B:1613 CT:7225 Golden 1464 1024 2327 wdrLEOnly:1 ISP Vipipe(0) Free pa(0x868a7000) va(0x0x3fd8825000) gc2083_standby [root@milkv-duo]/mnt/tpu/tpu-sdk# ./samples/samples_extra/bin/cvi_sample_detector_yolo_v5_fused_preprocess \ > ./yolov5n_int8_fuse.cvimodel \ > ./out.jpg \ > yolov5n_out.jpg version: 1.4.0 yolov5n Build at 2024-11-19 08:56:04 For platform cv181x Max SharedMem size:2457600 CVI_NN_RegisterModel succeeded get detection num: 8 obj 0: [122.785927 394.959595 182.988708 176.858124] score:0.709485 cls:person obj 1: [786.446899 644.833130 139.342773 152.654907] score:0.695674 cls:person obj 2: [789.214050 402.493652 139.342773 152.654907] score:0.672029 cls:person obj 3: [461.553131 647.056763 120.273575 131.619293] score:0.669725 cls:person obj 4: [458.785950 400.046173 160.388611 152.654907] score:0.660278 cls:person obj 5: [766.841309 157.587311 182.988708 152.654907] score:0.642245 cls:person obj 6: [442.412659 154.959625 207.625443 152.654907] score:0.628222 cls:person obj 7: [140.833145 644.833130 120.273575 131.619293] score:0.595885 cls:person ------ 8 objects are detected ------ CVI_NN_CleanupModel succeeded



dica
  • A câmera precisa estar conectada antes que o Duo seja ligado
  • Quando o comando é executado, a direção da câmera pode ser girada para capturar imagens diferentes até que o programa termine

A SMARTCORE FORNECE CHIPS E MÓDULOS PARA IOT, COMUNICAÇÃO WIRELESS, BIOMETRIA, CONECTIVIDADE, RASTREAMENTO E AUTOMAÇÃO. NOSSO PORTFÓLIO INCLUI MODEM 2G/3G/4G/NB-IOT, SATELITAL, MÓDULOS WIFI, BLUETOOTH, GPS, SIGFOX, LORA, LEITOR DE CARTÃO, LEITOR QR CCODE, MECANISMO DE IMPRESSÃO, MINI-BOARD PC, ANTENA, PIGTAIL, BATERIA, REPETIDOR GPS E SENSORES.  

Nenhum comentário:

Postar um comentário