sgf201

  • 2025-03-25
  • 回复了主题帖: 嵌入式rust修炼营:代码编译与下载运行

    freebsder 发表于 2025-3-25 11:18 怎么调试呢? 调试得用jlink,经常玩单片机的都知道,ISP下载盲调也挺好的

  • 加入了学习《直播回放: 嵌入式Rust入门基础知识、解析动手实战Rust的三个任务》,观看 嵌入式Rust入门基础知识、解析动手实战Rust的三个任务

  • 2025-03-24
  • 加入了学习《直播回放: 嵌入式Rust入门基础知识、解析动手实战Rust的三个任务》,观看 答疑内容

  • 回复了主题帖: 嵌入式rust修炼营:代码编译与下载运行

    kangkls 发表于 2025-3-21 22:12 运行都需要借助POWERshell,感觉又回到了DOS时代似的,挺不习惯的。 这是固件下载,pyisp工具是下代码的

  • 2025-03-21
  • 发表了主题帖: 嵌入式rust修炼营:代码编译与下载运行

    本帖最后由 sgf201 于 2025-3-21 19:09 编辑 一、串口映射 使用wsl2 接入串口调试设备_wsl 串口-CSDN博客 二、wsl2中加载驱动 sudo modprobe ch341 三、安装pyisp pyisp 编译安装时会报下边的错误,其实是缺少libudev 和pkg-config   使用sudo apt install libudev-dev pkg-config,后可以编译安装成功 四、编译blinky,转bin git clone https://github.com/hysonglet/py32f030-hal.git   cargo build --target thumbv6m-none-eabi --example blinky rust-objcopy -O binary target/thumbv6m-none-eabi/debug/examples/blinky  blinky.bin    pyisp -s /dev/ttyUSB0  -f .\blinky.bin      

  • 2025-03-20
  • 发表了主题帖: 嵌入式Rust修炼营:调用文件系统接品读取文件

    本帖最后由 sgf201 于 2025-3-21 16:05 编辑 一,rust安装 进入wsl2后,使用下面的命令安装rust curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 二,制作包 cargo new fileread  编写下边的实现 use std::fs; fn main() {     let file_path = "./../Cargo.toml";     let mut file = fs::File::open(file_path);     let mut contents = String::new();     file.read_to_end(&mut contents);     println!("File contents:\n{}", contents);         } 三、编译报错   read_to_end这个函数没有在result中,这里file类型不同使用if let可以?   修改好后的代码如下: use std::fs; use std::io::{self, Read}; fn main() -> io::Result<()> {     let file_path = "./Cargo.toml";     let mut file = fs::File::open(file_path)?;     let mut contents = String::new();     file.read_to_string(&mut contents)?;     println!("File contents:\n{}", contents);     Ok(()) } 四、运行结果:    

  • 2025-03-12
  • 回复了主题帖: 嵌入式Rust修炼营入围名单来啦,一起度过嵌入式Rust学习时光的小伙伴集合啦~

    个人信息无误

  • 2025-02-25
  • 回复了主题帖: 嵌入式Rust修炼营:动手写串口烧录工具和MCU例程,Rust达人Hunter直播带你入门Rust

    -参与理由&个人编程基础: 工作和自己的业余开发中被时常被内存问题困扰,期望使用rust从根本上解决这些问题 一直从事C C++开发工作,嵌入式开发经验丰富,多次参与了eeworld的评测任务,均比较好得完成了任务 -查看修炼任务和活动时间表,预估可以跟着完成几级任务(初级、中级、高级): 可以一直参与完成高级任务 -如探索过Rust,请说明Rust学习过程遇到难点,希望在参与活动中收获什么? 针对C C++中的典型内存应用场景,在Rust中均能找到对应的使用新范式

  • 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,看到下面图像:    

最近访客

< 1/3 >

统计信息

已有70人来访过

  • 芯积分:104
  • 好友:--
  • 主题:14
  • 回复:23

留言

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


现在还没有留言