当前位置: 首页 > news >正文

用 Keras 和 CNN 进行验证码识别

在本教程中,我们将利用 Keras 和 卷积神经网络(CNN) 来构建一个验证码识别系统。Keras 是一个高层神经网络 API,它运行在 TensorFlow、Microsoft Cognitive Toolkit(CNTK)或 Theano 之上,能够让我们快速构建深度学习模型。CNN 是一种常用于图像识别任务的深度学习架构,能够自动从图像中提取特征。
用 Keras 和 CNN 进行验证码识别

在本教程中,我们将利用 Keras 和 卷积神经网络(CNN) 来构建一个验证码识别系统。Keras 是一个高层神经网络 API,它运行在 TensorFlow、Microsoft Cognitive Toolkit(CNTK)或 Theano 之上,能够让我们快速构建深度学习模型。CNN 是一种常用于图像识别任务的深度学习架构,能够自动从图像中提取特征。

  1. 环境准备

首先,确保你已经安装了 Python 环境,并安装了以下依赖包:

pip install keras tensorflow opencv-python numpy matplotlib pillow

keras:高层神经网络 API,用于构建和训练深度学习模型。

tensorflow:提供底层支持,执行训练和推理。

opencv-python:用于图像处理。

numpy:用于数据处理和矩阵操作。

matplotlib:用于可视化训练结果。

  1. 数据集准备与图像预处理

验证码通常包含多个字符,且由于噪声和扭曲的影响,直接进行字符识别是具有挑战性的。因此,我们需要先对图像进行预处理,包括灰度化、去噪、二值化等。

(1) 图像预处理
import cv2
import numpy as np

def preprocess_image(img_path):
# 读取图像
img = cv2.imread(img_path)

# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用 Otsu 的方法进行二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 高斯模糊去噪
blurred = cv2.GaussianBlur(binary, (5, 5), 0)return blurred

示例图像路径

img_path = 'captcha_images/test1.png'
processed_img = preprocess_image(img_path)

显示处理后的图像

cv2.imshow('Processed Image', processed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(2) 提取字符区域

为了分割出验证码中的每个字符,我们使用轮廓检测技术提取字符的边界框。

def extract_characters(processed_img):
contours, _ = cv2.findContours(processed_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
char_images = []
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
if w > 10 and h > 10: # 忽略小的噪点
char_img = processed_img[y:y+h, x:x+w]
char_images.append(char_img)

# 按照字符从左到右的顺序排序
char_images.sort(key=lambda x: x[0][0])  # 排序依据是字符的左上角 x 坐标
return char_images

提取字符区域

char_images = extract_characters(processed_img)

显示提取的字符

for i, char_img in enumerate(char_images):
cv2.imshow(f'Character {i+1}', char_img)
cv2.waitKey(0)

cv2.destroyAllWindows()

  1. 构建卷积神经网络(CNN)

接下来,我们使用 Keras 来构建一个简单的卷积神经网络(CNN)。CNN 擅长处理图像,并且能够通过多个卷积层和池化层自动提取图像的特征。

(1) 定义 CNN 模型

我们构建的 CNN 包括两个卷积层和两个池化层。最后通过一个全连接层进行输出。

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

def build_model(input_shape=(28, 28, 1), num_classes=36):
model = Sequential()

# 卷积层1
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D((2, 2)))# 卷积层2
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))# 展平层
model.add(Flatten())# 全连接层
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))  # 输出层,用 softmax 激活函数# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',  # 因为是分类问题,使用交叉熵损失函数metrics=['accuracy'])return model

初始化模型

model = build_model()
model.summary()

  1. 数据集加载与预处理

我们需要将验证码图像转换为适合 CNN 处理的格式。通常我们将每个图像调整为 28x28 像素,并将像素值规范化到 [0, 1] 范围。

(1) 数据集加载
from sklearn.model_selection import train_test_split
import os
from keras.preprocessing.image import load_img, img_to_array

