@@ -0,0 +1,293 @@ | |||
#include <Arduino.h> | |||
#include <Wire.h> | |||
#include <Servo.h> | |||
double _ABVAR_1_i = 0.0 ; | |||
int a = 0; | |||
int b = 0; | |||
Servo servo_pin_4; | |||
//TCS230连接设置 | |||
const int s0 = A0; | |||
const int s1 = A1; | |||
const int s2 = A4; | |||
const int s3 = A5; | |||
const int out = 8; //10 | |||
const int led = 7; | |||
// Variables | |||
int red = 0; | |||
int green = 0; | |||
int blue = 0; | |||
void trunleft(); | |||
void trunright(); | |||
void forward(); | |||
void forward1(); | |||
void forward2();//20 | |||
void stop1(); | |||
void color() ; | |||
int color_see(); | |||
void zha_qi_qiu(); | |||
const int zuo=3; | |||
const int you=17; | |||
int c=0; | |||
int _ABVAR_2_a = 0; | |||
int _ABVAR_3_b = 0; | |||
void setup() | |||
{ | |||
pinMode( zuo, INPUT); | |||
pinMode( you, INPUT); | |||
pinMode( 16, INPUT); | |||
pinMode( 14, INPUT); | |||
pinMode( 10, OUTPUT); | |||
pinMode( 6, OUTPUT); | |||
pinMode( 5, OUTPUT); | |||
pinMode( 9, OUTPUT); | |||
_ABVAR_1_i = 0.0 ; | |||
servo_pin_4.attach(4); | |||
pinMode(s0, OUTPUT); | |||
pinMode(s1, OUTPUT); | |||
pinMode(s2, OUTPUT); | |||
pinMode(s3, OUTPUT); | |||
pinMode(out, INPUT); | |||
pinMode(led, OUTPUT); | |||
digitalWrite(s0, HIGH); | |||
digitalWrite(s1, HIGH); | |||
} | |||
void loop() | |||
{ | |||
/* if(!(digitalRead(16))) | |||
{ | |||
forward(); | |||
} | |||
else*/ | |||
{if (( digitalRead(you) && digitalRead(zuo) )) | |||
{ | |||
forward(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(you) ) && digitalRead(zuo) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( digitalRead(you) && !( digitalRead(zuo) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(you) ) && !( digitalRead(zuo) ) )) | |||
{ | |||
_ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
{ | |||
forward1(); | |||
delay( 3500 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
{ | |||
forward1_1(); | |||
delay( 3700 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
{ | |||
stop1(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_2_a = 1; | |||
//LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_2_a = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_2_a = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
{ | |||
pan_duan_yan_se(); | |||
} | |||
duo_ji(); | |||
/*int j; | |||
stop1(); | |||
a =( color_see()); | |||
for( j=1;j<=3;j++) | |||
{ | |||
forward2(); | |||
delay( 1000 ); | |||
stop1(); | |||
b = color_see(); | |||
if(a==b) | |||
{ zha_qi_qiu() ; | |||
forward(); | |||
delay(4000); | |||
stop1(); | |||
delay(4000);} | |||
} | |||
//zha wan qi qiu */ | |||
} | |||
}//three time | |||
}//two time | |||
}// one time | |||
} | |||
} | |||
} | |||
} | |||
} | |||
void forward() | |||
{ | |||
analogWrite(9 , 180); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 193); | |||
analogWrite(6 , 0); | |||
} | |||
void trunleft() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 120); | |||
analogWrite(5 , 120); | |||
analogWrite(6 , 0); | |||
} | |||
void forward2() | |||
{ | |||
analogWrite(9 , 100); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 110); | |||
analogWrite(6 , 0); | |||
} | |||
void stop1() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 0); | |||
} | |||
void forward1() | |||
{ | |||
analogWrite(9 , 200); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 200); | |||
analogWrite(6 , 0); | |||
} | |||
void forward1_1() | |||
{ | |||
analogWrite(9 , 250); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 250); | |||
analogWrite(6 , 0); | |||
} | |||
void trunright() | |||
{ | |||
analogWrite(9 , 120); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 120); | |||
} | |||
/*int color_see() | |||
{ | |||
delay(150); | |||
digitalWrite(led, HIGH); | |||
delay(150); | |||
color(); | |||
if (red < blue && red < green) | |||
{ | |||
return 1; | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
return 2; | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
return 3; | |||
} | |||
} | |||
*/ | |||
void color() | |||
{ | |||
digitalWrite(s2, LOW); | |||
digitalWrite(s3, LOW); | |||
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s3, HIGH); | |||
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s2, HIGH); | |||
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
} | |||
void duo_ji() | |||
{ | |||
for(int i=0;i<3;i++) | |||
{ | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
servo_pin_4.write( 180 ); | |||
delay( 600 ); | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
} | |||
} | |||
void pan_duan_yan_se() | |||
{ | |||
forward(); | |||
delay(600); | |||
stop1(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_3_b = 1; | |||
// LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_3_b = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_3_b = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
} | |||
/*void zha_qi_qiu() | |||
{ | |||
for(int i=0;i<3;i++) | |||
{ | |||
servo_pin_4.write(90); | |||
delay(1000); | |||
servo_pin_4.write(150); | |||
delay(1000); | |||
servo_pin_4.write(90); | |||
delay(1000); | |||
} | |||
}*/ |
@@ -0,0 +1,142 @@ | |||
Skip to content | |||
Search or jump to… | |||
Pull requests | |||
Issues | |||
Marketplace | |||
Explore | |||
@aigy0828 | |||
v-thiennp12 | |||
/ | |||
palt-tilt-cam | |||
Public | |||
3 | |||
64 | |||
Code | |||
Issues | |||
Pull requests | |||
Actions | |||
Projects | |||
Wiki | |||
Security | |||
Insights | |||
palt-tilt-cam/PCA9685.py / | |||
@v-thiennp12 | |||
v-thiennp12 Add files via upload | |||
Latest commit 99c7114 on 10 Aug 2020 | |||
History | |||
1 contributor | |||
99 lines (84 sloc) 3.24 KB | |||
#!/usr/bin/python | |||
import time | |||
import math | |||
import smbus | |||
# ============================================================================ | |||
# Raspi PCA9685 16-Channel PWM Servo Driver | |||
# ============================================================================ | |||
class PCA9685: | |||
# Registers/etc. | |||
__SUBADR1 = 0x02 | |||
__SUBADR2 = 0x03 | |||
__SUBADR3 = 0x04 | |||
__MODE1 = 0x00 | |||
__MODE2 = 0x01 | |||
__PRESCALE = 0xFE | |||
__LED0_ON_L = 0x06 | |||
__LED0_ON_H = 0x07 | |||
__LED0_OFF_L = 0x08 | |||
__LED0_OFF_H = 0x09 | |||
__ALLLED_ON_L = 0xFA | |||
__ALLLED_ON_H = 0xFB | |||
__ALLLED_OFF_L = 0xFC | |||
__ALLLED_OFF_H = 0xFD | |||
def __init__(self, address=0x40, debug=False): | |||
self.bus = smbus.SMBus(1) | |||
self.address = address | |||
self.debug = debug | |||
if (self.debug): | |||
print("Reseting PCA9685") | |||
self.write(self.__MODE1, 0x00) | |||
def write(self, reg, value): | |||
"Writes an 8-bit value to the specified register/address" | |||
self.bus.write_byte_data(self.address, reg, value) | |||
if (self.debug): | |||
print("I2C: Write 0x%02X to register 0x%02X" % (value, reg)) | |||
def read(self, reg): | |||
"Read an unsigned byte from the I2C device" | |||
result = self.bus.read_byte_data(self.address, reg) | |||
if (self.debug): | |||
print("I2C: Device 0x%02X returned 0x%02X from reg 0x%02X" % (self.address, result & 0xFF, reg)) | |||
return result | |||
def setPWMFreq(self, freq): | |||
"Sets the PWM frequency" | |||
prescaleval = 25000000.0 # 25MHz | |||
prescaleval /= 4096.0 # 12-bit | |||
prescaleval /= float(freq) | |||
prescaleval -= 1.0 | |||
if (self.debug): | |||
print("Setting PWM frequency to %d Hz" % freq) | |||
print("Estimated pre-scale: %d" % prescaleval) | |||
prescale = math.floor(prescaleval + 0.5) | |||
if (self.debug): | |||
print("Final pre-scale: %d" % prescale) | |||
oldmode = self.read(self.__MODE1); | |||
newmode = (oldmode & 0x7F) | 0x10 # sleep | |||
self.write(self.__MODE1, newmode) # go to sleep | |||
self.write(self.__PRESCALE, int(math.floor(prescale))) | |||
self.write(self.__MODE1, oldmode) | |||
time.sleep(0.005) | |||
self.write(self.__MODE1, oldmode | 0x80) | |||
self.write(self.__MODE2, 0x04) | |||
def setPWM(self, channel, on, off): | |||
"Sets a single PWM channel" | |||
self.write(self.__LED0_ON_L+4*channel, on & 0xFF) | |||
self.write(self.__LED0_ON_H+4*channel, on >> 8) | |||
self.write(self.__LED0_OFF_L+4*channel, off & 0xFF) | |||
self.write(self.__LED0_OFF_H+4*channel, off >> 8) | |||
if (self.debug): | |||
print("channel: %d LED_ON: %d LED_OFF: %d" % (channel,on,off)) | |||
def setServoPulse(self, channel, pulse): | |||
"Sets the Servo Pulse,The PWM frequency must be 50HZ" | |||
pulse = pulse*4096/20000 #PWM frequency is 50HZ,the period is 20000us | |||
self.setPWM(channel, 0, int(pulse)) | |||
def setRotationAngle(self, channel, Angle): | |||
if(Angle >= 0 and Angle <= 180): | |||
temp = Angle * (2000 / 180) + 501 | |||
self.setServoPulse(channel, temp) | |||
else: | |||
print("Angle out of range") | |||
def start_PCA9685(self): | |||
self.write(self.__MODE2, 0x04) | |||
#Just restore the stopped state that should be set for exit_PCA9685 | |||
def exit_PCA9685(self): | |||
self.write(self.__MODE2, 0x00)#Please use initialization or __MODE2 =0x04 | |||
© 2021 GitHub, Inc. | |||
Terms | |||
Privacy | |||
Security | |||
Status | |||
Docs | |||
Contact GitHub | |||
Pricing | |||
API | |||
Training | |||
Blog | |||
About | |||
Loading complete |
@@ -0,0 +1,10 @@ | |||
import numpy | |||
class bonjour: | |||
def __init__(self): | |||
self.bonjour_text = ['bonjour x_x', 'salut !!!', 'ça va ?', 'vas-y ^^', 'chica', 'on your mark', 'hallo', 'another day in paradise !'] | |||
def saysomething(self): | |||
x = numpy.random.randint(len(self.bonjour_text)) | |||
bonjour_rand = self.bonjour_text[x] | |||
return bonjour_rand |
@@ -0,0 +1,10 @@ | |||
import numpy | |||
class cachecache: | |||
def __init__(self): | |||
self.alltext = ['je suis fatigué là ..', 'je me cache', '', 'approches-toi', 'bella ciao', 'allez, je décolle', 'j"ai faim', 'on fait une pause ?'] | |||
def saysomething(self): | |||
x = numpy.random.randint(len(self.alltext)) | |||
text_rand = self.alltext[x] | |||
return text_rand |
@@ -0,0 +1,267 @@ | |||
import numpy | |||
import cv2 | |||
import os | |||
import curses | |||
import time | |||
from PCA9685 import PCA9685 | |||
from bonjour import bonjour | |||
from missing import missing | |||
from cachecache import cachecache | |||
# Load the cascade | |||
# ======================================================================== | |||
# faceCascade = cv2.CascadeClassifier('data/haarcascade_frontalface_default.xml') | |||
# faceCascade.load('data/haarcascade_frontalface_default.xml') | |||
cascPath=os.path.dirname(cv2.__file__)+"/data/haarcascade_frontalface_default.xml" | |||
#cascPath=os.path.dirname(cv2.__file__)+"/data/haarcascade_eye_tree_eyeglasses.xml" | |||
faceCascade = cv2.CascadeClassifier(cascPath) | |||
# Read the input image | |||
print(cascPath) | |||
# Start video capture | |||
video_capture = cv2.VideoCapture(0) | |||
# font | |||
font = cv2.FONT_HERSHEY_SIMPLEX | |||
# org | |||
org = (50, 50) | |||
# fontScale | |||
fontScale = 1 | |||
# Blue color in BGR | |||
color = (255, 0, 0) | |||
# Line thickness of 2 px | |||
thickness = 2 | |||
# ======================================================================== | |||
sync_freq = 0 | |||
# ======================================================================== | |||
# get the curses screen window | |||
# screen = curses.initscr() | |||
# # turn off input echoing | |||
# curses.noecho() | |||
# # respond to keys immediately (don't wait for enter) | |||
# curses.cbreak() | |||
# # map arrow keys to special values | |||
# screen.keypad(True) | |||
#setting start up serrvo positions | |||
# ======================================================================== | |||
pwm = PCA9685() | |||
pwm.setPWMFreq(50) | |||
max_PAN = 180 | |||
max_TILT = 145 | |||
min_PAN = 0 | |||
min_TILT = 0 | |||
max_rate_TILT = 3 | |||
max_rate_PAN = 3 | |||
step_PAN = 1 | |||
step_TILT = 1 | |||
current_PAN = 90 | |||
current_TILT = 60 | |||
pwm.setRotationAngle(1, current_PAN) #PAN | |||
pwm.setRotationAngle(0, current_TILT) #TILT | |||
# pseudo-PID control | |||
k_PAN = 0.015 | |||
k_TILT = -0.015 | |||
kd_PAN = 0.095 | |||
kd_TILT = -0.095 | |||
error_acceptance = 15 | |||
# ======================================================================== | |||
previous_x = 0 | |||
previous_y = 0 | |||
previous_h = 0 | |||
previous_w = 0 | |||
delta_x = 0 | |||
delta_y = 0 | |||
previous_delta_x = 0 | |||
previous_delta_y = 0 | |||
delta_x_dot = 0 | |||
delta_y_dot = 0 | |||
rectangle_found = 0 | |||
# make some fun | |||
bonjour = bonjour() | |||
missing = missing() | |||
cachecache = cachecache() | |||
bonjour_ind = 0 | |||
missing_ind = 0 | |||
cachecache_ind = 0 | |||
# | |||
# main loop | |||
# ======================================================================== | |||
# https://techvidvan.com/tutorials/face-recognition-project-python-opencv/ | |||
try: | |||
while True: | |||
# Try to reduce lagging issues | |||
if sync_freq == 0: | |||
# Capture frame-by-frame | |||
ret, frame = video_capture.read() | |||
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |||
faces = faceCascade.detectMultiScale(gray,scaleFactor=1.2, minNeighbors=4, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE) | |||
if sync_freq < 0: | |||
sync_freq += 1 | |||
# stopping blinking rectangle | |||
# if rectangle_found > 0: | |||
# cv2.rectangle(frame, (previous_x, previous_y), (x+previous_w, y+previous_h), (0, 255, 0), 2) | |||
# | |||
else: | |||
sync_freq = 0 | |||
rectangle_found = 0 | |||
for (x, y, w, h) in faces: | |||
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) | |||
rectangle_found += 1 | |||
if rectangle_found == 1: | |||
print(' x y previous ', previous_x, previous_y) | |||
# ======================================================================================== | |||
# stay away from me ! | |||
# delta_x = previous_x - x | |||
# delta_y = previous_y - y | |||
# get in touch ! | |||
delta_x = 300 - x | |||
delta_y = 200 - y | |||
delta_x_dot = delta_x - previous_delta_x | |||
delta_y_dot = delta_y - previous_delta_y | |||
# ======================================================================================== | |||
# ignoring small error | |||
if abs(delta_x) < error_acceptance: | |||
delta_x = 0 | |||
delta_x_dot = 0 | |||
if abs(delta_y) < error_acceptance: | |||
delta_y = 0 | |||
delta_y_dot = 0 | |||
# ======================================================================================== | |||
print(' x y new ', x, y) | |||
previous_x = x | |||
previous_y = y | |||
previous_h = h | |||
previous_w = w | |||
previous_delta_x = delta_x | |||
previous_delta_y = delta_y | |||
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) | |||
cv2.putText(frame, str(x) + " " + str(y), (x, y), font, fontScale, (75, 75, 0), thickness, cv2.LINE_AA) | |||
# wait for keypress | |||
# =========================================================== | |||
char = cv2.waitKey(20) | |||
#print('key pressed', char) | |||
if char == ord('q'): | |||
break | |||
if char == ord('p'): | |||
#if p is pressed take a photo! | |||
# camera.capture('image%s.jpg' % pic) | |||
# pic = pic +1 | |||
# screen.addstr(0, 0, 'picture taken! ') | |||
cv2.putText(frame, 'another day in paradise !', (50,50) , font, fontScale, color, thickness, cv2.LINE_AA) | |||
elif char == 83: | |||
current_PAN = max(min_PAN, current_PAN - step_PAN) | |||
pwm.setRotationAngle(1, current_PAN) #PAN | |||
#time.sleep(0.001) | |||
cv2.putText(frame, 'right ', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
elif char == 81: | |||
current_PAN = min(max_PAN, current_PAN + step_PAN) | |||
pwm.setRotationAngle(1, current_PAN) #PAN | |||
#time.sleep(0.001) | |||
cv2.putText(frame, 'left ', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
elif char == 82: | |||
current_TILT = max(min_TILT, current_TILT - step_TILT) | |||
pwm.setRotationAngle(0, current_TILT) #TILT | |||
#time.sleep(0.001) | |||
cv2.putText(frame, 'up ', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
elif char == 84: | |||
current_TILT = min(max_TILT, current_TILT + step_TILT) | |||
pwm.setRotationAngle(0, current_TILT) #TILT | |||
#time.sleep(0.001) | |||
cv2.putText(frame, 'down ', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
elif rectangle_found > 0 and (abs(delta_x) < 500 and abs(delta_y) < 500) and char == -1: | |||
# stay away | |||
# k_PAN = -0.01 | |||
# k_TILT = +0.01 | |||
# get in touch | |||
print('pan tilt -- current ', current_PAN, current_TILT) | |||
# pseu-do PID | |||
delta_TILT = k_TILT * delta_y + kd_TILT * delta_y_dot | |||
# rate-limiter | |||
delta_TILT = min(abs(delta_TILT), max_rate_TILT)*numpy.sign(delta_TILT) | |||
# noise exclude | |||
if abs(delta_TILT) < step_TILT: | |||
delta_TILT = 0 | |||
# here we go | |||
current_TILT = current_TILT + delta_TILT | |||
if current_TILT > max_TILT: | |||
current_TILT = max_TILT | |||
if current_TILT < min_TILT: | |||
current_TILT = min_TILT | |||
print('delta tilt ', delta_TILT) | |||
# pseu-do PID | |||
delta_PAN = k_PAN * delta_x + kd_PAN * delta_x_dot | |||
# rate-limiter | |||
delta_PAN = min(abs(delta_PAN), max_rate_PAN)*numpy.sign(delta_PAN) | |||
# noise exclude | |||
if abs(delta_PAN) < step_PAN: | |||
delta_PAN = 0 | |||
# here we go | |||
current_PAN = current_PAN + delta_PAN | |||
if current_PAN > max_PAN: | |||
current_PAN = max_PAN | |||
if current_PAN < min_PAN: | |||
current_PAN = min_PAN | |||
print('delta PAN ', delta_PAN) | |||
print('delta_x delta_y ', delta_x, delta_y) | |||
print('pan tilt -- new ', current_PAN, current_TILT) | |||
pwm.setRotationAngle(1, current_PAN) | |||
pwm.setRotationAngle(0, current_TILT) | |||
elif char == -1: | |||
cv2.putText(frame, 'on air !', (20, 20), font, fontScale, (0, 255, 0), thickness, cv2.LINE_AA) | |||
#print('on air !') | |||
# Display the resulting frame | |||
cv2.imshow('face_tracking', frame) | |||
# | |||
finally: | |||
# shut down cleanly | |||
pwm.exit_PCA9685() | |||
video_capture.release() | |||
cv2.destroyAllWindows() |
@@ -0,0 +1,89 @@ | |||
import curses | |||
import os | |||
import time | |||
import picamera | |||
#!/usr/bin/python | |||
import RPi.GPIO as GPIO | |||
from PCA9685 import PCA9685 | |||
#setting up camera | |||
camera = picamera.PiCamera() | |||
camera.resolution = (512, 384) | |||
camera.start_preview() | |||
#flipping the camera for so its not upside down | |||
# camera.vflip = True | |||
# camera.hflip = True | |||
# get the curses screen window | |||
screen = curses.initscr() | |||
# turn off input echoing | |||
curses.noecho() | |||
# respond to keys immediately (don't wait for enter) | |||
curses.cbreak() | |||
# map arrow keys to special values | |||
screen.keypad(True) | |||
#setting start up serrvo positions | |||
pwm = PCA9685() | |||
pwm.setPWMFreq(50) | |||
max_PAN = 180 | |||
max_TILT = 145 | |||
min_PAN = 0 | |||
min_TILT = 0 | |||
step_PAN = 10 | |||
step_TILT = 10 | |||
current_PAN = 90 | |||
current_TILT = 90 | |||
pwm.setRotationAngle(1, current_PAN) #PAN | |||
pwm.setRotationAngle(0, current_TILT) #TILT | |||
# print doesn't work with curses, use addstr instead | |||
pic = 1 | |||
try: | |||
while True: | |||
char = screen.getch() | |||
if char == ord('q'): | |||
#if q is pressed quit | |||
break | |||
if char == ord('p'): | |||
#if p is pressed take a photo! | |||
camera.capture('image%s.jpg' % pic) | |||
pic = pic +1 | |||
screen.addstr(0, 0, 'picture taken! ') | |||
elif char == curses.KEY_RIGHT: | |||
screen.addstr(0, 0, 'right ') | |||
current_PAN = max(min_PAN, current_PAN - step_PAN) | |||
pwm.setRotationAngle(1, current_PAN) #PAN | |||
time.sleep(0.001) | |||
elif char == curses.KEY_LEFT: | |||
screen.addstr(0, 0, 'left ') | |||
current_PAN = min(max_PAN, current_PAN + step_PAN) | |||
pwm.setRotationAngle(1, current_PAN) #PAN | |||
time.sleep(0.001) | |||
elif char == curses.KEY_UP: | |||
screen.addstr(0, 0, 'up ') | |||
current_TILT = max(min_TILT, current_TILT - step_TILT) | |||
pwm.setRotationAngle(0, current_TILT) #TILT | |||
time.sleep(0.001) | |||
elif char == curses.KEY_DOWN: | |||
screen.addstr(0, 0, 'up ') | |||
current_TILT = min(max_TILT, current_TILT + step_TILT) | |||
pwm.setRotationAngle(0, current_TILT) #TILT | |||
time.sleep(0.001) | |||
finally: | |||
# shut down cleanly | |||
pwm.exit_PCA9685() | |||
curses.nocbreak(); screen.keypad(0); curses.echo() | |||
curses.endwin() |
@@ -0,0 +1,10 @@ | |||
import numpy | |||
class missing: | |||
def __init__(self): | |||
self.alltext = ['ne pars pas', 'what do you mean ?', 'on est en agile là !', 'approches-toi ^ ^', 'un café ?', 'qu"est-ce qu"il fait beau aujourd"hui !', 'il est trop froid ?'] | |||
def saysomething(self): | |||
x = numpy.random.randint(len(self.alltext)) | |||
text_rand = self.alltext[x] | |||
return text_rand |
@@ -0,0 +1,16 @@ | |||
import time | |||
import Adafruit_PCA9685 # 调用PCA9685模块 | |||
pwm = Adafruit_PCA9685.PCA9685() | |||
# 设置最大最小脉冲长度 | |||
servo_min = 90 # 4096的最小脉冲长度 | |||
servo_max = 640 # 4096的最大脉冲长度 | |||
servo_mid = 365 # 4096的中间脉冲长度 | |||
# 设置频率为60 | |||
pwm.set_pwm_freq(60) | |||
print('Moving servo on, press Ctrl-C to quit...') | |||
while True: | |||
pwm.set_pwm(0, 0, servo_min) | |||
time.sleep(1) | |||
pwm.set_pwm(0, 0, servo_max) | |||
time.sleep(1) |
@@ -0,0 +1,302 @@ | |||
#include <Servo.h> | |||
#include"LedControl.h" | |||
LedControl lc=LedControl(12,11,13,1); | |||
double _ABVAR_1_i = 0 ; | |||
Servo servo_pin_4; | |||
const int s0 = A3; | |||
const int s1 = A4; | |||
const int s2 = A1; | |||
const int s3 = A5; | |||
const int out = 8; | |||
const int led = 7; | |||
int red = 0; | |||
int green = 0; | |||
int blue = 0; | |||
int _ABVAR_2_a = 0; | |||
int _ABVAR_3_b = 0; | |||
void trunright(); | |||
void trunleft(); | |||
void stop(); | |||
void duo_ji(); | |||
void forwoard_drop(); | |||
void forwoard_rise(); | |||
void back(); | |||
void forwoard(); | |||
void color(); | |||
void pan_duan_yan_se(); | |||
void led_left(); | |||
void led_right(); | |||
void led_forword(); | |||
void setup() | |||
{ | |||
pinMode(16 , INPUT); | |||
pinMode(14, INPUT); | |||
pinMode( 9 , OUTPUT); | |||
pinMode( 10 , OUTPUT); | |||
pinMode( 5 , OUTPUT); | |||
pinMode( 6 , OUTPUT); | |||
servo_pin_4.attach(4); | |||
_ABVAR_1_i = 0 ; | |||
pinMode(s0, OUTPUT); | |||
pinMode(s1, OUTPUT); | |||
pinMode(s2, OUTPUT); | |||
pinMode(s3, OUTPUT); | |||
pinMode(out, INPUT); | |||
pinMode(led, OUTPUT); | |||
digitalWrite(s0, HIGH); | |||
digitalWrite(s1, HIGH); | |||
lc.shutdown(0,false); | |||
lc.setIntensity(0,8); | |||
lc.clearDisplay(0); | |||
lc.setRow(0,0,0xff); | |||
lc.setRow(0,1,0xff); | |||
lc.setRow(0,2,0xff); | |||
lc.setRow(0,3,0xff); | |||
lc.setRow(0,4,0xff); | |||
lc.setRow(0,5,0xff); | |||
lc.setRow(0,6,0xff); | |||
lc.setRow(0,7,0xff); | |||
} | |||
void loop() | |||
{ | |||
if (( digitalRead(14) && digitalRead(16) )) | |||
{ | |||
forwoard(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(14) ) && digitalRead(16) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( digitalRead(14) && !( digitalRead(16) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(14) ) && !( digitalRead(16) ) )) | |||
{ | |||
_ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay( 3000 ); | |||
forwoard(); | |||
delay( 1700 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay(3000); | |||
forwoard(); | |||
delay( 500 ); | |||
} | |||
if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
{ | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_2_a = 1; | |||
//LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_2_a = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_2_a = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
{ | |||
pan_duan_yan_se(); | |||
} | |||
duo_ji(); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
void trunright() | |||
{ | |||
led_right(); | |||
analogWrite(9 , 200); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 200); | |||
} | |||
void stop() | |||
{ | |||
digitalWrite( 9 , LOW ); | |||
digitalWrite( 10 , LOW ); | |||
digitalWrite( 5 , LOW ); | |||
digitalWrite( 6 , LOW ); | |||
} | |||
void forwoard_drop() | |||
{ | |||
analogWrite(9 , 100); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 100); | |||
analogWrite(6 , 0); | |||
led_forword(); | |||
} | |||
void duo_ji() | |||
{ | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
servo_pin_4.write(360 ); | |||
delay( 600 ); | |||
servo_pin_4.write( 0 ); | |||
delay( 300 ); | |||
} | |||
void trunleft() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 200); | |||
analogWrite(5 , 200); | |||
analogWrite(6 , 0); | |||
led_left(); | |||
} | |||
void forwoard() | |||
{ | |||
analogWrite(9 , 200); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 200); | |||
analogWrite(6 , 0); | |||
led_forword(); | |||
} | |||
void back() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 120); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 120); | |||
} | |||
void forwoard_rise() | |||
{ | |||
analogWrite(9 , 255); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 255); | |||
analogWrite(6 , 0); | |||
led_forword(); | |||
} | |||
void forwoard_rise1() | |||
{ | |||
analogWrite(9 , 210); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 255); | |||
analogWrite(6 , 0); | |||
led_forword(); | |||
} | |||
void color() | |||
{ | |||
digitalWrite(s2, LOW); | |||
digitalWrite(s3, LOW); | |||
//count OUT, pRed, RED | |||
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s3, HIGH); | |||
//count OUT, pBLUE, BLUE | |||
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s2, HIGH); | |||
//count OUT, pGreen, GREEN | |||
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
} | |||
void pan_duan_yan_se() | |||
{ | |||
forwoard(); | |||
delay(600); | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_3_b = 1; | |||
// LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_3_b = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_3_b = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
} | |||
void led_right() | |||
{ | |||
lc.setRow(0,0,0x00); | |||
lc.setRow(0,1,0x08); | |||
lc.setRow(0,2,0x04); | |||
lc.setRow(0,3,0x02); | |||
lc.setRow(0,4,0x8f); | |||
lc.setRow(0,5,0x02); | |||
lc.setRow(0,6,0x04); | |||
lc.setRow(0,7,0x08); | |||
} | |||
void led_left() | |||
{ | |||
lc.setRow(0,0,0x00); | |||
lc.setRow(0,1,0x10); | |||
lc.setRow(0,2,0x20); | |||
lc.setRow(0,3,0x40); | |||
lc.setRow(0,4,0xfe); | |||
lc.setRow(0,5,0x40); | |||
lc.setRow(0,6,0x20); | |||
lc.setRow(0,7,0x10); | |||
} | |||
void led_forword() | |||
{ | |||
lc.setRow(0,0,0x08); | |||
lc.setRow(0,1,0x1c); | |||
lc.setRow(0,2,0x2a); | |||
lc.setRow(0,3,0x49); | |||
lc.setRow(0,4,0x08); | |||
lc.setRow(0,5,0x08); | |||
lc.setRow(0,6,0x08); | |||
lc.setRow(0,7,0x08); | |||
} | |||
@@ -0,0 +1,259 @@ | |||
#include <Servo.h> | |||
int _ABVAR_1_i = 0 ; | |||
Servo servo_pin_4; | |||
const int s0 = A3; | |||
const int s1 = A4; | |||
const int s2 = A1; | |||
const int s3 = A5; | |||
const int out = 8; | |||
const int led = 7; | |||
const int xun_ji1 = A2; | |||
const int xun_ji2 = 3; | |||
const int xun_ji3 = A0; | |||
int red = 0; | |||
int green = 0; | |||
int blue = 0; | |||
int _ABVAR_2_a = 0; | |||
int _ABVAR_3_b = 0; | |||
void trunright(); | |||
void trunleft(); | |||
void stop(); | |||
void duo_ji(); | |||
void forwoard_drop(); | |||
void forwoard_rise(); | |||
void back(); | |||
void forwoard(); | |||
void color(); | |||
void pan_duan_yan_se(); | |||
void setup() | |||
{ | |||
pinMode(xun_ji1 , INPUT); | |||
pinMode( xun_ji2, INPUT); | |||
pinMode( xun_ji3, INPUT); | |||
pinMode( 10, OUTPUT); | |||
pinMode( 6, OUTPUT); | |||
pinMode( 5, OUTPUT); | |||
pinMode( 9, OUTPUT); | |||
pinMode( 9 , OUTPUT); | |||
pinMode( 10 , OUTPUT); | |||
pinMode( 5 , OUTPUT); | |||
pinMode( 6 , OUTPUT); | |||
servo_pin_4.attach(4); | |||
_ABVAR_1_i = 0 ; | |||
pinMode(s0, OUTPUT); | |||
pinMode(s1, OUTPUT); | |||
pinMode(s2, OUTPUT); | |||
pinMode(s3, OUTPUT); | |||
pinMode(out, INPUT); | |||
pinMode(led, OUTPUT); | |||
digitalWrite(s0, HIGH); | |||
digitalWrite(s1, HIGH); | |||
} | |||
void loop() | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && digitalRead(xun_ji2) )) | |||
{ | |||
back(); | |||
} | |||
else | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && !( digitalRead(xun_ji2) ) )) | |||
{ | |||
forwoard(); | |||
} | |||
else | |||
{ | |||
if (( digitalRead(xun_ji3) && ( !( digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(xun_ji3) ) && ( digitalRead(xun_ji2) && digitalRead(xun_ji1) ) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && digitalRead(xun_ji1) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && !( digitalRead(xun_ji1) ) )) | |||
{ | |||
_ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
{ | |||
forwoard(); | |||
delay( 7000 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay( 3000 ); | |||
forwoard(); | |||
delay( 500 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
{ | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_2_a = 1; | |||
//LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_2_a = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_2_a = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
{ | |||
pan_duan_yan_se(); | |||
} | |||
duo_ji(); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
void trunright() | |||
{ | |||
analogWrite(9 , 180); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 180); | |||
} | |||
void stop() | |||
{ | |||
digitalWrite( 9 , LOW ); | |||
digitalWrite( 10 , LOW ); | |||
digitalWrite( 5 , LOW ); | |||
digitalWrite( 6 , LOW ); | |||
} | |||
void forwoard_drop() | |||
{ | |||
analogWrite(9 , 80); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 80); | |||
analogWrite(6 , 0); | |||
} | |||
void duo_ji() | |||
{ | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
servo_pin_4.write( 180 ); | |||
delay( 600 ); | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
} | |||
void trunleft() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 180); | |||
analogWrite(5 , 180); | |||
analogWrite(6 , 0); | |||
} | |||
void forwoard() | |||
{ | |||
analogWrite(9 , 200); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 200); | |||
analogWrite(6 , 0); | |||
} | |||
void back() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 120); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 120); | |||
} | |||
void forwoard_rise() | |||
{ | |||
analogWrite(9 , 255); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 255); | |||
analogWrite(6 , 0); | |||
} | |||
void color() | |||
{ | |||
digitalWrite(s2, LOW); | |||
digitalWrite(s3, LOW); | |||
//count OUT, pRed, RED | |||
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s3, HIGH); | |||
//count OUT, pBLUE, BLUE | |||
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s2, HIGH); | |||
//count OUT, pGreen, GREEN | |||
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
} | |||
void pan_duan_yan_se() | |||
{ | |||
forwoard(); | |||
delay(600); | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_3_b = 1; | |||
// LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_3_b = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_3_b = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
} | |||
@@ -0,0 +1 @@ | |||
Subproject commit e935b759bff26425b8485dde0faa74697b65f951 |
@@ -0,0 +1,15 @@ | |||
country=CN | |||
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev | |||
update_config=1 | |||
network={ | |||
ssid="CMCC-vEuN" | |||
psk="Wa2YUnYS" | |||
priority=2 | |||
} | |||
network={ | |||
ssid="HONOR20PRO" | |||
psk="123456789" | |||
priority=1 | |||
} |
@@ -0,0 +1,50 @@ | |||
#capture{ | |||
position: absolute; | |||
right: 190px; | |||
bottom: -40px; | |||
} | |||
#video{ | |||
position: absolute; | |||
right: 0; | |||
top: 0; | |||
width: 480px; | |||
height: 320px; | |||
autoplay:ture; | |||
} | |||
#img{ | |||
position: absolute; | |||
left: 0; | |||
top: 0; | |||
width: 480px; | |||
height: 320px; | |||
} | |||
.auto{ | |||
position: absolute; | |||
left: 50%; | |||
top: 50%; | |||
height: 320px; | |||
margin-top: -160px; | |||
} | |||
#sure{ | |||
position: absolute; | |||
left: 210px; | |||
bottom: -40px; | |||
} | |||
button{ | |||
cursor: pointer; | |||
margin: 0 auto; | |||
border: 1px solid #f0f0f0; | |||
background: #5CACEE; | |||
color: #FFF; | |||
width: 100px; | |||
height: 36px; | |||
line-height: 36px; | |||
border-radius: 8px; | |||
text-align: center; | |||
} |
@@ -0,0 +1,39 @@ | |||
# 导入必要的库 | |||
import cv2 | |||
import paddlehub as hub | |||
# 加载Paddlehub人脸检测模型 | |||
mask_detector = hub.Module(name="pyramidbox_lite_mobile_mask") | |||
face_detector = hub.Module(name="pyramidbox_lite_mobile") | |||
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW) | |||
while True: | |||
# 从摄像头读取图片 | |||
sucess, img = cap.read() | |||
# os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3" | |||
result_1 = mask_detector.face_detection(images=[img]) | |||
result_2 = face_detector.face_detection(images=[img]) | |||
print(result_1) | |||
# 遍历结果并绘制矩形框 | |||
if result_2[0]['data'] != [] and result_1[0]['data'][0]['label'] == 'MASK': | |||
for face_1 in result_1[0]['data']: | |||
# 将Dict形式的key-value对转换成变量形式 | |||
locals().update(face_1) | |||
print('bbox:', [left, top, right, bottom]) | |||
cv2.rectangle(img, tuple([left, top]), tuple([right, bottom]), (0, 255, 127), 2) | |||
else: | |||
for face_2 in result_2[0]['data']: | |||
locals().update(face_2) | |||
cv2.rectangle(img, tuple([left, top]), tuple([right, bottom]), (0, 0,205), 2) | |||
# 显示图像 | |||
cv2.imshow("img", img) | |||
# 保持画面的持续。 | |||
k = cv2.waitKey(1) | |||
if k == 27: | |||
# 通过esc键退出摄像 | |||
cv2.destroyAllWindows() | |||
break | |||
# 关闭摄像头 | |||
cap.release() |
@@ -0,0 +1,89 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
<title>网页调取摄像头</title> | |||
<link rel="stylesheet" href="video%20pro.css"> | |||
</head> | |||
<body> | |||
<div class="auto"> | |||
<video id="video" autoplay></video> | |||
<canvas id="canvas" width="480" height="320" style="display: none;"></canvas> | |||
<img src="./body_default.png" id="img" style="margin-left: 20px;"> | |||
<div> | |||
<button id="capture" title="点击进行拍照">拍照</button> | |||
</div> | |||
<div> | |||
<button id="sure" title="是否用这张图片进行验证">确认</button> | |||
</div> | |||
</div> | |||
<script> | |||
var file ,stream; | |||
//访问用户媒体设备的兼容方法 | |||
function getUserMedia(constraints, success, error) { | |||
if (navigator.mediaDevices.getUserMedia) { | |||
//最新的标准API | |||
navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error); | |||
} else if (navigator.getUserMedia) { | |||
//旧版API | |||
navigator.getUserMedia(constraints, success, error); | |||
} | |||
} | |||
let video = document.getElementById('video'); | |||
let canvas = document.getElementById('canvas'); | |||
let context = canvas.getContext('2d'); | |||
function success(stream) { | |||
//兼容webkit核心浏览器 | |||
let CompatibleURL = window.URL || window.webkitURL; | |||
//将视频流设置为video元素的源 | |||
console.log(stream); | |||
stream = stream; | |||
//video.src = CompatibleURL.createObjectURL(stream); | |||
video.srcObject = stream; | |||
video.play(); | |||
} | |||
function error(error) { | |||
console.log(`访问用户媒体设备失败${error.name}, ${error.message}`); | |||
} | |||
if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) { | |||
//调用用户媒体设备, 访问摄像头 | |||
getUserMedia({video : {width: 480, height: 320}}, success, error); | |||
} else { | |||
alert('不支持访问用户媒体'); | |||
} | |||
// base64转文件 | |||
document.getElementById('capture').addEventListener('click', function () { | |||
context.drawImage(video, 0, 0, 480, 320); | |||
// 获取图片base64链接 | |||
var image = canvas.toDataURL('image/png'); | |||
// 定义一个img | |||
var img = document.getElementById("img"); | |||
//设置属性和src | |||
//img.id = "imgBoxxx"; | |||
img.src = image; | |||
//将图片添加到页面中 | |||
//document.body.appendChild(img); | |||
function dataURLtoFile(dataurl, filename) { | |||
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], | |||
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); | |||
while (n--) { | |||
u8arr[n] = bstr.charCodeAt(n); | |||
} | |||
file = new File([u8arr], filename, {type: mime}); | |||
return new File([u8arr], filename, {type: mime}); | |||
} | |||
console.log(dataURLtoFile(image, 'aa.png')); | |||
}) | |||
</script> | |||
</body> | |||
</html> | |||
@@ -0,0 +1,89 @@ | |||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |||
<title>网页调取摄像头</title> | |||
<link rel="stylesheet" href="video%20pro.css"> | |||
</head> | |||
<body> | |||
<div class="auto"> | |||
<video id="video" autoplay></video> | |||
<canvas id="canvas" width="480" height="320" style="display: none;"></canvas> | |||
<img src="./body_default.png" id="img" style="margin-left: 20px;"> | |||
<div> | |||
<button id="capture" title="点击进行拍照">拍照</button> | |||
</div> | |||
<div> | |||
<button id="sure" title="是否用这张图片进行验证">确认</button> | |||
</div> | |||
</div> | |||
<script> | |||
var file ,stream; | |||
//访问用户媒体设备的兼容方法 | |||
function getUserMedia(constraints, success, error) { | |||
if (navigator.mediaDevices.getUserMedia) { | |||
//最新的标准API | |||
navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error); | |||
} else if (navigator.getUserMedia) { | |||
//旧版API | |||
navigator.getUserMedia(constraints, success, error); | |||
} | |||
} | |||
let video = document.getElementById('video'); | |||
let canvas = document.getElementById('canvas'); | |||
let context = canvas.getContext('2d'); | |||
function success(stream) { | |||
//兼容webkit核心浏览器 | |||
let CompatibleURL = window.URL || window.webkitURL; | |||
//将视频流设置为video元素的源 | |||
console.log(stream); | |||
stream = stream; | |||
//video.src = CompatibleURL.createObjectURL(stream); | |||
video.srcObject = stream; | |||
video.play(); | |||
} | |||
function error(error) { | |||
console.log(`访问用户媒体设备失败${error.name}, ${error.message}`); | |||
} | |||
if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) { | |||
//调用用户媒体设备, 访问摄像头 | |||
getUserMedia({video : {width: 480, height: 320}}, success, error); | |||
} else { | |||
alert('不支持访问用户媒体'); | |||
} | |||
// base64转文件 | |||
document.getElementById('capture').addEventListener('click', function () { | |||
context.drawImage(video, 0, 0, 480, 320); | |||
// 获取图片base64链接 | |||
var image = canvas.toDataURL('image/png'); | |||
// 定义一个img | |||
var img = document.getElementById("img"); | |||
//设置属性和src | |||
//img.id = "imgBoxxx"; | |||
img.src = image; | |||
//将图片添加到页面中 | |||
//document.body.appendChild(img); | |||
function dataURLtoFile(dataurl, filename) { | |||
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], | |||
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); | |||
while (n--) { | |||
u8arr[n] = bstr.charCodeAt(n); | |||
} | |||
file = new File([u8arr], filename, {type: mime}); | |||
return new File([u8arr], filename, {type: mime}); | |||
} | |||
console.log(dataURLtoFile(image, 'aa.png')); | |||
}) | |||
</script> | |||
</body> | |||
</html> | |||
@@ -0,0 +1,302 @@ | |||
#include <Servo.h> | |||
#include"LedControl.h" | |||
LedControl lc=LedControl(12,11,13,1); | |||
double _ABVAR_1_i = 0 ; | |||
Servo servo_pin_4; | |||
const int s0 = A3; | |||
const int s1 = A4; | |||
const int s2 = A1; | |||
const int s3 = A5; | |||
const int out = 8; | |||
const int led = 7; | |||
int red = 0; | |||
int green = 0; | |||
int blue = 0; | |||
int _ABVAR_2_a = 0; | |||
int _ABVAR_3_b = 0; | |||
void trunright(); | |||
void trunleft(); | |||
void stop(); | |||
void duo_ji(); | |||
void forwoard_drop(); | |||
void forwoard_rise(); | |||
void back(); | |||
void forwoard(); | |||
void color(); | |||
void pan_duan_yan_se(); | |||
void led_left(); | |||
void led_right(); | |||
void led_forword(); | |||
void setup() | |||
{ | |||
pinMode(16 , INPUT); | |||
pinMode(14, INPUT); | |||
pinMode( 9 , OUTPUT); | |||
pinMode( 10 , OUTPUT); | |||
pinMode( 5 , OUTPUT); | |||
pinMode( 6 , OUTPUT); | |||
servo_pin_4.attach(4); | |||
_ABVAR_1_i = 0 ; | |||
pinMode(s0, OUTPUT); | |||
pinMode(s1, OUTPUT); | |||
pinMode(s2, OUTPUT); | |||
pinMode(s3, OUTPUT); | |||
pinMode(out, INPUT); | |||
pinMode(led, OUTPUT); | |||
digitalWrite(s0, HIGH); | |||
digitalWrite(s1, HIGH); | |||
lc.shutdown(0,false); | |||
lc.setIntensity(0,8); | |||
lc.clearDisplay(0); | |||
lc.setRow(0,0,0xff); | |||
lc.setRow(0,1,0xff); | |||
lc.setRow(0,2,0xff); | |||
lc.setRow(0,3,0xff); | |||
lc.setRow(0,4,0xff); | |||
lc.setRow(0,5,0xff); | |||
lc.setRow(0,6,0xff); | |||
lc.setRow(0,7,0xff); | |||
} | |||
void loop() | |||
{ | |||
if (( digitalRead(14) && digitalRead(16) )) | |||
{ | |||
forwoard(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(14) ) && digitalRead(16) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( digitalRead(14) && !( digitalRead(16) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(14) ) && !( digitalRead(16) ) )) | |||
{ | |||
_ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay( 3000 ); | |||
forwoard(); | |||
delay( 1700 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay(3000); | |||
forwoard(); | |||
delay( 500 ); | |||
} | |||
if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
{ | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_2_a = 1; | |||
//LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_2_a = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_2_a = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
{ | |||
pan_duan_yan_se(); | |||
} | |||
duo_ji(); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
void trunright() | |||
{ | |||
led_right(); | |||
analogWrite(9 , 200); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 200); | |||
} | |||
void stop() | |||
{ | |||
digitalWrite( 9 , LOW ); | |||
digitalWrite( 10 , LOW ); | |||
digitalWrite( 5 , LOW ); | |||
digitalWrite( 6 , LOW ); | |||
} | |||
void forwoard_drop() | |||
{ | |||
analogWrite(9 , 100); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 100); | |||
analogWrite(6 , 0); | |||
led_forword(); | |||
} | |||
void duo_ji() | |||
{ | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
servo_pin_4.write(360 ); | |||
delay( 600 ); | |||
servo_pin_4.write( 0 ); | |||
delay( 300 ); | |||
} | |||
void trunleft() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 200); | |||
analogWrite(5 , 200); | |||
analogWrite(6 , 0); | |||
led_left(); | |||
} | |||
void forwoard() | |||
{ | |||
analogWrite(9 , 200); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 200); | |||
analogWrite(6 , 0); | |||
led_forword(); | |||
} | |||
void back() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 120); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 120); | |||
} | |||
void forwoard_rise() | |||
{ | |||
analogWrite(9 , 255); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 255); | |||
analogWrite(6 , 0); | |||
led_forword(); | |||
} | |||
void forwoard_rise1() | |||
{ | |||
analogWrite(9 , 210); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 255); | |||
analogWrite(6 , 0); | |||
led_forword(); | |||
} | |||
void color() | |||
{ | |||
digitalWrite(s2, LOW); | |||
digitalWrite(s3, LOW); | |||
//count OUT, pRed, RED | |||
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s3, HIGH); | |||
//count OUT, pBLUE, BLUE | |||
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s2, HIGH); | |||
//count OUT, pGreen, GREEN | |||
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
} | |||
void pan_duan_yan_se() | |||
{ | |||
forwoard(); | |||
delay(600); | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_3_b = 1; | |||
// LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_3_b = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_3_b = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
} | |||
void led_right() | |||
{ | |||
lc.setRow(0,0,0x00); | |||
lc.setRow(0,1,0x08); | |||
lc.setRow(0,2,0x04); | |||
lc.setRow(0,3,0x02); | |||
lc.setRow(0,4,0x8f); | |||
lc.setRow(0,5,0x02); | |||
lc.setRow(0,6,0x04); | |||
lc.setRow(0,7,0x08); | |||
} | |||
void led_left() | |||
{ | |||
lc.setRow(0,0,0x00); | |||
lc.setRow(0,1,0x10); | |||
lc.setRow(0,2,0x20); | |||
lc.setRow(0,3,0x40); | |||
lc.setRow(0,4,0xfe); | |||
lc.setRow(0,5,0x40); | |||
lc.setRow(0,6,0x20); | |||
lc.setRow(0,7,0x10); | |||
} | |||
void led_forword() | |||
{ | |||
lc.setRow(0,0,0x08); | |||
lc.setRow(0,1,0x1c); | |||
lc.setRow(0,2,0x2a); | |||
lc.setRow(0,3,0x49); | |||
lc.setRow(0,4,0x08); | |||
lc.setRow(0,5,0x08); | |||
lc.setRow(0,6,0x08); | |||
lc.setRow(0,7,0x08); | |||
} | |||
@@ -0,0 +1,223 @@ | |||
#include <Servo.h> | |||
int _ABVAR_1_i = 0 ; | |||
Servo servo_pin_4; | |||
const int s0 = A0; | |||
const int s1 = A1; | |||
const int s2 = A4; | |||
const int s3 = A5; | |||
const int out = 8; | |||
const int led = 7; | |||
const int xun_ji1 = 3; | |||
const int xun_ji2 = A3; | |||
const int xun_ji3 = A2; | |||
int red = 0; | |||
int green = 0; | |||
int blue = 0; | |||
int _ABVAR_2_a = 0; | |||
int _ABVAR_3_b = 0; | |||
void trunright(); | |||
void trunleft(); | |||
void stop(); | |||
void duo_ji(); | |||
void forwoard_drop(); | |||
void forwoard_rise(); | |||
void back(); | |||
void forwoard(); | |||
void color(); | |||
void pan_duan_yan_se(); | |||
void setup() | |||
{ | |||
pinMode(xun_ji1 , INPUT); | |||
pinMode( xun_ji2, INPUT); | |||
pinMode( xun_ji3, INPUT); | |||
pinMode( 10, OUTPUT); | |||
pinMode( 6, OUTPUT); | |||
pinMode( 5, OUTPUT); | |||
pinMode( 9, OUTPUT); | |||
pinMode( 9 , OUTPUT); | |||
pinMode( 10 , OUTPUT); | |||
pinMode( 5 , OUTPUT); | |||
pinMode( 6 , OUTPUT); | |||
servo_pin_4.attach(4); | |||
_ABVAR_1_i = 0 ; | |||
pinMode(s0, OUTPUT); | |||
pinMode(s1, OUTPUT); | |||
pinMode(s2, OUTPUT); | |||
pinMode(s3, OUTPUT); | |||
pinMode(out, INPUT); | |||
pinMode(led, OUTPUT); | |||
digitalWrite(s0, HIGH); | |||
digitalWrite(s1, HIGH); | |||
} | |||
void loop() | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && digitalRead(xun_ji2) )) | |||
{ | |||
back(); | |||
} | |||
else | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && !( digitalRead(xun_ji2) ) )) | |||
{ | |||
forwoard(); | |||
} | |||
else | |||
{ | |||
if (( digitalRead(xun_ji3) && ( !( digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) ) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(xun_ji3) ) && ( digitalRead(xun_ji2) && digitalRead(xun_ji1) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && digitalRead(xun_ji1) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 1 ) ))//小车开始识别色牌 | |||
{ | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_2_a = 1; | |||
//LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_2_a = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_2_a = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
{ | |||
pan_duan_yan_se(); | |||
} | |||
stop(); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
void trunright() | |||
{ | |||
analogWrite(9 , 180); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 0); | |||
} | |||
void stop() | |||
{ | |||
digitalWrite( 9 , LOW ); | |||
digitalWrite( 10 , LOW ); | |||
digitalWrite( 5 , LOW ); | |||
digitalWrite( 6 , LOW ); | |||
} | |||
void forwoard_drop() | |||
{ | |||
analogWrite(9 , 80); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 80); | |||
analogWrite(6 , 0); | |||
} | |||
void trunleft() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 180); | |||
analogWrite(6 , 0); | |||
} | |||
void forwoard() | |||
{ | |||
analogWrite(9 , 180); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 180); | |||
analogWrite(6 , 0); | |||
} | |||
void back() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 120); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 120); | |||
} | |||
void forwoard_rise() | |||
{ | |||
analogWrite(9 , 255); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 255); | |||
analogWrite(6 , 0); | |||
} | |||
void color() | |||
{ | |||
digitalWrite(s2, LOW); | |||
digitalWrite(s3, LOW); | |||
//count OUT, pRed, RED | |||
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s3, HIGH); | |||
//count OUT, pBLUE, BLUE | |||
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s2, HIGH); | |||
//count OUT, pGreen, GREEN | |||
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
} | |||
void pan_duan_yan_se() | |||
{ | |||
forwoard(); | |||
delay(600); | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_3_b = 1; | |||
// LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_3_b = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_3_b = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
} |
@@ -0,0 +1,12 @@ | |||
项目进展情况: | |||
1.通过查找获取了两套数据集: | |||
(1)武汉大学开源的口罩遮挡人脸数据集:Real-World Masked Face Dataset,简称 RMFD。 | |||
(2)亚洲人脸数据集 | |||
该两套数据集都提供了人脸图片集和对应带口罩的数据集,与该项目的训练所需的数据相关。 | |||
2.选用百度飞桨开源的PaddlePaddle深度学习框架进行模型搭建,PaddlePaddle 是一个易用、高效、灵活、可扩展的深度学习框架。并且有很多成熟的预训练模型。 | |||
3.通过走访人员聚集场所,结合当下疫情形式, |
@@ -0,0 +1,261 @@ | |||
#include <Servo.h> | |||
int _ABVAR_1_i = 0 ; | |||
Servo servo_pin_4; | |||
const int s0 = A3; | |||
const int s1 = A4; | |||
const int s2 = A1; | |||
const int s3 = A5; | |||
const int out = 8; | |||
const int led = 7; | |||
const int xun_ji1 = A2; | |||
const int xun_ji2 = 3; | |||
const int xun_ji3 = A0; | |||
int red = 0; | |||
int green = 0; | |||
int blue = 0; | |||
int _ABVAR_2_a = 0; | |||
int _ABVAR_3_b = 0; | |||
void trunright(); | |||
void trunleft(); | |||
void stop(); | |||
void duo_ji(); | |||
void forwoard_drop(); | |||
void forwoard_rise(); | |||
void back(); | |||
void forwoard(); | |||
void color(); | |||
void pan_duan_yan_se(); | |||
void setup() | |||
{ | |||
pinMode(xun_ji1 , INPUT); | |||
pinMode( xun_ji2, INPUT); | |||
pinMode( xun_ji3, INPUT); | |||
pinMode( 10, OUTPUT); | |||
pinMode( 6, OUTPUT); | |||
pinMode( 5, OUTPUT); | |||
pinMode( 9, OUTPUT); | |||
pinMode( 9 , OUTPUT); | |||
pinMode( 10 , OUTPUT); | |||
pinMode( 5 , OUTPUT); | |||
pinMode( 6 , OUTPUT); | |||
servo_pin_4.attach(4); | |||
_ABVAR_1_i = 0 ; | |||
pinMode(s0, OUTPUT); | |||
pinMode(s1, OUTPUT); | |||
pinMode(s2, OUTPUT); | |||
pinMode(s3, OUTPUT); | |||
pinMode(out, INPUT); | |||
pinMode(led, OUTPUT); | |||
digitalWrite(s0, HIGH); | |||
digitalWrite(s1, HIGH); | |||
} | |||
void loop() | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && digitalRead(xun_ji2) )) | |||
{ | |||
back(); | |||
} | |||
else | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && !( digitalRead(xun_ji2) ) )) | |||
{ | |||
forwoard(); | |||
} | |||
else | |||
{ | |||
if (( digitalRead(xun_ji3) && ( !( digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(xun_ji3) ) && ( digitalRead(xun_ji2) && digitalRead(xun_ji1) ) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && digitalRead(xun_ji1) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && !( digitalRead(xun_ji1) ) )) | |||
{ | |||
_ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay( 1500 ); | |||
forwoard(); | |||
delay( 5000 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay( 3000 ); | |||
forwoard(); | |||
delay( 500 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
{ | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_2_a = 1; | |||
//LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_2_a = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_2_a = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
{ | |||
pan_duan_yan_se(); | |||
} | |||
duo_ji(); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
void trunright() | |||
{ | |||
analogWrite(9 , 180); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 0); | |||
} | |||
void stop() | |||
{ | |||
digitalWrite( 9 , LOW ); | |||
digitalWrite( 10 , LOW ); | |||
digitalWrite( 5 , LOW ); | |||
digitalWrite( 6 , LOW ); | |||
} | |||
void forwoard_drop() | |||
{ | |||
analogWrite(9 , 80); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 80); | |||
analogWrite(6 , 0); | |||
} | |||
void duo_ji() | |||
{ | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
servo_pin_4.write( 180 ); | |||
delay( 600 ); | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
} | |||
void trunleft() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 180); | |||
analogWrite(6 , 0); | |||
} | |||
void forwoard() | |||
{ | |||
analogWrite(9 , 180); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 180); | |||
analogWrite(6 , 0); | |||
} | |||
void back() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 120); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 120); | |||
} | |||
void forwoard_rise() | |||
{ | |||
analogWrite(9 , 255); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 255); | |||
analogWrite(6 , 0); | |||
} | |||
void color() | |||
{ | |||
digitalWrite(s2, LOW); | |||
digitalWrite(s3, LOW); | |||
//count OUT, pRed, RED | |||
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s3, HIGH); | |||
//count OUT, pBLUE, BLUE | |||
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s2, HIGH); | |||
//count OUT, pGreen, GREEN | |||
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
} | |||
void pan_duan_yan_se() | |||
{ | |||
forwoard(); | |||
delay(600); | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_3_b = 1; | |||
// LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_3_b = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_3_b = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
} | |||
@@ -0,0 +1,185 @@ | |||
C3560 Boot Loader (C3560-HBOOT-M) Version 12.2(25r)SEC, RELEASE SOFTWARE (fc4) | |||
cisco WS-C3560-24PS (PowerPC405) processor (revision P0) with 122880K/8184K bytes of memory. | |||
3560-24PS starting... | |||
Base ethernet MAC Address: 000C.851A.E348 | |||
Xmodem file system is available. | |||
Initializing Flash... | |||
flashfs[0]: 3 files, 0 directories | |||
flashfs[0]: 0 orphaned files, 0 orphaned directories | |||
flashfs[0]: Total bytes: 64016384 | |||
flashfs[0]: Bytes used: 8918011 | |||
flashfs[0]: Bytes available: 55098373 | |||
flashfs[0]: flashfs fsck took 1 seconds. | |||
...done Initializing Flash. | |||
Boot Sector Filesystem (bs:) installed, fsid: 3 | |||
Parameter Block Filesystem (pb:) installed, fsid: 4 | |||
Loading "flash:/c3560-advipservicesk9-mz.122-37.SE1.bin"... | |||
########################################################################## [OK] | |||
Restricted Rights Legend | |||
Use, duplication, or disclosure by the Government is | |||
subject to restrictions as set forth in subparagraph | |||
(c) of the Commercial Computer Software - Restricted | |||
Rights clause at FAR sec. 52.227-19 and subparagraph | |||
(c) (1) (ii) of the Rights in Technical Data and Computer | |||
Software clause at DFARS sec. 252.227-7013. | |||
cisco Systems, Inc. | |||
170 West Tasman Drive | |||
San Jose, California 95134-1706 | |||
Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(37)SE1, RELEASE SOFTWARE (fc1) | |||
Copyright (c) 1986-2007 by Cisco Systems, Inc. | |||
Compiled Thu 05-Jul-07 22:22 by pt_team | |||
Image text-base: 0x00003000, data-base: 0x01500000 | |||
POST: CPU MIC register Tests : Begin | |||
POST: CPU MIC register Tests : End, Status Passed | |||
POST: PortASIC Memory Tests : Begin | |||
POST: PortASIC Memory Tests : End, Status Passed | |||
POST: CPU MIC interface Loopback Tests : Begin | |||
POST: CPU MIC interface Loopback Tests : End, Status Passed | |||
POST: PortASIC RingLoopback Tests : Begin | |||
POST: PortASIC RingLoopback Tests : End, Status Passed | |||
POST: Inline Power Controller Tests : Begin | |||
POST: Inline Power Controller Tests : End, Status Passed | |||
POST: PortASIC CAM Subsystem Tests : Begin | |||
POST: PortASIC CAM Subsystem Tests : End, Status Passed | |||
POST: PortASIC Port Loopback Tests : Begin | |||
POST: PortASIC Port Loopback Tests : End, Status Passed | |||
Waiting for Port download...Complete | |||
--More-- | |||
This product contains cryptographic features and is subject to United | |||
States and local country laws governing import, export, transfer and | |||
use. Delivery of Cisco cryptographic products does not imply | |||
third-party authority to import, export, distribute or use encryption. | |||
Importers, exporters, distributors and users are responsible for | |||
compliance with U.S. and local country laws. By using this product you | |||
agree to comply with applicable laws and regulations. If you are unable | |||
to comply with U.S. and local laws, return this product immediately. | |||
A summary of U.S. laws governing Cisco cryptographic products may be found at: | |||
http://www.cisco.com/wwl/export/crypto/tool/stqrg.html | |||
If you require further assistance please contact us by sending email to | |||
export@cisco.com. | |||
cisco WS-C3560-24PS (PowerPC405) processor (revision P0) with 122880K/8184K bytes of memory. | |||
Processor board ID CAT1037RJF7 | |||
24 FastEthernet/IEEE 802.3 interface(s) | |||
2 Gigabit Ethernet/IEEE 802.3 interface(s) | |||
63488K bytes of flash-simulated non-volatile configuration memory. | |||
Base ethernet MAC Address : 000C.851A.E348 | |||
Motherboard assembly number : 73-9673-09 | |||
Power supply part number : 341-0029-05 | |||
Motherboard serial number : CAT103758VY | |||
Power supply serial number : DTH1036C7UB | |||
Model revision number : P0 | |||
Motherboard revision number : A0 | |||
Model number : WS-C3560-24PS-E | |||
System serial number : CAT1037RJF7 | |||
Top Assembly Part Number : 800-26380-04 | |||
Top Assembly Revision Number : B0 | |||
Version ID : V06 | |||
CLEI Code Number : COM1100ARC | |||
Hardware Board Revision Number : 0x01 | |||
Switch Ports Model SW Version SW Image | |||
------ ----- ----- ---------- ---------- | |||
* 1 26 WS-C3560-24PS 12.2(37)SE1 C3560-ADVIPSERVICESK | |||
Cisco IOS Software, C3560 Software (C3560-ADVIPSERVICESK9-M), Version 12.2(37)SE1, RELEASE SOFTWARE (fc1) | |||
Copyright (c) 1986-2007 by Cisco Systems, Inc. | |||
Compiled Thu 05-Jul-07 22:22 by pt_team | |||
Press RETURN to get started! | |||
%LINK-5-CHANGED: Interface FastEthernet0/1, changed state to up | |||
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up | |||
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down | |||
%LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up | |||
Switch>en | |||
Switch#conf t | |||
Enter configuration commands, one per line. End with CNTL/Z. | |||
Switch(config)#int f0/1 | |||
Switch(config-if)#switch trunk encap dot1q | |||
Switch(config-if)#switch mode trunk | |||
Switch(config-if)#exit | |||
Switch(config)#exit | |||
Switch# | |||
%SYS-5-CONFIG_I: Configured from console by console | |||
Switch#conf t | |||
Enter configuration commands, one per line. End with CNTL/Z. | |||
Switch(config)#vlan 10 | |||
Switch(config-vlan)#vlan 20 | |||
Switch(config-vlan)#vlan 30 | |||
Switch(config-vlan)#eixt | |||
^ | |||
% Invalid input detected at '^' marker. | |||
Switch(config-vlan)#ex | |||
Switch(config)#int vlan 10 | |||
Switch(config-if)# | |||
%LINK-5-CHANGED: Interface Vlan10, changed state to up | |||
%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan10, changed state to up | |||
Switch(config-if)#ip address 192.168.10.254 255.255.255.0 | |||
Switch(config-if)#no shutdown | |||
Switch(config-if)#int vlan 20 | |||
Switch(config-if)# | |||
%LINK-5-CHANGED: Interface Vlan20, changed state to up | |||
%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan20, changed state to up | |||
Switch(config-if)#ip address 192.168.20.254 255.255.255.0 | |||
Switch(config-if)#no shutdown | |||
Switch(config-if)#int vlan 30 | |||
Switch(config-if)# | |||
%LINK-5-CHANGED: Interface Vlan30, changed state to up | |||
%LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan30, changed state to up | |||
Switch(config-if)#ip address 192.168.30.254 255.255.255.0 | |||
Switch(config-if)#no shutdown | |||
Switch(config-if)#exit | |||
Switch(config)#ip routing | |||
Switch(config)#int f0/2 | |||
Switch(config-if)#no switch | |||
Switch(config-if)#ip address 10.1.1.1 255.255.255.0 | |||
Switch(config-if)#no shutdown | |||
Switch(config-if)#router rip | |||
Switch(config-router)#no auto-summary | |||
Switch(config-router)#network 192.168.10.0 | |||
Switch(config-router)#network 192.168.20.0 | |||
Switch(config-router)#network 192.168.30.0 | |||
Switch(config-router)#network 10.1.1.0 | |||
Switch(config-router)# | |||
Switch# | |||
%SYS-5-CONFIG_I: Configured from console by console | |||
Switch# |
@@ -0,0 +1,41 @@ | |||
sudo apt-get update && sudo apt-get upgrade | |||
sudo apt-get install build-essential cmake pkg-config | |||
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev | |||
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev | |||
sudo apt-get install libxvidcore-dev libx264-dev | |||
sudo apt-get install libfontconfig1-dev libcairo2-dev | |||
sudo apt-get install libgdk-pixbuf2.0 -dev libpango1.0 -dev | |||
sudo apt-get install libgtk2.0 -dev libgtk- 3 -dev | |||
sudo apt-get install libatlas-base-dev gfortran | |||
sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103 | |||
sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 | |||
sudo apt-get install python3-dev | |||
wget https://bootstrap.pypa.io/get-pip.py | |||
sudo python get-pip.py | |||
sudo python3 get-pip.py | |||
sudo rm -rf ~/.cache/pip | |||
sudo pip install virtualenv virtualenvwrapper | |||
nano ~/.bashrc | |||
# virtualenv and virtualenvwrapper | |||
export WORKON_HOME=$HOME/.virtualenvs | |||
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 | |||
source /usr/local/bin/virtualenvwrapper.sh | |||
source ~/.bashrc | |||
mkvirtualenv cv -p python3 | |||
pip install "picamera[array]" | |||
pip install opencv-contrib-python |
@@ -0,0 +1,261 @@ | |||
#include <Servo.h> | |||
int _ABVAR_1_i = 0 ; | |||
Servo servo_pin_4; | |||
const int s0 = A3; | |||
const int s1 = A4; | |||
const int s2 = A1; | |||
const int s3 = A5; | |||
const int out = 8; | |||
const int led = 7; | |||
const int xun_ji1 = A2; | |||
const int xun_ji2 = 3; | |||
const int xun_ji3 = A0; | |||
int red = 0; | |||
int green = 0; | |||
int blue = 0; | |||
int _ABVAR_2_a = 0; | |||
int _ABVAR_3_b = 0; | |||
void trunright(); | |||
void trunleft(); | |||
void stop(); | |||
void duo_ji(); | |||
void forwoard_drop(); | |||
void forwoard_rise(); | |||
void back(); | |||
void forwoard(); | |||
void color(); | |||
void pan_duan_yan_se(); | |||
void setup() | |||
{ | |||
pinMode(xun_ji1 , INPUT); | |||
pinMode( xun_ji2, INPUT); | |||
pinMode( xun_ji3, INPUT); | |||
pinMode( 10, OUTPUT); | |||
pinMode( 6, OUTPUT); | |||
pinMode( 5, OUTPUT); | |||
pinMode( 9, OUTPUT); | |||
pinMode( 9 , OUTPUT); | |||
pinMode( 10 , OUTPUT); | |||
pinMode( 5 , OUTPUT); | |||
pinMode( 6 , OUTPUT); | |||
servo_pin_4.attach(4); | |||
_ABVAR_1_i = 0 ; | |||
pinMode(s0, OUTPUT); | |||
pinMode(s1, OUTPUT); | |||
pinMode(s2, OUTPUT); | |||
pinMode(s3, OUTPUT); | |||
pinMode(out, INPUT); | |||
pinMode(led, OUTPUT); | |||
digitalWrite(s0, HIGH); | |||
digitalWrite(s1, HIGH); | |||
} | |||
void loop() | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && digitalRead(xun_ji2) )) | |||
{ | |||
back(); | |||
} | |||
else | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( ( digitalRead(xun_ji3) && digitalRead(xun_ji1) ) && !( digitalRead(xun_ji2) ) )) | |||
{ | |||
forwoard(); | |||
} | |||
else | |||
{ | |||
if (( digitalRead(xun_ji3) && ( !( digitalRead(xun_ji2) ) && !( digitalRead(xun_ji1) ) ) )) | |||
{ | |||
trunleft(); | |||
} | |||
else | |||
{ | |||
if (( !( digitalRead(xun_ji3) ) && ( digitalRead(xun_ji2) && digitalRead(xun_ji1) ) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && digitalRead(xun_ji1) )) | |||
{ | |||
trunright(); | |||
} | |||
else | |||
{ | |||
if (( ( !( digitalRead(xun_ji3) ) && !( digitalRead(xun_ji2) ) ) && !( digitalRead(xun_ji1) ) )) | |||
{ | |||
_ABVAR_1_i = ( _ABVAR_1_i + 1 ) ; | |||
if (( ( _ABVAR_1_i ) == ( 1 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay( 1500 ); | |||
forwoard(); | |||
delay( 5000 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 2 ) )) | |||
{ | |||
forwoard_rise(); | |||
delay( 3000 ); | |||
forwoard(); | |||
delay( 500 ); | |||
} | |||
else | |||
{ | |||
if (( ( _ABVAR_1_i ) == ( 3 ) )) | |||
{ | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_2_a = 1; | |||
//LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_2_a = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_2_a = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
while(((_ABVAR_2_a)!= (_ABVAR_3_b))) | |||
{ | |||
pan_duan_yan_se(); | |||
} | |||
duo_ji(); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
void trunright() | |||
{ | |||
analogWrite(9 , 180); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 0); | |||
} | |||
void stop() | |||
{ | |||
digitalWrite( 9 , LOW ); | |||
digitalWrite( 10 , LOW ); | |||
digitalWrite( 5 , LOW ); | |||
digitalWrite( 6 , LOW ); | |||
} | |||
void forwoard_drop() | |||
{ | |||
analogWrite(9 , 80); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 80); | |||
analogWrite(6 , 0); | |||
} | |||
void duo_ji() | |||
{ | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
servo_pin_4.write( 180 ); | |||
delay( 600 ); | |||
servo_pin_4.write( 90 ); | |||
delay( 300 ); | |||
} | |||
void trunleft() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 180); | |||
analogWrite(6 , 0); | |||
} | |||
void forwoard() | |||
{ | |||
analogWrite(9 , 180); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 180); | |||
analogWrite(6 , 0); | |||
} | |||
void back() | |||
{ | |||
analogWrite(9 , 0); | |||
analogWrite(10 , 120); | |||
analogWrite(5 , 0); | |||
analogWrite(6 , 120); | |||
} | |||
void forwoard_rise() | |||
{ | |||
analogWrite(9 , 255); | |||
analogWrite(10 , 0); | |||
analogWrite(5 , 255); | |||
analogWrite(6 , 0); | |||
} | |||
void color() | |||
{ | |||
digitalWrite(s2, LOW); | |||
digitalWrite(s3, LOW); | |||
//count OUT, pRed, RED | |||
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s3, HIGH); | |||
//count OUT, pBLUE, BLUE | |||
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
digitalWrite(s2, HIGH); | |||
//count OUT, pGreen, GREEN | |||
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); | |||
} | |||
void pan_duan_yan_se() | |||
{ | |||
forwoard(); | |||
delay(600); | |||
stop(); | |||
digitalWrite(led, HIGH); | |||
delay(500); | |||
color(); | |||
digitalWrite(led, LOW); | |||
if (red < blue && red < green) | |||
{ | |||
_ABVAR_3_b = 1; | |||
// LcdDisplay(" - (Red Color)"); | |||
} | |||
else if (blue < red && blue < green) | |||
{ | |||
_ABVAR_3_b = 2; | |||
// LcdDisplay(" - (Blue Color)"); | |||
} | |||
else if (green < red && green < blue) | |||
{ | |||
_ABVAR_3_b = 3; | |||
// LcdDisplay(" - (Green Color)"); | |||
} | |||
} | |||
@@ -0,0 +1,2 @@ | |||
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib | |||
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib |