小黑屋|Klipper玩客 ( 桂ICP备13004039号-7 )

GMT+8, 2024-11-21 23:17

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

3D打印机Klipper摄像Crowsnest插件安装及Timelapse延时摄影

1929
8
0
0
文一 LV2
正文
发布时间:2023-02-08
本帖最后由 文一 于 2024-3-5 16:46 编辑

一、要点:
1、一般免驱即插即用摄像头,均可以在linux、armbian等系统下的klipper支持使用,无需另外安装驱动。

2、不同于常规的的 MJPG-Streamer方式安装,Mainsail下的Crowsnest依靠µStreamer,提供更轻量更快速的替代服务,具备支持断线重连后信号恢复,而无需重启服务。

3、摄像头支持的分辨率及刷新率等参数可以通过 Crowsnest.log查看。

二、Crowsnest的安装
1、安装
方法一:kiauh  脚本安装
用户账号下
  1. git clone https://gitee.com/miroky/kiauh.git
  2. ./kiauh/kiauh.sh
复制代码
微信截图_20230317023539.png


选择install 11,即可自动安装

方法二:手动安装
在用户账号下
  1. cd ~
  2. git clone https://github.com/mainsail-crew/crowsnest.git
  3. cd ~/crowsnest
  4. sudo make install
复制代码

安装成功后可在moonraker.conf添加以下代码:

  1. [update_manager crowsnest]
  2. type: git_repo
  3. path: ~/crowsnest
  4. origin: https://github.com/mainsail-crew/crowsnest.git
  5. install_script: tools/install.sh
复制代码

卸载'crowsnest':
  1. cd ~/crowsnest
  2. make uninstall
复制代码

2、配置:

crowsnest.conf 简单设置如下
  1. [crowsnest]
  2. log_path: ~/printer_data/logs/crowsnest.log
  3. log_level: quiet
  4. delete_log: true

  5. [cam 1]
  6. mode: mjpeg
  7. port: 8080
  8. device: /dev/video1
  9. resolution: 1600x1200
  10. max_fps: 15
  11. v4l2ctl: focus_auto=0,focus_absolute=14,brightness=-25,contrast=20,gamma=95,exposure_auto=3,power_line_frequency=0,exposure_absolute=300
复制代码

