用OpenVINO自製簡易控制系統

2020-12-03 電子產品世界

  2006 年 11 月任天堂推出新一代電玩主機「Wii」,同時搭配具有「重力傳感器(或稱線性加速度計)」的遊戲杆,讓玩電動不再只有香菇頭和按鍵,而是可以透過揮動手把來體驗更仿真的運動類遊戲,如網球、桌球等,從此開啟「體感遊戲」新世代。
  雖然後續有更多廠商加入,甚至加入了陀螺儀(或稱角加速度器)來偵測手把轉動角度、速度,還有利用地磁傳感器來感知玩家面對的方向使得體感遊戲更加逼真,但玩家對於手上握著的那個手把仍感到有些累贅。
  2010 年 11 月微軟為了挽救Xbox360 的銷售業績推出了「Kinect」,這項劃時代的產品讓玩家從此拋開手把,只需擺動肢體就能操作遊戲中的虛擬人物或對象。這項技術主要結合了一個紅外線雷射發射器(產生光斑)、一個紅外線攝影機及一個普通的彩色攝影機,經過複雜計算後就能得出場景中各項對象的深度(距離)信息,進而分析出玩家的骨架(頭、手、腳)位置及姿勢,如此即可精準控制遊戲的進行。
  也正因有這項便宜又好用的工具誕生,且可同時偵測多人(最多六人)的動作,所以有更多的互動遊戲及應用裝置產生。雖然後來微軟及其它廠商陸續推出改良產品,並將市場延伸至簡易型 3D 對象及室內環境掃描用途,隨著風潮淡去,2017 年微軟已正式停止生產這項產品。
  好姨說:「為什麼?為什麼?為什麼讓我用到一套這麼好用的體感互動工具,以後我用不到怎麼辦?」(星爺食神經典橋段)。各位看倌請不用擔心,我幫大家找到了一個解決方案,只要用使用一組網絡攝影機加上 Intel 的 OpenVINO™開源軟體套件包中的 human-pose-estimation 預訓練模型就可以辦到了。
  星爺說:「只要有 OpenVINO™,人人都可是互動之神」。對!你沒聽錯,連 Kinect 這樣的深度傳感器都不用,不管你是用 CPU、GPU、VPU(神經運算棒)都可以一次搞定。

本文引用地址:http://www.eepw.com.cn/article/202009/418494.htm



人體姿態定義
  當然以上是比較搞笑的說法,以 2D 人體姿態估測是無法完全取代像 Kinect 這類深度傳感器所產生的 3D 骨架(skeleton)分析,不過對大多數的姿態估測及互動應用應該還是遊刃有餘的,接下來就先幫大家說明一下什麼是 2D 姿態估測及如何應用。
  一般來說人的姿態是包括 3D(上下左右前後)位置信息,但被拍成 2D 照片或視頻後,自然失去深度(前後位置)信息,所以僅能就人的肢體重要關節(關鍵)點位置進行分析,進而建立人體骨架及姿態。
  目前最常見的 2D 姿態估測關鍵點開放數據集包括微軟 COCO(17點),CMU OpenPose(18/25點),MPII(16點),AI Challenge(14點),LSP(14點),FLIC(9點),本次要使用的為卡內基梅隆大學(CMU)感知計算實驗室所開源的 OpenPose 18 點骨架數據格式(如下圖a)。除此之外這個數據集還提供另三種輸出格式,用於表示人體骨架(25點)、臉部動作(70點)及手部動作(22點),如下圖所示。

  OpenPose支持輸出格式,(a)類COCO 18點,(b) BODY 25點,(c) 臉部70點,(d)手部22點
  此次會用到的 OpenPose 18 關鍵點格式和常用的微軟 COCO 17 關鍵點格式非常相似,最主要差別是編號序順不同及 OpenPose 多了脖子點作人體中心點。如有需要相互轉換時,可自行轉換。
