大数据分析技术

陈清华、田启明、施郁文等

目录

  • 课程简介
    • ● 课程简介
  • 环境准备
    • ● Anaconda环境安装与使用
    • ● Pycharm环境安装
    • ● 常用第三方包的安装与配置
  • 项目一 电影数据统计
    • ● 任务简介
    • ● 数据获取
    • ● 数据解析
    • ● 数据分析
    • ● 数据可视化
    • ● 课堂思政:新型冠状病毒疫情分析与可视化
    • ● 课堂思政:中国工匠精神
  • 项目二 电影数据分析(回归)
    • ● 任务简介
    • ● 使用一元线性回归分析电影票房数据
    • ● 使用多项式回归分析电影票房数据
    • ● 使用多元线性回归分析电影票房数据
    • ● 课堂实训:工资分析
  • 项目三 爬取房产租赁数据
    • ● 任务简介
    • ● 电影数据爬取
    • ● 房产租赁数据爬取
    • ● 房产租赁数据统计
    • ● 课后实训:二手房数据爬取
    • ● 课堂思政:疫情数据的爬取与可视化
  • 项目四 房屋租赁数据分析与可视化
    • ● 任务简介
    • ● 使用箱形图展现租赁价格分布特征
    • ● 使用散点图展现房屋面积与租赁价格的关系
    • ● 使用饼图展现不同行政区域的可租赁房源占比
    • ● 使用折线图可视化房间数与租赁价格的关系
    • ● 使用热力图展现地理位置的影响
    • ● 课后实训:二手房数据分析
    • ● 课堂思政:疫情数据分析与可视化
  • 项目五 身高与体重数据分析(分类器)
    • ● 使用身高、体重数据进行性别分类
      • ● 使用逻辑回归进行性别分类
      • ● 使用朴素贝叶斯进行性别分类
      • ● 使用决策树模型进行性别分类
      • ● 使用支持向量机进行性别分类
    • ● 使用支持向量机进行肥胖程度分类
    • ● 课后实训: 身高体重数据分析(分类器)
  • 项目六 鸢尾花分类
    • ● 任务简介
    • ● 使用K近邻对鸢尾花进行分类
    • ● 使用随机森林对鸢尾花进行分类
    • ● 使用神经网络对鸢尾花进行分类
  • 项目七 电影评分数据分析(聚类)
    • ● 任务简介
    • ● 使用BDSCAN确定质心个数
    • ● 使用K-Means对观影用户进行聚类
  • 项目八 人脸检测与人脸识别
    • ● 任务简介
    • ● 图像中的人脸检测
    • ● 视频中的人脸检测
    • ● 图像中的人脸识别
    • ● 视频中的人脸识别
    • ● 课后实训:眼睛与笑脸检测
    • ● 课堂思政:人工智能与弯道超车
  • 项目九 手写数字识别应用
    • ● 任务简介
    • ● 图像数据集准备
    • ● 使支持向量机识别手写数字
    • ● 使用神经网络识别手写数字
    • ● 课后实训:使用不同的机器学习方法识别数字手写体
  • 项目十  深度学习在行为识别中的应用
    • ● 任务简介
    • ● 使用卷积神经网络识别行为
    • ● 使用循环神经网络识别行为
    • ● 课后实训:电影评论数据分析
  • 项目十一 TensorFlow与神经网络
    • ● 任务简介
    • ● 使用单层神经网络预测花瓣宽度
    • ● 设计多层神经网络实现鸢尾花分类
    • ● 课后实训:卷积神经网络的实现与应用
  • 项目综合实训(17级学生案例)
    • ● 综合实训要求
    • ● 确定数据采集目标
    • ● 数据采集与预处理
    • ● 数据统计与分析
    • ● 数据分析与预测
    • ● 数据分类应用
    • ● 17级实训案例:二手车数据获取与市场分析
图像中的人脸识别
       人脸识别不同与人脸检测,人脸识别是指将一个需要识别的脸,和训练库中的某个人对应起来,判别出是谁。类似指纹识别一样的东西,完成识别功能。而人脸检测则是在一张图片上把人脸寻找出来,完成的是寻找是否有人脸的功能。

任务3.1:使用OpenCV实现图像中的人脸识别。

  • 步骤一:安装与配置包:OpenCV-contrib-Python。

  • 步骤二:准备训练集与测试集,并对训练集做好标记,要求每一个识别对像为一个文件夹,文件夹命名为对应名字。最后,将所有对象文件夹统一放置在“faces_dataset/train”文件夹下。

  • 步骤三:撰写代码训练模型,并使用测试集识别对象,代码参考示例如下:

 

  #!/usr/bin/Python

 # -*- coding: utf-8 -*-
 
import os
 
import cv2
 
import numpyas np
 
from sklearnimport preprocessing
 
# 为图像做标记,并将文字转化为数字,再训练
 