其中device目录可通过ls /dev/* 命令查询
resolution分辨率max_fps最大帧率等更多参数可通过crowsnest.log查看。

20240305补充:调试查阅摄像头正确ID的方法。

# 安装所需工具包
sudo apt install v4l-utils usbtop
# 查看已连接的摄像头设备
v4l2-ctl --list-devices
# 如果没有识别到相应设备,请检查设备是否连接良好,以及 lsusb、dmesg 等命令查看是否被系统识别
# 查看对应摄像头的支持格式
v4l2-ctl -d 【/dev/video1】 --list-formats-ext
v4l2-ctl --device=/dev/video* --all
# 查看并设置摄像头支持的控制参数
v4l2-ctl -d /dev/video0 --list-ctrls
# v4l2-ctl -d /dev/video1 --set-ctrl=zoom_absolute=170


以下两句可以找到正确的video,其中video0 可以改成video1 video2,能够查阅支持参数的,即位当前可用摄像头。
v4l2-ctl --list-devices

v4l2-ctl -d /dev/video0  --list-ctrls

3、v4l2ctl配置:

crowsnest.log中,可以查询摄像头可调节的参数,如以下设置:
v4l2ctl: focus_auto=0,focus_absolute=16

含义为禁止自动对焦,焦点设置为16。


焦点设置参考以下文章:https://www.coder.work/article/963086



对于 UVC 的 USB 网络摄像头-兼容(大多数情况下),很有可能可以使用相机的自动对焦然后锁定它。要确定相机是否允许通过 UVC 执行此操作,在 Linux 上可以使用 v4l2ctl。 v4l2ctl -l 列出所有可用的控件。

例如,以下命令对 Ubuntu 16.04 机器上的 Microsoft LifeCam Cinema 起到了作用,该机器运行了一个简单的 Python OpenCV 程序来显示当前帧:

> v4l2-ctl -d 0 -c focus_auto=1

这里的-d 0,0代表摄像头端口,有的要选择1。更多v4l2-ctl命令可以输入c4l2-ctl查看详细参数帮助。

> v4l2-ctl -d 0 -C focus_absolute

focus_absolute: 12

c注意大小写。

将物体移近相机后,焦点发生变化,我得到了一个不同的 focus_absolute 值:(所以 UVC 可以访问自动对焦选择的值。)



> v4l2-ctl -d 0 -C focus_absolute

focus_absolute: 17

然后我改为手动对焦,这锁定了自动对焦选择的值:

> v4l2ctl -d 0 -c focus_auto=0

> v4l2ctl -d 0 -C focus_absolute

focus_absolute: 17

因此对于 LifeCam Cinema,代码唯一需要做的就是将 focus_auto 控件最初更改为自动 (1),然后在聚焦后更改为手动是要上锁的。

如果以上命令无效,也可以在conwsnest.conf中手动调整focus_absolute数值,其中数值越大,焦距越近。

摄像头可安装在热床上等位置以获得最佳视频效果和角度。


  1. v4l2-ctl -l  #列出所有可以修改的选项及值
  2. v4l2-ctl -C exposure_auto  #列出对应选项的值
  3. v4l2-ctl -c exposure_auto=1 #修改对应选项值 ,(1为手动模式,3为自动模式)
  4. v4l2-ctl -c exposure_absolute=100 #手动设置曝光
复制代码


三、Timelapse设置:

1、要点:

要获得最佳拍摄效果,需要对摄像头位置进行调试安装。通常可根据个人需要,安装在框架上,或热床上。

在设置延时参数前,最好锁定摄像头焦距。如:v4l2ctl: focus_auto=0,focus_absolute=16

2、参数设置:参阅https://www.bilibili.com/read/cv16576075

Park position可自定义截屏时打印头停靠位置等参数

  1. # moonraker.conf
  2. # [timelapse] section
  3. [timelapse]
  4. #output_path: ~/timelapse/ #文件输出路径
  5. #frame_path: /tmp/timelapse/ #项目路径
  6. #ffmpeg_binary_path: /usr/bin/ffmpeg #编译器路径
  7. ########################
  8. ########配制选项########
  9. ########################
  10. #enabled: True #是否启用时间延时摄影
  11. #mode: layermacro #此模式使用宏来触发抓取帧,但需要设置切片器才能在图层更改时添加GCODE
  12. #snapshoturl: http://localhost:8080/?action=snapshot #摄像头调用地址
  13. #gcode_verbose: True #‎“true”启用或“false”禁用宏的详细程度‎
  14. #parkhead: False #‎“true”启用或“false”禁用在拍摄帧之前移动打印头。‎
  15. #parkpos: back_left ‎#这定义了在拍摄相框之前将打印头停放的位置。可能的配置是[center, front_left, front_right, back_left, back_right, custom]
  16. #如果选择了custom想要自定义打印头驻留的位置可以设置下面的参数
  17. #park_custom_pos_x: 0.0 ‎#自定义打印头驻留的绝对 X 坐标(单位 mm)‎
  18. #park_custom_pos_y: 0.0 #自定义打印头驻留的绝对 Y 坐标(单位 mm)
  19. #park_custom_pos_dz: 0.0 #‎自定义打印头驻留的相对 Y 坐标(单位 mm)‎
  20. #park_travel_speed: 100 #驻留时打印头移动速度(单位毫米/秒
  21. #park_retract_speed: 15 ‎#驻留时缩回速度(单位毫米/秒)‎
  22. #park_extrude_speed: 15 #‎恢复打印时挤出的速度(单位毫米/秒)‎
  23. #park_retract_distance: 1.0 #‎回抽来以防止渗出的距离(单位毫米)‎
  24. #park_extrude_distance: 1.0 #‎恢复打印之前挤出以填充喷嘴的距离(单位 mm)‎
  25. #hyperlapse_cycle: 30 #定义在超延时模式下拍摄帧的时间间隔
  26. #autorender: True #‎“true”启用或“false”禁用打印结束时渲染过程的自动触发。或者,您可以使用最终 gcode 中的“TIMELAPSE_RENDER”或渲染 http 终端节点(可能集成到前端)来触发渲染过程。‎
  27. #constant_rate_factor: 23 #‎这将配置渲染视频的质量与文件大小。CRF 刻度的范围是 0–51,其中 0 表示无损,23 表示默认值,51 表示质量最差。较低的值通常会导致较高的质量,主观上合理的范围为17-28。将 17 或 18 视为视觉上无损。更多信息: ‎‎https://trac.ffmpeg.org/wiki/Encode/H.264‎F
  28. #output_framerate: 30 #‎定义视频的帧速率。(每秒单位帧数)注意:如果启用了variable_fps,这将被忽略。‎
  29. #pixelformat: yuv420p #‎定义输出视频的像素格式。一些较旧的h264设备,如手机和其他设备需要“ yuv420p”,这是默认的延时组件。要获取哪些像素格式可用的更多信息,请在系统控制台中运行“ffmpeg -pix_fmts”或参考 ffmpeg 文档:‎‎https://ffmpeg.org/ffmpeg.html‎
  30. #time_format_code: %Y%m%d_%H%M #‎这定义了应如何命名呈现的视频。它使用 python 日期时间格式。默认值为“%Y%m%d_%H%M”。有关日期时间格式的更多信息,请参阅‎‎此处 https://docs.python.org/3/librar ... rptime-format-codes‎
  31. #extraoutputparams:  ‎定义FFMPEG的额外输出参数 更多信息: ‎‎https://ffmpeg.org/ffmpeg.html‎‎ 注意:在这里指定任何内容可能会禁用其他功能!(ffmpeg 限制)‎
  32. #variable_fps: False #‎“true”启用或“false”禁用输出帧速率的变量计算。这使用拍摄的帧数和“目标长度”,但受“variable_fps_min”和“variable_fps_max”设置的限制。
  33. #targetlength: 10 定义视频的目标长度(单位秒)
  34. #variable_fps_min: 5 ‎variable_fps的最小 fps(每秒帧数)。‎
  35. #variable_fps_max: 60 variable_fps的最大 fps(每秒帧数)。‎
  36. #flip_x: False
  37. #flip_y: False
  38. #duplicatelastframe: 0 #‎将最后一帧复制到输出视频的末尾。‎
  39. #previewimage: True #‎“true”启用或“false”禁用最后一帧来生成预览缩略图‎
  40. #saveframes: False ‎“True”启用或“False”禁用将帧打包到 zip 文件以供外部使用或呈现。‎  
复制代码







回复

 

全部评论 共 8 个

铜牌杰瑞 LV8

铜牌杰瑞 发表于 2023-2-8 23:01 显示全部楼层

主任写文章就是写得好。

文一 LV2

文一 发表于 2023-3-7 02:11 显示全部楼层

本帖最后由 文一 于 2023-3-7 05:56 编辑

crowsnest摄像头如果一直显示 no signal, 需要修改该文件。

/home/klipper/crowsnest/libs/ustreamer.sh

  1. if [[ "${dev}" = "$(dev_is_raspicam)" ]]; then
  2.       start_param+=( -m MJPEG --device-timeout=5 --buffers=3 )
  3.   else
  4.       start_param+=( -d "${dev}" --device-timeout=2 )
  5.       # Use MJPEG Hardware encoder if possible
复制代码


修改为:

  1. if [[ "${dev}" = "$(dev_is_raspicam)" ]]; then
  2.       start_param+=( -m MJPEG --device-timeout=5 --buffers=3 )
  3.   else
  4.       start_param+=( -d "${dev}" --device-timeout=4 )
  5.       # Use MJPEG Hardware encoder if possible
复制代码

也就是2改为4,从而增大延迟。

然后菜单内重新启动crowsnest即可。

文一 LV2

文一 发表于 2023-5-29 11:56 显示全部楼层

本帖最后由 文一 于 2023-5-30 16:26 编辑

Q: log里最后显示这个 crowsnest: Dependency: 'rtsp-simple-server' not found. Exiting!

A:
因为网络的原因。导致 rtsp-simple-server_v0.20.2_linux_arm64v8.tar.gz 这个文件无法下载。可以通过其他方式下载后,通过ssh,上传到 rtsp-simple-server 文件夹,再重新安装就好了。我昨晚新装一台机子,也遇到这个问题。


初步研判是由于crowsnest升级到4以后,修改了文件结构,导致文件地址发生了变化。国内镜像文件路径失效。

更新:最新版本在安装时,不在需要下载 rtsp-simple-server_v0.20.2_linux_arm64v8.tar.gz
QQ图片20230530162503.png

不过依然需要修改/home/klipper/crowsnest/libs/ustreamer.sh
不过位置发生了变化


    # Add device
    start_param+=( -d "${dev}" --device-timeout=5 )



2修改成5


此外新版本crowsnest.conf 配置文件也发生了变化,注意相应修改

QQ图片20230530162513.png


miao_o LV2

miao_o 发表于 2023-5-30 18:25 显示全部楼层

本帖最后由 miao_o 于 2023-5-30 18:35 编辑

小白不太明白
ls /dev/* 里怎么看设备呀,用ls /dev/v4l/by-id/*查看的是正确的吗?
fluidd里直接默认设置添加摄像头吗

文一 LV2

文一 发表于 2023-5-30 19:26 显示全部楼层

miao_o 发表于 2023-5-30 18:25
小白不太明白
ls /dev/* 里怎么看设备呀,用ls /dev/v4l/by-id/*查看的是正确的吗?
fluidd里直接默认设置 ...

这两句是在root 用户名下 列出设备,如果查不到,就没有连接上。

大力 LV2

大力 发表于 2023-5-30 20:13 显示全部楼层

十分感谢

甜瓜 LV2

甜瓜 发表于 2023-6-11 16:01 显示全部楼层

感谢,终于用起来了。

文一 LV2

文一 发表于 2024-3-5 16:46 显示全部楼层

20240305补充:调试查阅摄像头正确ID的方法。

# 安装所需工具包
sudo apt install v4l-utils usbtop
# 查看已连接的摄像头设备
v4l2-ctl --list-devices
# 如果没有识别到相应设备,请检查设备是否连接良好,以及 lsusb、dmesg 等命令查看是否被系统识别
# 查看对应摄像头的支持格式
v4l2-ctl -d 【/dev/video1】 --list-formats-ext
v4l2-ctl --device=/dev/video* --all
# 查看并设置摄像头支持的控制参数
v4l2-ctl -d /dev/video0 --list-ctrls
# v4l2-ctl -d /dev/video1 --set-ctrl=zoom_absolute=170


以下两句可以找到正确的video,其中video0 可以改成video1 video2,能够查阅支持参数的,即位当前可用摄像头。
v4l2-ctl --list-devices

v4l2-ctl -d /dev/video0  --list-ctrls
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表