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渲染效果

相关推荐
InfiniSynapse2 小时前
打工人ai效率工具:一键修改excel
大数据·人工智能·数据分析·excel·ai编程
m0_564914922 小时前
AI科技应用课
大数据·人工智能·机器学习
oort1232 小时前
奥尔特云智慧园林融合物联网、大数据、地理信息系统与人工智能技术,构建数字化管理平台,推动园林养护从传统经验模式升级为智能化决策模式,为创建达标园林提供科技支撑
大数据·用户运营
大强同学2 小时前
我push博客时泄露了API
大数据·elasticsearch·搜索引擎
中电金信2 小时前
中电金信:赋能精准决策,两大场景解锁金融营销新范式
大数据·人工智能
只说证事3 小时前
2026产品岗,怎么转型产品数据分析/商业分析岗?能优化产品决策效率吗?
大数据·人工智能·数据分析
lularible3 小时前
PTP协议精讲(3.1):走进开源PTP世界——LinuxPTP项目全景
网络·网络协议·开源·嵌入式·ptp
卖酸奶的不错3 小时前
FlowPrompt Studio v3.1
大数据·人工智能
智象科技3 小时前
AI重构IT运维:从被动救火到智能自治,这场革命已不可逆!
大数据·运维·人工智能·ai·重构·一体化运维