1. Why Python
C/C++
早期的計(jì)算機(jī)視覺(jué)領(lǐng)域大多數(shù)程序都是用C/C++編寫(xiě)。隨著計(jì)算機(jī)硬件速度越來(lái)越快,開(kāi)源平臺(tái)越來(lái)越多,開(kāi)發(fā)者選擇計(jì)算機(jī)視覺(jué)算法的實(shí)現(xiàn)語(yǔ)言變得更加靈活,代碼編寫(xiě)的效率和易用性成為選擇編寫(xiě)語(yǔ)言時(shí)的考慮因素,而不再僅僅只考慮執(zhí)行效率。
?
Python
Python的跨平臺(tái)、開(kāi)放性、易用性,加之豐富的資源使其成為近年來(lái)越來(lái)越多開(kāi)發(fā)者的選擇。國(guó)外出版了大量的Python編程、學(xué)習(xí)書(shū)籍,亞馬遜搜索Python圖書(shū),結(jié)果列表長(zhǎng)達(dá)100頁(yè)共5712本(截止2016年5月28日)。你也可以從諸如Coursera或Edx等mooc平臺(tái)找到像MIT校長(zhǎng)講授的Python入門(mén)等課程。國(guó)內(nèi)也引進(jìn)了許多優(yōu)秀的學(xué)習(xí)資料和許多在線課程。除了這些學(xué)習(xí)資料,更重要的是Python自帶很多可免費(fèi)獲取的強(qiáng)大而便捷的圖像處 理、數(shù)學(xué)計(jì)算和數(shù)據(jù)挖掘模塊和豐富的其他網(wǎng)絡(luò)資源。
本文以windows平臺(tái)為例,介紹使用Python進(jìn)行計(jì)算機(jī)視覺(jué)編程的開(kāi)發(fā)環(huán)境搭建與基本配置,總結(jié)了軟件下載地址、安裝方法和開(kāi)發(fā)環(huán)境搭建的基本方法,并提供了簡(jiǎn)單的代碼示例。想說(shuō)的是,Python安裝方法與系統(tǒng)、軟件版本等諸多因素有關(guān),要想一步到位比較難,遇到問(wèn)題多種方式可以混合嘗試。
2.下載安裝軟件包
Python機(jī)器視覺(jué)編程環(huán)境的常用配置如下:
Python:Pyhton2.7或Python3.x
pip:python的一個(gè)包管理器,安裝后可方便的引入第三方庫(kù)
NumPy:該模塊用于python計(jì)算機(jī)視覺(jué)編程時(shí)的向量、矩陣的表示與操作
SciPy:更高級(jí)的數(shù)學(xué)計(jì)算模塊
Matplotlib:結(jié)果可視化模塊
PIL:Python的圖像處理類庫(kù),提供通用的圖像處理功能及大量基本圖像操作
LIBSVM:用于機(jī)器學(xué)習(xí)的開(kāi)源庫(kù)
OpenCV:流行的開(kāi)源機(jī)器視覺(jué)算法庫(kù),提供越來(lái)越多的Python接口,目前支持到Python2.7
2.1 Python
版本選擇:
選擇Python2還是Pyhton3這是一個(gè)問(wèn)題,我們需要知道的:
Python2:用的人多,坑少,大多數(shù)第三方庫(kù)目前都支持。
Python3:重大改進(jìn),發(fā)展趨勢(shì)。但有些第三方庫(kù)目前還支持不到3.x。
Python3與Python2有很多語(yǔ)法差異,并且不兼容2.x版本。
對(duì)初學(xué)者,可以先學(xué)Pyhton2.7,等第三方庫(kù)支持較好了再學(xué)習(xí)Python3,也會(huì)比較快入手。
安裝并添加環(huán)境變量:
下載與操作系統(tǒng)對(duì)應(yīng)的版本,運(yùn)行安裝,這里選擇默認(rèn)安裝路徑C:Python27。
然后添加Python的安裝路徑到系統(tǒng)環(huán)境變量PATH中:計(jì)算機(jī)->右鍵->屬性->高級(jí)系統(tǒng)設(shè)置,系統(tǒng)環(huán)境變量后加“;”號(hào),然后添加python2.7的路徑,確定。
這樣,命令行即可直接運(yùn)行Pyhton,并查看版本信息
2.2 安裝pip
pip是python中的一個(gè)包管理器,就是在電腦中自動(dòng)安裝、配制、卸載和升級(jí)軟件包的工具組合。pip可以代替之前的easy_install,可方便的引入第三方庫(kù)。
目前最新版本為PIP-8.1.2。
安裝并添加系統(tǒng)環(huán)境變量:
下載對(duì)pip-8.1.2.tar.gz壓縮包,打開(kāi)cmd,進(jìn)入相應(yīng)解壓目錄使用命令行安裝。
例如,下載的是PIP-8.1.2.tar.gz壓縮包,解壓后得到pip-8.1.2文件夾。將該拷貝到Python安裝目錄C:Python27下(不拷貝到這個(gè)文件夾也可以),打開(kāi)cmd進(jìn)入pip-8.1.2目錄下運(yùn)行:
python setup.py install
?
然后再次編輯系統(tǒng)環(huán)境變量,將C:Python27Scripts也添加到Path,這樣可以方便的運(yùn)行pip
有了pip可以在命令行使用 pip install xxx 的方法方便的安裝所需的第三方庫(kù),例如下面的NumPy和SciPy等第三方庫(kù)了。
2.3 NumPy
NumPy(Numeric Python)是Python的一種開(kāi)源的數(shù)值計(jì)算擴(kuò)展。這種工具可用來(lái)存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結(jié)構(gòu)要高效的多(該結(jié)構(gòu)也可以用來(lái)表示矩陣(matrix))。提供了許多高級(jí)的數(shù)值編程工具,如:矩陣數(shù)據(jù)類型、矢量處理,以及精密的運(yùn)算庫(kù)。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。
NumPy和SciPy都可以在 下載。
安裝:
方法1:
下載源碼,打開(kāi)cmd,進(jìn)入相應(yīng)目錄使用命令行安裝
python setup.py install
方法2:
windows系統(tǒng)可以下載對(duì)應(yīng)版本的.exe文件,如numpy-1.9.2-win32-superpack-python2.7.exe安裝。
方法3:
使用pip直接安裝NumPy
pip install numpy
可能會(huì)因?yàn)榫W(wǎng)速等原因安裝不成功,多試幾次。本機(jī)安裝時(shí)試了兩次裝成功。
2.4 SciPy
SciPy (Scientific Computing Tools for Python) 是一款方便、易用的python的科學(xué)和工程計(jì)算工具包。它包括統(tǒng)計(jì),優(yōu)化,整合,線性代數(shù)模塊,傅里葉變換,信號(hào)和圖像處理,常微分方程求解器等。
方法3:
同樣也可以使用pip直接安裝scipy
pip install scipy
2.5 PIL
PIL (Python Imaging Library) Python圖像處理類庫(kù)。提供了通用的圖像處理功能,以及大量游泳的基本圖像操作,如圖像縮放、裁剪、色彩空間轉(zhuǎn)換等。
安裝:
方法1:
下載源碼,打開(kāi)cmd,進(jìn)入相應(yīng)目錄使用命令行安裝
python setup.py install
方法2:
windows系統(tǒng)可下載.exe文件,如PIL-1.1.7.win32-py2.7.exe安裝。注意PIL目前免費(fèi)版支持到Python2.7。
方法3:
使用pip安裝
pip install PIL
2.6 matplotlib
matplotlib是一個(gè)2維Pyhton跨平臺(tái)交互式繪圖庫(kù)。
安裝說(shuō)明文檔 提示在windows平臺(tái)安裝matplot需要安裝相應(yīng)版本的setuptools, numpy, python-dateutil, pytz, pyparsing, 和 cycler。具體下載地址在該頁(yè)面下方有。本機(jī)只預(yù)先裝了numpy,其他包可能在pip安裝時(shí)自動(dòng)下載安裝了吧。大家可以先試試下面的方法2。
安裝:
方法1:
使用pip離線安裝.whl文件。將上述下載地址下載好的matplotlib-1.5.1-cp27-none-win32.whl拷入某文件夾
pip install e:教程pythonmatplotlib matplotlib-1.5.1-cp27-none-win32.whl
方法2:
使用pip在線安裝
pip install matplotlib
2.7 LIBSVM
LIbSVM是***同胞為世界機(jī)器學(xué)習(xí)的卓越貢獻(xiàn)之一,目前支持Python, R, MATLAB, Perl, Ruby, Weka, CommonLISP, CLISP, Haskell, OCaml, LabVIEW, and PHP interfaces. C# .NET code and CUDA多種語(yǔ)言。
下載地址:
~cjlin/libsvm/
下載LIBSVM軟件包libsvm-3.21.zip文件
安裝:
windows下安裝python的LIBSVM模塊及其艱難,請(qǐng)務(wù)必做好思想準(zhǔn)備:windows下安裝LIBSVM最常見(jiàn)問(wèn)題出在libsvm.dll文件上,關(guān)鍵是要用正確版本的libsvm.dll文件替換windows下的libsvm.dll文件。
在嘗試網(wǎng)上各種方法未果后,終于找到一個(gè)在本機(jī)環(huán)境下能用的方法,并且此方法比較簡(jiǎn)便,僅供大家參考。本機(jī)環(huán)境為:
系統(tǒng)為win7 64位
下載的LIBSVM版本是libsvm-3.21壓縮包
python安裝路徑C:Python27
Python版本:2.7.11 win32位
(1)將下載的libsvm-3.21壓縮包解壓到C盤(pán)根目錄下(其他文件夾也可)
將libsvm-3.21解壓到C:libsvm-3.21
(2)下載libsvm-3.21的.whl文件
到以下網(wǎng)址下載與自己Python版本對(duì)應(yīng)的LIBSVM的.whl文件:
拷貝到某目錄,例如:e:教程pythonLibsvm
(3)使用pip安裝libsvm-3.21-cp27-none-win32.whl
運(yùn)行cmd,使用pip安裝上述.whl文件:
pip install e:教程pythonlibsvmlibsvm-3.21-cp27-none-win32.whl
現(xiàn)在,符合本機(jī)環(huán)境和軟件版本的LIBSVM就被存放到你python安裝目錄下的Libsite-packages文件夾中,其中有一個(gè)libsvm-3.21.dist-info文件夾,里面都是說(shuō)明文件。
(4)將安裝生成的libsvm.dll替換C:libsvm-3.21windows下的libsvm.dll
使用安裝生成的C:Python27Libsite-packages下的libsvm.dll替換C:libsvm-3.21windows下的libsvm.dll。至此,libsvm.dll文件和你電腦的版本號(hào)完全對(duì)應(yīng),安裝完成,本文在第3節(jié)測(cè)試安裝。
本方法參考了下文:
2.8 OpenCV
OpenCV是業(yè)界最常用的開(kāi)源機(jī)器視覺(jué)庫(kù),無(wú)需多介紹。目前OpenCV僅支持到Python2.7。
安裝:
下載文件opencv-2.4.10.exe是一個(gè)自解壓縮文件,將解壓后的文件夾opencv->build->python->2.7->x86中的 cv2.pyd復(fù)制到:C:Python27Libsite-packages 中即可。
3. 測(cè)試安裝:示例程序
3.1 NumPy+PIL
Python IDLE GUI新建File,輸入如下代碼,保存后F5運(yùn)行
from PIL import Image
pil_im =Image.open("f:/images/Lena.jpg").convert('L')
pil_im.show()
值得注意的是:
windows7下PythonPIL庫(kù)show()函數(shù)顯示圖片有問(wèn)題,解決方法是在將Python安裝目錄下的Lib/site-packages/PIL目錄下的 ImageShow.py 文件的第 99 行進(jìn)行替換:
將原
return "start /wait %s && del/f %s" % (file, file)
替換為
return "start /wait %s && PING127.0.0.1 -n 5 > NUL && del /f %s" % (file, file)
替換后圖片將使用windows圖片查看器打開(kāi)。
NumPy參考文檔:
PIL參考文檔:
?
3.2 NumPy+Matplotlib
打開(kāi)Python,F(xiàn)ile->New File,輸入如下代碼,保存,F(xiàn)5運(yùn)行
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.plot(X,C)
plt.plot(X,S)
plt.show()
更多示例參考:
幫助文檔:
?
3.3 LIBSVM
2.7節(jié)已經(jīng)安裝配置好了LIBSVM,打開(kāi)IDLE (PythonGUI),新建一個(gè)文件,輸入如下代碼:
import os
os.chdir('C:libsvm-3.21python')
from svmutil import *
y, x = svm_read_problem('../heart_scale')
m = svm_train(y[:200], x[:200], '-c 4')
p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)
取個(gè)文件名(例如svmlib_test1.py)保存后,按F5運(yùn)行,運(yùn)行結(jié)果如下,說(shuō)明安裝成功
===================== RESTART:D:Pythonsvmlib_test1.py =====================
Accuracy = 84.2857%(59/70) (classification)
3.4 OpenCV
打開(kāi)解壓后opencv文件夾中的sourcesamplespython
選擇drawing.py右鍵->Edit with IDLE
如果沒(méi)有問(wèn)題應(yīng)該看到變換的彩色條紋:
自己寫(xiě)個(gè)顯示圖像的例子,新建文件,輸入代碼
import cv2
im = cv2.imread("f:/images/Lena.jpg")
imGray = cv2.imread('f:/images/Lena.jpg',cv2.CV_LOAD_IMAGE_GRAYSCALE)
cv2.imshow("WinName",im)
cv2.imshow("Gray WinName",imGray)
cv2.waitKey()
保存,F(xiàn)5運(yùn)行,結(jié)果如下
Python機(jī)器視覺(jué)編程環(huán)境搭建過(guò)程比較繁瑣,每一步可能都有多種方法,也可能有各種問(wèn)題,本文總結(jié)的是書(shū)上和網(wǎng)友給出的部分方法,難免疏漏,僅供參考。
評(píng)論