SimpleCV 是一个完全用 Python 语言编写的 Computer Vision 开源库。因为最近在做和 Computer Vision 有关的毕业设计,所以我要使用它来完成我自己课题中的设想。

安装 SimpleCV

安装 SimpleCV 的过程很简单,主要有通过包管理系统和通过源代码来进行安装两种方式。在写这篇文章的时候(2013-4-22),通过 pip 安装的 SimpleCV 存在一个影响使用的 bug,所以我最后使用的是通过 git 仓库下载源代码进而安装的版本。

通过包管理系统安装

SimpleCV 依赖于一些第三方库:SciPy、NumPy、Pygame、OpenCV 2.3+、IPython 10+、PIL 1.1.7+。在使 SimpleCV 能够顺利运行之前,你需要安装这些库的软件包。在我使用的 Arch Linux 上,通过如下命令来安装这些软件包:

1
sudo pacman -S python2-numpy opencv2.3.1_a-4 python-pygame ipython2

其它平台的安装方式可以参考官方给出的文档

安装了依赖的第三方库后,就可以开始安装 SimpleCV 了。通过 Python 社区很流行的 Pip 包管理系统可以很方便地安装 SimpleCV,只需输入如下命令即可:

1
sudo pip install simplecv

通过 Git 仓库源代码安装

我现在使用的 SimpleCV 是通过使用 Git 仓库的源代码来进行安装的。这样做的话,首先,你需要 clone 官方的 Git 仓库中的源代码到本地:

1
git clone https://github.com/sightmachine/SimpleCV.git SimpleCV-git

等源代码下载完毕后,就可以安装 SimpleCV 了(需要提醒的是,你必须安装 Python 的包安装工具 setuptools):

1
2
cd SimpleCV-git
sudo python setup.py install

如果存在疑问的话,官方的 Git 仓库的 README 文件中有详细的安装步骤,可以参考之。

Hello World 程序

刚开始学一门技术,怎么能不动手写写 Hello World 程序来练练手熟悉熟悉呢?这可是祖师爷 K&R 在 C 语言崛起的时代就立下的规矩(笑)。接下来我们就来实现两个 Hello World 类型的程序,权当熟悉 SimpleCV 的基础使用过程。

调用摄像头并显示捕获的图像

第一个例子是,使用 SimpleCV 打开电脑的摄像头,然后读取实时图片并显示。实现这个功能的代码极为简单:

Using camera through SimpleCV
1
2
3
4
5
6
from SimpleCV import *
camera = Camera()

while(1):
image = camera.getImage()
image.show()

由于 Python 语言本身的自解释能力极强,以上的代码是很容易理解的,所以我就不一行一行地作解释了。

最终的运行结果如下:

从图片中截取小车并保存

在第二个例子中,我们将会从一个图片中切出我们想要的部分,并将这部分保存为一张新图片。我们的素材图片如下:

我们的目标是,从这幅图里面截取出我们想要的黄色小车所在的一定大小的方形区域。首先,我们导入 SimpleCV 库,并且读入该图片:

1
2
from SimpleCV import *
parking_car_image = Image("parking_car.png")

然后,我们将小黄车的图片区域截取出来,并最终保存:

1
2
yellow_car_image = parking_car_image.crop(470, 200, 200, 200) #小车在图中的位置和大小我们事先已经知晓
yellow_car_image.save("yellow_car.png")

完整的代码如下(其实好简单,我都想一次给出啊):

Get yellow car from image.
1
2
3
4
from SimpleCV import *
parking_car_image = Image("parking_car.png")
yellow_car_image = parking_car_image.crop(470, 200, 200, 200) #小车在图中的位置和大小我们事先已经知晓
yellow_car_image.save("yellow_car.png")

最终我们截取的图片结果如下:

以上两个例子,其实都来自于 SimpleCV 官方给出的样例。同时,他们在 Github 上也给出了 SimpleCV 的样例,以供初学者研究。如果你觉得这两个例子还不过瘾的话(好样的),可以去找更多的例子研究。

小结

其实在学习 SimpleCV 之前,我已经研究过其它的几个 Computer Vision 开源库了:包括 OpenCV、OpenIMAJ 等。可只有 SimpleCV 让我惊艳了一番——正如它的名字一样,它因为够简单,所以使用起来很舒服。不知道这是不是因为使用 Python 构建的原因(笑)。SimpleCV 的官方文档支持还是比较完善的,另外还有支持论坛来解决用户的问题,很贴心。如果你有一些很疑难的问题的话,可以去那里咨询。

SimpleCV 对于一些简单的机器学习模型也是有一定的支持的,这个让我很开心啊(因为和我的毕设有关)。

O’Reilly 出过两本有关利用 Python 来完成 Computer Visoin 任务的书:Programming Computer Vision with PythonPractical Computer Vision with SimpleCV。如果你想进一步提高的话,可以参阅这两本书。