picamera 1.10 教程及api中文简译(一)在python2.7/3.2+上安装 picamera

以前做过一个家庭摄像头,用的是raspivid的命令行来实现,但是功能太少,不得不放弃重构,正好遇到了picamera这个库,使我能摆脱用命令行或其他低级语言来控制树莓派的摄像头模块。
现在picamera已经内置在树莓派最新的镜像之内了,可以方便我们的使用。而picamera也在不断的迭代更新中,现在的版本已经更新到了1.10新增了一些api,所以也为了方便自己的使用,现将1.10版本的官方api说明简译成中文。
官方api地址


安装

1、在python2.7/python3.2+上安装

在python2.7/python3.2+上安装picamera有几种方法,但每个方法都一些优缺点,可以根据自己的需求选择适合自己的方法进行安装。

1.1、固件升级

树莓派的摄像头模块是由内核进行驱动,随着版本的更迭,修复了大量的bug,并且扩展了摄像头模块的相关功能,虽然picamera支持固件向后兼容,但是在最新版发布时,picamera都是参照最新的固件进行测试,所以如果你用的是一个比较旧版本的固件,可能有一些新库的功能是固件无法支持的。所以在安装库之前推荐进行固件升级,并使用最新的固件进行开发。

#确保树莓派更新到最新固件
sudo apt-get update
sudo apt-get upgrade

此前有些有些文档建议使用sudo rpi-update来更新树莓派固件,但是现在这个命令已经过时了。如果您以前是通过该命令来更新固件,也可以通过apt与下面的命令来对其进行更新。重启设备后生效。

sudo apt-get update
sudo apt-get install --reinstall libraspberrypi0 libraspberrypi-{bin,dev,doc} raspberrypi-bootloader
sudo rm /boot/.firmware_revision

请注意,PiTFT固件(加强支持GPIO驱动tft屏幕的固件)的摄像头模块固件版本比较落后,如果使用此固件来对摄像头进行操作则会缺少一些功能,包括“延长曝光”,“以及文字覆盖标识”。

1.2、raspbian依赖安装

如果你使用的是raspbian的发行版,最好使用系统自带的包管理器(即apt-get工具)来安装picamera,这将更容易更新和删除picamera库。

使用依赖安装如下:

#如果在python3上,将python-picamera替换成python3-picamera
sudo apt-get install python-picamera

移除安装如下:

#如果在python3上,将python-picamera替换成python3-picamera
sudo apt-get remove python-picamera
sudo apt-get autoremove

如果你使用的是最新的raspbian发行版,可能会发现系统已经安装了picamera库,因为在最新版的发行版中已经默认包含了picamera库(包括NOOBS版)。
如果你发现raspbian发行版的picamera版本比较落后,你也可以直接利用pypi来进行安装,或者等待raspbian的更新。

1.3、独立用户pip安装

如果你不想利用依赖安装将picamera作用于所有用户,那么可以利用pypi来进行安装。但这将使其他用户无法找到picamera库,如果你希望作用于全部用户请参照依赖安装。

切换到希望安装的用户进行安装:

#如果在python3上
#将python-pip替换成python3-pip,将pip替换为pip-3.2
sudo apt-get install python-pip
pip install --user picamera

如果你想在py中使用picamera.array模块,这将依赖numpy,但是安装numpy需要很长一段时间。

#如果在python3上
#将pip替换为pip-3.2
 pip install --user "picamera[array]"

需要注意的是,如果不使用sudo来执行pip的话,将会把picamera安装到某个用户,在apt-get update时无法更新picamera库的版本。-U参数为更新picamera。

#如果在python3上
#将pip替换为pip-3.2
pip install --user -U picamera

如果你想通过pip移除picamera的话:

#如果在python3上
#将pip替换为pip-3.2
pip uninstall picamera

1.4、系统pip安装

上一节讲的是通过pip将picamera安装至某一用户,这一节讲通过pip来安装到所有用户。

