sgf201

  • 2025-01-14
  • 回复了主题帖: 《嵌入式软件的时间分析》读书活动:4 第四章读书笔记-软件时间理论

    感觉 LET的一些思想和 MODBUS的设计思路 上是一致的,对适应不同速度 的设备有很大的好处,兼容性也更好

  • 回复了主题帖: 《嵌入式软件的时间分析》读书活动:3 第三章读书笔记-操作系统

    看大佬的帖子比看书好

  • 回复了主题帖: AI挑战营(进阶)单人比对与三人识别

    wangerxian 发表于 2025-1-13 15:28 识别人脸的效果确实不错,看视频帧率也不低。 帧率还有优化空间,在这个应用下mpi的一些地方还能简化下

  • 回复了主题帖: 《嵌入式软件的时间分析》读书活动:2 第二章读书笔记-处理器基本知识

    书上这里的突发访问与多次单独访问这个翻译感觉 不好, 随机读取与连续读取不知是否更合适

  • 回复了主题帖: 《嵌入式软件的时间分析》读书活动:1 第一章读书笔记-基础知识

    汽车是那么喜欢V模型,喜欢得有点让人恶心

  • 2025-01-12
  • 发表了主题帖: AI挑战营(进阶)单人比对与三人识别

    本帖最后由 sgf201 于 2025-1-12 16:39 编辑 一,单人对比 生成rknn模型后,就可以部署在开发板上验证下效果了。 首先进行单人的匹配实验 代码中加入比对人脸,咱们选择帅气的joy 使用retinaface识别人脸后,依次计算特征值,然后计算与目标人脸的距离 for(int i = 0; i < od_results.count; i++) { // if(od_results.count >= 1) // { object_detect_result *det_result = &(od_results.results[i]); sX = (int)((float)det_result->box.left *scale_x); sY = (int)((float)det_result->box.top *scale_y); eX = (int)((float)det_result->box.right *scale_x); eY = (int)((float)det_result->box.bottom *scale_y); cv::Rect roi(sX,sY , (eX - sX), (eY - sY)); cv::Mat face_img = bgr(roi); letterbox(face_img,facenet_input); int ret = rknn_run(app_facenet_ctx.rknn_ctx, nullptr); if (ret < 0) { printf("rknn_run fail! ret=%d\n", ret); return -1; } output = (uint8_t *)(app_facenet_ctx.output_mems[0]->virt_addr); output_normalization(&app_facenet_ctx, output, out_fp32); //float norm = get_duclidean_distance(reference_out_fp32,out_fp32); // printf("@ (%d %d %d %d) %.3f\n", // det_result->box.left ,det_result->box.top, // det_result->box.right,det_result->box.bottom, // norm); // sprintf(show_text,"norm=%f",norm); // cv::putText(bgr, show_text, cv::Point(sX, sY - 8), // cv::FONT_HERSHEY_SIMPLEX,0.5, // cv::Scalar(0,255,0), // 1); float norm = get_duclidean_distance(out_fp32, out_fp32_collection[0]) [localvideo]c2263a446e6ae6710b00bd84501ebb5c[/localvideo] 运行中发现提示下面的警告   查看人脸检测代码发现这里实际数字与警告的内容不相符,并没有达到128个脸,只是超过4个都 会报这个警告,后续多人测试中会尽量让镜头中的人脸在4个以内   二、三人识别 分别截取三个人的头像 设置了阈值为1.1,几乎没有误检 for(int i = 0; i < 3; i++){ cv::Mat image = cv::imread(image_path[i]); cv::Mat facenet_input(facenet_height, facenet_width, CV_8UC3, app_facenet_ctx.input_mems[0]->virt_addr); letterbox(image,facenet_input); int ret = rknn_run(app_facenet_ctx.rknn_ctx, nullptr); if (ret < 0) { printf("rknn_run fail! ret=%d\n", ret); return -1; } uint8_t *output = (uint8_t *)(app_facenet_ctx.output_mems[0]->virt_addr); float* reference_out_fp32 = (float*)malloc(sizeof(float) * 512); output_normalization(&app_facenet_ctx,output,reference_out_fp32); out_fp32_collection[i] = reference_out_fp32; } while(1) { // get vi frame h264_frame.stVFrame.u32TimeRef = H264_TimeRef++; h264_frame.stVFrame.u64PTS = TEST_COMM_GetNowUs(); s32Ret = RK_MPI_VI_GetChnFrame(0, 0, &stViFrame, -1); if(s32Ret == RK_SUCCESS) { void *vi_data = RK_MPI_MB_Handle2VirAddr(stViFrame.stVFrame.pMbBlk); cv::Mat yuv420sp(height + height / 2, width, CV_8UC1, vi_data); cv::Mat bgr(height, width, CV_8UC3, data); cv::Mat model_bgr(model_height, model_width, CV_8UC3); cv::cvtColor(yuv420sp, bgr, cv::COLOR_YUV420sp2BGR); cv::resize(bgr, frame, cv::Size(width ,height), 0, 0, cv::INTER_LINEAR); cv::resize(bgr, model_bgr, cv::Size(model_width ,model_height), 0, 0, cv::INTER_LINEAR); memcpy(rknn_app_ctx.input_mems[0]->virt_addr, model_bgr.data, model_width * model_height * 3); inference_retinaface_model(&rknn_app_ctx, &od_results); // std::vector<std::pair<float, int>> distances; // 存储距离和对应的标签 // std::vector<std::pair<std::string, float>> detected_names_with_scores; // 存储人名和精度得分 // std::unordered_set<int> matched_indices; // 用于记录已匹配的标签索引 for(int i = 0; i < od_results.count; i++) { // if(od_results.count >= 1) // { object_detect_result *det_result = &(od_results.results[i]); sX = (int)((float)det_result->box.left *scale_x); sY = (int)((float)det_result->box.top *scale_y); eX = (int)((float)det_result->box.right *scale_x); eY = (int)((float)det_result->box.bottom *scale_y); cv::Rect roi(sX,sY , (eX - sX), (eY - sY)); cv::Mat face_img = bgr(roi); letterbox(face_img,facenet_input); int ret = rknn_run(app_facenet_ctx.rknn_ctx, nullptr); if (ret < 0) { printf("rknn_run fail! ret=%d\n", ret); return -1; } output = (uint8_t *)(app_facenet_ctx.output_mems[0]->virt_addr); output_normalization(&app_facenet_ctx, output, out_fp32); //float norm = get_duclidean_distance(reference_out_fp32,out_fp32); // printf("@ (%d %d %d %d) %.3f\n", // det_result->box.left ,det_result->box.top, // det_result->box.right,det_result->box.bottom, // norm); // sprintf(show_text,"norm=%f",norm); // cv::putText(bgr, show_text, cv::Point(sX, sY - 8), // cv::FONT_HERSHEY_SIMPLEX,0.5, // cv::Scalar(0,255,0), // 1); for(int i=0; i<3;i++){ float norm = get_duclidean_distance(out_fp32, out_fp32_collection[i]); //float norm = get_duclidean_distance(reference_out_fp32,out_fp32); // printf("@ (%d %d %d %d) %.3f\n", // det_result->box.left ,det_result->box.top, // det_result->box.right,det_result->box.bottom, // norm); // sprintf(show_text,"norm=%f",norm); // cv::putText(bgr, show_text, cv::Point(sX, sY - 8), // cv::FONT_HERSHEY_SIMPLEX,0.5, // cv::Scalar(0,255,0), // 1); if(norm<1.1){ cv::putText(bgr, names[i], cv::Point(sX, sY - 8), cv::FONT_HERSHEY_SIMPLEX,0.5, cv::Scalar(0,255,0), 1); } } [localvideo]7e6b0ea0e914ee5afe6946cd4bb163c0[/localvideo]   历史帖子: AI挑战营(进阶)onnx转rknn - 嵌入式系统 - 电子工程世界-论坛 AI挑战营(进阶):2.WSL2cuda+pytorch+insight初探 - 嵌入式系统 - 电子工程世界-论坛 AI挑战营(进阶):1.固件编译+yolov5demo编译运行 - 嵌入式系统 - 电子工程世界-论坛

  • 2025-01-04
  • 回复了主题帖: AI挑战营(进阶) 三:获取onnx模型

    大佬, 最后我在这两个项目里面找到了我们需要的onnx模型。 RetinaFace: https://github.com/bubbliiiing/retinaface-pytorch ArcFace: https://github.com/yakhyo/face-reidentification/tree/main找这种仓库有什么方法吗?还是纯知识阅历呀

  • 2024-12-25
  • 回复了主题帖: AI挑战营(进阶)onnx转rknn

    Jacktang 发表于 2024-12-25 07:30 为什么还要更新这个example中的rknn模型呢 我是确认下我转出来的rknn是否可用

  • 2024-12-24
  • 发表了主题帖: AI挑战营(进阶)onnx转rknn

    一、安装rknn-toolkit 下载rknn-toolkit2.git git clone https://github.com/airockchip/rknn-toolkit2.git 安装依赖项目 cd packages/x86_64/ pip install -r requirements_cp310-2.3.0.txt  报错如下:   看了下安装的pytorch发现版本对不上,我torch装的是2.4.0 回退rknntoolkit的版本到2.2.0 pip install -r requirements_cp310-2.2.0.txt   执行成功 pip install rknn_toolkit2-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl  二、下载rknn_model_zoo git clone https://github.com/airockchip/rknn_model_zoo.git cd examples/yolov5/model   bash ./download_model.sh  python convert.py ../model/yolov5s_relu.onnx rk1106 i8 ../model/yolov5s_relu.rknn 命令报下面的错误   1106应该用rv python convert.py ../model/yolov5s_relu.onnx rv1106 i8 ../model/yolov5s_relu.rknn 三、更新example中的rknn模型   替换模型后编译完成scp到小板子上运行如下:      

  • 2024-12-16
  • 回复了主题帖: AI挑战营(进阶):2.WSL2cuda+pytorch+insight初探

    安装 rknn后开始报numpy没有int属性,查看报错是在insightface中,将face_analysis.py中下面使用int的地方修改为int32后,就不报错了         for i in range(len(faces)):             face = faces[i]             box = face.bbox.astype(np.int32)             color = (0, 0, 255)             cv2.rectangle(dimg, (box[0], box[1]), (box[2], box[3]), color, 2)             if face.kps is not None:                 kps = face.kps.astype(np.int32)

  • 2024-12-10
  • 发表了主题帖: AI挑战营(进阶):2.WSL2cuda+pytorch+insight初探

    一、docker 运行ubuntu22尝试 个人pc是windows,参考牛人文章发现用的ubuntu22,首先考虑使用docker运行ubuntu22容器,这样即不影响其它已有环境,也不担心其它环境影响它 AI挑战营(进阶):1. InsightFace 快速上手 - 嵌入式系统 - 电子工程世界-论坛 docker之前已经有部署,docker pull ubuntu:22.04下载ubuntu22的image,成功运行 使用下面的命令可以安装cuda apt install nvidia-cuda-toolkit* apt install nvidia-cuda-dev cuda安装完成后,发现nvida的驱动没有安装,于是安装了驱动 运行nvidia-smi后报未知错误,docker中运行ubuntu22来使用nvidia应该还是有问题的 二、WSL2中运行ubuntu22 在wsl2中新建ubuntu22的实例,可以直接在vscode远程中选择发行版   创建完成后,运行nvidia-smi,直接看到下面的输出   还是微软贴心。 安装cuda 11.8版本,查找官网发现下面的安装命令,运行成功   完成后运行nvcc -V,可以得到下面的输出,证明cuda安装成功。   使用命令安装pytorch   第一次安装时报错了,说sha值不对应,重新运行一次,安装成功 使用下面的命令安装insightface和onnxruntime_gpu pip install insightface pip install mxnet onnxruntime-gpu 运行人脸分割测试 import cv2 import numpy as np import insightface from insightface.app import FaceAnalysis from insightface.data import get_image as ins_get_image app = FaceAnalysis(name="buffalo_sc",providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) app.prepare(ctx_id=0, det_size=(640, 640)) img = cv2.imread('input.jpeg') faces = app.get(img) rimg = app.draw_on(img, faces) cv2.imwrite("./output.jpg", rimg) 得到下面的图像   运行人脸识别 选取joey作为目标   import cv2 import numpy as np import insightface from insightface.app import FaceAnalysis from insightface.data import get_image as ins_get_image app = FaceAnalysis(name="buffalo_sc",providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) app.prepare(ctx_id=0, det_size=(640, 640)) img = cv2.imread('input.jpeg') faces = app.get(img) feats = [] for face in faces: feats.append(face.normed_embedding) feats = np.array(feats, dtype=np.float32) target = cv2.imread('joy.png') target_faces = app.get(target) target_feat = np.array(target_faces[0].normed_embedding, dtype=np.float32) sims = np.dot(feats, target_feat) print(sims) target_index = int(sims.argmax()) rimg = app.draw_on(img, [faces[target_index]]) cv2.imwrite("joy_output_target.jpg", rimg) 几张人脸得到的相似度如下: [ 0.9816556   0.05519836  0.09217417 -0.2159264   0.02295483  0.21829614] 绘制结果如下:  

  • 2024-12-09
  • 发表了主题帖: AI挑战营(进阶):1.固件编译+yolov5demo编译运行

    一、启动 开发板很漂亮,体积也很小巧,有个小疑问是没有找到DDR芯片的位置   板子自带可以启动的固件,只是flash体积比较小,看资料板子也支持ubuntu,找了一张64G的tf卡,烧录ubuntu镜像测试   使用SD卡启动选项,选取预编译的ubuntu固件,接到开发板后,成功进入系统   /下的体积并未能显示整个tf卡的体积,简单查找未找到扩充空间的方式。 本次挑战需要使用摄像头,查看ubuntu的/dev/目录并没有发现video设备,所以使用ubuntu固件做这次的挑战并不合适,未来再查找摄像头节点驱动的问题 下面更新flash中的固件,因为随机固件按说明有一定问题,使用板上flash也是需要更新下固件的   烧写成功后,成功进入系统   二、SDK编译与example编译运行 搭建开发环境时,为尽量避免对其它环境的影响,我使用了docker方式,按照使用说明加载docker image后,下载sdk的git仓库,使用-v方式映射目录,运行docker 容器如下图:   cd  /home build.sh 然后选择对应的开发板型号 编译成功如下图  example 编译与运行 从github clone官方的example,clone完成如下图:   example编译步骤: export LUCKFOX_SDK_PATH=/home/   执行build.sh后选择要编译的demo 编译完成如下图:   三、运行 将install文件夹scp到开发板的/root/目录 然后执行   打开 vlc播放器播放rtsp://192.168.x.xx/live/0,看到下面图像:    

  • 回复了主题帖: AI挑战营(进阶):1. InsightFace 快速上手

    大佬厉害

  • 2024-12-06
  • 回复了主题帖: AI挑战营(进阶):3. onnx2rknn

    大佬大佬

  • 回复了主题帖: 共读入围名单:《大语言模型:原理与工程实践》

    sgf201 发表于 2024-11-21 16:58 个人信息无误,确认可以完成评测计划。 0101,管理员老大有看到不

  • 2024-11-21
  • 回复了主题帖: 共读入围名单:《大语言模型:原理与工程实践》

    个人信息无误,确认可以完成评测计划。

  • 回复了主题帖: 入围名单公布:嵌入式工程师AI挑战营(进阶)的挑战者们,领取板卡啦

    个人信息已确认,领取板卡,可继续完成任务。

  • 2024-11-18
  • 回复了主题帖: 嵌入式工程师AI挑战营(进阶):在RV1106部署InsightFace算法的多人实时人脸识别实战

    本帖最后由 sgf201 于 2024-11-18 20:02 编辑 申请理由: 1.InsightFace 是一个开源的深度人脸分析工具箱,实现了对人物信息的精确识别,使用它可实现高效的人脸识别、人脸检测和人脸对齐等功能,支持 2D 和 3D 的人脸分析任务,并且为了适应不同的应用场景,它针对训练和部署都进行了优化。 2.个人从事模型推相关部署工作,并在自研专用芯片上进行性能优化,使用过yolov5 yolov8等。insightFace的身份信息识别对我有较大的吸引力,同时在RV1106的使用中还可以通过横向对比了解RK在视觉方面功能部署上的优化方式,在自己的工作中借鉴 3.计划: a.搭建开发环境,运行demo,实现图像和获取和保存 b.部署InsightFace算法,实现支持3人实时人脸识别并在平台上正常运行 c.分析可进行的性能优化点,确认rk的实现方案 d.进一步优化,提高推理与显示帧率 e.增加视频编码功能,实现一个支持3个预定义人员的智能监控

  • 回复了主题帖: 共读颁奖:《大语言模型:原理与工程实践》

    啥 情况 ,我没收到书啊

最近访客

< 1/3 >

统计信息

已有60人来访过

  • 芯积分:84
  • 好友:--
  • 主题:12
  • 回复:19

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言