图像识别案例在线实验闯关Educator头歌答案分享

第1关:手写体图像数据集初识

# -*- coding: utf-8 -*-
#读取机器学习包sklearn内置的手写体图像数据集,输出数据集的基本信息:
#图像像素数据集的大小x_size(元组),第1个元素为行数,第2个元素为列数,
#图像标签向量y
#返回 (x_size,y)
def return_values():
    import sklearn.datasets
    a=sklearn.datasets.load_digits()
    X=a.data     #图像像素数据集
    Y=a.target   #图像标签向量
    x_size = X.shape
    y = Y
 
    return (x_size,y)
 
#********** End **********#

第2关:基于全像素特征的手写体图像识别模型

def return_values():
    import sklearn.datasets
    a=sklearn.datasets.load_digits()
    #2 提取数据
    X=a.data
    Y=a.target
    #3 划分测试集和训练集
    from sklearn.model_selection import train_test_split
    x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=4)
    #4构建支持向量机模型
    import sklearn.svm as svm
    from sklearn.svm import SVC
    clf = svm.SVC(kernel='linear')
    clf.fit(x_train,y_train)
    rv=clf.score(x_train, y_train);
    y1=clf.predict(x_test)
    r=y1-y_test
    v=len(r[r==0])/len(y1)
    return (rv,v)
#********** End **********#

第3关:基于全像素特征的人脸识别模型

# -*- coding: utf-8 -*-
#读取机器学习包sklearn内置的人脸图像数据集,
#按80%训练和20%测试进行随机划分,构建支持向量机分类模型(线性核函数),
#返回模型的准确率rv和测试集的预测准确率rs。
def return_values():
     #1 读取数据集
    import sklearn.datasets
    a=sklearn.datasets.fetch_olivetti_faces()
    #2 提取数据
    X=a.data
    Y=a.target
    from sklearn.decomposition import PCA
    pca=PCA(n_components=0.95)
    pca.fit(X)
    X1=pca.transform(X)
    from sklearn.model_selection import train_test_split
    x_train,x_test,y_train,y_test=train_test_split(X1,Y,test_size=0.2,random_state=4)
    import sklearn.svm as svm
    from sklearn.svm import SVC
    clf = svm.SVC(kernel='linear') 
    clf.fit(x_train,y_train)
    rv=clf.score(x_train, y_train);
    y1=clf.predict(x_test)
    r=y1-y_test
    rs=len(r[r==0])/len(y1)
    
    return (rv,rs)
#********** End **********#

第4关:基于像素主成分的人脸识别模型

# -*- coding: utf-8 -*-
#读取机器学习包sklearn内置的人脸图像数据集,
#对像素特征数据做主成分分析,并提取主成分,要求累计贡献率在95%以上。
#基于提取的主成分数据作为输入特征数据,
#按80%训练和20%测试进行随机划分,构建支持向量机分类模型(线性核函数),
#返回模型的准确率rv和测试集的预测准确率rs。
from sklearn.decomposition import PCA #主成分分析模块
def return_values():
    #1 读取数据集
    import sklearn.datasets
    a=sklearn.datasets.fetch_olivetti_faces()
    #2 提取数据
    X=a.data
    Y=a.target
    from sklearn.decomposition import PCA
    pca=PCA(n_components=0.95)
    pca.fit(X)
    X1=pca.transform(X)
    from sklearn.model_selection import train_test_split
    x_train,x_test,y_train,y_test=train_test_split(X1,Y,test_size=0.2,random_state=4)
    import sklearn.svm as svm
    from sklearn.svm import SVC
    clf = svm.SVC(kernel='linear') 
    clf.fit(x_train,y_train)
    rv=clf.score(x_train, y_train);
    y1=clf.predict(x_test)
    r=y1-y_test
    rs=len(r[r==0])/len(y1)
    
    return (rv,rs)
 
#********** End **********#

第5关:彩色图像识别模型

from PIL import Image
import numpy as np
import os

