http://bbs.makercollider.com/?/article/27
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
$ImagingDevice = $ImagingDevices[[ 2 ]]; dev = DeviceOpen[ "Serial" , "COM3" ] Dynamic[ i = CurrentImage[]; boxes = FindFaces[i]; If[boxes = ! = { } , { X , Y } = Round[Mean @@ boxes]; Column@ { HighlightImage[i , Circle[ { X , Y } , 50 ] , ImageSize - > { 320 , 240 } ] , DeviceWrite[dev , ToString[X]] } , i] ] |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#include <Servo.h> #define servomaxx 180 // max degree servo horizontal (x) can turn #define screenmaxx 320 // max screen horizontal (x)resolution #define screenmaxy 240 // max screen vertical (y) resolution #define servocenterx 90 // center po#define of x servo #define servopinx 9 // digital pin for servo x #define baudrate 9600 // com port speed. Must match your setting #define distancex 2 // x servo rotation steps int valx = 0; // store x data from serial port int posx = 0; int incx = 10; // significant increments of horizontal (x) camera movement Servo servox; void setup() { Serial.begin(baudrate); // connect to the serial port Serial.setTimeout(20); Serial.println( "Starting Cam-servo Face tracker" ); pinMode(servopinx, OUTPUT); // declare the LED's pin as output servox.attach(servopinx); // center servos servox.write(servocenterx); delay(200); } void loop () { while (Serial.available() <= 0); // wait for incoming serial data if (Serial.available() >= 1) { // get X axis 2-byte integer from serial valx = Serial.parseInt(); // read last servos positions posx = servox.read(); //Find out if the X component of the face is to the left of the middle of the screen. if (valx < (screenmaxx / 2 - incx)) { if ( posx >= incx ) posx += distancex; //Update the pan position variable to move the servo to the left. } //Find out if the X component of the face is to the right of the middle of the screen. else if (valx > screenmaxx / 2 + incx) { if (posx <= servomaxx - incx) posx -= distancex; //Update the pan position variable to move the servo to the right. } // Servos will rotate accordingly servox.write(posx); } } |
这篇文章还没有评论