在本指南中,我們將記錄四個(gè)輸出的樣本:
對于出現(xiàn)在相機(jī)前面的面部。
對于出現(xiàn)在相機(jī)右側(cè)的臉部。
對于距相機(jī)一定距離的臉部。
對于出現(xiàn)在相機(jī)前面的物體。
安裝openFrameworks人臉跟蹤器模式
openFrameworks的安裝文件,以及面部追蹤功能,可在Wekinator網(wǎng)站上找到。
圖像顯示W(wǎng)ekinator網(wǎng)站上面部跟蹤下載文件的位置ite。
下載面部跟蹤文件后,解壓縮并運(yùn)行程序。它應(yīng)激活計(jì)算機(jī)網(wǎng)絡(luò)攝像頭以跟蹤用戶的面部。
使用計(jì)算機(jī)網(wǎng)絡(luò)攝像頭識別面部的面部跟蹤器程序的示例圖像。
處理指令
在處理方面,本指南將要求使用草圖,該草圖將從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
}
連接直流電機(jī)到Arduino
處理草圖將從Wekinator發(fā)送輸出數(shù)據(jù)到Arduino,它將相應(yīng)地控制電機(jī)。
為了將電機(jī)連接到Arduino,請按照下圖中的位置。
查看我們的文章詳細(xì)說明如何通過openFramework發(fā)送和接收數(shù)據(jù)平臺(tái)使用Arduinoto更好地了解openFrameworks如何與Arduino通信。
連接到Arduino UNO的電機(jī)示意圖。
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中使用人臉檢測
第一步是啟動(dòng)Wekinator平臺(tái)并更改設(shè)置以反映下圖中的設(shè)置。
將輸入值設(shè)置為3.
將輸出值設(shè)置為1.
將輸出類型指定為“all continuous”
將所有其他設(shè)置保留為默認(rèn)格式。
為了啟用Wekinator和openFrameworks平臺(tái)之間的通信,您需要下載ChucK編程語言,你可以在查克官方網(wǎng)站上這樣做。
了解更多信息在安裝和使用Wekinator程序時(shí),請查看我們的如何開始使用Wekinator的指南。
Wekinator將從openFrameworks應(yīng)用程序接收3個(gè)輸入,然后向ChucK程序發(fā)送5個(gè)不同的輸出,這會(huì)提示它產(chǎn)生不同的聲音。
Wekinator軟件程序中的“創(chuàng)建新項(xiàng)目”窗口。
單擊“下一步”,將顯示“新建項(xiàng)目”窗口,如下所示。
Wekinator軟件程序中的“New Project”窗口。
將臉靠近相機(jī)記錄一些測試。將分類器輸出值指定為“1”。您還需要記錄此移動(dòng)的簡短示例。
顯示面部追蹤器功能如何識別靠近相機(jī)的面部的示例圖像。
接下來,將您的臉移到屏幕右側(cè),將分類輸出值更改為“2”。再一次,記錄運(yùn)動(dòng)。
顯示臉部追蹤器功能如何識別相機(jī)右側(cè)臉部的示例圖像。
然后將您的臉部從相機(jī)中進(jìn)一步向后移動(dòng)并將分類器輸出更改為“3”。
人臉跟蹤器功能如何識別遠(yuǎn)離相機(jī)的臉部的示例圖像。
最后一步是完全退出相機(jī)視圖。將分類器輸出分配給’4?!?/p>
臉部追蹤器功能的示例圖像未在相機(jī)視圖中識別臉部。
現(xiàn)在,當(dāng)您點(diǎn)擊“列車”然后“運(yùn)行”按鈕時(shí),電機(jī)應(yīng)會(huì)在相機(jī)上的位置移動(dòng)。
-
電機(jī)
+關(guān)注
關(guān)注
142文章
9023瀏覽量
145564 -
面部追蹤
+關(guān)注
關(guān)注
0文章
5瀏覽量
10260
發(fā)布評論請先 登錄
相關(guān)推薦
評論