@@ -1,132 +0,0 @@ | |||||
import time | |||||
import multiprocessing | |||||
import tensorflow as tf | |||||
import os | |||||
os.environ['TL_BACKEND'] = 'tensorflow' | |||||
import tensorlayer as tl | |||||
from .densenet import densenet | |||||
tl.logging.set_verbosity(tl.logging.DEBUG) | |||||
X_train, y_train, X_test, y_test = tl.files.load_cifar10_dataset(shape=(-1, 32, 32, 3), plotable=False) | |||||
# get the network | |||||
net = densenet("densenet-100") | |||||
# training settings | |||||
batch_size = 128 | |||||
n_epoch = 500 | |||||
learning_rate = 0.0001 | |||||
print_freq = 5 | |||||
n_step_epoch = int(len(y_train) / batch_size) | |||||
n_step = n_epoch * n_step_epoch | |||||
shuffle_buffer_size = 128 | |||||
train_weights = net.trainable_weights | |||||
optimizer = tl.optimizers.Adam(learning_rate) | |||||
metrics = tl.metric.Accuracy() | |||||
def generator_train(): | |||||
inputs = X_train | |||||
targets = y_train | |||||
if len(inputs) != len(targets): | |||||
raise AssertionError("The length of inputs and targets should be equal") | |||||
for _input, _target in zip(inputs, targets): | |||||
# yield _input.encode('utf-8'), _target.encode('utf-8') | |||||
yield _input, _target | |||||
def generator_test(): | |||||
inputs = X_test | |||||
targets = y_test | |||||
if len(inputs) != len(targets): | |||||
raise AssertionError("The length of inputs and targets should be equal") | |||||
for _input, _target in zip(inputs, targets): | |||||
# yield _input.encode('utf-8'), _target.encode('utf-8') | |||||
yield _input, _target | |||||
def _map_fn_train(img, target): | |||||
# 1. Randomly crop a [height, width] section of the image. | |||||
img = tf.image.random_crop(img, [24, 24, 3]) | |||||
# 2. Randomly flip the image horizontally. | |||||
img = tf.image.random_flip_left_right(img) | |||||
# 3. Randomly change brightness. | |||||
img = tf.image.random_brightness(img, max_delta=63) | |||||
# 4. Randomly change contrast. | |||||
img = tf.image.random_contrast(img, lower=0.2, upper=1.8) | |||||
# 5. Subtract off the mean and divide by the variance of the pixels. | |||||
img = tf.image.per_image_standardization(img) | |||||
target = tf.reshape(target, ()) | |||||
return img, target | |||||
def _map_fn_test(img, target): | |||||
# 1. Crop the central [height, width] of the image. | |||||
img = tf.image.resize_with_pad(img, 24, 24) | |||||
# 2. Subtract off the mean and divide by the variance of the pixels. | |||||
img = tf.image.per_image_standardization(img) | |||||
img = tf.reshape(img, (24, 24, 3)) | |||||
target = tf.reshape(target, ()) | |||||
return img, target | |||||
# dataset API and augmentation | |||||
train_ds = tf.data.Dataset.from_generator( | |||||
generator_train, output_types=(tf.float32, tf.int32) | |||||
) # , output_shapes=((24, 24, 3), (1))) | |||||
train_ds = train_ds.map(_map_fn_train,num_parallel_calls=multiprocessing.cpu_count()) | |||||
# train_ds = train_ds.repeat(n_epoch) | |||||
train_ds = train_ds.shuffle(shuffle_buffer_size) | |||||
train_ds = train_ds.prefetch(buffer_size=4096) | |||||
train_ds = train_ds.batch(batch_size) | |||||
# value = train_ds.make_one_shot_iterator().get_next() | |||||
test_ds = tf.data.Dataset.from_generator( | |||||
generator_test, output_types=(tf.float32, tf.int32) | |||||
) # , output_shapes=((24, 24, 3), (1))) | |||||
# test_ds = test_ds.shuffle(shuffle_buffer_size) | |||||
test_ds = test_ds.map(_map_fn_test,num_parallel_calls=multiprocessing.cpu_count()) | |||||
# test_ds = test_ds.repeat(n_epoch) | |||||
test_ds = test_ds.prefetch(buffer_size=4096) | |||||
test_ds = test_ds.batch(batch_size) | |||||
# value_test = test_ds.make_one_shot_iterator().get_next() | |||||
class WithLoss(tl.layers.Module): | |||||
def __init__(self, net, loss_fn): | |||||
super(WithLoss, self).__init__() | |||||
self._net = net | |||||
self._loss_fn = loss_fn | |||||
def forward(self, data, label): | |||||
out = self._net(data) | |||||
loss = self._loss_fn(out, label) | |||||
return loss | |||||
net_with_loss = WithLoss(net, loss_fn=tl.cost.softmax_cross_entropy_with_logits) | |||||
net_with_train = tl.models.TrainOneStep(net_with_loss, optimizer, train_weights) | |||||
for epoch in range(n_epoch): | |||||
start_time = time.time() | |||||
net.set_train() | |||||
train_loss, train_acc, n_iter = 0, 0, 0 | |||||
for X_batch, y_batch in train_ds: | |||||
X_batch = tl.ops.convert_to_tensor(X_batch.numpy(), dtype=tl.float32) | |||||
y_batch = tl.ops.convert_to_tensor(y_batch.numpy(), dtype=tl.int64) | |||||
_loss_ce = net_with_train(X_batch, y_batch) | |||||
train_loss += _loss_ce | |||||
n_iter += 1 | |||||
_logits = net(X_batch) | |||||
metrics.update(_logits, y_batch) | |||||
train_acc += metrics.result() | |||||
metrics.reset() | |||||
print("Epoch {} of {} took {}".format(epoch + 1, n_epoch, time.time() - start_time)) | |||||
print(" train loss: {}".format(train_loss / n_iter)) | |||||
print(" train acc: {}".format(train_acc / n_iter)) |
@@ -1,135 +0,0 @@ | |||||
import time | |||||
import multiprocessing | |||||
import tensorflow as tf | |||||
import os | |||||
os.environ['TL_BACKEND'] = 'tensorflow' | |||||
import tensorlayer as tl | |||||
from .densenet import densenet | |||||
tl.logging.set_verbosity(tl.logging.DEBUG) | |||||
def load_ImageNet_dataset(shape=(-1, 256, 256, 3), plotable=False): | |||||
'''已加载到本地的ImageNet数据集''' | |||||
return X_train, y_train, X_test, y_test | |||||
# get the network | |||||
net = densenet("densenet-121") | |||||
X_train, y_train, X_test, y_test = load_ImageNet_dataset(shape=(-1, 256, 256, 3), plotable=False) | |||||
# training settings | |||||
batch_size = 128 | |||||
n_epoch = 500 | |||||
learning_rate = 0.0001 | |||||
print_freq = 5 | |||||
n_step_epoch = int(len(y_train) / batch_size) | |||||
n_step = n_epoch * n_step_epoch | |||||
shuffle_buffer_size = 128 | |||||
train_weights = net.trainable_weights | |||||
optimizer = tl.optimizers.Adam(learning_rate) | |||||
metrics = tl.metric.Accuracy() | |||||
def generator_train(): | |||||
inputs = X_train | |||||
targets = y_train | |||||
if len(inputs) != len(targets): | |||||
raise AssertionError("The length of inputs and targets should be equal") | |||||
for _input, _target in zip(inputs, targets): | |||||
# yield _input.encode('utf-8'), _target.encode('utf-8') | |||||
yield _input, _target | |||||
def generator_test(): | |||||
inputs = X_test | |||||
targets = y_test | |||||
if len(inputs) != len(targets): | |||||
raise AssertionError("The length of inputs and targets should be equal") | |||||
for _input, _target in zip(inputs, targets): | |||||
# yield _input.encode('utf-8'), _target.encode('utf-8') | |||||
yield _input, _target | |||||
def _map_fn_train(img, target): | |||||
# 1. Randomly crop a [height, width] section of the image. | |||||
img = tf.image.random_crop(img, [24, 24, 3]) | |||||
# 2. Randomly flip the image horizontally. | |||||
img = tf.image.random_flip_left_right(img) | |||||
# 3. Randomly change brightness. | |||||
img = tf.image.random_brightness(img, max_delta=63) | |||||
# 4. Randomly change contrast. | |||||
img = tf.image.random_contrast(img, lower=0.2, upper=1.8) | |||||
# 5. Subtract off the mean and divide by the variance of the pixels. | |||||
img = tf.image.per_image_standardization(img) | |||||
target = tf.reshape(target, ()) | |||||
return img, target | |||||
def _map_fn_test(img, target): | |||||
# 1. Crop the central [height, width] of the image. | |||||
img = tf.image.resize_with_pad(img, 24, 24) | |||||
# 2. Subtract off the mean and divide by the variance of the pixels. | |||||
img = tf.image.per_image_standardization(img) | |||||
img = tf.reshape(img, (24, 24, 3)) | |||||
target = tf.reshape(target, ()) | |||||
return img, target | |||||
# dataset API and augmentation | |||||
train_ds = tf.data.Dataset.from_generator( | |||||
generator_train, output_types=(tf.float32, tf.int32) | |||||
) # , output_shapes=((24, 24, 3), (1))) | |||||
train_ds = train_ds.map(_map_fn_train,num_parallel_calls=multiprocessing.cpu_count()) | |||||
# train_ds = train_ds.repeat(n_epoch) | |||||
train_ds = train_ds.shuffle(shuffle_buffer_size) | |||||
train_ds = train_ds.prefetch(buffer_size=4096) | |||||
train_ds = train_ds.batch(batch_size) | |||||
# value = train_ds.make_one_shot_iterator().get_next() | |||||
test_ds = tf.data.Dataset.from_generator( | |||||
generator_test, output_types=(tf.float32, tf.int32) | |||||
) # , output_shapes=((24, 24, 3), (1))) | |||||
# test_ds = test_ds.shuffle(shuffle_buffer_size) | |||||
test_ds = test_ds.map(_map_fn_test,num_parallel_calls=multiprocessing.cpu_count()) | |||||
# test_ds = test_ds.repeat(n_epoch) | |||||
test_ds = test_ds.prefetch(buffer_size=4096) | |||||
test_ds = test_ds.batch(batch_size) | |||||
# value_test = test_ds.make_one_shot_iterator().get_next() | |||||
class WithLoss(tl.layers.Module): | |||||
def __init__(self, net, loss_fn): | |||||
super(WithLoss, self).__init__() | |||||
self._net = net | |||||
self._loss_fn = loss_fn | |||||
def forward(self, data, label): | |||||
out = self._net(data) | |||||
loss = self._loss_fn(out, label) | |||||
return loss | |||||
net_with_loss = WithLoss(net, loss_fn=tl.cost.softmax_cross_entropy_with_logits) | |||||
net_with_train = tl.models.TrainOneStep(net_with_loss, optimizer, train_weights) | |||||
for epoch in range(n_epoch): | |||||
start_time = time.time() | |||||
net.set_train() | |||||
train_loss, train_acc, n_iter = 0, 0, 0 | |||||
for X_batch, y_batch in train_ds: | |||||
X_batch = tl.ops.convert_to_tensor(X_batch.numpy(), dtype=tl.float32) | |||||
y_batch = tl.ops.convert_to_tensor(y_batch.numpy(), dtype=tl.int64) | |||||
_loss_ce = net_with_train(X_batch, y_batch) | |||||
train_loss += _loss_ce | |||||
n_iter += 1 | |||||
_logits = net(X_batch) | |||||
metrics.update(_logits, y_batch) | |||||
train_acc += metrics.result() | |||||
metrics.reset() | |||||
print("Epoch {} of {} took {}".format(epoch + 1, n_epoch, time.time() - start_time)) | |||||
print(" train loss: {}".format(train_loss / n_iter)) | |||||
print(" train acc: {}".format(train_acc / n_iter)) |
@@ -1,293 +0,0 @@ | |||||
#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); | |||||
} | |||||
}*/ |
@@ -1,188 +0,0 @@ | |||||
import tensorflow as tf | |||||
import tensorlayer as tl | |||||
config = tf.compat.v1.ConfigProto() | |||||
config.gpu_options.allow_growth = True | |||||
session = tf.compat.v1.Session(config=config) | |||||
class BottleNeck(tl.layers.Module): | |||||
def __init__(self, growth_rate, drop_rate): | |||||
super(BottleNeck, self).__init__() | |||||
self.bn1 = tl.layers.BatchNorm() | |||||
self.conv1 = tl.layers.Conv2d(n_filter=4 * growth_rate, | |||||
filter_size=(1, 1), | |||||
strides=(1,1), | |||||
padding="SAME") | |||||
self.bn2 = tl.layers.BatchNorm() | |||||
self.conv2 = tl.layers.Conv2d(n_filter=growth_rate, | |||||
filter_size=(3, 3), | |||||
strides=(1,1), | |||||
padding="SAME") | |||||
self.dropout = tl.layers.Dropout(keep=drop_rate) | |||||
self.listLayers = [self.bn1, | |||||
tl.layers.PRelu(channel_shared=True), | |||||
self.conv1, | |||||
self.bn2, | |||||
tl.layers.PRelu(channel_shared=True), | |||||
self.conv2, | |||||
self.dropout] | |||||
def forward(self, x): | |||||
y = x | |||||
for layer in self.listLayers: | |||||
y = layer(y) | |||||
y = tf.keras.layers.concatenate([x, y], axis=-1) | |||||
return y | |||||
# 构建密集块 | |||||
class DenseBlock(tl.layers.Module): | |||||
def __init__(self, num_layers, growth_rate, drop_rate=0.5): | |||||
super(DenseBlock, self).__init__() | |||||
self.num_layers = num_layers | |||||
self.growth_rate = growth_rate | |||||
self.drop_rate = drop_rate | |||||
self.listLayers = [] | |||||
for _ in range(num_layers): | |||||
self.listLayers.append(BottleNeck(growth_rate=self.growth_rate, drop_rate=self.drop_rate)) | |||||
def forward(self, x): | |||||
for layer in self.listLayers: | |||||
x = layer(x) | |||||
return x | |||||
# 构建过渡层 | |||||
class TransitionLayer(tl.layers.Module): | |||||
def __init__(self, out_channels): | |||||
super(TransitionLayer, self).__init__() | |||||
self.bn = tl.layers.BatchNorm() | |||||
self.conv = tl.layers.Conv2d(n_filter=out_channels, | |||||
filter_size=(1, 1), | |||||
strides=(1,1), | |||||
padding="same") | |||||
self.pool = tl.layers.MaxPool2d(filter_size=(2, 2), | |||||
strides=(2,2), | |||||
padding="SAME") | |||||
def forward(self, inputs): | |||||
x = self.bn(inputs) | |||||
x = tl.relu(x) | |||||
x = self.conv(x) | |||||
x = self.pool(x) | |||||
return x | |||||
# DenseNet-121,169,201,264模型 | |||||
class DenseNet(tl.layers.Module): | |||||
def __init__(self, num_init_features, growth_rate, block_layers, compression_rate, drop_rate): | |||||
super(DenseNet, self).__init__() | |||||
self.conv = tl.layers.Conv2d(n_filter=num_init_features, | |||||
filter_size=(7, 7), | |||||
strides=(2,2), | |||||
padding="SAME") | |||||
self.bn = tl.layers.BatchNorm() | |||||
self.pool = tl.layers.MaxPool2d(filter_size=(3, 3), | |||||
strides=(2,2), | |||||
padding="SAME") | |||||
self.num_channels = num_init_features | |||||
self.dense_block_1 = DenseBlock(num_layers=block_layers[0], growth_rate=growth_rate, drop_rate=drop_rate) | |||||
self.num_channels += growth_rate * block_layers[0] | |||||
self.num_channels = compression_rate * self.num_channels | |||||
self.transition_1 = TransitionLayer(out_channels=int(self.num_channels)) | |||||
self.dense_block_2 = DenseBlock(num_layers=block_layers[1], growth_rate=growth_rate, drop_rate=drop_rate) | |||||
self.num_channels += growth_rate * block_layers[1] | |||||
self.num_channels = compression_rate * self.num_channels | |||||
self.transition_2 = TransitionLayer(out_channels=int(self.num_channels)) | |||||
self.dense_block_3 = DenseBlock(num_layers=block_layers[2], growth_rate=growth_rate, drop_rate=drop_rate) | |||||
self.num_channels += growth_rate * block_layers[2] | |||||
self.num_channels = compression_rate * self.num_channels | |||||
self.transition_3 = TransitionLayer(out_channels=int(self.num_channels)) | |||||
self.dense_block_4 = DenseBlock(num_layers=block_layers[3], growth_rate=growth_rate, drop_rate=drop_rate) | |||||
self.avgpool = tl.layers.GlobalMeanPool2d() | |||||
self.fc = tl.layers.Dense(n_units=10,act=tl.softmax(logits=())) | |||||
def forward(self, inputs): | |||||
x = self.conv(inputs) | |||||
x = self.bn(x) | |||||
x = tl.relu(x) | |||||
x = self.pool(x) | |||||
x = self.dense_block_1(x) | |||||
x = self.transition_1(x) | |||||
x = self.dense_block_2(x) | |||||
x = self.transition_2(x) | |||||
x = self.dense_block_3(x) | |||||
x = self.transition_3(x,) | |||||
x = self.dense_block_4(x) | |||||
x = self.avgpool(x) | |||||
x = self.fc(x) | |||||
return x | |||||
# DenseNet-100模型 | |||||
class DenseNet_100(tl.layers.Module): | |||||
def __init__(self, num_init_features, growth_rate, block_layers, compression_rate, drop_rate): | |||||
super(DenseNet_100, self).__init__() | |||||
self.conv = tl.layers.Conv2d(n_filter=num_init_features, | |||||
filter_size=(7, 7), | |||||
strides=(2,2), | |||||
padding="SAME") | |||||
self.bn = tl.layers.BatchNorm() | |||||
self.pool = tl.layers.MaxPool2d(filter_size=(3, 3), | |||||
strides=(2,2), | |||||
padding="SAME") | |||||
self.num_channels = num_init_features | |||||
self.dense_block_1 = DenseBlock(num_layers=block_layers[0], growth_rate=growth_rate, drop_rate=drop_rate) | |||||
self.num_channels += growth_rate * block_layers[0] | |||||
self.num_channels = compression_rate * self.num_channels | |||||
self.transition_1 = TransitionLayer(out_channels=int(self.num_channels)) | |||||
self.dense_block_2 = DenseBlock(num_layers=block_layers[1], growth_rate=growth_rate, drop_rate=drop_rate) | |||||
self.num_channels += growth_rate * block_layers[1] | |||||
self.num_channels = compression_rate * self.num_channels | |||||
self.transition_2 = TransitionLayer(out_channels=int(self.num_channels)) | |||||
self.dense_block_3 = DenseBlock(num_layers=block_layers[2], growth_rate=growth_rate, drop_rate=drop_rate) | |||||
self.num_channels += growth_rate * block_layers[2] | |||||
self.num_channels = compression_rate * self.num_channels | |||||
self.transition_3 = TransitionLayer(out_channels=int(self.num_channels)) | |||||
self.avgpool = tl.layers.GlobalMeanPool2d() | |||||
self.fc = tl.layers.Dense(n_units=10,act=tl.softmax(logits=())) | |||||
def forward(self, inputs): | |||||
x = self.conv(inputs) | |||||
x = self.bn(x) | |||||
x = tl.relu(x) | |||||
x = self.pool(x) | |||||
x = self.dense_block_1(x) | |||||
x = self.transition_1(x) | |||||
x = self.dense_block_2(x) | |||||
x = self.transition_2(x) | |||||
x = self.dense_block_3(x) | |||||
x = self.transition_3(x,) | |||||
x = self.avgpool(x) | |||||
# x = tl.layers.Dense(n_units=10,act=tl.softmax(logits=x)) | |||||
x = self.fc(x) | |||||
return x | |||||
def densenet(x): | |||||
if x == 'densenet-121': | |||||
return DenseNet(num_init_features=64, growth_rate=32, block_layers=[6, 12, 24, 16], compression_rate=0.5, | |||||
drop_rate=0.5) | |||||
elif x == 'densenet-169': | |||||
return DenseNet(num_init_features=64, growth_rate=32, block_layers=[6 , 12, 32, 32], compression_rate=0.5, | |||||
drop_rate=0.5) | |||||
elif x == 'densenet-201': | |||||
return DenseNet(num_init_features=64, growth_rate=32, block_layers=[6, 12, 48, 32], compression_rate=0.5, | |||||
drop_rate=0.5) | |||||
elif x == 'densenet-264': | |||||
return DenseNet(num_init_features=64, growth_rate=32, block_layers=[6, 12, 64, 48], compression_rate=0.5, | |||||
drop_rate=0.5) | |||||
elif x=='densenet-100': | |||||
return DenseNet_100(num_init_features=64, growth_rate=12, block_layers=[16, 16, 16], compression_rate=0.5, | |||||
drop_rate=0.5) | |||||
@@ -1,142 +0,0 @@ | |||||
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 |
@@ -1,10 +0,0 @@ | |||||
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 |
@@ -1,10 +0,0 @@ | |||||
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 |
@@ -1,267 +0,0 @@ | |||||
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() |
@@ -1,89 +0,0 @@ | |||||
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() |
@@ -1,10 +0,0 @@ | |||||
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 |
@@ -1,16 +0,0 @@ | |||||
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) |
@@ -1,302 +0,0 @@ | |||||
#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); | |||||
} | |||||
@@ -1,259 +0,0 @@ | |||||
#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)"); | |||||
} | |||||
} | |||||
@@ -1,15 +0,0 @@ | |||||
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 | |||||
} |
@@ -1,50 +0,0 @@ | |||||
#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; | |||||
} |
@@ -1,39 +0,0 @@ | |||||
# 导入必要的库 | |||||
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() |
@@ -1,89 +0,0 @@ | |||||
<!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> | |||||
@@ -1,89 +0,0 @@ | |||||
<!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> | |||||
@@ -1,302 +0,0 @@ | |||||
#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); | |||||
} | |||||
@@ -1,223 +0,0 @@ | |||||
#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)"); | |||||
} | |||||
} |
@@ -1,12 +0,0 @@ | |||||
项目进展情况: | |||||
1.通过查找获取了两套数据集: | |||||
(1)武汉大学开源的口罩遮挡人脸数据集:Real-World Masked Face Dataset,简称 RMFD。 | |||||
(2)亚洲人脸数据集 | |||||
该两套数据集都提供了人脸图片集和对应带口罩的数据集,与该项目的训练所需的数据相关。 | |||||
2.选用百度飞桨开源的PaddlePaddle深度学习框架进行模型搭建,PaddlePaddle 是一个易用、高效、灵活、可扩展的深度学习框架。并且有很多成熟的预训练模型。 | |||||
3.通过走访人员聚集场所,结合当下疫情形式, |
@@ -1,261 +0,0 @@ | |||||
#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)"); | |||||
} | |||||
} | |||||
@@ -1,185 +0,0 @@ | |||||
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# |
@@ -1,41 +0,0 @@ | |||||
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 |
@@ -1,261 +0,0 @@ | |||||
#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)"); | |||||
} | |||||
} | |||||
@@ -1,2 +0,0 @@ | |||||
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 |