def load_data(image_paths, labels, img_size=(28, 28)):
images = []
label_list = []

for img_path, label in zip(image_paths, labels):img = load_img(img_path, color_mode='grayscale', target_size=img_size)img = img_to_array(img)images.append(img)label_list.append(label)images = np.array(images, dtype=np.float32) / 255.0  # 归一化
label_list = np.array(label_list)return images, label_list

假设图像路径和标签如下

image_paths = ['captcha_images/train1.png', 'captcha_images/train2.png']
labels = [1, 2] # 对应的标签(根据实际情况调整)

加载数据并分割训练集与测试集

X, y = load_data(image_paths, labels)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

打印数据形状

print(f"Training data shape: {X_train.shape}, Testing data shape: {X_test.shape}")

  1. 训练模型

现在,我们可以用训练数据来训练 CNN 模型。我们将使用 Adam 优化器和 交叉熵损失 函数来优化模型。

(1) 训练模型

训练模型

history = model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))

可视化训练过程

import matplotlib.pyplot as plt

绘制训练过程中的损失和准确率曲线

plt.plot(history.history['accuracy'], label='Train Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.title('Model Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

plt.plot(history.history['loss'], label='Train Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Model Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()

  1. 测试与预测

训练完成后,我们可以评估模型在测试集上的表现,并对新的验证码图像进行预测。

(1) 评估模型

评估模型在测试集上的表现

test_loss, test_accuracy = model.evaluate(X_test, y_test)
print(f"Test Accuracy: {test_accuracy * 100:.2f}%")

(2) 预测新的验证码
def predict(model, img_path):
# 预处理图像
img = preprocess_image(img_path)
img = cv2.resize(img, (28, 28)) # 调整大小为 28x28
img = np.expand_dims(img, axis=-1) # 添加颜色通道
img = np.expand_dims(img, axis=0) # 扩展为批次大小
img = img / 255.0 # 归一化

# 使用模型进行预测
predictions = model.predict(img)
predicted_label = np.argmax(predictions)
return predicted_label

预测新的验证码图像

predicted_label = predict(model, 'captcha_images/test1.png')
print(f"Predicted label: {predicted_label}")

  1. 环境准备

首先,确保你已经安装了 Python 环境,并安装了以下依赖包:

pip install keras tensorflow opencv-python numpy matplotlib pillow

keras:高层神经网络 API,用于构建和训练深度学习模型。

tensorflow:提供底层支持,执行训练和推理。

opencv-python:用于图像处理。

numpy:用于数据处理和矩阵操作。

matplotlib:用于可视化训练结果。

  1. 数据集准备与图像预处理

验证码通常包含多个字符,且由于噪声和扭曲的影响,直接进行字符识别是具有挑战性的。因此,我们需要先对图像进行预处理,包括灰度化、去噪、二值化等。

(1) 图像预处理
import cv2
import numpy as np

def preprocess_image(img_path):
# 读取图像
img = cv2.imread(img_path)

# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用 Otsu 的方法进行二值化
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 高斯模糊去噪
blurred = cv2.GaussianBlur(binary, (5, 5), 0)return blurred

示例图像路径

img_path = 'captcha_images/test1.png'
processed_img = preprocess_image(img_path)

显示处理后的图像

cv2.imshow('Processed Image', processed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

(2) 提取字符区域

为了分割出验证码中的每个字符,我们使用轮廓检测技术提取字符的边界框。

def extract_characters(processed_img):
contours, _ = cv2.findContours(processed_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
char_images = []
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
if w > 10 and h > 10: # 忽略小的噪点
char_img = processed_img[y:y+h, x:x+w]
char_images.append(char_img)

# 按照字符从左到右的顺序排序
char_images.sort(key=lambda x: x[0][0])  # 排序依据是字符的左上角 x 坐标
return char_images

提取字符区域

char_images = extract_characters(processed_img)

显示提取的字符

for i, char_img in enumerate(char_images):
cv2.imshow(f'Character {i+1}', char_img)
cv2.waitKey(0)

cv2.destroyAllWindows()

  1. 构建卷积神经网络(CNN)

接下来,我们使用 Keras 来构建一个简单的卷积神经网络(CNN)。CNN 擅长处理图像,并且能够通过多个卷积层和池化层自动提取图像的特征。

(1) 定义 CNN 模型

我们构建的 CNN 包括两个卷积层和两个池化层。最后通过一个全连接层进行输出。

from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

def build_model(input_shape=(28, 28, 1), num_classes=36):
model = Sequential()

# 卷积层1
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D((2, 2)))# 卷积层2
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))# 展平层
model.add(Flatten())# 全连接层
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))  # 输出层,用 softmax 激活函数# 编译模型
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',  # 因为是分类问题,使用交叉熵损失函数metrics=['accuracy'])return model

