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