Hacks on Computer Vision

好用的IPython

2013.06.03

最近在看《Python科学计算》这本书,同时也把图像处理的科研慢慢转用Python,虽然对高效的C和OpenCV有些不舍。

今天在实验室Windows 7下弄了份vimrc,打开IPython和GVim开始编程,在IPython交互环境下测试,在Gvim中具体写程序。

翻看了《Python科学计算》这本书,开始就介绍了IPython的方便之处以及Debug的方法,记录下来以备不时之需:

  • Tab自动补全: 这个功能相当强大,可以列出相当详细的信息,比如一个模块的所有函数。
  • 查看文档: 输入函数名,后面加一个?表示查看函数的文档,加两个?表示查看其Python源代码(源代码为python编写)。
  • 执行Python程序:使用run命令就可以了。默认是在一个新的环境中运行程序,当程序退出时将程序运行环境中的对象复制到IPython环境中。若加上-i参数,则在IPython的当前环境中执行程序,程序可直接访问IPython中的对象。
  • 执行剪切板中的程序:运行paste命令将在IPython环境中运行剪切板中的程序代码。运行paste foo将把剪切板中的内容复制到变量foo中,变量foo是IPython提供的SList列表类型,提供了很多对其内容进行操作的方法。
  • 执行系统命令:在要执行的系统命令前加!。如执行!test.py,则操作系统会运行test.py文件,与run不同,其将在另外的进程中运行。

在IPython中使用run命令运行Python程序能够提供调试程序的速度,因为已经载入的模块不需要重新载入。如果修改了载入的模块文件,使用reload(<module_name>)即可。

调试功能

IPython提供的调试功能很强大,只需要简单的几步就可以检测到Bug:

run test.py
debug
u
...

从我遇到的一个问题来具体看下Debug的过程吧。

我现在正在用Python做图像处理,其中涉及到图像的检索,即用输入图像的特征与数据库中的图像特征进行匹配,遇到了个小问题:

In [32]: run PryLearning.py
1260
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

F:\src\LearningPython\PryLearning.py in <module>()
    130     image = "1.png"
    131     k = 15
--> 132     Matched = HoGMatch(image, k)
    133
    134

F:\src\LearningPython\PryLearning.py in HoGMatch(Imagepath, k)
     90         tmp = 0
     91         for i in xrange(len(hog)):
---> 92             tmp += pow((hog[i] - tmpHOG[i]),2)
     93
     94         Match.setdefault(imgpath, tmp)

IndexError: index out of bounds
WARNING: Failure executing file: <PryLearning.py>

提示错误说索引超出了范围,debug下:

In [34]: debug
> f:\src\learningpython\prylearning.py(92)HoGMatch()
     91         for i in xrange(len(hog)):
---> 92             tmp += pow((hog[i] - tmpHOG[i]),2)
     93

感觉这行没问题啊,看看hogtmpHOG的长度吧:

ipdb> print i
324
ipdb> print len(hog)
1260
ipdb> print len(tmpHOG)
324

好吧,现在知道问题在哪了,我修改了HOG特征的参数,需要对数据库中图像重新跑下特征提取!现在可以输入q退出Debug模式了。

PS: 今天是我的生日,本来打算写个类似于诗歌的长文,抒发下自己的情感的。现在想想,就让那些dark side继续隐藏在内心世界吧,写出来就真的会好受些吗?算了吧,人生苦短,我用Python!

__EOF__

本文作者HackCV
版权声明本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
本文链接https://hackcv.com/posts/%E5%A5%BD%E7%94%A8%E7%9A%84ipython/

发表评论