初始化模型

model = build_model()
model.summary()

  1. 数据集加载与预处理

我们需要将验证码图像转换为适合 CNN 处理的格式。通常我们将每个图像调整为 28x28 像素,并将像素值规范化到 [0, 1] 范围。

(1) 数据集加载
from sklearn.model_selection import train_test_split
import os
from keras.preprocessing.image import load_img, img_to_array

def load_data(image_paths, labels, img_size=(28, 28)):
images = []
label_list = []

for img_path, label in zip(image_paths, labels):img = load_img(img_path, color_mode='grayscale', target_size=img_size)img = img_to_array(img)images.append(img)label_list.append(label)images = np.array(images, dtype=np.float32) / 255.0  # 归一化
label_list = np.array(label_list)return images, label_list

假设图像路径和标签如下

image_paths = ['captcha_images/train1.png', 'captcha_images/train2.png']
labels = [1, 2] # 对应的标签(根据实际情况调整)

加载数据并分割训练集与测试集

X, y = load_data(image_paths, labels)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

打印数据形状

print(f"Training data shape: {X_train.shape}, Testing data shape: {X_test.shape}")

  1. 训练模型

现在,我们可以用训练数据来训练 CNN 模型。我们将使用 Adam 优化器和 交叉熵损失 函数来优化模型。

(1) 训练模型

训练模型

history = model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))

可视化训练过程

import matplotlib.pyplot as plt

绘制训练过程中的损失和准确率曲线

