32位raspberry pi 操作系统,启动连接USB 储存器的方法

之前在64位操作系统上,直接使用 sudo vim /etc/fstab 加上USB 外接的硬盘就可以了,但在32位系统上,不知道为什么,行不通。所以,使用了如下的办法:

sudo vim /etc/rc.local

在最后 exit 0 之前

加入

sleep 20

sudo mount /dev/sda1 /media/pi -o uid=1000,gid=1000

重启,等20秒,然后就可以了

 

关于raspberry pi 使用硬件编码/解码 加速ffmpeg 中的坑

从官网上下可以下载到的官方系统有32位和64位两个版本,但因为对应硬件的库 mmal 只有32 位版本,这么导致最终在编译ffmpeg 或其他程序时,无法找到对应版本的mmal 库 。所以,在安装操作系统时如考虑需要使用视频硬件编码/解码,就必须使用32位版本的操作系统。

编译ffmpeg 生成结果没有ffplay 的问题解决

之前一直有这个问题,但没有解决。最近查到文档,并不是编译参数的原因,而是因为系统没有sdl2 的依赖库。configure 时找不到这个依赖库,所以没有编译出来ffplay 了。树莓派添加sdl2 的方法是

sudo apt-get install libstdl1.2-dev

之后再 configure 就可以看到包含了 ffplay  了

编译FFMPEG 使用 硬件编码、解码器,树莓派版

树莓派官方操作系统 64位版,通过自行编译 ffmpeg 添加引用,可以使用树莓派自带的硬件进行视频硬件编码、解码。

./configure –extra-cflags=”-I/usr/local/include” –extra-ldflags=”-L/usr/local/lib” –extra-libs=”-lpthread -lm -latomic” –arch=armel –enable-gmp –enable-gpl –enable-libaom –enable-libass –enable-libdav1d –enable-libfdk-aac –enable-libfreetype –enable-libkvazaar –enable-libmp3lame –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libopus –enable-librtmp –enable-libsnappy –enable-libsoxr –enable-libssh –enable-libvorbis –enable-libvpx –enable-libzimg –enable-libwebp –enable-libx264 –enable-libx265 –enable-libxml2 –enable-nonfree –enable-omx –enable-omx-rpi –enable-version3 –enable-pthreads –enable-openssl –enable-hardcoded-tables –prefix=/usr/local/ffmpeg –enable-static –enable-shared –arch=aarch64 –target-os=linux –enable-ffplay

make -j4

sudo make install

后记,根据文档,应该可以使用–enable-mmal  参数开启博通的硬件编解码支持,但因为使用了最新的64位版官方操作系统,而 mmal 库默认没有64 位版,虽然偿试了用 github 上的 userland 的源码自行编译,但不成功。所以只能暂时这样使用了。

raspberry pi 3b+ 编译opencv

raspberry pi 3B+ 在安装openvino 时需要编译opencv

其间首先需要先安装如何依赖库

sudo apt install build-essential libclang-11-dev clang-11 clang-format-9 libssl-dev

sudo apt install git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libatlas-base-dev python3-scipy

然后使用如下 configure 参数

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..

然后就是 make

这里有个坑,因为raspberry pi 3b+ 只有1G内存,而编译opencv 在某个库需要超过1G内存,差不多达到2G的内存需求,而raspberry OS 默认只有100 M 的虚拟内存,所以会因为内存不足导致卡死,这里需要修改虚拟内存大小,最好加到4G 来保存编译通过

sudo dphys-swapfile swapoff
sudo vim /etc/dphys-swapfile
CONF_SWAPSIZE=4096

下面哪个MAX也需要改到4096

sudo dphys-swapfile setup

sudo reboot

Raspberry pi 上安装Intel NCS2 的坑

查了google ,问了chatGPT 以为万无一失了。根据chatGPT的提示打开了Intel 关于在Raspberry pi 上安装 OpenVINO的官网,然后再接照官网的说明一步一步执行完成各安装脚本命令,但在python 中运行

使用openvino查看可使用设备

只有CPU ,真是日了狗了。

然后翻查了各个外国文档,然后找到,尼玛,官网的openVINO没有Raspberry pi 的插件所以不使用官网的这个版本的openVINO只有CPU,fuck。然后必须要使用从github上下载的源码编译才能生成出有Raspberry Pi 插件的版本。

cmos像元计算方法

1英寸等于16mm ,但不能适用所有的尺寸,小于1/2英寸的CIS,则要用1英寸等于18mm来换算。比如索尼1/2.8 的IMX415 对角线长度为6.43mm,英1英寸等于18mm则刚好。所以对于海康等监控摄像头,使用1英寸等于18mm来计算对角线尺寸,然后再通过4:3 的比例计算物理的长宽尺寸。

18*1/2.8=6.429mm

4x*4x+3x*3x=6.429*6.429

按4:3,则长为5.143mm,则像元为5.143/1920=2.68um

c++通过代码动态加载库文件并调用库里的类和方法

首先需要先在库文件的工程定义extern “c”

/**
 * 因在开发阶段发现tensorflow 与 海康的sdk 存在冲突,在还没有找到更好的解决方法时,使用动态加载so库的方法解决,
 * 以下是为了使动态加载能找到函数标识符而加入的接口函数,通过函数调用FrameProcessHelper类
*/
extern “C”{
    FrameProcessHelper * create(std::string names_file,std::string cfg_file,std::string weights_file);
//    void detect_and_track(cv::Mat org_frame,FrameProcessHelper & helper);
    std::vector<bbox_t> get_detect_track_result(cv::Mat & org_frame,FrameProcessHelper & helper);
    void draw_frame(cv::Mat & org_frame,bbox_t & dets, ais_data & ais,std::string & ocr_result,double & speed,FrameProcessHelper & helper);
}
CMakeList 定义输出的类型
add_library(new_detect SHARED
xxxx.cpp
xxxx.h
c++动态调用库文件代码截图说明

pip 离线安装本地包

因为服务器所在网络环境原因,不得不需要离线安装python 依赖包

使用如下方法,只下载需要的依赖包:

python -m pip download -r requirements.txt -d 目录

这方法会自动下载依赖包的依赖包,然后整个打包到目标服务器,然后在解压包所在目录运行

python -m pip install –no-index –find-links=目录名 -r requirements.txt

完成