tf+cv HOG+SVM行人檢測。
機器學習需要:
1.通過視訊擷取樣本收集,用視訊分解成圖檔的方式進行樣本收集
2.特征,待檢測目标的特征。Haar+adaboost(強分類器,弱分類器,node節點)人臉識别。HAAR特征=白色-黑色=整個區域權重-黑色權重=(p1-p2-p3+p4)*w
3.分類器訓練
4.訓練出來的預測和檢驗:訓練出來的特征是否有效
視訊分解成圖檔
import tensorflow as tf
import cv2
cap=cv2.VideoCapture("1.mp4")
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() #讀取每一幀圖檔 frame内容 flag是否讀取成功
fileName='image'+str(i)+'.jpg'
print(fileName)
if flag ==True
cv2.imwrite(fileName,frame,[cv2.IMWRITE_JPEG-QUALITY,100])
print(‘end’)
圖檔合成視訊
import cv2
img=cv2.imread('image1.jpg')
imgInfo=img.shape #擷取圖像info資訊
size=(imgInfo[1],imgInfo[0]) #分别是高度和寬度資訊
print(size)
videoWrite=cv2.VideoWriter('2.mp4',-1,5,size) #完成圖檔合成視訊,選擇一個解碼器,5幀,大小。完成寫入對象的建立
#視訊分解成圖檔,需要解碼和編碼
for i in range(1,11):
fileName="image+str(i)+".jpg"
img=cv2.imread(fileName)
VideoWrite.write(img) #寫入方法,編碼之前的資料
print(‘endl’)
*haar特征
像素經過運算之後得到某一個結果。具體值,向量,矩陣,多元矩陣
如何利用特征區分目标和分類? 目标和非目标
如何得到判決?機器學習
什麼是特征,如何利用特征進行判決,如何得到判決
Haar特征在cv中得到的三種類型,14個特征
講白色區域的像素之和。特征就是某一個區域中的像素運算
模闆滑動,縮放
adaboost分類器的結構,計算過程,xml檔案結構
兩級分類器 T1,T2 haar>T1 & haar>T2 ,一般分類器有15至20個。
adaboost訓練:
1.初始化權值分布,要全部相等 2.周遊判别門檻值 3.權重分布 4.權值分布update*
import cv2
import numpy as np
#1.ad兩個xml檔案,人臉,眼睛 2.loag jpg 3.haar gray 4.detec
face=cv2.CascadeClassfier(“haarcascade_frontalface_default.xml”) #xml檔案引入
eye=cv2.CascadeClassfier(“haarcascade_eye.xml”)
#2.load jpg
img=cv2.imread('face.jpg')
cv2.imshow('src',img)
#3.haar gray
gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
#4.DETECT
face.detectMultiScale(gray,1.3,5) #灰階圖檔資料,haar模闆縮放系數,目标大小最小不能小于5個像素
print('face=',len(faces)) #檢測目前人臉個數
#draw square,繪制人臉
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) #cv繪圖子產品,最後參數是線條寬度
roi_face=gray(y:y+h,x:x+w)#行資訊從Y開始到y+h,高度從X開始到X+w
roi_color=img[y:y+h;x:x+w] #彩色資料
eyes=eye.detectMultiScale(roi_face)#這裡參數必須是灰階圖像
print("eye+",len(eyes))
for(e_x,e_y,e_w,e_h) in eyes:
cv2.rectangle(roi_color,(e_x,e_y),(e_x+e_w,e_y+e_h),(0,255,0),2)
cv2.imshow("dst",img)
cv2.waitKey(0)
Hand Writing
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("./mnist/", one_hot=True)
import tensorflow as tf
# Parameters
learning_rate = 0.001
training_epochs = 30
batch_size = 100
display_step = 1
# Network Parameters
n_hidden_1 = 256 # 1st layer number of features
n_hidden_2 = 512 # 2nd layer number of features
n_input = 784 # MNIST data input (img shape: 28*28)
n_classes = 10 # MNIST total classes (0-9 digits)
# tf Graph input
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])
# Create model
def multilayer_perceptron(x, weights, biases):
# Hidden layer with RELU activation
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
layer_1 = tf.nn.relu(layer_1)
# Hidden layer with RELU activation
layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
layer_2 = tf.nn.relu(layer_2)
# layer_3 = tf.add(tf.matmul(layer_2, weights['h3']), biases['b3'])
# layer_3 = tf.nn.relu(layer_3)
#we can add dropout layer
# drop_out = tf.nn.dropout(layer_2, 0.75)
# Output layer with linear activation
out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
return out_layer
# Store layers weight & biases
weights = {
#you can change
'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
#'h3': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}
biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1])),
'b2': tf.Variable(tf.random_normal([n_hidden_2])),
#'b3': tf.Variable(tf.random_normal([n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_classes]))
}
# Construct model
pred = multilayer_perceptron(x, weights, biases)
# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
# Initializing the variables
init = tf.global_variables_initializer()
# Launch the graph
with tf.Session() as sess:
sess.run(init)
# Training cycle
for epoch in range(training_epochs):
avg_cost = 0.
total_batch = int(mnist.train.num_examples/batch_size)
# Loop over all batches
for i in range(total_batch):
batch_x, batch_y = mnist.train.next_batch(batch_size)
# Run optimization op (backprop) and cost op (to get loss value)
_, c = sess.run([optimizer, cost], feed_dict={x: batch_x,
y: batch_y})
# Compute average loss
avg_cost += c / total_batch
# Display logs per epoch step
if epoch % display_step == 0:
print("Epoch:", '%04d' % (epoch+1), "cost=", \
"{:.9f}".format(avg_cost))
print("Optimization Finished!")
# Test model
correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
# Calculate accuracy
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))