訂閱
糾錯
加入自媒體

使用Tensorflow+OpenCV構建會玩石頭剪刀布的AI

2020-06-09 11:37
磐創AI
關注

我使用了Python的OpenCV庫進行所有與相機相關的操作,所以這里的label指的是圖像屬于哪個類,根據標簽,圖像保存在適當的目錄中。ct和maxCt是用來保存圖像的起始索引和最終索引,剩下的是標準的OpenCV代碼,用于獲取網絡攝像頭源并將圖像保存到目錄中。需要注意的一點是,我所有的圖片維數都是300 x 300的。運行此目錄樹后,我的目錄樹如下所示。

C:.

├───paper

│ paper0.jpg

│ paper1.jpg

│ paper2.jpg

├───rock

│ rock0.jpg

│ rock1.jpg

│ rock2.jpg

└───scissor

scissor0.jpg

scissor1.jpg

scissor2.jpg

如果你引用的是Github存儲庫(https://github.com/HOD101s/RockPaperScissor-AI-) ,則getData.py會為你完成這項工作!預處理我們的數據我們需要使用圖像,而計算機可以識別數字,因此,我們將所有圖像轉換為它們各自的矢量表示,另外,我們的標簽尚待生成,由于已建立的標簽不能是文本,因此我使用shape_to_label字典為每個類手動構建了“獨熱編碼”表示。

DATA_PATH = sys.argv[1] # Path to folder containing data

shape_to_label = {'rock':np.array([1.,0.,0.,0.]),'paper':np.array([0.,1.,0.,0.]),'scissor':np.array([0.,0.,1.,0.]),'ok':np.array([0.,0.,0.,1.])}

arr_to_shape = {np.argmax(shape_to_label[x]):x for x in shape_to_label.keys()}

imgData = list()

labels = list()

for dr in os.listdir(DATA_PATH):

if dr not in ['rock','paper','scissor']:

continue

print(dr)

lb = shape_to_label[dr]

i = 0

for pic in os.listdir(os.path.join(DATA_PATH,dr)):

path = os.path.join(DATA_PATH,dr+'/'+pic)

img = cv2.imread(path)

imgData.append([img,lb])

imgData.append([cv2.flip(img, 1),lb]) #horizontally flipped image

imgData.append([cv2.resize(img[50:250,50:250],(300,300)),lb]) # zoom : crop in and resize

i+=3

print(i)

np.random.shuffle(imgData)

imgData,labels = zip(*imgData)

imgData = np.array(imgData)

labels = np.array(labels)

當我們根據類將圖像保存在目錄中時,目錄名用作標簽,該標簽使用shape_to_label字典轉換為獨熱表示。在我們遍歷系統中的文件以訪問圖像之后,cv2.imread()函數返回圖像的矢量表示。我們通過翻轉圖像并放大圖像來進行一些手動的數據增強,這增加了我們的數據集大小,而無需拍攝新照片,數據增強是生成數據集的關鍵部分。最后,圖像和標簽存儲在單獨的numpy數組中。cv2.imread()函數https://www.geeksforgeeks.org/python-opencv-cv2-imread-method/更多關于數據增強的信息。https://towardsdatascience.com/data-augmentation-for-deep-learning-4fe21d1a4eb9通過遷移學習建立我們的模型:在處理圖像數據時,有許多經過預訓練的模型可供使用,這些模型已經在具有數千個標簽的數據集上進行了訓練,由于這些模型通過其應用程序api的Tensorflow和Keras分布,我們可以使用這些模型,這使得在我們的應用程序中包含這些預先訓練的模型看起來很容易!

總之,遷移學習采用的是經過預訓練的模型,并且不包含進行最終預測的最終層,能夠區分這種情況下圖像中的特征,并將這些信息傳遞給我們自己的Dense神經網絡。為什么不訓練你自己的模型呢?完全取決于你!然而,使用遷移學習可以在很多時候使你的進步更快,從某種意義上說,你避免了重復造輪子。

<上一頁  1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

發表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續

暫無評論

暫無評論

    人工智能 獵頭職位 更多
    掃碼關注公眾號
    OFweek人工智能網
    獲取更多精彩內容
    文章糾錯
    x
    *文字標題:
    *糾錯內容:
    聯系郵箱:
    *驗 證 碼:

    粵公網安備 44030502002758號