RuView开源项目Rust构建部署

RuView (WiFi DensePose) 是一个基于 ESP32-S3WiFi CSI 感知 开源项目,主打无摄像头、非接触式的人体姿态估计、生命体征监测与穿墙检测。

前面文章介绍的《RuView开源项目Docker+ESP32完整部署手册》只能显示基础的CSI感知数据,高级功能模型文件、姿态估计(骨架)都无法使用,需要源码编译版本才能使用。

Rust版本针对完整的信号处理链路,是一个高性能的移植版本,相比 Python 流水线实现了约 810 倍的速度提升。

一、 开发环境

1、Rust编译环境

x86主机一台,Deepin V25版本(或基他主流Linux最新稳定版)

2、安装编译工具

  • Rust 1.70及以上版本(通过rustup安装)

  • cargo(随 Rust 一同安装)

  • OpenBLAS 的系统依赖项(由 ndarray-linalg 使用):

    Ubuntu/Debian

    sudo apt-get install build-essential gfortran libopenblas-dev pkg-config
    sudo apt-get install rustup
    rustup default stable

3、安装其他依赖

在deepin25系统编译rust项目编译时会提示少相关依赖包,安装如下软件包:

复制代码
sudo apt install -y libglib2.0-dev libgtk-3-dev libsoup-3.0-dev
     /libjavascriptcoregtk-4.1-dev  libwebkit2gtk-4.1-dev  
     /libgirepository1.0-dev libcairo2-dev libssl-dev pkg-config

二、源码与修订

1、下载源码

复制代码
  git clone https://github.com/ruvnet/RuView.git
  git submodule update --init --recursive
  git pull

2、修订源码

git clone https://github.com/ruvnet/RuView.git下载的源码编译中存在以下问题,需要修订源码解决。

主要下述3类问题:

ruvector_mincut 依赖缺失 ✅ 已修复

adaptive_classifier::CLASSES 未找到 ✅ 已修复

N 处 E0499 可变借用冲突 ✅ 全部修复

上述问题都来自wifi-densepose-sensing-server/src/main.rs源文件。

复制代码
vim crates/wifi-densepose-sensing-server/src/main.rs
1)ruvector-mincut库缺失问题

首先检查系统中是否下载库,执行命令:

复制代码
ls ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ruvector-mincut-*

返回了 Cargo.toml、README.md 等文件,这说明:

依赖已经从 crates.io 下载完成,源码已经解压到本地缓存目录,Cargo 现在可以正常读取并使用它了。

全局下载了 ruvector-mincut,但是 wifi-densepose-sensing-server 这个 crate 自己的 Cargo.toml 里根本没声明依赖!

Rust 工作空间里:每个子 crate 必须自己在 Cargo.toml 里写依赖,不会自动继承根目录的!

运行这条命令(自动加依赖)进入项目根目录,执行:

复制代码
cargo add ruvector-mincut --package wifi-densepose-sensing-server

这条命令会自动给 sensing-server 加上依赖。

清理缓存 + 重新编译服务端直接运行这两条命令:

复制代码
cargo clean
cargo build --release --bin sensing-server

2)adaptive_classifier::CLASSES 未找到

找到文件报错处,修订如下:

复制代码
"classes": adaptive_classifier::DEFAULT_CLASSES,
3)N 处 E0499 可变借用冲突

文件中有多处可变借用冲突,需要依照下述方法修订:

复制代码
// 1. 临时移出 pose_tracker (假设它实现了 Clone 或你可以接受暂时替换)
// 如果 pose_tracker 很大,克隆可能有性能开销,但能解决借用问题
let mut temp_tracker = std::mem::take(&mut s.pose_tracker); 
// 2. 在临时变量上执行操作
let tracked = tracker_bridge::tracker_update(
    &mut temp_tracker,
    &mut s.last_tracker_instant, // 现在只借用了 s 的一个字段,合法
);
// 3. 将处理后的 tracker 放回结构体
s.pose_tracker = temp_tracker;

use std::mem;

// 1. 临时取出 field_model,留下一个默认值(如 None)
let mut fm_opt = mem::take(&mut s.field_model);

// 2. 现在 s.field_model 是默认值,我们可以自由借用 s 的其他部分
if let Some(ref mut fm) = fm_opt {
    if let Some(ns) = s.node_states.get(&node_id) {
        field_bridge::maybe_feed_calibration(fm, &ns.frame_history);
    }
}

// 3. 将处理后的 field_model 放回去
s.field_model = fm_opt;

三 、编译运行

1、项目构建

复制代码
cd rust-port/wifi-densepose-rs
cargo build --release

编译完成:

2、ESP32节点接入

3个ESP32节点通电接入同一个局域网,可查看串口信息是否连网与配置成功。

3、PC端运行服务程序

复制代码
#只能本机127.0.0.1访问
./target/release/sensing-server
#局域网全局可访问
./target/release/sensing-server --bind-addr 0.0.0.0

运行时的启动信息:

4、浏览器应用

直接在浏览器中打开:

复制代码
http://你的运行服务器IP:8080/ui/index.html

observatory.html可以看到3D渲染效果

相关推荐
智慧景区与市集主理人10 小时前
巨有科技会员积分系统|深耕私域存量,破解景区复购增收难题
大数据·科技
黎阳之光11 小时前
视频孪生智护供水生命线:黎阳之光赋能医疗与园区水务高质量升级
运维·物联网·算法·安全·数字孪生
Litluecat11 小时前
2026年6月1日科技热点新闻
大数据·人工智能·科技·推荐·热点·新闻·每日
志栋智能12 小时前
AI驱动无代码:降低巡检超自动化的门槛
大数据·运维·网络·人工智能·自动化
代码匠心12 小时前
从零开始学Flink:Flink CDC 入门
大数据·数据仓库·flink
Irene199112 小时前
基于现有的大数据开发实验环境,深入理解数据完整生命周期,工具配合使用,全流程练习
大数据·工具·开发环境·项目练习
Hefei GlobefishAI12 小时前
无人零售智能柜适合哪些场景?
大数据·零售
yjcode78912 小时前
探索游戏充值新纪元:友价源码技术革新之旅
大数据·人工智能·游戏·游戏交易
snow@li13 小时前
AI:理解 大数据、算法、算力、电力、生成式AI、token 之间的关系
大数据·人工智能·算法
oort12313 小时前
VLStream:全开源决策式AI视频平台,赋能企业构建自主可控、降本增效的智能视觉应用介绍
大数据·开发语言·人工智能·开源·音视频·数据库架构