Hanjie's Blog

一只有理想的羊驼

安装

下载Vulkan Sdk,双击并且安装。

卸载方法:sudo path_to_vulkan_sdk/uninstall.sh

1
brew install ncnn

Cmake测试程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# #OpenMP flags for MACOS
if (APPLE)
if (CMAKE_C_COMPILER_ID MATCHES "Clang")
set(OpenMP_C "${CMAKE_C_COMPILER}")
set(OpenMP_C_FLAGS "-Xpreprocessor -fopenmp -Wno-unused-command-line-argument -I/opt/homebrew/opt/libomp/include")
set(OpenMP_C_LIB_NAMES "libomp")
set(OpenMP_libomp_LIBRARY "/opt/homebrew/opt/libomp/lib/libomp.dylib")
endif ()
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(OpenMP_CXX "${CMAKE_CXX_COMPILER}")
set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp -Wno-unused-command-line-argument -I/opt/homebrew/opt/libomp/include")
set(OpenMP_CXX_LIB_NAMES "libomp")
set(OpenMP_libomp_LIBRARY "/opt/homebrew/opt/libomp/lib/libomp.dylib")
endif ()
endif ()

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")

find_package(ncnn REQUIRED)
find_package(OpenCV REQUIRED)

include_directories(${ncnn_INCLUDE} ${OpenCV_LIBRARY_DIRS})

add_executable(test_ncnn test_ncnn.cpp)
target_link_libraries(test_ncnn ncnn ${OpenCV_LIBS})

测试网络为midas_v21_small-int8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "net.h"
#include "mat.h"
#include "cpu.h"
#include <opencv2/opencv.hpp>
#include <sys/time.h>

int main(int argc, char* argv[]) {
std::string img_file = "/Users/luohanjie/Workspace/Vision/depth_estimation/MiDaS/input/squirrel_iphone_sample3.png";
std::string param_file = "/Users/luohanjie/Workspace/Vision/my_slam/data/models/midas_v21_small-int8.param";
std::string model_file = "/Users/luohanjie/Workspace/Vision/my_slam/data/models/midas_v21_small-int8.bin";
int target_size = 256;
float scale = 0.33333f;

cv::Mat img = cv::imread(img_file);
cv::resize(img, img, cv::Size(), scale, scale);

int img_width = img.cols;
int img_height = img.rows;

ncnn::Net net;
ncnn::set_cpu_powersave(0); // 0 = all cores enabled(default)
ncnn::set_omp_num_threads(ncnn::get_cpu_count());
net.opt = ncnn::Option();
net.opt.use_vulkan_compute = false;
net.opt.num_threads = ncnn::get_cpu_count();

net.load_param(param_file.c_str());
net.load_model(model_file.c_str());

// https://github.com/Tencent/ncnn/blob/master/docs/how-to-use-and-FAQ/use-ncnn-with-opencv.md
// cv::Mat CV_8UC3 -> ncnn::Mat 3 channel + swap RGB/BGR
ncnn::Mat img_in = ncnn::Mat::from_pixels_resize(img.data, ncnn::Mat::PIXEL_BGR2RGB, img_width, img_height, target_size, target_size);

// substract_mean_normalize(const float* mean_vals, const float* norm_vals): substract channel-wise mean values, then multiply by normalize values, pass 0 to skip in ncnn.
const float mean_vals[3] = {123.675f, 116.28f, 103.53f};
const float norm_vals[3] = {0.01712475383f, 0.0175070028f, 0.01742919389f};
img_in.substract_mean_normalize(mean_vals, norm_vals);

ncnn::Extractor ex = net.create_extractor();
ex.set_light_mode(true);

ncnn::Mat img_out;

ex.input("input.1", img_in);
ex.extract("649", img_out);
ncnn::resize_bilinear(img_out, img_out, img_width, img_height);

cv::Mat cv_out(img_out.h, img_out.w, CV_8UC1);
img_out.to_pixels(cv_out.data, ncnn::Mat::PIXEL_GRAY);

cv::imshow("cv_out", cv_out);
cv::waitKey(0);
return 0;
}

bullseye系统

1
cat /etc/os-release
1
2
3
4
5
6
7
8
9
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
1
uname -a
1
Linux raspberrypi 5.15.84-v8+ #1613 SMP PREEMPT Thu Jan 5 12:03:08 GMT 2023 aarch64 GNU/Linux

换源

1
sudo nano /etc/apt/sources.list
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free non-free-firmware

deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free non-free-firmware

# deb https://security.debian.org/debian-security bullseye-security main contrib non-free non-free-firmware
# # deb-src https://security.debian.org/debian-security bullseye-security main contrib non-free non-free-firmware
1
sudo nano /etc/apt/sources.list.d/raspi.list
1
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main ui
1
2
sudo apt update
sudo apt upgrade

升级固件和操作系统

1
2
sudo rpi-update
sudo apt dist-upgrade

超频

1
sudo nano /boot/config.txt
1
2
3
4
# overclock
over_voltage=6
arm_freq=2000
gpu_freq=750

重启。

测试:

1
2
vcgencmd get_config arm_freq
arm_freq=2000

科学上网

安装和更新 V2Ray:

1
2
sudo su
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

安装最新发行的 geoip.dat 和 geosite.dat:

1
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-dat-release.sh)

移除 V2Ray:

1
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) --remove
1
2
3
4
5
6
// 启动
systemctl start v2ray
// 设置开机自动启动
systemctl enable v2ray
// 查看服务状态
systemctl status v2ray

安装v2rayA:

1
2
3
4
wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/trusted.gpg.d/v2raya.asc
echo "deb https://apt.v2raya.org/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list
sudo apt update
sudo apt install v2raya

安装后可以关掉服务,因为 v2rayA 不依赖于该 systemd 服务:

1
sudo systemctl disable v2ray --now

启动 v2rayA:

1
sudo systemctl start v2raya.service

设置开机自动启动:

1
sudo systemctl enable v2raya.service
1
速冻apt install iptables

浏览器打开127.0.0.1:2017,创建用户名和密码后就可以登录。

bookworm系统

1
2
3
4
5
6
7
8
9
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

换源

1
sudo nano /etc/apt/sources.list
1
2
3
4
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
1
sudo nano /etc/apt/sources.list.d/raspi.list
1
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bookworm main ui
1
2
sudo apt update
sudo apt upgrade

nomachine

nomachine 8.11.3_3版本对于bookworm系统的Wayland有问题,需要改为X111

1
2
3
4
5
6
7
sudo raspi-config
Advanced Options ->
Wayland ->
X11 ->
OK ->
Finish ->
Yes (to reboot)

  1. https://forum.nomachine.com/topic/raspberry-pi-5-not-working-with-nomachine/page/2↩︎

使用root登陆,打开cron配置文件:

1
crontab -e

在文件末尾添加:

重启类型 代码
每天凌晨 2:30 重启 30 2 * * * /sbin/reboot
每3分钟重启一次 */3 * * * * /usr/sbin/reboot
每小时重启一次 0 * * * * /usr/sbin/reboot
每天重启一次 0 0 * * * /usr/sbin/reboot
每周重启一次 0 0 * * 0 /usr/sbin/reboot
每月重启一次 0 0 1 * * /usr/sbin/reboot
每年重启一次 0 0 1 1 * /usr/sbin/reboot

注意这里的时间格式是分钟 时 日 月 星期,依次对应上面的 30 2 *

重启服务:

1
service cron restart
0%