plt.plot(history.history['accuracy'], label='Train Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.title('Model Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

plt.plot(history.history['loss'], label='Train Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Model Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()

  1. 测试与预测

训练完成后,我们可以评估模型在测试集上的表现,并对新的验证码图像进行预测。

(1) 评估模型

评估模型在测试集上的表现

test_loss, test_accuracy = model.evaluate(X_test, y_test)
print(f"Test Accuracy: {test_accuracy * 100:.2f}%")

(2) 预测新的验证码
def predict(model, img_path):
# 预处理图像
img = preprocess_image(img_path)
img = cv2.resize(img, (28, 28)) # 调整大小为 28x28
img = np.expand_dims(img, axis=-1) # 添加颜色通道
img = np.expand_dims(img, axis=0) # 扩展为批次大小
img = img / 255.0 # 归一化

# 使用模型进行预测
predictions = model.predict(img)
predicted_label = np.argmax(predictions)
return predicted_label

预测新的验证码图像

predicted_label = predict(model, 'captcha_images/test1.png')
print(f"Predicted label: {predicted_label}")

相关文章:

用 Keras 和 CNN 进行验证码识别

在本教程中,我们将利用 Keras 和 卷积神经网络(CNN) 来构建一个验证码识别系统。Keras 是一个高层神经网络 API,它运行在 TensorFlow、Microsoft Cognitive Toolkit(CNTK)或 Theano 之上,能够让我们快速构建深度学习模型。CNN 是一种常用于图像识别任务的深度学习架构,…...

从 Bank Conflict 数学表示看 Buffer 设计 Trade-Off

在并行处理器设计中,我们希望最大化访存吞吐,让更多的数据分布在不同的 bank,而非在一个 bank 中产生堵塞。一种场景是面对多应用并行,这往往可以通过划分上下文基地址隔离;而另一种场景则是高并行同一个数据共用基地址,本文针对该场景下常见情形 Tensor Data Layout 进行…...

被彼此笼罩 任泪水将我们缠绕 深陷入恶魔的拥抱 在阴冷黑暗处灼烧 吞下这毒药

方格染色grid 不难发现按着行顺着来,odt 那样维护即可。数字图graph 为什么本可做这个题做了很久(? 首先显然可以二分降低难度,然后就是观察。...

mysql无法连接服务器的mysql #mysql8

1、云服务器要开放tcp 3306端口 登录云服务器提供商的,添加开放端口2、配置mysql允许非本地连接 编辑:/etc/my.cnf 或(如果配置了不生效) /etc/mysql/mysql.conf.d/mysqld.cnf 修改: ... [mysqld]bind-address = 0.0.0.0 ... 验证:mysql> SHOW GLOBAL VARIABLES LIKE …...

DAG 最小路径覆盖问题 笔记

原来我还学过这么个玩意。 一、笔记 P2764 最小路径覆盖问题 首先让 \(n\) 个点每个点都是单独的一条路径,接着考虑合并路径。 把每个点拆成只有入度的点和只有出度的点,合并就相当于连接一个只有出度的点和另一个只有入度的点。 显然合并完成后每个拆开的点都最多只能连一条…...

SP3D c# 开发独立的exe

此方法避免了启动S3D的过程 S3D.net API允许编写独立应用程序,即外部自动化TaskHost可执行文件。 在独立应用程序中可以编写哪些自动化?检查自动化-检查对象/数据,并采取一些行动,如生成报告文件/输出文件。数据挖掘-对对象和相关对象进行一些数据处理/数据挖掘,生成报告。…...

python错误code

没有遍历完,就打印了结果模拟商品购物shopp_user = [] user_buy = [] for i in range(0,5):name_shop = input("请输入商品名称:")shopp_user.append(name_shop)for i in shopp_user:print(i)while True:user_choose=input("请输入购买的商品编号:")# 输入…...

瑞 ping 我

ping瑞 ping 我...

java八股文笔记 - 指南

java八股文笔记 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 1…...

NOIP 模拟赛十六

BIT/构造+DP+bitset/DP+平衡树/欧拉序A. 发现答案只有 \(0, 1, 2\) 三种。 将 \(0\) 直接判掉,\(1\) 可以通过树状数组+双指针解决。 记 \(k\) 为需要减少的逆序对数量。 具体的,枚举左端点 \(l\) ,加入右端点 \(r\) ,判断逆序对数 \(cnt\) 是否 \(\ge k\) ,如果是,结束。…...

【AT_dp_y】Grid 2 - Harvey

题意 要求从 \((1,1)\) 走到 \((n,m)\),不能经过障碍物,问方案数。 \(1 \leq n,m \leq 10^5,1 \leq k \leq 3000\)。 思路 首先先解决弱化版,若没有障碍物的方案数,显然是 \(\binom{n+m-2}{n-1}\)。 则我们可以用总 - 非法,考虑经过多少个障碍物进行容斥。 如果按个数去枚…...

C#十五天 026多态重写 027抽象类与开闭原则 028接口,依赖反转,单元测试

在类的重写当中 父类需要加入一个关键字叫:Virtual,子类需要加一个关键字叫:override例: 父类 public virtual void FuLei(){} 子类 public override void ZiLei如果用父类变量去引用子类实例不用v和o的话就叫隐藏这样声明的实例方法还是运行父类方法,加了o和v的才…...

解题报告-P11844 [USACO25FEB] Friendship Editing G

P11844 [USACO25FEB] Friendship Editing G 题目描述 Farmer John 的 \(N\) 头奶牛编号为 \(1\) 到 \(N\)(\(2\le N\le 16\))。奶牛之间的朋友关系可以建模为一个有 \(M\)(\(0\le M\le N(N-1)/2\))条边的无向图。两头奶牛为朋友当且仅当图中她们之间存在一条边。 在一次操作…...

CSP-S模拟23

\(T1:\) 选彩笔(rgb) 思路: 签到题 (但是没签上),二分答案,在写一个三维前缀和\(check\)一下就搞定了。如果忘记三维前缀和的话,请看这里 代码:$code$ #include<iostream> using namespace std; const int N=1e4+5; int n,m,b,g,r,x,y,z,ans,num,maxn,sum[260]…...

CF1413F Roads and Ramen

结论是,路径中有一个端点是直径端点。 你这么想,设 \(dis_i\) 为 \(1\) 到 \(i\) 的 \(1\) 的个数,如果对于一条直径 \(p \to q\),若 \(dis_p = dis_q\) 直接取直径即可。 否则,对于每个点 \(u\),总有 \(p, q\) 中的一个与其 \(dis\) 相等,一个点到直径端点的距离最远,…...

复现The Annotated Transformer代码时遇到的问题和相关链接

The Annotated Transformer原网页:The Annotated Transformer The Annotated Transformer源代码:harvardnlp/annotated-transformer 《The Annotated Transformer》环境配置-CSDN博客 调试The Annotated Transformer_annotatedtransformer.ipynb-CSDN博客# 创建虚拟环境 cond…...

Node.js 文件上传中文文件名乱码难题,为什么只有Node会有乱码困难,其他后端框架少见?

Node.js 文件上传中文文件名乱码难题,为什么只有Node会有乱码困难,其他后端框架少见?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…...

lc1030-距离顺序排列矩阵单元格

难度:简单(后期)题目描述官方把题目描述得稀烂 左上角为 (0, 0),n x m 的点阵(屏幕坐标系,x轴向下,y轴向右) 给定其中一点 p,所有点按到 p 的曼哈顿距离排序示例 输入:rows = 1, cols = 2, rCenter = 0, cCenter = 0 输出:[[0,0],[0,1]]输入:rows = 2, cols = 2, r…...

说的道理。

说的道理。说的道理。 ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽つ ༼ つ ◕_◕ ༽…...

【abc180F】Unbranched - Harvey

题意 问有多少个满足以下条件且有 \(n\) 个点 \(m\) 条边的图:没有自环 每个点的度最大为 \(2\)。 最大的连通块大小恰好为 \(L\)。思路 首先分析:由于每个点的度最大为 \(2\),所以可以判断每个联通块要么是链,要么是环。 所以可以设计状态 \(f_{i,j}\) 表示有 \(i\) 个点,…...

合并区间-leetcode

题目描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,…...

两种判断计算机大小端模式的方法

两种判断计算机大小端模式的方法 在计算机系统里,数据存储有大端和小端两种模式。大端模式是高字节存在低地址,小端模式是低字节存在低地址。下面结合相关知识,用两种 C 语言方法判断大小端。 一、知识铺垫 (一)大小端存储规则大端存储(Big - Endian):数据的高字节存储…...

ROS2之节点

什么是节点? 在ROS2(机器人操作系统2)中,节点(node)是执行程序的基本单元,也是构成整个机器人系统的核心“积木”。你可以把它理解为系统中一个独立、可执行的进程,每个节点都专注于完成一个特定的、单一的功能。这种设计哲学让复杂的机器人系统变得模块化,易于开发、…...

9.17日总结

完成hbase部署和测试,开始搞hbase客户端...

ECT-OS-JiuHuaShan 框架,元推理AGI奇迹

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891 ▮ 推理就绪:基于自然辩证法数学形式化系统启动因果律算符 ECT-OS-JiuHuaShan 框架的诞生,绝非一次普通的技术迭代,它是文明进程中一个前所未有的 “确定性奇点”(Deterministic Singularity)——从此,智能的发…...

Mapper与Mapper.xml的关系

Mapper与Mapper.xml的关系简单直接的回答是:它们之间是“接口定义”与“SQL映射实现”的关系。 ManageMapper 是一个 Java 接口,它定义了数据库操作的方法签名;而 ManageMapper.xml 是一个 XML 文件,它提供了这些方法签名所对应的具体 SQL 语句实现。MyBatis 框架在运行时通…...

Rocky Linux10.0安装zabbix7.4详细步骤 - 教程

Rocky Linux10.0安装zabbix7.4详细步骤 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !i…...

【P3158】放棋子 - Harvey

题意 有 \(c\) 种棋子,每种棋子都有相应的个数,要把全部棋子放入棋盘中,使得每一行和每一列没有颜色相同的棋子,求方案数。 思路 从行和列的角度显然不好处理,所以我们可以先从颜色的种类入手。 设计 \(f_{c,i,j}\) 表示前 \(c\) 种颜色,已经有 \(i\) 行,\(j\) 列被占领…...

最强AI语音克隆和文本配音工具!与真人无异,CosyVoice下载介绍

CosyVoice是一个大规模预训练语言模型,深度融合文本理解和语音生成的一项新型语音合成技术,能够精准解析并诠释各类文本内容,将其转化为宛如真人般的自然语音 CosyVoice采用了总共超15万小时的数据训练,依托先进的大模型技术进行特征提取,从而完成声音的复刻,用户无需训练…...

近日C++线上练习结果

...

密力根油滴实验实验报告

...

Linux 系统插入U盘/移动硬盘实现自动挂载

在 /etc/udev/rules.d/ 目录下建立挂载规则 文件名后缀为 xxx.rulesKERNEL=="sd[a-z][1]", ACTION=="add", SUBSYSTEMS=="usb", SUBSYSTEM=="block", RUN{program}+="/usr/bin/systemd-mount --no-block --collect -o uid=1000,g…...

来点人瑞平我

不知道自己定位了,来帮助我找找(...

日总结 2

老师同样为学期初开了个头,没有讲什么重要是知识。我这天完成了Linux的安装和配置,完成了安装hadoop需要的环境配置和jdk的配置,为hbase的使用安装做铺垫。...

概率论第一章部分习题

...

日常 3

老师为我们讲解了真正的软件开发的环境,听完老师的讲解,我认为我需要学习C#相关的知识,扩展自已以后的选择。课余时间我完成了Hadoop的安装和环境配置,同时花了大部分时间安装配置yarn,但失败了,研究半天没发现哪里配置有问题但就是无法启动。心灰意冷,明天安装和学习hb…...

【P2051】中国象棋 - Harvey

题意 求有多少种棋盘使得每一列和每一行的棋子个数不超过 \(2\) 个。 思路 设计 \(f_{i,j,k}\) 表示前 \(i\) 行,有 \(j\) 列为 \(1\) 个棋子,\(k\) 列为 \(0\) 个棋子。考虑当前行放 \(0\) 个棋子,则有 \(f_{i,j,k} = f_{i-1,j,k}\)。 若当前行放 \(1\) 个棋子,一种可能是…...

JavaDay6

可变参数JDK1.5开始,Java支持传递同类型的可变参数给一个方法 在方法声明中,在指定参数类型后加一个省略号(...)。 一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。package method;public class Demo04 {public static void ma…...

Ubuntu Linux 云服务器常见安全漏洞修复方法汇总 Apache/OpenSSH/DNS

安全漏洞名称/CVE修复方案1. Apache HTTP Server 缓冲区错误漏洞(CVE-2023-31122)2. Apache HTTP Server 资源管理错误漏洞(CVE-2023-43622)3. Apache httpd 资源管理错误漏洞(CVE-2024-27316)4. Apache HTTP Server 代码问题漏洞(CVE-2024-38477)5. Apache HTTP Serve…...

AI智能体开发实战:从提示工程转向上下文工程的完整指南

还记得去年各大公司给提示工程师开出30万美元年薪的疯狂时期吗?现在这些招聘信息基本销声匿迹了。从技术角度看,提示工程确实有些"投机取巧"的意味——本质上就是让人们相信自己在做"工程"工作的华丽包装。 不过现在情况完全不同了。人们开始把传统软件工…...

解码C语言九条语句

选择结构 if 一、基本语法 if (条件表达式) { // 条件为真时执行的代码块 } else { // 条件为假时执行的代码块(可选) }二、条件表达式的本质条件表达式可以是任何返回整型值的表达式:0 表示假(false)。 非0 表示真(true)。示例: if (5) { ... }// 条件为真(非0) if …...

多个 root 用户记录,而且有些记录的密码是空的,导致认证混乱。

多个 root 用户记录,而且有些记录的密码是空的,导致认证混乱。 留言:之前再讲mysql时候,经常有人可以远程登录的时候,结果发现没办法本地登录了,具体体现方式是这样的(看问题体现):现在我可以明确的告诉你们,是你们的root认证太多了,系统无法识别你要的是哪一个root,…...

django登录注册案例(上) - 详解

django登录注册案例(上) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fo…...

从C++开始的编程生活(10)——string类核心语法和auto自动推导类型

从C++开始的编程生活(10)——string类核心语法和auto自动推导类型pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New…...

某交互题选讲的补题记录

CF750F New Year and Finding Roots 考虑第一步只能随机找点,找完点之后除非找到叶子或者根,不然完全等于啥都不知道。 于是找叶子节点,从这个点的两个邻边往下一直走一定能走到叶子,那么此时这条链的中点的父亲就被确定了。 多这么整几次,一直往上跳就肯定能找到根,但操…...

openwrt ipv6 NAT6配置

在诸如校园网或者其他需要认证的网络条件下,由于实名制上网的要求,通常不支持DHCP6-PD,因此要使用IPV6需要使用NAT6目前最新版本的官方openwrt(23.05)已经自动支持NAT6了(firewall.xxx.masq6),因此,如果需要开启ipv6,不再需要复杂的安装各种包,直接LuCI网页操作即可。发…...

奶龙抽象语录

奶龙の无上恩情!!!开坑于 $ 2025-9-15 $ 最后更新于 $ 2025-9-17 $上课 班会 我们为什么要规范普通话,不就跟当年秦始皇车同文,书同轨一样吗? —— 25-9-16 其他 我们班五十几号人,我也不要求别的,声音比\(11\)班(人口60+)大就行了。 —— 25-8-31...

解题报告-P11670 [USACO25JAN] Cow Checkups S

P11670 [USACO25JAN] Cow Checkups S 题目描述 Farmer John 的 \(N\)(\(1 \leq N \leq 5 \cdot 10^5\))头奶牛站成一行,奶牛 \(1\) 在队伍的最前面,奶牛 \(N\) 在队伍的最后面。FJ 的奶牛也有许多不同的品种。他用从 \(1\) 到 \(N\) 的整数来表示每一品种。队伍从前到后第 …...

word vba 对 带编号格式的PO单 段落下添加对应的图片

Attribute VB_Name = "APO_PathStaging" Option Explicit Configuration Constants Private Const BASE_FOLDER As String = "\\10.0.0.10\部门共享\PO\" Private Const START_PARA As Long = 582 Private Const PATH_TAG As String = "[IMG] " …...

解题报告-P11671 [USACO25JAN] Farmer Johns Favorite Operation S

P11671 [USACO25JAN] Farmer Johns Favorite Operation S 题目描述 又是 Farmer John 的农场上寒冷而无聊的一天。为了打发时间,Farmer John 发明了一种关于在整数数组上进行操作的有趣的休闲活动。 Farmer John 有一个包含 \(N\)(\(1 \leq N \leq 2 \cdot 10^5\))个非负整数…...