在上一篇文章“讓現實世界的情感為人工智能所用(一)”中,我們介紹了本項目的背景內容和工作流程,以及運作時所需的物料、工具和其他資源。接下來,我們要按照下文“軟件”一節中的步驟讓整個設備運作起來。 軟件 圖6:默認的Raspbian操作系統提供了編輯Python腳本以適合您的項目所需的所有工具 在本節中,我們將詳細介紹本項目軟件方面的內容。本項目已在Raspbian的Buster版本上通過測試,此為撰寫本文時的最新版本。本項目在樹莓派3B+和樹莓派4上都進行了測試。 如果您沒有任何將Raspbian OS刷入microSD存儲卡的經驗,我們建議您使用Etcher應用程序,該工具可通過Google搜索到;同時請按照這份教程來操作。 最后一點,如果您的樹莓派4無法啟動,則EEPROM可能已損壞。請按照這些步驟來修復該問題。 本指南余下的部分將重點介紹完成樹莓派初始設置并將其成功連接到Internet之后要采取的步驟。 安裝OpenVINO和經過訓練的神經網絡模型 要在您自己的樹莓派上啟動并運行本項目,您最好擁有通過命令行在Linux中導航的經驗。以下是我們啟動和運行英特爾OpenVINO軟件所遵循的步驟。在得到指示前,請勿安裝神經計算棒。 $sudo mkdir -p /opt/intel/openvino $cd ~/Downloads/ $wget –no-check-certificate https://download.01.org/opencv/2 ... an_p_2019.2.242.tgz $sudo tar -xf l_openvino_toolkit_runtime_raspbian_p_2019.2.242.tgz --strip 1 -C /opt/intel/openvino $sudo apt install cmake $source /opt/intel/openvino/bin/setupvars.sh $echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc 要測試是否一切正常,請打開一個新的終端,此時您應該看到這樣的內容: [setupvars.sh] OpenVINO environment initialized 如果操作成功,接下來繼續在原先的終端窗口中操作。 $sudo usermod -a -G users "$(whoami)" $sh /opt/intel/openvino/install_dependencies/install_NCS_udev_rules.sh $sudo apt-get install -y python3-picamera $sudo -H pip3 install imutils --upgrade $git clone https://github.com/Mouser-Electr ... ysicalComputing.git $cd Emotions_and_PhysicalComputing 最后,如果您使用的是OV5647攝像頭,請執行以下操作: $python3 main.py -wd 320 -ht 240 -numncs 2 -cm 1 或者,如果您使用的是USB攝像頭,請執行以下操作: $python3 main.py -wd 320 -ht 240 -numncs 2 -cm 0 接下來,讓我們更深入地研究Python文件。 項目文件 本項目GitHub存儲庫的Software文件夾中有以下源代碼文件: ● main.py:我們需要在此Python腳本中添加特定于項目的代碼,以便獲取神經網絡的輸出,并根據推斷出的情感,通過伺服電機在現實世界中執行操作。 ● face-detection-retail-0004.xml:包含用于檢測為其呈現的圖像中是否存在人臉的神經網絡的網絡拓撲。 ● face-detection-retail-0004.bin:包含用于檢測為其呈現的圖像中是否存在人臉的神經網絡的權值和閾值。 ● emotions-recognition-retail-0003.xml:包含用于檢測人臉圖像所呈現表情的神經網絡的網絡拓撲。 ● emotions-recognition-retail-0003.bin:包含用于檢測人臉圖像所呈現表情的神經網絡的權值和閾值。 庫 借助預處理程序的#include指令,可以將庫添加到項目中。此舉有利于代碼重用;除非您有非常特殊的需求,否則沒有必要自己從頭重新編寫代碼。本項目用到了下面這些庫: ● sys:提供與解釋器進行交互所需的變量和函數,例如將命令行參數傳遞給Python腳本。 ● numpy:也稱為NumPy,是一個軟件包,其中包含供腳本使用的高級數學函數。 ● os:用來訪問和操作系統相關的函數,例如與文件系統和輸入/輸出相對接。 ● time:該庫提供與時間相關的函數,例如從系統獲取日期和時間,或通過sleep()設置延遲。 ● multiprocessing:該庫提供了一種機制,用于生成可以同時運行的多個進程。 ● gpiozero:該庫提供的函數可與帶有各種執行器和傳感器(例如伺服電機和LED)的40引腳GPIO接頭進行交互。 ● openvino.inference_engine:使Python腳本能夠與NCS2設備上的推測引擎進行交互。 ● heapq:該庫提供了堆隊列算法的一種實現。堆隊列是一種優先級隊列,它實現了一個二叉樹,其中優先級最低的元素始終保留在根節點位置。 ● threading:該庫提供了多線程機制,使并發線程能夠立刻運行。 ● pivideostream:該庫提供了一種與攝像頭交互的機制。 ● imutils:該庫提供了一組圖像處理函數,例如旋轉、平移和調整大小。 變量和常量 main.py文件中包含多個變量,這些變量使我們能夠與NCS2設備和伺服電機進行交互。 以下為gpizero庫的伺服模型實例,每個伺服電機都有這樣的一個實例: happyServo =Servo(12) sadServo =Servo(13) angreyServo= Servo(18) 這些變量用于提取由NCS2檢測到的情緒,供Python腳本中的其他方法使用: emotion =str(object_info[7]) LABELS =["neutral", "happy", "sad", "surprise","anger"] 在main.py源文件大約333行處,需要添加本項目最重要的一段代碼: … out self.exec_net.requests[dev].outputs["prob_emotion"].flatten() emotion =LABELS[int(np.argmax(out))] if emotion== "happy": setServosHappy() else ifemotion == "sad": setServosSad() else ifemotion == "anger": setServosAngry() else: setServosNeutral() detection_list.extend([emotion]) self.resultsEm.put([detection_list]) self.inferred_request[dev]= 0 … 函數 ● setServosHappy():檢測到快樂表情時,此函數會將GPIO12上的伺服電機設置為最大位置,同時將GPIO13和GPIO18設置為最小位置。 ● setServosSad():檢測到悲傷表情時,此函數會將GPIO13上的伺服電機設置為最大位置,同時將GPIO12和GPIO18設置為最小位置。 ● setServosAngry():檢測到憤怒表情時,此函數會將GPIO18上的伺服電機設置為最大位置,同時將GPIO12和GPIO13設置為最小位置。 ● setServosNeutral():當檢測不到人臉或者人臉上沒有表情(中性)時,此函數會將所有伺服電機設置為最小位置。 運行項目 組裝好項目并且安裝好軟件后,我們就可以把它運行起來了,這真是激動人心的時刻! 1、在終端中輸入以下命令: $cd ~/Downloads/Emotions_and_PhysicalComputing 如果使用的是OV5647攝像頭: $python3 main.py -wd 320 -ht 240 -numncs 2 -cm 1 或者,如果使用的是USB攝像頭: $python3 main.py -wd 320 -ht 240 -numncs 2 -cm 0 圖7:終端和攝像頭輸出 2、屏幕上會彈出一個小窗口,顯示攝像頭的視頻輸入以及一些文本和方框。 3、確保環境光線充足,然后站在鏡頭前,擺出快樂、悲傷和憤怒的表情。 4、檢測到的面部表情類型應顯示在屏幕上以及終端窗口中。 5、伺服器應正常工作,并根據您所做出的表情上下移動花朵。人工智能真的實現了物理計算! 故障排除提示 1、首次運行伺服電機時,請在伺服電機已連接到樹莓派但尚未連接到機械組件的情況下運行代碼。萬一代碼導致伺服電機的移動方向與實際安裝方向相反,此舉可以確保伺服電機不會受到損壞。 2、如果您用錯了針對USB攝像頭的標志和針對OV5647攝像頭的標志,可能會出現問題。請務必對OV5647攝像頭使用-cm 1、對USB攝像頭使用-cm 0。 請確保您使用的是低壓伺服電機,并且使用樹莓派的5V引腳而非3V引腳。此外,也可以考慮配置專用于伺服電機的外部電源。請確保將接地線連接在一起。 圖8:圖中所示為滑塊機構的設計概念,通過兩塊6英寸寬、帶有兩個反向45度切割斜面的松木塊來構成一套簡單的滑動機構 圖9:項目成果拼貼畫 |