class LabelEncoder(object):
    
# 编码:文字到数字
    
def encode_labels(self, label_words):
        
self.le =  preprocessing.LabelEncoder()
        
self.le.fit(label_words)
    
# 数字转换成文字
      
def word_to_num(self, label_word):
        
return int(self.le.transform([label_word])[0])
    
# 数学到文字的转换
    
def num_to_word(self, label_num):
        
return self.le.inverse_transform([label_num])[0]
 
# 根据路径获取图片
 
def get_images_and_labels(input_path):
     label_words = []
    
# 循环读取所有图片
    
for root, dirs, files in os.walk(input_path):
        
for filename in (x for x in files if x.endswith('.jpg')):
            
filepath =  os.path.join(root, filename)
             label_words.append(
filepath.split('\\')[-2])
    
# 编码
    
images = []
     le =
LabelEncoder()
     le.encode_labels(label_words)
     labels = []
    
# 解析目录结构
    
for root, dirs, files in os.walk(input_path):
        
for filename in (x for x in files if x.endswith('.jpg')):
            
filepath =  os.path.join(root, filename)
            
# 读入灰度图
            
image = cv2.imread(filepath, 0)
            
# 获取标记
            
name = filepath.split('\\')[-2]
            
# 检测是否有人脸,并获得人脸数据
            
faces = faceCascade.detectMultiScale(image, 1.1, 2, minSize=(100,100))
            
# 输入每个人
            
for (x, y, w, h) in faces:
                  images.append(image[y:y+h, x:x+w])
                  labels.append(le.word_to_num(name))
    
return images, labels,  le
 
if __name__=='__main__':
     cascade_path =
"cascade_files/haarcascade_frontalface_alt.xml"
    
path_train = 'faces_dataset/train'
    
path_test = 'faces_dataset/test'
    
# 人脸检测训练结果读取
    
faceCascade = cv2.CascadeClassifier(cascade_path)
    
# 人脸识别方法初始化
    
recognizer =  cv2.face.LBPHFaceRecognizer_create()
    
# 获取训练数据集
    
images, labels, le  = get_images_and_labels(path_train)
    
# 模型训练
    
print("\n使用训练集对模型进行训练...")
    
print(labels)
     recognizer.train(images,  np.array(labels))
    
# 识别测试数据集
    
print('\n识别图像中的人脸...')
    
stop_flag = False
     for
root, dirs, files in os.walk(path_test):
        
for filename in (x for x in files if x.endswith('.jpg')):
            
filepath =  os.path.join(root, filename)
             predict_image = cv2.
imread(filepath,0)
            
# 人脸检测
            
faces = faceCascade.detectMultiScale(predict_image, 1.1,
                    
2, minSize=(100,100))
            
# 人脸识别
            
for (x, y, w, h) in faces:
                
# 识别
                
predicted_index,  conf = recognizer.predict(
                          predict_image[y:y+h, x:x+w])
                
# 文字到数字的转换
                
predicted_person  = le.num_to_word(predicted_index)
                
# 显示结果(彩色)
                
predict_image =  cv2.imread(filepath)
                 cv2.
putText(predict_image,  predicted_person,
                         (
10,60),  cv2.FONT_HERSHEY_SIMPLEX, 2, (0,255,255), 6)
                 cv2.
imshow("result", predict_image)
                 cv2.
waitKey(0)
                 stop_flag =
True
                 break
         if
stop_flag:
            
break

 
  • 步骤四:运行上述程序,运行结果如图所示。


任务3.2:保存模型为xml文件,并使用存储好的模型

    子知识点1:保存模型为xml文件。

 

# 模型训练
 
print("\n使用训练集对模型进行训练...")
 recognizer.train(images, np.array(labels))

 
recognizer.save('my_LBPHFaceRecognizer.xml')

 

子知识点2:读取并使用模型代码。

 # 读取训练模型

 print('\n读取模型...')
 
recognizer.read('my_LBPHFaceRecognizer.xml')

任务3.3:保存人脸识别的结果

cv2.imwrite("result-"+predicted_person+'.jpg', predict_image) 

以上代码说明了如何将已识别好的图像结果进行保存。保存结果如图所示。

                             

任务3.4:修改显示格式

 # 显示结果(彩色)

 predict_image = cv2.imread(filepath)
 cv2.rectangle(predict_image, (x, y), (x + w, y + h), (
0, 0, 255), 2)
 cv2.rectangle(predict_image, (x, y + h -
35), (x + w, y +  h), (0, 0, 255), 2)
 cv2.
putText(predict_image, predicted_person,
         (x +
6,y + h - 6),cv2.FONT_HERSHEY_DUPLEX,  1.5, (255,255,255), 2)
 cv2.
imshow("result", predict_image)
 cv2.
imwrite("result-" + predicted_person + '.jpg', predict_image)

将以上代码填入对应位置,运行结果如图所示。