OpenCV (Open Source Computer Vision) 是一套實時影像程式庫, 這裡希望利用 Python3 來進行應用程式開發.
安裝
Windows
可以直接從 https://github.com/chiamingyen/kmol2016 git clone 可攜系統.
測試程式:
import numpy as np import cv2 # 建立一個黑色背景 img = np.zeros((512,512,3), np.uint8) # 以寬度 5 px 畫一條藍色的對角線 img = cv2.line(img,(0,0),(511,511),(255,0,0),5) # 呈現此影像 cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows() ''' # 載入 jpg 圖檔 image = cv2.imread("mario.jpg", flags=cv2.IMREAD_COLOR) # 然後呈現此影像 cv2.imshow('image',image) cv2.waitKey(0) cv2.destroyAllWindows() '''
在 Windows 環境執行結果:
Ubuntu 14.04
在 Ubuntu 操作系統中 for Python2 與 Python3 的 OpenCV 程式庫編譯流程如下:
# apt-get 更新 $ sudo apt-get update # apt-get 升級 $ sudo apt-get upgrade # 安裝所需的開發套件 $ sudo apt-get install build-essential cmake git pkg-config # 安裝編譯過程所需的程式庫 $ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev # 安裝編譯過程所需的程式庫 $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev # 安裝編譯過程所需的程式庫 $ sudo apt-get install libgtk2.0-dev # 安裝編譯過程所需的 fortran 編譯器 $ sudo apt-get install libatlas-base-dev gfortran # 安裝編譯過程所需的原始碼 $ sudo apt-get install python3.4-dev # 本台機器的 python 為 2.7 版, 而 python3 則為 python 3.4, 這裡安裝 numpy 模組 $ pip3 install numpy # 希望在帳號目錄下的 tmp 進行編譯工作 $ cd # 更換目錄到 tmp $ cd tmp # 利用 git clone 取得原始碼 $ git clone https://github.com/Itseez/opencv.git # 準備進入倉儲切換分支 $ cd opencv # 採用 3.1.0 版 $ git checkout 3.1.0 # 回到用戶目錄 $ cd .. # 再利用 git clone 下載原始碼 $ git clone https://github.com/Itseez/opencv_contrib.git # 準備進入倉儲切換分支 $ cd opencv_contrib # 與 opencv 配合, 採用 3.1.0 版 $ git checkout 3.1.0 $ cd .. # 準備開始建立程式庫 $ cd opencv $ mkdir build $ cd build # 這裡會同時建立 Python2 與 Python3 的 OpenCV 程式庫檔案 $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=OFF \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D PYTHON_EXECUTABLE=$(which python3) \ -D OPENCV_EXTRA_MODULES_PATH= ./../../opencv_contrib/modules \ -D BUILD_EXAMPLES=ON .. $ make -j4 $ sudo make install $ sudo ldconfig
完成安裝後, 執行上一個測試程式結果:
以下則為人臉變識程式:https://github.com/shantnu/FaceDetect/:
執行需要取得 haarcascade_frontalface_default.xml
import cv2 import sys cascPath = "haarcascade_frontalface_default.xml" faceCascade = cv2.CascadeClassifier(cascPath) video_capture = cv2.VideoCapture(0) while True: # 逐一以影格取像 ret, frame = video_capture.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale( gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE ) # 在辨識的臉形外圍畫一個矩形 for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) # 呈現影像 cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break # 停止執行 video_capture.release() cv2.destroyAllWindows()
人臉辨識程式執行結果:
Comments
comments powered by Disqus