首页 > 其他分享 >机器学习 人与马的识别

机器学习 人与马的识别

时间:2023-09-14 12:56:20浏览次数:40  
标签:plt 机器 训练 validation 学习 train import model 识别

(一)选题背景:

可以帮助人们更好地管理马匹,提高马术运动和相关产业的工作效率。人与马识别涉及到图像处理、机器学习、深度学习等领域,是计算机视觉技术的经典问题之一。对该问题进行深入研究,可以促进相关领域的技术发展,为其他类似问题提供参考。总体而言,人与马识别是一个具有实际应用价值的问题,具有重要的研究意义和广泛的应用前景。

二)机器学习设计案例设计方案:

从数据网站中下载相关的数据集,对数据集进行整理,在python的环境中,统计数据集中的文件个数,对数据进行预处理,利用keras,构建网络,训练模型,导入图片测试模型

参考来源:kaggle关于标签学习的讨论区

数据集来源:kaggle,网址:https://www.kaggle.com/

1.导入需要的库

 1 import numpy as np
 2 import pandas as pd
 3 import os
 4 import tensorflow as tf
 5 import matplotlib.pyplot as plt
 6 from pathlib import Path
 7 from sklearn.model_selection import train_test_split
 8 from keras.models import Sequential
 9 from keras.layers import Activation
10 from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
11 from keras.applications.resnet import preprocess_input
12 from keras.models import load_model
13 from keras import optimizers

 

2.查看随机图像

 1 # 导入必要的库
 2 import tensorflow as tf
 3 import matplotlib.pyplot as plt
 4 # 数据目录
 5 data_dir = "C:/Users/horse-or-human/validation"
 6 # 从目录中加载图像数据集
 7 train_ds = tf.keras.preprocessing.image_dataset_from_directory(
 8     data_dir,
 9     validation_split=0.1,  # 验证集占总数据的比例
10     subset="training",  # 使用训练集子集
11     seed=123,  # 随机种子,确保可重复性
12     image_size=(224, 224),  # 图像大小
13     batch_size=32  # 批量大小
14 )
15 # 创建一个大小为10x5的图形窗口
16 plt.figure(figsize=(10, 5))
17 # 从数据集中获取一批图像和标签
18 for images, labels in train_ds.take(1):
19     for i in range(8):
20         # 创建2x4的子图中的一个
21         ax = plt.subplot(2, 4, i + 1)
22         # 显示图像
23         plt.imshow(images[i].numpy().astype("uint8"))
24         # 关闭坐标轴
25         plt.axis("off")
26 # 显示图形窗口
27 plt.show()

 

3、检查一下每个分组(训练 / 测试)中分别包含多少张图像

 1 # 导入所需的库
 2 import os
 3 # 训练集路径
 4 train_path = "C:/Users/horse-or-human/train/"
 5 # 统计训练集中马的图片数量
 6 print('训练集马的图片:', len(os.listdir(train_path + "horses")))
 7 # 统计训练集中人的图片数量
 8 print('训练集人的图片:', len(os.listdir(train_path + "humans")))
 9 # 验证集路径
10 valid_path = "C:/Users/horse-or-human/validation/"
11 # 统计验证集中马的图片数量
12 print('验证集马的图片:', len(os.listdir(valid_path + "horses")))
13 # 统计验证集中人的图片数量
14 print('验证集人的图片:', len(os.listdir(valid_path + "humans")))
15 # 测试集路径
16 test_path = "C:/Users/horse-or-human/test/"
17 # 统计测试集中图片的总数量
18 print('测试集图片:', len(os.listdir(test_path)))

4.搭建网络

 1 from keras import layers
 2 from keras import models
 3 
 4 # 创建一个Sequential模型
 5 model = models.Sequential()
 6 # 添加第一个卷积层,包括32个3x3的卷积核,激活函数为ReLU,输入图像尺寸为224x224x3
 7 model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))
 8 # 添加最大池化层,使用2x2的窗口进行池化
 9 model.add(layers.MaxPooling2D((2, 2)))
