在本指南中,我們將記錄四個輸出的樣本:
對于出現(xiàn)在相機前面的面部。
對于出現(xiàn)在相機右側(cè)的臉部。
對于距相機一定距離的臉部。
對于出現(xiàn)在相機前面的物體。
安裝openFrameworks人臉跟蹤器模式
openFrameworks的安裝文件,以及面部追蹤功能,可在Wekinator網(wǎng)站上找到。
圖像顯示W(wǎng)ekinator網(wǎng)站上面部跟蹤下載文件的位置ite。
下載面部跟蹤文件后,解壓縮并運行程序。它應激活計算機網(wǎng)絡攝像頭以跟蹤用戶的面部。
使用計算機網(wǎng)絡攝像頭識別面部的面部跟蹤器程序的示例圖像。
處理指令
在處理方面,本指南將要求使用草圖,該草圖將從Wekinator軟件接收輸出數(shù)據(jù)并將其轉(zhuǎn)發(fā)給Arduino。
import vsync.*; // Importing the library that will help us in sending and receiving the values from the Arduino
import processing.serial.*; // Importing the serial library
// Below libraries will connect and send, receive the values from wekinator
import oscP5.*;
import netP5.*;
// Creating the instances
OscP5 oscP5;
NetAddress dest;
ValueSender sender;
// These variables will be syncronized with the Arduino and they should be same on the Arduino side.
public int output;
void setup()
{
// Starting the serial communication, the baudrate and the com port should be same as on the Arduino side.
Serial serial = new Serial(this, “COM10”, 115200);
sender = new ValueSender(this, serial);
// Synchronizing the variables as on the Arduino side. The order should be same.
sender.observe(“output”);
// Starting the communication with wekinator. listen on port 12000, return messages on port 6448
oscP5 = new OscP5(this, 12000);
dest = new NetAddress(“127.0.0.1”, 6448);
}
// Recieve OSC messages from Wekinator
void oscEvent(OscMessage theOscMessage) {
if (theOscMessage.checkAddrPattern(“/wek/outputs”) == true) {
// Receiving the output from wekinator
float value = theOscMessage.get(0).floatValue();
// Converting the output to int type
output = int(value);
}
}
void draw()
{
// Nothing to be drawn for this example
}
連接直流電機到Arduino
處理草圖將從Wekinator發(fā)送輸出數(shù)據(jù)到Arduino,它將相應地控制電機。
為了將電機連接到Arduino,請按照下圖中的位置。
查看我們的文章詳細說明如何通過openFramework發(fā)送和接收數(shù)據(jù)平臺使用Arduinoto更好地了解openFrameworks如何與Arduino通信。
連接到Arduino UNO的電機示意圖。
Arduino代碼
#include //Including the library that will help us in receiving and sending the values from processing
ValueReceiver《1》 receiver; /*Creating the receiver that will receive only one value.
Put the number of values to synchronize in the brackets */
/* The below variable will be synchronized in the processing
and it should be same on both sides. */
int output;
//Motor Pins
int EN_A = 11;
int IN1 = 9;
int IN2 = 8;
int IN3 = 7;
int IN4 = 6;
int EN_B = 10;
void setup()
{
/* Starting the serial communication because we are communicating with the
Processing through serial. The baudrate should be same as on the processing side. */
Serial.begin(115200);
//Initializing the motor pins as output
pinMode(EN_A, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(EN_B, OUTPUT);
digitalWrite(EN_A, HIGH);
digitalWrite(EN_B, HIGH);
// Synchronizing the variable with the processing. The variable must be int type.
receiver.observe(output);
}
void loop()
{
// Receiving the output from the processing.
receiver.sync();
// Matching the received output to light up led‘s
if (output == 1)
{
//Forward
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
else if (output == 2)
{
//Right
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
else if (output == 3)
{
//Left
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
else if (output == 4)
{
//Stop
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
}
在Wekinator中使用人臉檢測
第一步是啟動Wekinator平臺并更改設置以反映下圖中的設置。
將輸入值設置為3.
將輸出值設置為1.
將輸出類型指定為“all continuous”
將所有其他設置保留為默認格式。
為了啟用Wekinator和openFrameworks平臺之間的通信,您需要下載ChucK編程語言,你可以在查克官方網(wǎng)站上這樣做。
了解更多信息在安裝和使用Wekinator程序時,請查看我們的如何開始使用Wekinator的指南。
Wekinator將從openFrameworks應用程序接收3個輸入,然后向ChucK程序發(fā)送5個不同的輸出,這會提示它產(chǎn)生不同的聲音。
Wekinator軟件程序中的“創(chuàng)建新項目”窗口。
單擊“下一步”,將顯示“新建項目”窗口,如下所示。
Wekinator軟件程序中的“New Project”窗口。
將臉靠近相機記錄一些測試。將分類器輸出值指定為“1”。您還需要記錄此移動的簡短示例。
顯示面部追蹤器功能如何識別靠近相機的面部的示例圖像。
接下來,將您的臉移到屏幕右側(cè),將分類輸出值更改為“2”。再一次,記錄運動。
顯示臉部追蹤器功能如何識別相機右側(cè)臉部的示例圖像。
然后將您的臉部從相機中進一步向后移動并將分類器輸出更改為“3”。
人臉跟蹤器功能如何識別遠離相機的臉部的示例圖像。
最后一步是完全退出相機視圖。將分類器輸出分配給’4?!?/p>
臉部追蹤器功能的示例圖像未在相機視圖中識別臉部。
現(xiàn)在,當您點擊“列車”然后“運行”按鈕時,電機應會在相機上的位置移動。
-
電機
+關(guān)注
關(guān)注
142文章
8875瀏覽量
144859 -
面部追蹤
+關(guān)注
關(guān)注
0文章
5瀏覽量
10254
發(fā)布評論請先 登錄
相關(guān)推薦
評論