計算機程序,不是經過人類直接指定的規則,而是經過自身運行,學習事物的規律,和事物間的關聯。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裏面有內置的已經訓練好的人臉分類器,可是僅限與對人臉進行檢測,這裏咱們若是要訓練本身的人臉識別分類器的話,要利用這個分類器進行檢測和捕捉人臉,而後才能實現識別。
裏面存放這各類已經訓練好的分類器,有眼睛,人臉,左右眼等等。