MS COCO:(17點)
  0:鼻子、1:左眼、2:右眼、3:左耳、4:右耳、5:左肩、6:右肩、7:左肘、8:右肘、9:左腕、10:右腕、11:左臀(腰)、12:右臀(腰)、13:左膝、14:右膝、15:左踝、16:右踝。
  CMU OpenPose:(18點)(如上圖a)
  0:鼻子、1:脖子、2:右肩、3:右肘、4:右腕、5:左肩、6:左肘、7:左腕、8:右臀(腰)、9:右膝、10:右踝、11:左臀(腰)、12:左膝、13:左踝、14:左眼、15:右眼、16:左耳、17:右耳。
人體姿態估測實作
  接下來開始說明如何使用 Intel OpenVINO™結合 OpenPose 預訓練模型「human-pose-estimation-0001」來完成「簡易體感控制系統」。這裡還是使用Win 10 搭配 OpenVINO™ 2019 R2 環境執行,如果需要在 Linux 環境開發的,請自行參考官網提供安裝程序。
  首先利用 OpenVINO™工具包的下載工具下載預訓練好的模型「human-pose-estimation-0001」,更進一步說明及使用方法可參考官方文件。
  https://docs.openvinotoolkit.org/latest/_demos_human_pose_estimation_demo_README.html
  /* 切換至下載工具路徑 */
  cdC:\Program Files(x86)\IntelSWTools\openvino_2019.2.242\deployment_tools\tools\model_downloader
  /*下載預訓練模型到指定路徑 */
  python3 downloader.py --namehuman-pose-estimation-0001 --output_dir \指定路徑名稱
  完成下載後,會在指定路徑下得到三種格式(INT8、FP16、FP32)已優化過 IR 中介檔(bin、xml),可直接給 OpenVINO™的推論引擎(Inference Engine)使用,不須再進行模型優化器(Model Optimizer)動作,其檔案存放路徑結構如下所示。
  /* 下載至指定路徑下的優化模型中介文件存放路徑*/
  \指定路徑名稱
  \Transportation
  \human_pose_estimation
  \mobilenet-v1
  \dldt
  \INT8
  human-pose-estimation-0001.bin (16MB)
  human-pose-estimation-0001.xml (597KB)
  \FP16
  human-pose-estimation-0001.bin (8MB)
  human-pose-estimation-0001.xm (65KB)
  \FP32
  human-pose-estimation-0001.bin (16MB)
  human-pose-estimation-0001.xm (66KB)
  由於 OpenVINO™在運作時要引用很多路徑,所以執行編譯及執行前要先設定工作環境,只需依下列指令操作即可完成工作環境設定。
  /* 切換至設定工作環境路徑 */
  cd C:\Program Files(x86)\IntelSWTools\openvino_2019.2.242\bin
  /* 執行設定環境變量批處理文件 */
  setupvars
  目前 OpenVINO™提供的範例原始碼默認會在下列路徑:
  /* 範例程序原始碼路徑 */
  C:\Program Files(x86)\IntelSWTools\openvino_2019.2.242\deployment_tools\inference_engine\demos\human_pose_estimation_demo
  本範例為 C++ 程序,這裡使用 Visual Studio 2017 進行編譯,默認所有展示用的程序範例項目文件 Demos.sln 會在下面路徑。
  /* 範例程序Visual Studio項目文件路徑 */
  C:\Users\使用者名稱\Documents\Intel\OpenVINO\inference_engine_demos_build
  本項目中共包含 22 個子項目,而 human_pose_estimation_demo 即為本次範例。如果想要修改內容時,記得以系統管理員身份執行 VS2017,以免因範例程序在 C:\Program Files (x86) 下而無法直接編輯。如想直接使用,那進行重建(編譯)後即可得到執行檔 human_pose_estimation_demo.exe,默認會生成在下面路徑。
  /* 執行文件生成路徑 */
  C:\Users\使用者名稱\Documents\Intel\OpenVINO\inference_engine_demos_build\intel64\Release\
  /* 執行檔操作命令 */
  human_pose_estimation_demo -i 輸入影片文件名 -m 模型優化中介文件.xml-d 運算裝置名稱
  參數說明:
  -i 輸入影像方式
  目前這個範例可支持二種視頻輸入方式,一種是直接從網絡攝影機,直接設定 -i cam 即可,預設為第 0 號攝影機。另一種為從視頻檔案輸入,由於底層是利用 OpenCV 的 VideoCapture 讀取視頻影像,所以目前能支持的視頻格式不多,主要是以 *.avi, *.mp4 為主,可設定 -i xxx.mp4。
  -m 模型優化中介文件 .xml 所在路徑
  一般來說推論計算數值精度可分為 FP32、FP16 及 INT8,而所需運算時間也隨精度降低(推論速度提升),但通常推論正確率也會隨之略減。運算時 CPU 及 GPU 三種精度都可使用,但 VPU(神經運算棒 NCS1、NCS2)則能選擇 FP16 格式運行,要特別注意不要選錯。設定時如 -m \用戶指定路徑\Transportation\human_pose_estimation\mobilenet-v1\dldt\FP16\human-pose-estimation-0001.xml。
  -d 運算裝置名稱
  可設為 CPU、GPU 和 MYRIAD,而 MYRIAD 就是 VPU,或稱神經運算棒,不管是 NCS 一代或二代皆設為 MYRIAD 即可,例如 -d MYRIAD。如果執行時未插入神經運算棒至 USB,則程序會直接中斷。
  實驗結果
  接下來我們就測試一下這個範例帶來的效果。這裡使用四種測試裝置,分別是:
  1.CPU:Intel i7-8950 8GBRAM
  2.GPU:Intel UHD Graphics630
  3.NCS1:Movidius (Intel)Neural Compute Stick(一代)
  4.NCS2:Intel Neural ComputeStick 2(二代)
  首先以視頻影像做為輸入進行測試,分別測試不同裝置在不同精度下指令周期及人體姿態估測結果。為方便大家測試,我們直接從 YOUTUBE 下載了一段微軟 Kinect Dance 的測試影片(1280×720 30fps),
  https://youtu.be/Y-iKWe-U9bY
  並抽取其中五小段作為此次測試及比較依據,相關影片可直接到 GITHUB 下載。
  https://github.com/OmniXRI/OpenVINO_human-pose-estimation
  這裡利用其中一小段影片測試,結果如下圖所示。大致上可看出姿態估測部份幾乎沒差,主要差異在指令周期,這裡使用 FPS(每秒多少影格)作為單位,數值越高表示反應速度越快。若能達到 30 FPS 以上則已達一般影片播放速度,滿足實時處理的需求。

  從這些測試結果來看,目前在 CPU 部份,FP32 及 FP16 指令周期差別不大,表示 CPU 在處理浮點數上並沒有充份利用硬體特性(可能是軟體函式庫造成),但運算數值精度降至 INT8 時,指令周期明顯提升快一倍。
  而 GPU 部份,可以看出在浮點數計算上明顯有差異,所以 FP16 指令周期較 FP32 快了約 50%。奇怪的是 INT8 竟然和 FP32 接近,這是因為 GPU 本來就不支持整數運算,所以應該是函式庫自動把整數轉成 FP32 計算造成的結果。
  再來是神經運算棒部份,NCS2 在硬體規格上優於 NCS1,所以理所當然指令周期較快,快了約兩倍。
  再來測試不同影片內容指令周期差異,為方便測試起見,這裡統一使用 GPU FP16 的條件來對五小段影片進行測試,這五段影片有單人、多人、動作簡單、大幅動作、輕微遮蔽及嚴重遮蔽。測試後發覺準確度極高,只有在嚴重遮蔽或移動速度過快(影像局部模糊)時會有些失誤,大體上來看是非常不錯的。不同影像內容在計算速度上會有些許差異,如下圖所示。
  這裡發現一個有趣的地方,就是影片長度較長(影格數較多)的,其指令周期會越來越快,不知是否是因影片被緩衝進內存中,所以減少一些訪問時間?
  不同視頻指令周期比較

  實際結果如下

  最後是測試網絡攝影機,這裡使用 800×600 的解析度,分別以 CPU 及 GPU 進行測試,測試時故意擺了一樣的姿勢方便比較運算差異。這裡的指令周期明顯比前面測試快了許多,主要原因是輸入視頻解析圖下降。測試時雖然只有半身,但還是可以很正確判斷出來,由此得知這個預訓練好的模型真的很不錯。

  寫到這裡大家應該已經可以充份感受到 OpenPose 的威力了,只需 OpenVINO™加上一臺網絡攝影機就能搞定「簡易體感控制系統」。雖然目前看起來指令周期似乎有點慢,但對於簡單型的應用已綽綽有餘,只要善用圖像上所提取到的關節點坐標,就可輕鬆開發體感遊戲及各種人機互動應用了。如果想要更深入了解的朋友,可自行研讀範例源碼。


