OpenBr快速入門

轉載請註明出處:Gaussichtml

官方翻譯加實踐,基於Windows版本。git

官網地址:這是連接github

這篇教程旨在使用一些有趣的例子讓你熟悉OpenBR背後的思想、對象以及動機。注意須要攝像頭的支持。web

OpenBR是一個基於QT、OpenCV和Eigen而構建的C++庫。它既能夠在命令行使用br命令來使用,還能夠經過C++或C的API接口來使用。使用br命令是最簡單也是最快地起步方法,這篇教程中的全部例子都是基於br命令的。算法

首先,確認OpenBR正確地安裝。api

Windows版本的安裝教程:這是Windows版教程bash

若是是其餘版本,請參照官網:官網數據結構

官方文檔存在必定錯誤,Windows版本可參照上面的連接。框架

在終端或命令行輸入:學習

$ br -gui -algorithm "Show(false)" -enroll 0.webcam

若是每一步都按照上面進行操做,你的攝像頭應該打開了而且開始捕捉視頻了。恭喜你,你正在使用OpenBR。注:若是是Windows用戶請切換到 openbr\build-msvc2013\install\bin 目錄下,也能夠把這個目錄加到環境變量裏面。

如今咱們來聊聊上面的命令到底發生了什麼。-gui-algorithmenroll是OpenBR的一些flag,它們被用來指定br應用的指令操做。OpenBR規定全部的flag都帶有-前綴,以及全部的參數都用空格隔開。Flags一般須要特定數量的參數。全部可能的flags以及它們的值在這裏:CL_API

讓咱們一個個解析一些這些參數和值:

  • -gui是用來告訴OpenBR打開一個GUI窗口的flag。注意,若是使用-gui,它必須是第一個傳給br的flag。
  • -algorithm是OpenBR最重要的flags之一。它須要一個參數,被稱做算法串(algorithm string)。這個字符串決定了傳輸哪些圖像以及元數據的管道。它由Transforms組成,浙江在後續的教程裏講解。
  • -enrollGalleryFormat那裏讀文件,而且加入到算法管道中,以及將它們序列化給另外的GalleryFormat-enroll須要一個輸入參數(在這個例子中是0.webcam)以及一個可選的輸出參數。OpenBR支持多種格式,包括.jpg.png.csvxml.webcam格式告訴OpenBR從計算機的攝像頭採集圖像幀做爲輸入。

讓咱們來試試一個稍微更復雜一點的例子。畢竟,OpenBR能作更多的事情,而不單單是開攝像頭。再次打開終端輸入:

$ br -gui -algorithm "Cvt(Gray)+Show(false)" -enroll 0.webcam

這裏,經過簡單地在算法串中添加Cvt(Gray),咱們輸入普通的BGR(這裏是OpenCV的BGR模式)圖像而且將其轉換成了灰度圖像。Cvt,是 convert的縮寫,是OpenBR Transform的一個例子,Show也是。實際上,OpenBR中的每個算法串都是組成一個管道的一系列Transform的結合,甚至連+都是Pipe的縮寫,這是另一種OpenBR Transform

一般,Transforms會接收參數。咱們指定Gray做爲Cvt的一個運行時參數,來告訴這個Transform須要將圖像轉換到哪一個顏色空間。咱們也能夠寫Cvt(HSV),若是咱們想轉換爲HSV顏色空間,或者Cvt(Luv),若是咱們想轉換爲LUV。參數能夠經過鍵值對的方式來提供(Cvt(Gray)等價於Cvt(colorSpace=Gray))。注意,若是隻想傳入值的話,請按照算法定義的參數順序來傳值。試試將上面的算法串改成Show(true)來看看修改參數對輸出的影響(提示:按住一個鍵而後查看變化)。

咱們來把這個例子變得更加刺激以及更加貼近OpenBR的目的。人臉檢測每每是人臉識別的第一步。咱們來執行一下OpenBR中的人臉檢測。打開終端輸入:

$ br -gui -algorithm "Cvt(Gray)+Cascade(FrontalFace)+Draw(lineThickness=3)+Show(false)" -enroll 0.webcam

你的攝像頭應該再一次被打開了,可是這一次在裏的臉部多了一個框。咱們添加了兩個新的Transform:CascadeDraw。咱們來經過一個個的Transform來看看它是如何工做的:

  • Cvt(Gray):將圖像從BGR轉換爲灰度圖。灰度圖是Cascade正常工做所必需的。
  • Cascade(FrontalFace):這個是對OpenCV Cascade分類框架的一個封裝版本。它使用FrontalFace模型來檢測正臉。
  • Draw(lineThickness=3):獲取Cascade檢測到的矩形框而且畫到攝像頭圖像幀中。lineThickness決定了矩形框的厚度。
  • Show(false):在GUI窗口中顯示圖像。false指明圖像的顯示不須要等待按鍵操做。

每個Transform完成一個任務而且將其輸出傳遞給另外一個Transform。你能夠隨心所願地鏈接任意多的Transform,可是要注意特定的Transform對它們的輸入有着特定的需求。

你可能會思考,到底哪些對象被傳遞給了算法管道。在OpenBR中有兩個對象來處理數據:

  • Files一般被用來存儲磁盤上相關元數據文件的路徑信息(鍵值對形式)。在上面的例子中,咱們將Cascade檢測到的矩形框做爲一個元數據,而後交給Draw來可視化。
  • Templates是圖像和Files的容器。圖像在OpenBr中是OpenCV Mats,且是Templates的成員變量。Templates能夠包含一個或多個圖像。

若是你想學習更多關於命令行或者全部的插件以及關鍵數據結構的內容,請參考連接的文檔。下一篇教程將會更加深刻地探討算法以及它們的使用。

這篇是 gaussic.github.io 的備份,歡迎拍磚。

轉載請註明出處:Gaussic

相關文章
相關標籤/搜索