10 # 添加第二个卷积层,包括64个3x3的卷积核,激活函数为ReLU
11 model.add(layers.Conv2D(64, (3, 3), activation='relu'))
12 # 再次添加最大池化层
13 model.add(layers.MaxPooling2D((2, 2)))
14 # 添加第三个卷积层,包括128个3x3的卷积核,激活函数为ReLU
15 model.add(layers.Conv2D(128, (3, 3), activation='relu'))
16 # 再次添加最大池化层
17 model.add(layers.MaxPooling2D((2, 2)))
18 # 添加第四个卷积层,包括128个3x3的卷积核,激活函数为ReLU
19 model.add(layers.Conv2D(128, (3, 3), activation='relu'))
20 # 最后添加一个全连接层前需要展平操作
21 model.add(layers.Flatten())
22 # 添加一个全连接层,包括512个神经元,激活函数为ReLU
23 model.add(layers.Dense(512, activation='relu'))
24 # 添加最后一个全连接层,包括一个神经元,激活函数为Sigmoid,用于二分类问题
25 model.add(layers.Dense(1, activation='sigmoid'))

 

 

5、查看特征图的维度随着每层变化

1 model.summary()

 

 

6.配置训练方法

1 model.compile(loss='binary_crossentropy',
2               optimizer=tf.keras.optimizers.RMSprop(lr=1e-4),
3               metrics=['acc'])

7.图像在输入神经网络之前进行数据处理,建立训练和验证数据,训练模型

 1 import tensorflow as tf
 2 from tensorflow.keras.preprocessing.image import ImageDataGenerator
 3 
 4 # 创建图像数据生成器,用于数据预处理和增强
 5 train_datagen = ImageDataGenerator(rescale=1./255)  # 训练集数据归一化
 6 test_datagen = ImageDataGenerator(rescale=1./255)   # 验证集数据归一化
 7 
 8 # 训练集和验证集的图片目录路径
 9 train_dir = 'C:/Users/horse-or-human/train'
10 validation_dir = 'C:/Users/horse-or-human/validation'
11 # 创建数据生成器,设置目标图像大小、批量大小和类别模式
12 batch_size = 20
13 train_generator = train_datagen.flow_from_directory(
14     train_dir,
15     target_size=(224, 224),
16     batch_size=batch_size,
17     class_mode='binary')  # 二分类问题
18 validation_generator = test_datagen.flow_from_directory(
19     validation_dir,
20     target_size=(224, 224),
21     batch_size=batch_size,
22     class_mode='binary')  # 二分类问题
23 # 计算训练集和验证集的样本数量
24 train_samples = len(train_generator.filenames)
25 validation_samples = len(validation_generator.filenames)
26 
27 # 计算每个训练周期的步数
28 steps_per_epoch = train_samples // batch_size
29 validation_steps = validation_samples // batch_size
30 # 训练模型,指定训练数据、训练步数、周期数、验证数据和验证步数
31 history = model.fit( 
32     train_generator,
33     steps_per_epoch=steps_per_epoch,
34     epochs=30,
35     validation_data=validation_generator,
36     validation_steps=validation_steps)
37 # 打印模型概要信息
38 model.summary()
39 # 保存训练好的模型
40 model.save('C:/Users/horse-or-human/result.h5')

 8.训练结果的精度和损失曲线图

 1 import matplotlib.pyplot as plt
 2 from matplotlib.font_manager import FontProperties
 3 
 4 # 指定中文字体的路径
 5 font_path = r"c:/windows/fonts/simsun.ttc"
 6 font = FontProperties(fname=font_path, size=14)
 7 
 8 # 绘制损失曲线和精度曲线图
 9 accuracy = history.history['acc']  # 训练集精度
10 loss = history.history['loss']  # 训练集损失
11 val_loss = history.history['val_loss']  # 验证集精度
12 val_accuracy = history.history['val_acc']  # 验证集损失
13 
14 plt.figure(figsize=(17, 7))
15 
16 # 训练集精度和验证集精度曲线图图
17 plt.subplot(2, 2, 1)
18 plt.plot(range(len(accuracy)), accuracy, 'bo', label='训练集精度')
19 plt.plot(range(len(val_accuracy)), val_accuracy, label='验证集精度')
20 plt.title('训练和验证精度', fontproperties=font)
21 plt.legend(loc='center right', prop=font)
22 
23 # 训练集损失和验证集损失图
24 plt.subplot(2, 2, 2)
25 plt.plot(range(len(loss)), loss, 'bo', label='训练损失')
26 plt.plot(range(len(val_loss)), val_loss, label='验证损失')
27 plt.title('训练和验证损失', fontproperties=font)
28 plt.legend(loc='center right', prop=font)
29 
30 # 训练集精度和损失散点图
31 plt.subplot(2, 2, 3)
32 plt.scatter(range(len(accuracy)), accuracy, label="训练集精度", color='b', s=25, marker="o")
33 plt.scatter(range(len(loss)), loss, label="训练损失", color='r', s=25, marker="o")
34 plt.title('训练精度和损失', fontproperties=font)
35 plt.legend(loc='center right', prop=font)
36 
37 # 验证集精度和损失散点图
38 plt.subplot(2, 2, 4)
39 plt.scatter(range(len(val_accuracy)), val_accuracy, label="验证集精度", color='b', s=25, marker="o")
40 plt.scatter(range(len(val_loss)), val_loss, label="验证损失", color='r', s=25, marker="o")
41 plt.title('验证精度和损失', fontproperties=font)
42 plt.legend(loc='center right', prop=font)
43 
44 plt.show()

 9.训练模型

