1. 程式人生 > 其它 >opencv 手部識別_OpenCv的DNN模組學習記錄

opencv 手部識別_OpenCv的DNN模組學習記錄

技術標籤:opencv 手部識別

674ccd573fc2c67572698ad8c8e1c6d0.png

主要是介紹了opencv的dnn模組,本案例用的是imagenet的資料集,包含一千多種目標的分類,講道理,自己隨便去網上找了些圖片,準確度還蠻高的,大家可以用下面的程式碼試試。廢話不多說,直接上程式碼哈(精華都在註釋裡)。

# 匯入工具包
import utils_paths
import numpy as np
from cv2 import cv2

# 標籤檔案處理
rows = open("synset_words.txt").read().strip().split("n")
classes = [r[r.find(" ") + 1:].split(",")[0] for r in rows]

# Caffe所需配置檔案
# 讀取模型,一個網路模型檔案,一個引數檔案
net = cv2.dnn.readNetFromCaffe("bvlc_googlenet.prototxt",
	"bvlc_googlenet.caffemodel")

# 影象路徑
imagePaths = list(utils_paths.list_images("images/"))

# 影象資料預處理
image = cv2.imread(imagePaths[0])
resized = cv2.resize(image, (224, 224))
# 拿到了第一張啤酒的圖片resized

# image scalefactor size mean swapRB 
# cv2.dnn.blobFromImage 用於對輸入網路的影象進行預處理,主要是三部分,1.減均值 2.縮放 3.通道變換(可選),對於imageNet訓練集而言,三通道均值為(104, 117, 123)
blob = cv2.dnn.blobFromImage(resized, 1, (224, 224), (104, 117, 123))
# caffe 輸出四維的資料 batchsize channel h w 
print("First Blob: {}".format(blob.shape))

# 得到預測結果
net.setInput(blob)
preds = net.forward()
# print(preds) preds相當於一個數組,就是我們將圖片input網路後,網路吐出了一個記錄了1000多個種類得分的陣列

# 排序,取分類可能性最大的
idx = np.argsort(preds[0])[::-1][0]
text = "Label: {}, {:.2f}%".format(classes[idx],
	preds[0][idx] * 100)

# 將文字資訊新增到圖片上,引數分別是,圖片,文字,呈現位置,字型,大小,顏色,顏色厚度
cv2.putText(image, text, (5, 25),  cv2.FONT_HERSHEY_SIMPLEX,
	0.7, (0, 0, 255), 2)

# 顯示
cv2.imshow("Image", image)
cv2.waitKey(0)

# Batch資料製作
images = []

# 方法一樣,資料是一個batch
for p in imagePaths[2:]:
	image = cv2.imread(p)
	image = cv2.resize(image, (224, 224))
	images.append(image)

# blobFromImages函式,注意有s
blob = cv2.dnn.blobFromImages(images, 1, (224, 224), (104, 117, 123))
print("Second Blob: {}".format(blob.shape))

# 獲取預測結果
net.setInput(blob)
preds = net.forward()
for (i, p) in enumerate(imagePaths[1:]):
	image = cv2.imread(p)
	idx = np.argsort(preds[i])[::-1][0]
	text = "Label: {}, {:.2f}%".format(classes[idx],
		preds[i][idx] * 100)
	cv2.putText(image, text, (5, 25),  cv2.FONT_HERSHEY_SIMPLEX,
		0.7, (0, 0, 255), 2)
	cv2.imshow("Image", image)
	cv2.waitKey(0)

==============================

==============================

github依舊在抽風,模型檔案暫時無法上傳。。。