| @@ -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 | |||||