相關焦點

  • openvino環境搭建
    >openvino_toolkit所有都安裝在C:\Intel目錄下python3.6.5/python3.7VS2015/VS2017(1)C:\Users\Administrator>cd C:\Intel\openvino_2019.1.148\binC:\Intel\openvino_2019.1.148
  • OpenVINO問題集之一
    Windows:cd C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\model_optimizer\install_prerequisitesinstall_prerequisites.batLinux:cd /opt/intel/openvino/deployment_tools
  • ubuntu openVINO安裝&配置
    安裝ubuntu16.04版openVINO參考官網下載地址:本文引用地址:http://www.eepw.com.cn/article/202008/416588.htmhttps://software.intel.com/content/www/cn/zh/develop/tools/openvino
  • Linux環境下OpenVINO的安裝教程
    下載地址:https://software.intel.com/content/www/cn/zh/develop/tools/openvino-toolkit/choose-download.html?
  • Raspbian OS安裝OpenVINO工具包
    如果您沒有該工具包軟體包的副本,請l_openvino_toolkit_raspbi_p_<version>.tgz從英特爾®官方地址下載最新版本,然後返回本指南繼續安裝。sudo mkdir -p / opt / intel / openvino解壓縮檔案:sudo tar -xf l_openvino_toolkit_raspbi_p_ <version> .tgz --strip 1 -C / opt / intel / openvinosetupvars.sh通過替換<INSTALLDIR
  • 基於OpenVINO Python SDK 環境配置與運行
    因為包含了大量的科學包,解決了初學者用"pip install"安裝存在冗長的軟體安裝列表以及相關的依賴庫等問題,讓用戶能夠較為方便管理並行python以及過程所需要的各種庫。  2.2適用平臺  Windows  Linux  MacOS  FPGA  2.3下載網址  https://software.seek.intel.com/openvino-toolkit?
  • windows10 64位 OpenVINO安裝教程(二)
    Model Optimizer是一個基於Python *的命令行工具(mo.py),位於C:\Program Files (x86)\IntelSWTools\openvino\deployment_tools\model_optimizer在使用流行的深度學習框架(如Caffe *,TensorFlow *,MXNet *和ONNX *)訓練的模型上使用此工具
  • 使用OpenCV和OpenVINO輕鬆創建深度學習應用
    從官網註冊並下載OpenVINO開發包的Linux版本,官網下載地址:https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit/choose-download/linux.html如果下載順利,你將得到文件名為 l_openvino_toolkit_p_< 版本號
  • windows10 64位 OpenVINO安裝教程(一)
    默認情況下,該文件將保存到Downloads目錄中w_openvino_toolkit_p_<version>.exe。2.轉到該Downloads文件夾。3.雙擊w_openvino_toolkit_p_<version>.exe。
  • OpenVINO + ROS 加速機器人應用
    首先,楊老師對ROS進行了一個基本介紹——ROS即Robot Operating System(機器人作業系統),它的實際意義是跑在傳統系統軟體(如Windows)的一個軟體框架,也可以說它是一個次作業系統,它使得複雜的機器人開發變得更加簡單。
  • 運用Intel OpenVINO 自製自動駕駛車視覺系統
    同時,兼顧傳統電腦視覺和深度學習計算,從此不用再糾結到底要選那一種組合來完成電腦視覺系統了。OpenVINO 安裝執行接下就開始說明如何以 Intel 電腦視覺推論及神經網路(深度學習)優化工具包「OpenVINO」土炮自駕車的視覺系統。
  • Open CV
    >在win10 和ubuntu大體步驟相似,跑demo:想轉ubuntu 或者win10 方法一樣,我下面分別用win10 和ubuntu跑幾個demo,大家可以試著做一下。打開openvino安裝目錄如:C:\Intel\openvino\python\python3.6把目錄下的openvino文件夾複製到系統的python環境安裝目錄下如: C:\Python36
  • 英特爾發布OpenVINO工具包 功能到底有多強大?
    VPU)的深度學習加速晶片,增強視覺系統功能和性能。此外,英特爾物聯網視覺技術集端到端智能和卓越性能於一身,能幫助改善安全性、運營效率、生產力、醫療水平和生活質量,具體包括:·交通監控。採用英特爾FPGA和Movidius VPU的攝像頭可捕捉數據,並自動將其發送至下遊十字路口系統,幫助交通部門優化交通和做好規劃。
  • 大咖說|Intel推出OpenVINO step by step 快速安裝教學一小時就會
    /colab.research.google.com/drive/1-ETOSlDftRCkAW4FoBHGLgslfaRMRqBU#scrollTo=RKRjvCRPcNm7參考資訊 : https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_apt.html
  • OpenVINO+OpenCV 文本檢測與識別
    ie.load_network(network=dete_net, device_name= "CPU")print( "out_det_blob1: ", out_det_blob1, "out_det_blob2: ", out_det_blob2)執行推理與解析輸出的代碼如下:image = cv.imread( "D:/images/openvino_ocr.jpg
  • 自製上翻簡易門 怎麼自己製作簡易門
    隨著DIY的流行,越來越多的人喜歡自製。通過自己動手來製作出各種奇妙的產品這將會讓大家有很大程度的獲得感。自製上翻簡易門是很多人都非常感興趣的,其實對於一些人而言,這種自製的方式可以滿足人們的自尊心的同時,也滿足大家的生活。那麼自製上翻簡易門和怎麼自己製作簡易門?
  • 自製的簡易電視機天線
    打開APP 自製的簡易電視機天線 發表於 2019-01-20 10:59:34 筆者從廢棄的成品電視天線上拆下天線放大器、控制器及電視天線專用的旋轉電機
  • Openvino是什麼,與Movidius SDK的區別
    在整個系統端到端的網元裡面,不同的網元所提供的計算量不同,支撐的作業系統不同,適合的晶片架構也不同。比如一個攝像機功耗大概15W,提供給智能運算的能量2-3W,選用ASIC架構最合適;數據中心對靈活度要求較高,適合採用通用的處理器。而不同的晶片往往有不同的開發方法,也就是說當工程師針對某一種晶片所開發的軟體換一個架構就可能無法使用,這無形中就增加了開發難度。
  • windows10 64位 OpenVINO安裝教程(三)可選步驟
    1.在「 搜索Windows」框中,鍵入「 編輯系統環境變量」,然後按Enter鍵。類似於以下顯示的窗口:4.在打開的窗口中,單擊「 瀏覽」。想要查看更多OpenVINO相關技術與資料,請戳>> http://www.eepw.com.cn/openvino
  • 自製簡易床架 什麼材質的床好
    人們的生活水平提高之後,人們就希望通過自己的努力來做各種事情,簡易床架的搭建可以說是一次很大的挑戰,雖然說是簡易床架,但是在製作的過程中可能也會遇到不少的問題,所以為了讓大家能夠做出正確的選擇,也讓大家盡心盡力的去完成,接下來就分析一下自製簡易床架和什麼材質的床好。