#如果在python3上
#将python-pip替换成python3-pip,将pip替换为pip-3.2
sudo apt-get install python-pip
sudo pip install picamera

如果你想在py中使用picamera.array模块,这将依赖numpy,但是安装numpy需要很长一段时间。

#如果在python3上
#将pip替换为pip-3.2
sudo pip install "picamera[array]"

更新安装picamera:

#如果在python3上
#将pip替换为pip-3.2
sudo pip install -U picamera

卸载安装picamera:

#如果在python3上
#将pip替换为pip-3.2
sudo pip uninstall picamera

1.5、通过沙盒环境(Virtualenv)安装

如果你希望通过一个沙盒环境来安装picamera的话(如果你正在做其他一些python项目,在安装库时会有一些潜在的依赖冲突,若需要避免这种事情的发生,最好使用沙盒环境。):

#如果在python3上
#将python-pip替换成python3-pip
#将pip替换为pip-3.2

#安装pip工具及python沙盒库
sudo apt-get install python-pip python-virtualenv
#创建名为sandbox的沙盒环境
#如果在python3上执行virtualenv -p python3 sandbox
virtualenv sandbox
#切换沙盒,以后可以用workon sandbox来切换
#但执行workon之前需要执行以下代码
source sandbox/bin/activate
#执行安装
(sandbox) $ pip install picamera

如果你想在py中使用picamera.array模块,这将依赖numpy,但是安装numpy需要很长一段时间。

#如果在python3上
#将pip替换为pip-3.2
(sandbox) $ pip install "picamera[array]"

需要记住的是,每次使用picamera时,你需要运行之前创建的沙盒环境:

source sandbox/bin/activate
workon sandbox
(sandbox) $ 

如果你希望在沙盒环境中更新picamera库的话:

#如果在python3上
#将pip替换为pip-3.2
source sandbox/bin/activate
workon sandbox
(sandbox) $ pip install -U picamera

如果你希望卸载的话:

rm -fr ~/sandbox/

1.6、编译安装

如果你想使用最新版(如Bata版)的picamera库,可以从github上获取最新代码,然后通过Makefile进行源码构建。这将是你的picamera版本库以github为核心进行更新,并且在源码中还包含了vim/emacs的代码提示标签文件。下面的例子演示了在沙盒环境中通过源码构建picamera:

sudo apt-get install build-essential git git-core exuberant-ctags \
    python-virtualenv
#如果在python3上执行virtualenv -p python3 sandbox
virtualenv sandbox
source sandbox/bin/activate
(sandbox) $ git clone https://github.com/waveform80/picamera.git
(sandbox) $ cd picamera
(sandbox) $ make develop

每次进行更新时,可以通过git命令pull到最新的代码进行更新:

source sandbox/bin/activate
(sandbox) $ cd picamera
(sandbox) $ git pull
(sandbox) $ make develop

如果你想删除的话:

rm -fr ~/sandbox/

任何对picamera感兴趣的人,都希望破解(为啥要破解?这意思可能是要读懂整个项目的源码)整个项目,但事先请明白,虽然技术上picamera是纯python编写的项目,但在代码中大量使用了ctype,所以有一些代码看上去并不是纯的python,而是夹杂着C语言代码的python代码。

该项目主要有picamera这个主类来封装raspistill和raspivid的命令,并通过ctype的libmmal进行转换,再加上一组encoder classes,这样重新构建了回调方法来式上层应用调用到bytes流。这种封装也在PiCameraCircularIO,PiBayerArray的项目中出现。

所以即使你看不懂有些picamera代码,我也很想知道你希望这组api变成什么样子!

1.7、测试安装成功

如果你现在已经完成了picamera的安装,可以运行picamera来测试picamera库:

#如果在python3上
#将pip替换为pip-3.2
(sandbox) $ sudo apt-get install libav-tools
(sandbox) $ pip install Pillow pytest mock numpy

最后运行测试命令

(sandbox) $ make test

你可能感兴趣的:(树莓派,picamera)