框架就用python的sklearn库,直接贴代码了
import cv2
import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import glob
import os
def get_image_files(directory):
# 存储所有图片文件路径的列表
image_files = []
image_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff','.webp']
# 遍历目录中的所有文件
for root, dirs,files in os.walk(directory):
for file in files:
# 检查文件扩展名是否在定义的扩展名列表中
if any(file.lower().endswith(ext) for ext in image_extensions):
# 构建文件的完整路径
file_path = os.path.join(root, file)
image = cv2.imread(file_path)
if image is not None:
# 将文件路径添加到列表中
image_files.append(image)
return image_files
# 假设我们有一些二维码和条码的图像数据
# 这里我们使用简单的示例数据,实际应用中需要更多的数据
def load_data():
# 加载二维码和条码图像
qr_images = get_image_files('/Users/carlos.ni/Downloads/qr_codes')
barcode_images = get_image_files('/Users/carlos.ni/Downloads/barcodes')
# 创建标签:0表示二维码,1表示条码
labels = [0] * len(qr_images) + [1] * len(barcode_images)
# 合并图像数据
images = qr_images + barcode_images
return images, labels
# 提取图像特征(这里使用简单的HOG特征)
def extract_features(images):
features = []
for image in images:
# 调整图像大小以便提取HOG特征
resized_image = cv2.resize(image, (128, 128),interpolation=cv2.INTER_AREA)
if len(resized_image.shape) == 3:
gray_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2GRAY)
else:
gray_image = resized_image
# 计算HOG特征
hog = cv2.HOGDescriptor()
hog_feature = hog.compute(gray_image)
features.append(hog_feature.flatten())
return np.array(features)
# 加载数据
images, labels = load_data()
# 提取特征
features = extract_features(images)
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
# 创建SVM分类器
clf = svm.SVC(kernel='poly')
# 训练模型
clf.fit(X_train, y_train)
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy * 100:.2f}%')
# 测试新图像
def test_new_image(image_path):
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
feature = extract_features([image])
prediction = clf.predict(feature)
if prediction[0] == 0:
print("The image contains a QR code.")
else:
print("The image contains a barcode.")
# 测试新图像
test_new_image('/Users/carlos.ni/Downloads/testimages/1.webp')
test_new_image('/Users/carlos.ni/Downloads/testimages/2.webp')
test_new_image('/Users/carlos.ni/Downloads/testimages/3.webp')
test_new_image('/Users/carlos.ni/Downloads/testimages/4.webp')