目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
设计思路
一、课题背景与意义
目前我国机械式水表仍占据水表行业重要份额。一般来说,水表厂商会对出厂的水表进行检定,其中抄表步骤必不可少,而人工抄表烦琐且易造成人为误差。一些研究人员采用模板匹配、特征匹配等方法进行字符识别,但这些方法存在以下缺陷。文针对字轮数字半字符识别设计了算法,有效解决了水表字轮半字符识别困难的问题,同时提高了识别系统的可用性,以期对水表等仪表识别具有一定的应用价值。
二、算法理论原理
2.1 YOLOv5算法
YOLOv5与往期的版本比较,主要改进了主干部分,增加了数据增强和多正样本匹配。
1)主干改进。采用Focus网络结构,在图片中每间隔单个像素点取一值,由此获得4个独立的特征层,进而堆叠这4个独立特征层,而通道信息集中了图片的宽高信息,从而将输入通道扩充了4倍。
2)数据增强。主要采用Mosaic增强方式,将4张图片进行拼接从而实现数据增强,其优点是丰富了检测物体的背景,并且在BN计算时一次性计算了4张图片的数据。
3)多正样本匹配。在YOLO往期系列的训练过程中,每一个真实框对应一个正样本,一个真实框仅能由一个先验框负责预测,为了提升模型的训练效率,YOLOv5中增加了正样本的数量,在训练过程中,每一个真实框可由多个先验框负责预测。
相关代码:
def extract_local_features(image):
kernel = np.array([[0, -1, 0],
[-1, 4, -1],
[0, -1, 0]])
feature_map = cv2.filter2D(image, -1, kernel)
return feature_map
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
feature_map = extract_local_features(image)
cv2.imshow('Original Image', image)
cv2.imshow('Feature Map', feature_map)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、检测的实现
3.1 数据集
在水表厂房拍摄检定水表图像,选取80余种水表图像,共计10000余张原图,用以标注数据集和测试。
水表字轮检定区域时的识别和表盘旋转校正,固定安装的水表会产生一定的机械旋转,而可分离式水表的表盘可以随意旋转。由于表盘图像发生旋转,后续的读数识别就会产生不确定性误差,因此需要对水表图像进行旋转方向的校正。
汇总表盘区域定位、字轮外框定位和字轮字符识别模型数据集数量,如表1所示。
3.3 实验及结果分析
根据准确率曲线、召回率曲线和平均精度均值@0.5:0.95曲线评估表盘区域定位、字轮外框定位和字轮字符识别模型的性能。训练过程中每10个epoch(一个epoch表示所有数据送入网络,完成一次前向计算+反向传播的过程)记录验证集的准确率、召回率和平均精度均值@0.5:0.95,绘制训练模型性能曲线。
准确率曲线:
召回率曲线:
平均精度均值@0.5:0.95曲线:
相关代码如下:
import tensorflow as tf
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 加载和预处理数据集
def load_dataset():
# TODO: 加载水表字轮的图像数据集,并进行预处理(如图像大小调整、归一化等)
pass
# 构建模型
def build_model():
model = tf.keras.Sequential()
# TODO: 添加卷积层、池化层、全连接层等构建深度学习模型的代码
# 根据需要选择合适的模型架构
return model
# 进行模型训练
def train_model(model, X_train, y_train):
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=32)
# 进行模型评估
def evaluate_model(model, X_test, y_test):
loss, accuracy = model.evaluate(X_test, y_test)
print("Test Loss:", loss)
print("Test Accuracy:", accuracy)
实现效果图样例
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!