计算机程序,不是经过人类直接指定的规则,而是经过自身运行,学习事物的规律,和事物间的关联。html
计算机程序所可以处理,只有数值和运算。python
计算机程序不过是一段存储在硬盘上的零一代码,运行时被读取进内存,CPU 根据代码转换成的指令来作一组特定的操做,让这些01数字经过逻辑电路进行若干运算后,生成计算结果。算法
要让一段程序了解客观世界变化万千的事物,则必须将这些事物数值化,将事物的变化和不一样事物之间的关联转化为运算。网络
当若干现实世界的事物转换为数值以后,计算机经过在这些数值之上的一系列运算来肯定它们之间的关系,再根据一个全集之中个体之间的相互关系,来肯定某个个体在总体(全集)中的位置。机器学习
举例,我说“苹果”的时候,有些人首先想到的不是苹果,而是乔帮主创立的科技公司。ide
可是,我继续说:“苹果必定要生吃,蒸熟了再吃就不脆了。”——在这句话里,“苹果”一词肯定无疑指的是水果,而不是公司。学习
由于在咱们的知识库里,都知道水果能够吃,可是公司不能吃。出如今同一句话中的 “吃”对“苹果”起到了限定做用——这是人类的理解。ui
对于计算机, “苹果”被输入进去的时候,就被转化为一个数值 Va。spa
通过计算,这个数值和对应“吃”的数值 Ve 产生了某种直接的关联,而同时和 Ve 产生关联的还有若干数值,它们对应的概念多是“香蕉”(Vb)、“菠萝”(Vp)、“猕猴桃”(Vc)……3d
那么据此,计算机就会发现 Va、Vb、Vp、Vc 之间的某些关联(怎么利用这些关联,就要看具体的处理需求了)。
- 说到数值,你们可能本能的想到 int、double、 float……但实际上,若是将一个语言要素对应成一个标量的话,太容易出现两个本来相差甚远的概念通过简单运算相等的状况。
假设“苹果“被转化为2,而“香蕉”被转化为4,难道说两个苹果等于一个香蕉吗?
所以,通常在处理时会将天然语言转化成 n 维向量。只要转化方式合理,规避向量之间由于简单运算而引发歧义的状况仍是比较容易的。
若是要把小猫变成一个基于机器学习模型的(Model-Based) 计算机程序,猫妈妈该怎么作呢?
猫妈妈应该这样作,应该给小猫看一些照片,并告诉小咪咪,有些是老鼠,有些不是,好比下面这些:
而后小猫经过对比发现:老鼠的耳朵是圆的,别的动物要么没耳朵,要么不是圆形耳朵;老鼠都有尾巴,比的动物有的有,有的没有;老鼠的鼻子是尖的,别的动物不必定是这样。
而后小猫就用本身学习到的:“老鼠是圆耳朵,有尾巴,尖鼻子的动物”的信念去抓老鼠,那么小猫就成了一个“老鼠分类器”。
小猫(在此处类比一个计算机程序)是机器(Machine),它成为“老鼠分类器“的过程,就叫作学习(Learning)。
猫妈妈给的那些照片是用于学习的数据(Data)。
猫妈妈告知要注意的几点,是这个分类器的特征(Feature)。
学习的结果——老鼠分类器——是一个模型(Model)。这个模型的类型多是逻辑回归,或者朴素贝叶斯,或者决策树……总之是一个分类模型。
小猫思考的过程就是算法(Algorithm)。
不管有监督学习,仍是无监督学习,都离不开这三要素。
计算机视觉=图像处理+机器学习。图像处理技术用于将图像处理为适合进入机器学习模型中的输入,机器学习则负责从图像中识别出相关的模式。
咱们从人脸识别的例子中理解计算机视觉和机器学习之间的关系。
计算机视觉须要用到大量的图片数据,除非本身自己有数据源,否则样本数据的来源就显得很是重要
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更常常的称为网页追逐者),是一种按照必定的规则,自动的抓取万维网信息的程序或者脚本。
Python爬虫学习连接:http://python.jobbole.com/81332/
八爪鱼爬虫学习连接:http://www.bazhuayu.com/
从视频中能够获取大量的图片
import cv2
cap = cv2.VideoCapture("test.mp4")
# 获取一个视频打开cap 1 file name
isOpened = cap.isOpened
# 判断是否打开‘
print(isOpened)
fps = cap.get(cv2.CAP_PROP_FPS)
# 帧率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 获取宽度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 获取高度
print(fps,width,height)
i = 0
while(isOpened):
if i == 10:
break
else:
i = i+1
(flag,frame) = cap.read()
# 读取每一张 flag frame
fileName = 'image'+str(i)+'.jpg'
print(fileName)
if flag == True:
cv2.imwrite(fileName,frame,[cv2.IMWRITE_JPEG_QUALITY,100])
# 保存图片
print('end!')
复制代码
结果:
<built-in method isOpened of cv2.VideoCapture object at 0x1136ce610>
29.008016032064127 540 960
image1.jpg
image2.jpg
image3.jpg
image4.jpg
image5.jpg
image6.jpg
image7.jpg
image8.jpg
image9.jpg
image10.jpg
end!
复制代码
图像特征提取三大算法:HOG特征,LBP特征,Haar特征
(1)HOG特征
方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它经过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合 SVM分类器已经被普遍应用于图像识别中,尤为在行人检测中得到了极大的成功。须要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal 在2005的CVPR上提出的,而现在虽然有不少行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。
(2)LBP特征
LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具备旋转不变性和灰度不变性等显著的优势。它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用于纹理特征提取。并且,提取的特征是图像的局部的纹理特征;
(3)Haar特征
Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化状况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,因此只能描述特定走向(水平、垂直、对角)的结构。
三大图像特征对比的详细介绍:http://dataunion.org/20584.html
opencv里面有内置的已经训练好的人脸分类器,可是仅限与对人脸进行检测,这里咱们若是要训练本身的人脸识别分类器的话,要利用这个分类器进行检测和捕捉人脸,而后才能实现识别。
里面存放这各类已经训练好的分类器,有眼睛,人脸,左右眼等等。