支持向量机SVM区分条码还是二维码

框架就用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')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值