在上一篇文章“讓現實(shí)世界的情感為人工智能所用(一)”中,我們介紹了本項目的背景內容和工作流程,以及運作時(shí)所需的物料、工具和其他資源。接下來(lái),我們要按照下文“軟件”一節中的步驟讓整個(gè)設備運作起來(lái)。 軟件 ![]() 圖6:默認的Raspbian操作系統提供了編輯Python腳本以適合您的項目所需的所有工具 在本節中,我們將詳細介紹本項目軟件方面的內容。本項目已在Raspbian的Buster版本上通過(guò)測試,此為撰寫(xiě)本文時(shí)的最新版本。本項目在樹(shù)莓派3B+和樹(shù)莓派4上都進(jìn)行了測試。 如果您沒(méi)有任何將Raspbian OS刷入microSD存儲卡的經(jīng)驗,我們建議您使用Etcher應用程序,該工具可通過(guò)Google搜索到;同時(shí)請按照這份教程來(lái)操作。 最后一點(diǎn),如果您的樹(shù)莓派4無(wú)法啟動(dòng),則EEPROM可能已損壞。請按照這些步驟來(lái)修復該問(wèn)題。 本指南余下的部分將重點(diǎn)介紹完成樹(shù)莓派初始設置并將其成功連接到Internet之后要采取的步驟。 安裝OpenVINO和經(jīng)過(guò)訓練的神經(jīng)網(wǎng)絡(luò )模型 要在您自己的樹(shù)莓派上啟動(dòng)并運行本項目,您最好擁有通過(guò)命令行在Linux中導航的經(jīng)驗。以下是我們啟動(dòng)和運行英特爾OpenVINO軟件所遵循的步驟。在得到指示前,請勿安裝神經(jīng)計算棒。 $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 要測試是否一切正常,請打開(kāi)一個(gè)新的終端,此時(shí)您應該看到這樣的內容: [setupvars.sh] OpenVINO environment initialized 如果操作成功,接下來(lái)繼續在原先的終端窗口中操作。 $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 接下來(lái),讓我們更深入地研究Python文件。 項目文件 本項目GitHub存儲庫的Software文件夾中有以下源代碼文件: ● main.py:我們需要在此Python腳本中添加特定于項目的代碼,以便獲取神經(jīng)網(wǎng)絡(luò )的輸出,并根據推斷出的情感,通過(guò)伺服電機在現實(shí)世界中執行操作。 ● face-detection-retail-0004.xml:包含用于檢測為其呈現的圖像中是否存在人臉的神經(jīng)網(wǎng)絡(luò )的網(wǎng)絡(luò )拓撲。 ● face-detection-retail-0004.bin:包含用于檢測為其呈現的圖像中是否存在人臉的神經(jīng)網(wǎng)絡(luò )的權值和閾值。 ● emotions-recognition-retail-0003.xml:包含用于檢測人臉圖像所呈現表情的神經(jīng)網(wǎng)絡(luò )的網(wǎng)絡(luò )拓撲。 ● emotions-recognition-retail-0003.bin:包含用于檢測人臉圖像所呈現表情的神經(jīng)網(wǎng)絡(luò )的權值和閾值。 庫 借助預處理程序的#include指令,可以將庫添加到項目中。此舉有利于代碼重用;除非您有非常特殊的需求,否則沒(méi)有必要自己從頭重新編寫(xiě)代碼。本項目用到了下面這些庫: ● sys:提供與解釋器進(jìn)行交互所需的變量和函數,例如將命令行參數傳遞給Python腳本。 ● numpy:也稱(chēng)為NumPy,是一個(gè)軟件包,其中包含供腳本使用的高級數學(xué)函數。 ● os:用來(lái)訪(fǎng)問(wèn)和操作系統相關(guān)的函數,例如與文件系統和輸入/輸出相對接。 ● time:該庫提供與時(shí)間相關(guān)的函數,例如從系統獲取日期和時(shí)間,或通過(guò)sleep()設置延遲。 ● multiprocessing:該庫提供了一種機制,用于生成可以同時(shí)運行的多個(gè)進(jìn)程。 ● gpiozero:該庫提供的函數可與帶有各種執行器和傳感器(例如伺服電機和LED)的40引腳GPIO接頭進(jìn)行交互。 ● openvino.inference_engine:使Python腳本能夠與NCS2設備上的推測引擎進(jìn)行交互。 ● heapq:該庫提供了堆隊列算法的一種實(shí)現。堆隊列是一種優(yōu)先級隊列,它實(shí)現了一個(gè)二叉樹(shù),其中優(yōu)先級最低的元素始終保留在根節點(diǎn)位置。 ● threading:該庫提供了多線(xiàn)程機制,使并發(fā)線(xiàn)程能夠立刻運行。 ● pivideostream:該庫提供了一種與攝像頭交互的機制。 ● imutils:該庫提供了一組圖像處理函數,例如旋轉、平移和調整大小。 變量和常量 main.py文件中包含多個(gè)變量,這些變量使我們能夠與NCS2設備和伺服電機進(jìn)行交互。 以下為gpizero庫的伺服模型實(shí)例,每個(gè)伺服電機都有這樣的一個(gè)實(shí)例: 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():檢測到快樂(lè )表情時(shí),此函數會(huì )將GPIO12上的伺服電機設置為最大位置,同時(shí)將GPIO13和GPIO18設置為最小位置。 ● setServosSad():檢測到悲傷表情時(shí),此函數會(huì )將GPIO13上的伺服電機設置為最大位置,同時(shí)將GPIO12和GPIO18設置為最小位置。 ● setServosAngry():檢測到憤怒表情時(shí),此函數會(huì )將GPIO18上的伺服電機設置為最大位置,同時(shí)將GPIO12和GPIO13設置為最小位置。 ● setServosNeutral():當檢測不到人臉或者人臉上沒(méi)有表情(中性)時(shí),此函數會(huì )將所有伺服電機設置為最小位置。 運行項目 組裝好項目并且安裝好軟件后,我們就可以把它運行起來(lái)了,這真是激動(dòng)人心的時(shí)刻! 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、屏幕上會(huì )彈出一個(gè)小窗口,顯示攝像頭的視頻輸入以及一些文本和方框。 3、確保環(huán)境光線(xiàn)充足,然后站在鏡頭前,擺出快樂(lè )、悲傷和憤怒的表情。 4、檢測到的面部表情類(lèi)型應顯示在屏幕上以及終端窗口中。 5、伺服器應正常工作,并根據您所做出的表情上下移動(dòng)花朵。人工智能真的實(shí)現了物理計算! 故障排除提示 1、首次運行伺服電機時(shí),請在伺服電機已連接到樹(shù)莓派但尚未連接到機械組件的情況下運行代碼。萬(wàn)一代碼導致伺服電機的移動(dòng)方向與實(shí)際安裝方向相反,此舉可以確保伺服電機不會(huì )受到損壞。 2、如果您用錯了針對USB攝像頭的標志和針對OV5647攝像頭的標志,可能會(huì )出現問(wèn)題。請務(wù)必對OV5647攝像頭使用-cm 1、對USB攝像頭使用-cm 0。 請確保您使用的是低壓伺服電機,并且使用樹(shù)莓派的5V引腳而非3V引腳。此外,也可以考慮配置專(zhuān)用于伺服電機的外部電源。請確保將接地線(xiàn)連接在一起。 ![]() 圖8:圖中所示為滑塊機構的設計概念,通過(guò)兩塊6英寸寬、帶有兩個(gè)反向45度切割斜面的松木塊來(lái)構成一套簡(jiǎn)單的滑動(dòng)機構 ![]() 圖9:項目成果拼貼畫(huà) |