做者|Andre Ye
編譯|Flin
來源|towardsdatasciencepython
一般,數據科學家會創建一個圖像識別模型,觀察其準確性,若是足夠高,就表示工做完成了。自從我13歲開始學習機器學習,我就一直不明白這一點。爲何要花費全部的時間來創建最好的模型——只是爲了知足於一個數字?shell
在本文中,我將提供代碼並指導你如何經過構建與模型交互的拍照接口來真正完成項目。數組
咱們將使用的圖像庫是cv2。由於cv2不能在Kaggle這樣的在線平臺上工做,因此它必須在你的計算機上本地完成。然而,模型的權重仍然能夠在Kaggle上進行訓練,以.h5文件的形式下載(基於Keras/TensorFlow)並加載。網絡
在Anaconda或命令提示符中鍵入app
conda create -n opencv python=3.6
這將在Python版本3.6中建立一個名爲opencv的新環境,能夠用正在使用的任何版本替換它。機器學習
下一步,輸入ide
pip install opencv-python
你已經成功安裝了cv2! 如今你能夠開始拍照了。學習
首先,導入庫。測試
import cv2
接下來,咱們必須建立一個視頻捕獲實例。你能夠測試實例是否可以鏈接到你的相機(若是沒有,請檢查你的設置以確保應用程序能夠訪問它)。ui
cap = cv2.VideoCapture(0) if not (cap.isOpened()): print("Video device not connected.")
最後,是時候拍照了。若是要控制拍攝照片的時間,第一行將指定任意變量和輸入。除非輸入了某些內容(如按「回車」),而後下一行開始拍照,不然程序沒法繼續。拍攝圖像時,你可能會看到網絡攝像頭指示燈很快出現。第三行關閉鏈接,第四行銷燬訪問相機的全部實例。
arb = input('Press enter to take picture.') ret, frame = cap.read() cap.release() cv2.destroyAllWindows()
圖像中的數據存儲在frame
中。能夠使用如下代碼將其轉換爲數組:
cv2_im = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
調用cv2_im.shape
時,輸出爲(480640,3)。所以,圖像(對於個人相機)是480×640像素(3表示「深度」, 每一個像素中有三個值說明建立最終像素顏色須要包含紅色、綠色和藍色)。
如今圖像已轉換爲數組,matplotlib的imshow()能夠顯示它。
import matplotlib.pyplot as plt plt.imshow(cv2_im) plt.show()
完整代碼:
import cv2 import matplotlib.pyplot as plt cap = cv2.VideoCapture(10) if not (cap.isOpened()): print("Video device unconnected.") arb = input('Press enter to take picture.') ret, frame = cap.read() cap.release() cv2.destroyAllWindows() cv2_im = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) plt.imshow(cv2_im) plt.show()
卷積神經網絡只接受固定大小的圖像,例如(100,100,3)。有幾種方法能夠作到這一點。
爲了保持圖像的比例長度,能夠嘗試裁剪圖像。
通常語法是:
plt.imshow(cv2_im[y_upper_bound:y_lower_bound,x_lower_bound:x_higher_bound])
其中「upper」和「lower」由圖像上的位置肯定(y
的「upper」表示圖像的上方,x
的「upper」表示圖像的右側)。
例如,
plt.imshow(cv2_im[100:400,100:400])
這裏把照片裁剪成正方形。
可是,尺寸仍然是300×300。爲了解決這個問題,咱們將再次使用Pillow:
pil_image = Image.fromarray(cv2_im[100:400,100:400]) width = 100 height = 100 pil_image = pil_image.resize((width,height), Image.ANTIALIAS)
NumPy自動將Pillow圖像轉換爲數組。
import numpy as np cv2_im_new = np.array(pil_image)
查看新圖像:
plt.imshow(cv2_im_new)
好多了!圖像的新形狀是(100,100,3), 很是適合咱們的模型。
如今咱們有了NumPy數組,只需將其傳遞到模型中便可。
model.predict(cv2_im_new)
基於此,經過一些手動編碼來標記圖像的真實標籤,能夠在title中標記它們:
plt.imshow(cv2_im_new) plt.title('Hand Gesture: '+classification)
謝謝閱讀!
在本教程中,你學習瞭如何實現一個簡單的拍照界面,以查看你的機器學習模型的實際應用程序。
原文連接:https://towardsdatascience.co...
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/