作者|Andre Ye
編譯|Flin
來源|towardsdatascience

通常,資料科學家會建立一個影像識別模型,觀察其準確性,如果足夠高,就表示作業完成了,自從我13歲開始學習機器學習,我就一直不明白這一點,為什么要花費所有的時間來建立最好的模型——只是為了滿足于一個數字?
在本文中,我將提供代碼并指導你如何通過構建與模型互動的拍照介面來真正完成專案,
安裝cv2(OpenCV)
我們將使用的影像庫是cv2,因為cv2不能在Kaggle這樣的在線平臺上作業,所以它必須在你的計算機上本地完成,然而,模型的權重仍然可以在Kaggle上進行訓練,以.h5檔案的形式下載(基于Keras/TensorFlow)并加載,
在Anaconda或命令提示符中鍵入
conda create -n opencv python=3.6
這將在Python版本3.6中創建一個名為opencv的新環境,可以用正在使用的任何版本替換它,

下一步,輸入
pip install opencv-python

你已經成功安裝了cv2! 現在你可以開始拍照了,
用CV2拍照
首先,匯入庫,
import cv2
接下來,我們必須創建一個視頻捕獲實體,你可以測驗實體是否能夠連接到你的相機(如果沒有,請檢查你的設定以確保應用程式可以訪問它),
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.com/building-an-image-taking-interface-application-for-your-image-recognition-model-973b121cc9d9
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方檔案:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/194799.html
標籤:其他
上一篇:PYTHON替代MATLAB在線性代數學習中的應用(使用Python輔助MIT 18.06 Linear Algebra學習)