def return_values():
    path='图片2/'   # 纸币图像文件夹
    fname=os.listdir(path) 
    X=np.zeros((len(fname),9))   # 预定义自变量:9个颜色矩特征
    Y=np.zeros(len(fname))       # 预定义因变量:面额值

    for i in range(len(fname)):
        img=Image.open(path+fname[i])   # 读取第i张图片
        im=img.split()
        # 提取RGB通道并归一化,截取中心100x100区域
        R=np.array(im[0])/255
        row_1=int(R.shape[0]/2)-50
        row_2=int(R.shape[0]/2)+50
        con_1=int(R.shape[1]/2)-50
        con_2=int(R.shape[1]/2)+50
        R=R[row_1:row_2,con_1:con_2]

        G=np.array(im[1])/255
        G=G[row_1:row_2,con_1:con_2]

        B=np.array(im[2])/255
        B=B[row_1:row_2,con_1:con_2]

        # 构造X:计算三个通道的一阶、二阶、三阶颜色矩
        # R通道
        r1 = np.mean(R)
        r2 = np.std(R)
        a_r = np.mean(np.abs(R - r1)**3)
        r3 = a_r**(1./3)
        # G通道
        g1 = np.mean(G)
        g2 = np.std(G)
        a_g = np.mean(np.abs(G - g1)**3)
        g3 = a_g**(1./3)
        # B通道
        b1 = np.mean(B)
        b2 = np.std(B)
        a_b = np.mean(np.abs(B - b1)**3)
        b3 = a_b**(1./3)
        
        X[i, :] = [r1, r2, r3, g1, g2, g3, b1, b2, b3]

        # 构造Y:从文件名提取面额值
        png_name = fname[i]
        Y[i] = float(png_name.split("_")[0])

    # 划分训练集和测试集,构建支持向量机模型
    from sklearn.model_selection import train_test_split
    from sklearn.svm import SVC
    x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=4)
    clf = SVC(class_weight='balanced', random_state=0)   # 使用平衡类别权重
    clf.fit(x_train, y_train)

    # 计算准确率
    rv = clf.score(x_train, y_train)    # 训练集准确率
    rs = clf.score(x_test, y_test)      # 测试集准确率

    return (rv, rs)

第6关:彩色图像识别模型(拓展)

'''
任务:
现有1元、5元、10元、20元、50元、100元共6种面额的纸币彩色图像,储存在"图片"文件夹内,相关信息及要求如下:
1)每种纸币均从正、反两面及两个不同的方向,进行采集图像各10张,即每种纸币采集40张,6种货币,则总图片有240张。
2)图片的命名为:面额值_采集序号.png,比如1元纸币40张依次命名为:1_1.png~1_40.png,其他同理。
3)读取图片文件夹,计算每张图片的R、G、B三个颜色通道的一阶、二阶、三阶颜色矩特征,共9个特征指标数据,记为自变量X,
4)同时构造纸币面额标签数据集,记为因变量Y。
5)按80%训练和20%测试进行随机划分数据集,构建支持向量机分类模型,
6)返回模型的准确率rv和测试集的预测准确率rs。
'''
from PIL import Image
import numpy as np
import os
 
 
def return_values():
    import os
    path='图片/' 
    fname=os.listdir(path) 
    X=np.zeros((len(fname),9)) #预定义自变量,即9个颜色矩阵特征指标
    Y=np.zeros(len(fname)) #预定义因变量
    for i in range(len(fname)):
        img=Image.open(path+fname[i]) #读取第i张图片
        im=img.split()
        R=np.array(im[0])/255                #R通道
        row_1=int(R.shape[0]/2)-50
        row_2=int(R.shape[0]/2)+50
        con_1=int(R.shape[1]/2)-50
        con_2=int(R.shape[1]/2)+50
        R=R[row_1:row_2,con_1:con_2]
        G=np.array(im[1])/255                #G通道
        G=G[row_1:row_2,con_1:con_2]
        B=np.array(im[2])/255                #B通道
        B=B[row_1:row_2,con_1:con_2]
        #构造X
        png_name=fname[i]
        X[i]=png_name.split("_")[0]
        #构造Y
        png_name=fname[i]
        Y[i]=png_name.split("_")[0]
        #建模及计算
        from sklearn.model_selection import train_test_split
        x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=4)
        import sklearn.svm as svm
        from sklearn.svm import SVC
        clf = svm.SVC(kernel='linear') 
        clf.fit(x_train,y_train)
        rv=clf.score(x_train, y_train);
        y1=clf.predict(x_test)
        r=y1-y_test
        rs=len(r[r==0])/len(y1)
 
 
 
    return (rv,rs)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值