CHDK是一套用于佳能数码相机的非官方固件“升级”程序,它并非真正对相机内的固件进行升级,而是作为应用程序在相机的OS DryOS 上启动。实现如下功能:
- 专业的手动控制拍摄,包括:输出RAW格式照片,手动控制各种曝光参数,连拍模式、包围曝光和录像时变焦等;
- 移动探测,捕捉指定区域的变化后触发拍照;
- 远程控制相机, 通过USB和PTP协议远程控制相机;
- 运行Lua/uBasic脚本灵活实现各种功能,简单的比如延迟拍照,间隔拍照,复杂的完全取决于你的想象和发掘。
CHDK固件只能用在佳能相机上,包括所有家用普通相机,使用方法如下:
使用SD卡灌入固件,按照手册运行软件即可,可选择开机自启动或手动启动。具体方法参考官网http://chdk.wikia.com/wiki/CHDK,或者万能的百度文库上的中文版。
由于不是器材党,对专业摄影基本外行,从可玩性方面主要从如下几个方面入手:
A. Motion detect 以及其它脚本。
B. USB 线控快门
C. PTP控制相机
由于这些功能都比较耗电,专门配置了一个外置4.3V电源。
A. Motion detect 以及其它脚本
先介绍其Motion detect 功能,该功能通过在相机上执行lua/basic脚本实现。该脚本可以将捕捉画面按行列切分成块,可定制感兴趣的捕捉区域,定时探测间隔等参数,这个功能除了用于敏感区域监控外,也可以用于不同pose的自拍。
具体代码参考
a=6 -- columns to split picture into b=6 -- rows to split picture into c=1 -- measure mode (Y,U,V R,G,B) ?U=0, Y=1, V=2, R=3, G=4, B=5 d=300000 -- timeout (mSec) e=200 -- comparison interval (msec) - less than 100 will slow down other CHDK functions g=3 -- draw grid (0=no, 1=grid, 2=sensitivity readout, 3=sensitivity readout & grid) h=0 -- not used in LUA - in uBasic is the variable that gets loaded with the number of cells with motion detected i=0 -- region masking mode: 0=no regions, 1=include, 2=exclude j=0 -- first column k=0 -- first row l=0 -- last column m=0 -- last row n=0 -- optional parameters (1=shoot immediate) o=2 -- pixel step repeat zones = md_detect_motion( a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) if( zones > 0 ) then shoot() end until (false)
借助其强大的脚本支持,除了Motion detect 功能,延迟拍摄、time lapse 摄影和包围曝光实现起来也就是几行脚本的事情。
B. USB 线控快门
这个专业单反相机才有的功能也可以通过CHDK轻松实现。不过需要部分硬件DIY的工作。配套硬件工作原理很简单,只要相机USB的1和4管脚有3-5v的瞬时供电即可触发快门。这个功能需要在CHDK Menu菜单中CHDK设置远程参数和 Enable Remote和设置开关类型。硬件装备上,经过实践,发现直接用带开关的充电宝即可实现简单远程快门功能,当然如果有兴趣,加个单片机控制5v电源的通断脉冲也可实现手动对焦、连拍和包围曝光等专业相机才有的功能。
C. PTP控制相机
PTP即 图片传输协议,over在 USB上的一种上层协议,实现照片的预览下载、远程拍照录像等功能,相机广泛支持。客户端方面,Windows上原生支持,Linux上著名的gphoto2 实现对多种相机的PTP控制。
用PI连上我的A650,开启gphoto2 PTP, 悲剧的是不支持远程拍照。
Device Capabilities:
File Download, File Deletion, File Upload
No Image Capture, No Open Capture, No vendor specific capture
CHDK扩展了PTP的支持,主要包括:
1. 脚本执行,主机端通过PTP发送脚本到相机远程执行,能本地执行的脚本都能远程执行。
2. 调整各种曝光参数后,然后远程快门或启动录像
3. 远程显示 即远程streaming.
上瑞士***CHDK试验,需要注意PTP控制和USB线控这两个功能互斥。相机上CHDK已ready,需要主机端PTP Client配合。
PTP Client 之前流行 德国人的ptpcam,现在用chdkptp,网上正好有raspbian的PI版本,省得编译了。
从https://www.assembla.com/spaces/chdkptp/documentss
安装新鲜出炉(2014/10/24)的chdkptp,连接相机,进入交互模式:
sudo ./chdkptp-sample.sh -c -i
rec 进入拍摄模式,shoot 触发快门, rebootshoot 触发快门,照片保存在Pi端而不是SD卡上。
当然还可以发送LUA脚本远程执行。