1 # 训练模型
2 history = model.fit(
3     train_generator,
4     steps_per_epoch=steps_per_epoch,
5     epochs=20,
6     validation_data=validation_generator,
7     validation_steps=validation_steps)
8 model.summary()
9 model.save('C:/Users/horse-or-human/result.h5')

 10.测试

 1 import random
 2 import os
 3 import matplotlib.pyplot as plt
 4 from PIL import Image
 5 import numpy as np
 6 from keras.models import load_model
 7 from matplotlib.font_manager import FontProperties
 8 font = FontProperties(fname=r"c:/windows/fonts/simsun.ttc", size=14) # 指定中文字体的路径
 9 
10 # 指定目录
11 image_dir = 'C:/Users/horse-or-human/test/'
12 
13 # 获取目录中的所有图像文件
14 image_files = os.listdir(image_dir)
15 
16 # 随机选择一张图像
17 random_image = random.choice(image_files)
18 
19 # 加载模型
20 model = load_model('C:/Users/horse-or-human/result.h5')
21 
22 # 加载并处理图像
23 img_path = os.path.join(image_dir, random_image)
24 img = Image.open(img_path)
25 
26 # 去除 alpha 通道(如果有的话)
27 img = img.convert('RGB')
28 
29 # 调整大小和归一化
30 img = img.resize((224, 224), Image.BILINEAR)  # 调整大小为 (224, 224)
31 img_array = np.array(img)
32 img_array = img_array.astype('float32') / 255.0  # 归一化到0-1之间
33 img_array = img_array.reshape(1, 224, 224, 3)  # 添加批次维度,形状与模型期望相匹配
34 
35 # 使用模型进行预测
36 result = model.predict(img_array)
37 
38 # 显示图像和预测结果
39 plt.imshow(img_array[0])
40 plt.title(f"预测结果: {'人' if result > 0.5 else '马'}", fontproperties=font)
41 plt.show()

 总代码:

  1 import numpy as np
  2 import pandas as pd
  3 import os
  4 import tensorflow as tf
  5 import matplotlib.pyplot as plt
  6 from pathlib import Path
  7 from sklearn.model_selection import train_test_split
  8 from keras.models import Sequential
  9 from keras.layers import Activation
 10 from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
 11 from keras.applications.resnet import preprocess_input
 12 from keras.models import load_model
 13 from keras import optimizers
 14 # 导入必要的库
 15 import tensorflow as tf
 16 import matplotlib.pyplot as plt
 17 # 数据目录
 18 data_dir = "C:/Users/horse-or-human/validation"
 19 # 从目录中加载图像数据集
 20 train_ds = tf.keras.preprocessing.image_dataset_from_directory(
 21     data_dir,
 22     validation_split=0.1,  # 验证集占总数据的比例
 23     subset="training",  # 使用训练集子集
 24     seed=123,  # 随机种子,确保可重复性
 25     image_size=(224, 224),  # 图像大小
 26     batch_size=32  # 批量大小
 27 )
 28 # 创建一个大小为10x5的图形窗口
 29 plt.figure(figsize=(10, 5))
 30 # 从数据集中获取一批图像和标签
 31 for images, labels in train_ds.take(1):
 32     for i in range(8):
 33         # 创建2x4的子图中的一个
 34         ax = plt.subplot(2, 4, i + 1)
 35         # 显示图像
 36         plt.imshow(images[i].numpy().astype("uint8"))
 37         # 关闭坐标轴
 38         plt.axis("off")
 39 # 显示图形窗口
 40 plt.show()
 41 # 导入所需的库
 42 import os
 43 # 训练集路径
 44 train_path = "C:/Users/horse-or-human/train/"
 45 # 统计训练集中马的图片数量
 46 print('训练集马的图片:', len(os.listdir(train_path + "horses")))
 47 # 统计训练集中人的图片数量
 48 print('训练集人的图片:', len(os.listdir(train_path + "humans")))
 49 # 验证集路径
 50 valid_path = "C:/Users/horse-or-human/validation/"
 51 # 统计验证集中马的图片数量
 52 print('验证集马的图片:', len(os.listdir(valid_path + "horses")))
 53 # 统计验证集中人的图片数量
 54 print('验证集人的图片:', len(os.listdir(valid_path + "humans")))
 55 # 测试集路径
 56 test_path = "C:/Users/horse-or-human/test/"
 57 # 统计测试集中图片的总数量
 58 print('测试集图片:', len(os.listdir(test_path)))
 59 from keras import layers
 60 from keras import models
 61 
 62 # 创建一个Sequential模型
 63 model = models.Sequential()
 64 # 添加第一个卷积层,包括32个3x3的卷积核,激活函数为ReLU,输入图像尺寸为224x224x3
 65 model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))
 66 # 添加最大池化层,使用2x2的窗口进行池化
 67 model.add(layers.MaxPooling2D((2, 2)))
 68 # 添加第二个卷积层,包括64个3x3的卷积核,激活函数为ReLU
 69 model.add(layers.Conv2D(64, (3, 3), activation='relu'))
 70 # 再次添加最大池化层
 71 model.add(layers.MaxPooling2D((2, 2)))
 72 # 添加第三个卷积层,包括128个3x3的卷积核,激活函数为ReLU
 73 model.add(layers.Conv2D(128, (3, 3), activation='relu'))
 74 # 再次添加最大池化层
 75 model.add(layers.MaxPooling2D((2, 2)))
 76 # 添加第四个卷积层,包括128个3x3的卷积核,激活函数为ReLU
 77 model.add(layers.Conv2D(128, (3, 3), activation='relu'))
 78 # 最后添加一个全连接层前需要展平操作
 79 model.add(layers.Flatten())
 80 # 添加一个全连接层,包括512个神经元,激活函数为ReLU
 81 model.add(layers.Dense(512, activation='relu'))
 82 # 添加最后一个全连接层,包括一个神经元,激活函数为Sigmoid,用于二分类问题
 83 model.add(layers.Dense(1, activation='sigmoid'))
 84 # 使用tensorflow.keras.optimizers中的RMSprop作为优化器
 85 # 损失函数为二分类交叉熵
 86 # 学习率为1e-4
 87 # 评估指标包括准确率(accuracy)
 88 model.compile(loss='binary_crossentropy',
 89               optimizer=tf.keras.optimizers.RMSprop(lr=1e-4),
 90               metrics=['acc'])
 91 import tensorflow as tf
 92 from tensorflow.keras.preprocessing.image import ImageDataGenerator
 93 
 94 # 创建图像数据生成器,用于数据预处理和增强
 95 train_datagen = ImageDataGenerator(rescale=1./255)  # 训练集数据归一化
 96 test_datagen = ImageDataGenerator(rescale=1./255)   # 验证集数据归一化
 97 
 98 # 训练集和验证集的图片目录路径
 99 train_dir = 'C:/Users/horse-or-human/train'
