#opencv #computer-vision #motion #input-file #bumblebee #video-recording #insect

bin+lib bombuscv-rs

基于 OpenCV 的运动检测/录制软件,用于研究蜜蜂

4 个版本 (2 个破坏性更新)

0.3.0 2022 年 6 月 27 日
0.2.0 2022 年 6 月 14 日
0.1.1 2022 年 6 月 11 日
0.1.0 2022 年 6 月 7 日

#338科学

GPL-3.0-only

60KB
965

BombusCV

GitHub releases GitHub source size GitHub open issues GitHub open pull requests GitHub sponsors Crates.io downloads Crates.io version Discord GitHub license

基于 OpenCV 的运动检测 & 视频录制软件,专为研究 蜜蜂 构建(因此得名)。

索引

用例

本软件是为了满足在科学研究中跟踪和/或录制标记蜜蜂个体的片段的需求而构建的。它已与 Raspberry Pi 4[^1] 和 Raspberry Pi HQ Camera[^2] 一起使用,指向 Bombus terrestris 的巢穴入口,以根据运动录制片段。这大大减少了录制所需的存储空间,并完全消除了后期处理工作的需求,因为它只录制视频帧中出现的个体的片段。

bombuscv-rs 使用相机输入提供实时运动检测 & 视频录制[^3],可直接用于现场工作。然而,使用 video 选项,可以替换实时相机输入为预录制的视频文件:这对于 删除视频中的静止时刻 和减少/消除手动视频剪辑的需要非常有用。

[^1]: 4GB 的 RAM 内存,由 30000mAh 的电池供电,这意味着这种设置也可以在没有交流电的地方复制[^2]: 1230 万像素的 Sony IMX477 传感器[^3]: 基于硬件(截至写作时,RaspberryPi 4 可以以 60fps 的帧率处理 640x480 分辨率)

示例

以下是产生的视频输出的简要示例

更多示例可以在 YouTube 上找到。

安装

RaspberryPi 上安装,请查看 RaspberryPi 4 安装

要求

此程序需要一个可工作的 OpenCV (版本 >=4.5.5)安装。建议从源代码构建 OpenCV(如果您打算从源代码构建 OpenCV,请确保也安装 OpenCV 依赖项),尽管它应该与您发行版存储库中的预编译包一起工作(已在带有 extra/opencv 包的 ArchLinux 上成功测试)。

使用 Cargo

crates.io 上有可用的包。为了安装它,请在您的 shell 中运行 cargo install bombuscv-rs[^4]。

[^4]: 假设已安装 Rust

RaspberryPi 4 安装

强烈建议使用至少有 4GB RAM 的 RaspberryPi 4。此外,在尝试安装之前,请通过运行 raspi-config 并重新启动来在 接口选项 中启用 Legacy Camera 支持。由于在 RaspberryPi 上安装可能有点 棘手,因此提供了一个安装脚本[^5]。它负责更新和准备系统、编译 OpenCV 并安装 Rustup,最后是 BombusCV。您可以使用 curl 运行 安装脚本

curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/marcoradocchia/bombuscv-rs/master/bombuscv-raspi.sh | sh

[^5]: 使用脚本安装需要 RaspberryPi OS 64 位

使用方法

bombuscv-rs 0.3.0
Marco Radocchia <marco.radocchia@outlook.com>
OpenCV based motion detection/recording software built for research on bumblebees.

USAGE:
    bombuscv [OPTIONS]

OPTIONS:
    -d, --directory <DIRECTORY>    Output video directory
    -f, --framerate <FRAMERATE>    Video capture framerate
        --format <FORMAT>          Output video filename format (see
                                   <https://docs.rs/chrono/latest/chrono/format/strftime/index.html>
                                   for valid specifiers)
    -h, --help                     Print help information
    -H, --height <HEIGHT>          Video capture frame height
    -i, --index <INDEX>            /dev/video<INDEX> capture camera index
        --no-color                 Disable colored output
    -o, --overlay                  Date&Time video overlay
    -q, --quiet                    Mute standard output
    -v, --video <VIDEO>            Video file as input
    -V, --version                  Print version information
    -W, --width <WIDTH>            Video capture frame width

指定 widthheightframerate 将使 bombuscv 检测捕获设备提供的最接近的值组合,并选择它们。换句话说:如果需要有效的选项,则将使用它们;否则,bombuscv 将将这些值调整为最接近的可用的组合[^6]。

请注意,video 选项,它使用预录制的视频输入运行 bombuscv,与 frameratewidthheightoverlay 不兼容。此外,如果这些选项在配置文件中指定,它们将被忽略。这是因为前两个选项是从输入文件自动检测的,而最后一个选项在用于非实时视频流时没有意义;相同的规则适用于 CLI 参数。

[^6]: 适用于配置文件的相同规则

配置

除了 videono-color 之外的所有 CLI 选项都可以设置在默认情况下存储在 $XDG_CONFIG_HOME/bombuscv/config.toml 或通过设置 BOMBUSCV_CONFIG 环境变量指定的文件系统中的任何位置的 可选 配置文件中。CLI 选项/参数/标志覆盖配置文件中定义的选项。以下是一个示例配置文件

# be quiet (mute stdout)
quiet = false
# output video directory
directory = "~/output_directory/"
# output video filename format (see
# https://docs.rs/chrono/latest/chrono/format/strftime/index.html for valid specifiers)
format = "%Y-%m-%dT%H:%M:%S"

# The following options are ignored if bombuscv is run with `--video` option
# /dev/video<index> camera input
index = 0
# video capture frame width
width = 640
# video capture frame height
height = 480
# video capture framerate
framerate = 30
# date&time video overlay
overlay = true

变更日志

完整的 变更日志

待办事项

  • README 中提供构建和安装说明,以及安装 OpenCV 的说明。
  • 为 RaspberryPi 创建自动化安装脚本。
  • 使用 ~/<path> 在配置文件中使用 videodirectory 选项会导致错误:在 Deserializer 扩展 ~ 到绝对路径时需要。
  • 使用 video 时,在抓取的帧上生成的 日期和时间 悬浮窗口没有意义:在启用 video 选项时禁用视频悬浮窗口。
  • 增加选项,使用环境变量指定自定义配置路径。
  • 增加选项,指定(在配置文件或通过CLI参数)自定义输出视频文件名格式器(必须是chrono DateTime语法)。
  • 增加线程信号,用于中断捕获线程并优雅地终止执行。
  • 将逻辑从main移动到新定义的run

聊天支持

加入BombusCV的Discord服务器以获取安装或使用聊天支持。

Join our Discord server!

许可协议

GPLv3

依赖关系

~5–13MB
~126K SLoC