R 軟體 cvDetect 套件: R 與 OpenCV 臉部偵測的示範

由於在網路上搜尋了半天都找不到 R 軟體與 OpenCV 臉部偵測功能結合的套件,我測試了幾天,終於把 OpenCV 最引人注意的臉部偵測、手部(手掌)偵測、以及手指偵測三個部分,藉由 Rcpp 的修改,包裝成一個示範用的套件 cvDetect.

由於 OpenCV 是一套很大的 C++ 影像偵測函數庫,再加上我的 C++ 語言能力只是剛好入門而已,所以這個套件的目的只是當做一個 demo 功能。藉由原始碼的公開,或許能讓更多愛好 R 軟體的朋友們參考之後,可以再擴充、修改。

Update:cvDetect 0.1.1 版 Windows zip 安裝檔已經上傳到 Github, 不需要再自己編譯。細節請見我在 Githut 上的 cvDetect 網頁 .

以下敘述適用於舊的 0.1.0 版:

cvDetect 套件目前僅限於 Windows 作業系統,下載網址是

http://steve-chen.tw/Rpackages/cvDetect_0.1.0.tar.gz

套件所用的三個偵測功能的原始 C++ 程式碼網址如下:

Face detection:
https://github.com/opencv/opencv_attic/blob/master/opencv/samples/cpp/multicascadeclassifier.cpp

Hand/Palm detection: 這個程式被我修改的幅度很大,因為他用的是 OpenCV 2.X 版,但 ROpenCVLite 安裝的是新的 3.2.0 版,有滿多函數名稱跟用法都已經更改
https://www.andol.me/1830/detecting-hand-gestures-using-haarcascades-training/

Finger detection:
https://picoledelimao.github.io/blog/2015/11/15/fingertip-detection-on-opencv/

以下是在 Windows 作業系統上的安裝步驟:

請注意:cvDetect 套件依賴 ROpenCVLite 套件把 OpenCV 函數庫在 Windows 安裝好,所以 Step 1. 一定要執行。

Step 1. 請先執行我之前文章「Rvision OpenCV 套件介紹: 擷取並顯示 Webcam 影像 (Part 1)」裡面的 Step1 到 Step4 安裝好 ROpenCVLite 的步驟。

ROpenCVLite 套件的目的,就是幫忙抓取並編譯好 OpenCV C++ 函數庫的 Windows 版,並安裝在 R 軟體 ROpenCVLite 子資料夾底下,好讓 Rtools 裡面的 mingw C++ 編譯器後續可以取用 OpenCV 的各種函數,方便其他開發套件使用。

Step 2. 假設下載的 tar.gz 檔放在 d:\temp 資料夾底下。

方法(1): 請以系統管理員身份打開一個 DOS 視窗(命令提示字元),然後執行以下命令:

d:
cd \temp

# 下一行請改成自己的 R 軟體安裝資料夾
d:\R\R-3.4.0\bin\x64\R.exe CMD INSTALL cvDetect_0.1.0.tar.gz

方法(2): 進入 R 軟體,執行以下指令:

install.packages("d:/temp/cvDetect_0.1.0.tar.gz",repos=NULL,type="source")

Step 3. 裝好後,請進入 R 軟體。假如您只有一個 WebCam, cameraId 預設都是 0, 但如果 0 沒有效果,請改成 1 (或 2, 3,…). 請確定您的 WebCam 有接上。

另外,以下三個函數要停止時,只要在鍵盤按 q 或 Q 即可

library(cvDetect)

# WebCam 影像即時偵測
face_detect(cameraId=0)
# 偵測照片中的臉孔
face_detect(imgFile="d:/pic/somePeople.jpg")

# WebCam 影像即時偵測
hand_detect(cameraId=0)

# WebCam 影像即時偵測
finger_detect(cameraId=0)