100 validation_dir = 'C:/Users/horse-or-human/validation'
101 # 创建数据生成器,设置目标图像大小、批量大小和类别模式
102 batch_size = 20
103 train_generator = train_datagen.flow_from_directory(
104     train_dir,
105     target_size=(224, 224),
106     batch_size=batch_size,
107     class_mode='binary')  # 二分类问题
108 validation_generator = test_datagen.flow_from_directory(
109     validation_dir,
110     target_size=(224, 224),
111     batch_size=batch_size,
112     class_mode='binary')  # 二分类问题
113 # 计算训练集和验证集的样本数量
114 train_samples = len(train_generator.filenames)
115 validation_samples = len(validation_generator.filenames)
116 
117 # 计算每个训练周期的步数
118 steps_per_epoch = train_samples // batch_size
119 validation_steps = validation_samples // batch_size
120 # 训练模型,指定训练数据、训练步数、周期数、验证数据和验证步数
121 history = model.fit( 
122     train_generator,
123     steps_per_epoch=steps_per_epoch,
124     epochs=30,
125     validation_data=validation_generator,
126     validation_steps=validation_steps)
127 # 打印模型概要信息
128 model.summary()
129 # 保存训练好的模型
130 model.save('C:/Users/horse-or-human/result.h5')
131 import matplotlib.pyplot as plt
132 from matplotlib.font_manager import FontProperties
133 
134 # 指定中文字体的路径
135 font_path = r"c:/windows/fonts/simsun.ttc"
136 font = FontProperties(fname=font_path, size=14)
137 
138 # 绘制损失曲线和精度曲线图
139 accuracy = history.history['acc']  # 训练集精度
140 loss = history.history['loss']  # 训练集损失
141 val_loss = history.history['val_loss']  # 验证集精度
142 val_accuracy = history.history['val_acc']  # 验证集损失
143 
144 plt.figure(figsize=(17, 7))
145 
146 # 训练集精度和验证集精度曲线图图
147 plt.subplot(2, 2, 1)
148 plt.plot(range(len(accuracy)), accuracy, 'bo', label='训练集精度')
149 plt.plot(range(len(val_accuracy)), val_accuracy, label='验证集精度')
150 plt.title('训练和验证精度', fontproperties=font)
151 plt.legend(loc='center right', prop=font)
152 
153 # 训练集损失和验证集损失图
154 plt.subplot(2, 2, 2)
155 plt.plot(range(len(loss)), loss, 'bo', label='训练损失')
156 plt.plot(range(len(val_loss)), val_loss, label='验证损失')
157 plt.title('训练和验证损失', fontproperties=font)
158 plt.legend(loc='center right', prop=font)
159 
160 # 训练集精度和损失散点图
161 plt.subplot(2, 2, 3)
162 plt.scatter(range(len(accuracy)), accuracy, label="训练集精度", color='b', s=25, marker="o")
163 plt.scatter(range(len(loss)), loss, label="训练损失", color='r', s=25, marker="o")
164 plt.title('训练精度和损失', fontproperties=font)
165 plt.legend(loc='center right', prop=font)
166 
167 # 验证集精度和损失散点图
168 plt.subplot(2, 2, 4)
169 plt.scatter(range(len(val_accuracy)), val_accuracy, label="验证集精度", color='b', s=25, marker="o")
170 plt.scatter(range(len(val_loss)), val_loss, label="验证损失", color='r', s=25, marker="o")
171 plt.title('验证精度和损失', fontproperties=font)
172 plt.legend(loc='center right', prop=font)
173 
174 plt.show()
175 # 训练模型
176 history = model.fit(
177     train_generator,
178     steps_per_epoch=steps_per_epoch,
179     epochs=20,
180     validation_data=validation_generator,
181     validation_steps=validation_steps)
182 model.summary()
183 model.save('C:/Users/horse-or-human/result.h5')
184 import random
185 import os
186 import matplotlib.pyplot as plt
187 from PIL import Image
188 import numpy as np
189 from keras.models import load_model
190 from matplotlib.font_manager import FontProperties
191 font = FontProperties(fname=r"c:/windows/fonts/simsun.ttc", size=14) # 指定中文字体的路径
192 
193 # 指定目录
194 image_dir = 'C:/Users/horse-or-human/test/'
195 
196 # 获取目录中的所有图像文件
197 image_files = os.listdir(image_dir)
198 
199 # 随机选择一张图像
200 random_image = random.choice(image_files)
201 
202 # 加载模型
203 model = load_model('C:/Users/horse-or-human/result.h5')
204 
205 # 加载并处理图像
206 img_path = os.path.join(image_dir, random_image)
207 img = Image.open(img_path)
208 
209 # 去除 alpha 通道(如果有的话)
210 img = img.convert('RGB')
211 
212 # 调整大小和归一化
213 img = img.resize((224, 224), Image.BILINEAR)  # 调整大小为 (224, 224)
214 img_array = np.array(img)
215 img_array = img_array.astype('float32') / 255.0  # 归一化到0-1之间
216 img_array = img_array.reshape(1, 224, 224, 3)  # 添加批次维度,形状与模型期望相匹配
217 
218 # 使用模型进行预测
219 result = model.predict(img_array)
220 
221 # 显示图像和预测结果
222 plt.imshow(img_array[0])
223 plt.title(f"预测结果: {'人' if result > 0.5 else '马'}", fontproperties=font)
224 plt.show()

 

 

 

 

