// Copyright (c) 2021 by Rockchip Electronics Co., Ltd. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/*-------------------------------------------
Includes
-------------------------------------------*/
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#define _BASETSD_H
#include "rga/RgaUtils.h"
#include "rga/im2d.h"
//#include "opencv2/core/core.hpp"
//#include "opencv2/imgcodecs.hpp"
//#include "opencv2/imgproc.hpp"
#include "postprocess.h"
#include "rga/rga.h"
#include "rknn/rknn_api.h"
#define PERF_WITH_POST 1
/*-------------------------------------------
Functions
-------------------------------------------*/
static void dump_tensor_attr(rknn_tensor_attr* attr)
{
printf(" index=%d, name=%s, n_dims=%d, dims=[%d, %d, %d, %d], n_elems=%d, size=%d, fmt=%s, type=%s, qnt_type=%s, "
"zp=%d, scale=%f\n",
attr->index, attr->name, attr->n_dims, attr->dims[0], attr->dims[1], attr->dims[2], attr->dims[3],
attr->n_elems, attr->size, get_format_string(attr->fmt), get_type_string(attr->type),
get_qnt_type_string(attr->qnt_type), attr->zp, attr->scale);
}
double __get_us(struct timeval t) { return (t.tv_sec * 1000000 + t.tv_usec); }
static unsigned char* load_data(FILE* fp, size_t ofst, size_t sz)
{
unsigned char* data;
int ret;
data = NULL;
if (NULL == fp) {
return NULL;
}
ret = fseek(fp, ofst, SEEK_SET);
if (ret != 0) {
printf("blob seek failure.\n");
return NULL;
}
data = (unsigned char*)malloc(sz);
if (data == NULL) {
printf("buffer malloc failure.\n");
return NULL;
}
ret = fread(data, 1, sz, fp);
return data;
}
static unsigned char* load_model(const char* filename, int* model_size)
{
FILE* fp;
unsigned char* data;
fp = fopen(filename, "rb");
if (NULL == fp) {
printf("Open file %s failed.\n", filename);
return NULL;
}
fseek(fp, 0, SEEK_END);
int size = ftell(fp);
data = load_data(fp, 0, size);
fclose(fp);
*model_size = size;
return data;
}
/*
static int saveFloat(const char* file_name, float* output, int element_size)
{
FILE* fp;
fp = fopen(file_name, "w");
for (int i = 0; i < element_size; i++) {
fprintf(fp, "%.6f\n", output[i]);
}
fclose(fp);
return 0;
}
*/
/*-------------------------------------------
Main Functions
-------------------------------------------*/
static rknn_context ctx;
static unsigned char* model_data;
static std::vector<cv::Scalar> colors;
int yolov5_init(const char *model_path, const char *label_path)
{
int ret;
// 加载模型其初始化rknn
printf("Loading model...\n");
const char *model_name = model_path;
const char *label_name = label_path;
int model_data_size = 0;
model_data = load_model(model_name, &model_data_size);
ret = rknn_init(&ctx, model_data, model_data_size, 0, NULL);
if (ret < 0) {
printf("rknn_init error ret=%d\n", ret);
return -1;
}
rknn_sdk_version version;
ret = rknn_query(ctx, RKNN_QUERY_SDK_VERSION, &version, sizeof(rknn_sdk_version));
if (ret < 0) {
printf("rknn_init error ret=%d\n", ret);
return -1;
}
printf("sdk version: %s driver version: %s\n", version.api_version, version.drv_version);
// 加载label文件
ret = loadLabelName(label_name);
if (ret < 0) {
printf("loadLabelName error ret=%d\n", ret);
return -1;
}
// 随机生成80种颜色
for(int i = 0; i < OBJ_CLASS_NUM; i++){
colors.push_back(cv::Scalar(rand()&250, rand()&250, rand()&250, rand()&250));
}
rknn_input_output_num io_num;
ret = rknn_query(ctx, RKNN_QUERY_IN_OUT_NUM, &io_num, sizeof(io_num));
if (ret < 0) {
printf("rknn_init error ret=%d\n", ret);
return -1;
}
printf("model input num: %d, output num: %d\n", io_num.n_input, io_num.n_output);
rknn_tensor_attr input_attrs[io_num.n_input];
memset(input_attrs, 0, sizeof(input_attrs));
for (uint32_t i = 0; i < io_num.n_input; i++) {
input_attrs[i].index = i;
ret = rknn_query(ctx, RKNN_QUERY_INPUT_ATTR, &(input_attrs[i]), sizeof(rknn_tensor_attr));
if (ret < 0) {
printf("rknn_init error ret=%d\n", ret);
return -1;
}
dump_tensor_attr(&(input_attrs[i]));
}
rknn_tensor_attr output_attrs[io_num.n_output];
memset(output_attrs, 0, sizeof(output_attrs));
for (uint32_t i = 0; i < io_num.n_output; i++) {
output_attrs[i].index = i;
ret = rknn_query(ctx, RKNN_QUERY_OUTPUT_ATTR, &(output_attrs[i]), sizeof(rknn_tensor_attr));
dump_tensor_attr(&(output_attrs[i]));
}
return 0;
}
int yolov5_detect(cv::Mat &src, cv::Mat &res)
{
// int status = 0;
// size_t actual_size = 0;
int img_width = 0;
int img_height = 0;
// int img_channel = 0;
const float nms_threshold = NMS_THRESH;
const float box_conf_threshold = BOX_THRESH;
struct timeval start_time, stop_time;
int ret;
// init rga context
rga_buffer_t srct;
rga_buffer_t dst;
im_rect src_rect;
im_rect dst_rect;
memset(&src_rect, 0, sizeof(src_rect));
memset(&dst_rect, 0, sizeof(dst_rect));
memset(&srct, 0, sizeof(srct));
memset(&dst, 0, sizeof(dst));
cv::Mat orig_img = src;
if (!orig_img.data) {
printf("cv::imread fail!\n");
return -1;
}
cv::Mat img;
cv::cvtColor(orig_img, img, cv::COLOR_BGR2RGB);
img_width = img.cols;
img_height = img.rows;
// printf("img width = %d, img height = %d\n", img_width, img_height);
/* Create the neural network */
/*
static int init_model = -1;
if(init_model == -1){
printf("Loading mode...\n");
const char *model_name = "./install/rknn_yolov5_demo_Linux/model/RK356X/yolov5s-640-640.rknn";
int model_data_size = 0;
unsigned char* model_data = load_model(model_name, &model_data_size);
ret = rknn_init(&ctx, model_data, model_data_size, 0, NULL);
if (ret < 0) {
printf("rknn_init error ret=%d\n", ret);
return -1;
}
rknn_sdk_version version;
ret = rknn_query(ctx, RKNN_QUERY_SDK_VERSION, &version, sizeof(rknn_sdk_version));
if (ret < 0) {
printf("rknn_init error ret=%d\n", ret);
return -1;
}
printf("sdk version: %s driver version: %s\n", version.api_version, version.drv_version);
init_model ++;
}
*/
rknn_input_output_num io_num;
ret = rknn_query(ctx, RKNN_QUERY_IN_OUT_NUM, &io_num, sizeof(io_num));
if (ret < 0) {
printf("rknn_init error ret=%d\n", ret);
return -1;
}
// printf("model input num: %d, output num: %d\n", io_num.n_input, io_num.n_output);
rknn_tensor_attr input_attrs[io_num.n_input];
memset(input_attrs, 0, sizeof(input_attrs));
for (uint32_t i = 0; i < io_num.n_input; i++) {
input_attrs[i].index = i;
ret = rknn_query(ctx, RKNN_QUER
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
RK3588 RK3568 RK3566 Linux QT Opencv NPU YoloV5 摄像头实时检测
(819个子文件)
libopencv_imgproc.so.4.5.0 3.65MB
libopencv_gapi.so.4.5.0 3.37MB
libopencv_core.so.4.5.0 3.08MB
libopencv_calib3d.so.4.5.0 2.09MB
libopencv_imgcodecs.so.4.5.0 2MB
libopencv_features2d.so.4.5.0 789KB
libopencv_photo.so.4.5.0 777KB
libopencv_ml.so.4.5.0 753KB
libopencv_stitching.so.4.5.0 748KB
libopencv_flann.so.4.5.0 562KB
libopencv_objdetect.so.4.5.0 436KB
libopencv_videoio.so.4.5.0 389KB
libopencv_video.so.4.5.0 350KB
libopencv_highgui.so.4.5.0 65KB
00004cae5ac6e11b76652ce8c78d4430e05688 1KB
016948f935b2abb237354894bc388e67e66e32 960KB
0254c385bf67e751e06fa4fd5fb8824581579c 5KB
0303d2495fe878340b80bf1a4b330ed7aadc5f 1KB
03d0eb6b81903eb568dc24a83ef6109e030277 2KB
045f518d9f7d4a0d0d6e44d7279606b846b5cc 1KB
049f72b71f2bbfea749f3e921db26dca388919 1KB
04b3177a58f51a4137d92803198a17f8ca3ab4 1KB
05af1814c4282f36f63a3f21aa4f44257ca06f 4KB
06583ea433e289e883270d81f8641985cc3ebb 6KB
0691b44823bc6ee0564cc959b61af2c34a508c 17KB
08f91c78fd988337798d3fd8106ad5597e7a07 364B
0923f0ef8375335d8cc06d1bb40cf4557afd05 1KB
09640414903969010d5d21f01d3839b24a81f2 12KB
0a83d35928bc035e1807f82a261c844beddc33 1KB
0c9cf4af245e37dfc705aee5402d1cb365c46a 1KB
0ce1bb7e0eceac667e206031b3e57bc000710d 2KB
0ce340457a2c3465fb3ad10d9bc3dc73b3fe2b 1KB
0f10fd86c8a58ef20937a6800240713d9750c8 2KB
0f179e4e5d081d7304aaa8b763f196de6526a3 13KB
106de4753292ad59de03de9e634e6814eeb7a2 3KB
11812a7744ad7e100de82c2d6782c50bc0c122 2KB
1182c19f461a77e167068f8a74113bfdb2eaf8 1KB
11ce25256646fe65b41ad2a31f64e3df98218c 6KB
12aed6c6ce9def83b9fecc15f8be14b4790363 711B
12d2583287b80ac654a212c615f1a5b746101d 578B
1394473b3b2ea68db7b2379dd273b692709032 4KB
13bda0808ea5e76a4e01c369bb99ed8c59ca96 684B
13d243c77e5c1819a680a60595ae4b4b635272 122KB
15820892e1c798b72176acd3bce06e33e964ef 1KB
158326546fb98100c8f286c9b39f632d2e667d 9KB
15ad5752f133bad706641a3233aa05977c5e78 279KB
15ed629a395ae7a79e46883bd8f0d67eebb8ee 1KB
16ed619b6e9dc0aacb69da92f1040b4b80a26a 692B
18f4de9841e0a6acb21866dc98b6f3424403cb 4KB
19848827543461c62aeacc90b41c8c105fa5ea 3KB
1a2b940716a56c425e465b97550c4c1f8b7db8 6KB
1a54a6d6babda869c93ac3975fa5029322550b 15KB
1a6d0411fe461c687a6db3734c766a6d7aa64c 2KB
1a97145dc75009486e5e2cc51bd798cb265e03 377B
1aedd64f3078629224a3ffca83b506a0c4b8da 20KB
1b91b51739ac1f19af9dbc9662b16a29634025 1KB
1c682cfe98e997619d284d763838ed2313cb23 2KB
1cb4e1392266f6a6c09b1fdc5f79503b2e5df6 384B
1d4403fde38c4894df7787ea45d28ffff3d9d3 265B
1df0ad08c1757800a26376e047b0746b67a2ae 1KB
1e3b93d74b5130b5a1323be9fc46017ab0e8c7 60KB
1eca1408049f95e5c5c5c4d8c368d18f68051a 987B
1f013e27454bb218790119a3b30b9de9696d2b 1KB
20725e6341aab83963901ba3647452a6d6f528 2KB
20b9501e75400669a97e76f5984c514452b6d4 4KB
20d0fd64de9090dd9f02a296ea3de0a3884ef1 2KB
21d9e2c9ea45940c1a531c68a430b93c19860e 2KB
22045f9167891d1f7030dc9dbf199fb1356290 358B
232479ea53cd3efc293f98bd30d915d460b006 1019B
23930024b724cb2346d954056929ad277462b6 3KB
24fcda1bb4c4b99e2590674c15a597f62e4e12 75B
255fba4094a516597898a1b91d89c7162f303c 754B
25fe4af76110692a60814dfc184af76c24a218 476B
260ed07cb2ce6654f06bb8a019580b253a448b 3KB
273590fba5815b6a5e03f4075d223d762e09e1 9KB
27e3d9ef2f6ad7c31d932f13548dbd465d94c9 3KB
28f722fccacd8e7491abfd464b8b7c43b51074 1KB
28fb0962efb20ecaa6b16c545b16d5917549f4 3KB
2abbbff41332a41e3b163f7bf3fb971dd44053 13KB
2c21de6bf75876457a426afe21bde7e20fdc45 314B
2c6e35460a18482eaad7abf46ef3b0b9d4c491 4KB
2d5cb1a14d8dbb41c03e1cf207268ffa80b834 65KB
2ed307858323ffbb4fa95c7c1275b9932c0574 6KB
2f9e1e874d61d8063d971e276acca9e989a157 1KB
3092f06508734dfd42bda810c3c3108fdd414e 2KB
30efe29ff3ac5a2dc3ab2a8c73fb9bf40dd5dc 2KB
34037a705be5568e2c74b325286a092e3af94a 176B
342c00c3d723a19144bbfb01be4cac9e039a58 884B
34cf1f4f2db81ade82e43035396fb8ea9dc1e0 1KB
359b4b7b114b318211de5493a69ea748c8fdb9 2KB
35aa7cbbd505c092fe082e0db9b321680e8115 3KB
3646254cf6e86654aca1b1a2952709dabcd52e 2KB
365b4ecf4411d9909a1f240ed3eb8b54fb047b 4KB
36783d6215c1d38134685219a86523bd45dca1 3KB
36b19b027fcc5ec2ff78c94f28b46919425fda 763B
37ab7759b6888994fe7793b652ee310c675b51 26KB
37c173be64bed1331f49260388acceea6de56b 4KB
38a8bab222c50f2962713930b7e971c6cc3abc 69KB
3986708050890cc530be68fa7cb5c208b750d8 2KB
39f965c212de7d524fb1f64e1f47fbc6f4970f 6KB
共 819 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
小钟同学
- 粉丝: 9
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功