标签:plt,机器,训练,validation,学习,train,import,model,识别
From: https://www.cnblogs.com/guisqqq/p/17700343.html

相关文章

  • Cisco Nexus 9000v 虚拟机换机系统软件 NX-OS Release 10.4(1)F 发布 - 学习 Nexus 和
    CiscoNexus9000vSwitch,NX-OSRelease10.4(1)F请访问原文链接:https://sysin.org/blog/cisco-nexus-9000v/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgNX-OSSystemSoftwareReleaseDateCiscoNX-OSRelease10.4(1)F2023-08-18CiscoNX-OSRel......
  • JS深入学习笔记 - 第二章.类和对象
    3.类和对象3.1面向对象这里顺带提一句学习JAVA时,老师说的面向对象和面向过程的区别:面向过程:强调做什么事情,具体什么步骤。举个把大象放进冰箱的例子:打开冰箱门把大象放进冰箱关上冰箱门面向对象:强调的是做动作的主体(称之为对象)冰箱:打开操作冰箱:放的操作(放的可以是大象......
  • HTML学习
    HTMLHyperTextMarkupLanguage(超文本标记语言)超文本:文字、图片、音频、视频等网页查看HTML代码:右击审查元素HTML5+CSS3HTML5完全取代了flashHTML5的优势所有浏览器的支持市场的需求跨平台W3C标准WorldWideWebConsortium(万维网联盟)//可以了解一下IEEh......
  • JS深入学习笔记 - 第一章.构造函数原型与原型链
    1.构造函数和原型 1.1概述在典型的 OOP语言中(如Java),都存在类的概念,类就是对象的模板,对象就是类的实例,但在ES6之前,JS并没有引入类的概念。在ES6之前,对象不是基于类创建的,而是一种称为构建函数的特殊函数来定义对象和它们的特征。有三种创建对象的方式:对象字面量(constob......
  • 《从实践中学习TCP/IP协议》笔记
    2.2网络体系802.3以太网802.11无线网络802.16WiMAX2.4以太网以太网采用附加冲突检测的载波侦听多路访问(CSMA/CD)机制,以太网中所有节点都可以看到在网络中发送的所有信息,以太网是一种广播网络以太网帧结构,由前同步码+帧开始定界符+以太网报头(目的地址+源地址+类型假定IP)+......
  • 9月13日学习内容
    昨天学习了shell命令今天学习了Hbase的API增删改查:packagecom.atguigu;importorg.apache.hadoop.hbase.*;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.filter.ColumnValueFilter;importorg.apache.hadoop.hbase.filter.FilterList;importorg.a......
  • 学习笔记之synchronized
    学习笔记之synchronizedynchronized是一个JDK提供的同步的关键字,通过synchronized可以锁定一个代码块或者一个方法,从而实现锁的效果。synchronized的几种用法1.修饰在对象方法上publicclassSynDemo{inti=0;intx=0;publicsynchronizedvoidtestSync(){......
  • 学习笔记之Redis消息队列-基于Stream的消息队列
    学习笔记之Redis消息队列-基于Stream的消息队列Stream是Redis5.0引入的一种新数据类型,可以实现一个功能非常完善的消息队列。其实只需要知道写入消息队列的命令和读取消息队列的命令就行了写入消息队列:XADD读取消息队列的方式之一:XREAD在业务开发中,我们可以循环的调用......
  • Python学习笔记-Python函数进阶
    函数多返回值思考如果一个函数有两个return,程序如何执行?例如:defreturn_num():return1return2result=return_num()print(result)上面代码只执行了第一个return,因为retrun可以退出当前函数,导致return下方的代码不执行。多个返回值如果一个函数要有多个返回值,书写方式示......
  • I2C虚拟项目学习记录
    DUT中中断信号的连接对应的参数定义parameterIC_INTR_NUM=12;parameterIC_RX_OVER_INTR_ID=0;parameterIC_RX_UNDER_INTR_ID=1;parameterIC_TX_OVER_INTR_ID=2;parameterIC_TX_ABRT_INTR_ID=3;parameterIC_RX_DONE_INTR_ID=4;parame......