使用Tensorflow+OpenCV構(gòu)建會玩石頭剪刀布的AI
我使用了Python的OpenCV庫進行所有與相機相關(guān)的操作,所以這里的label指的是圖像屬于哪個類,根據(jù)標簽,圖像保存在適當?shù)哪夸浿。ct和maxCt是用來保存圖像的起始索引和最終索引,剩下的是標準的OpenCV代碼,用于獲取網(wǎng)絡(luò)攝像頭源并將圖像保存到目錄中。需要注意的一點是,我所有的圖片維數(shù)都是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會為你完成這項工作!預處理我們的數(shù)據(jù)我們需要使用圖像,而計算機可以識別數(shù)字,因此,我們將所有圖像轉(zhuǎn)換為它們各自的矢量表示,另外,我們的標簽尚待生成,由于已建立的標簽不能是文本,因此我使用shape_to_label字典為每個類手動構(gòu)建了“獨熱編碼”表示。
DATA_PATH = sys.a(chǎn)rgv[1] # Path to folder containing data
shape_to_label = {'rock':np.a(chǎn)rray([1.,0.,0.,0.]),'paper':np.a(chǎn)rray([0.,1.,0.,0.]),'scissor':np.a(chǎn)rray([0.,0.,1.,0.]),'ok':np.a(chǎn)rray([0.,0.,0.,1.])}
arr_to_shape = {np.a(chǎn)rgmax(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.a(chǎn)ppend([img,lb])
imgData.a(chǎn)ppend([cv2.flip(img, 1),lb]) #horizontally flipped image
imgData.a(chǎn)ppend([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.a(chǎn)rray(imgData)
labels = np.a(chǎn)rray(labels)
當我們根據(jù)類將圖像保存在目錄中時,目錄名用作標簽,該標簽使用shape_to_label字典轉(zhuǎn)換為獨熱表示。在我們遍歷系統(tǒng)中的文件以訪問圖像之后,cv2.imread()函數(shù)返回圖像的矢量表示。我們通過翻轉(zhuǎn)圖像并放大圖像來進行一些手動的數(shù)據(jù)增強,這增加了我們的數(shù)據(jù)集大小,而無需拍攝新照片,數(shù)據(jù)增強是生成數(shù)據(jù)集的關(guān)鍵部分。最后,圖像和標簽存儲在單獨的numpy數(shù)組中。cv2.imread()函數(shù)https://www.geeksforgeeks.org/python-opencv-cv2-imread-method/更多關(guān)于數(shù)據(jù)增強的信息。https://towardsdatascience.com/data-augmentation-for-deep-learning-4fe21d1a4eb9通過遷移學習建立我們的模型:在處理圖像數(shù)據(jù)時,有許多經(jīng)過預訓練的模型可供使用,這些模型已經(jīng)在具有數(shù)千個標簽的數(shù)據(jù)集上進行了訓練,由于這些模型通過其應用程序api的Tensorflow和Keras分布,我們可以使用這些模型,這使得在我們的應用程序中包含這些預先訓練的模型看起來很容易!
總之,遷移學習采用的是經(jīng)過預訓練的模型,并且不包含進行最終預測的最終層,能夠區(qū)分這種情況下圖像中的特征,并將這些信息傳遞給我們自己的Dense神經(jīng)網(wǎng)絡(luò)。為什么不訓練你自己的模型呢?完全取決于你!然而,使用遷移學習可以在很多時候使你的進步更快,從某種意義上說,你避免了重復造輪子。

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
推薦專題
- 1 AI 眼鏡讓百萬 APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話語權(quán)
- 3 深度報告|中國AI產(chǎn)業(yè)正在崛起成全球力量,市場潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級獨角獸:獲上市公司戰(zhàn)投,干人形機器人
- 5 國家數(shù)據(jù)局局長劉烈宏調(diào)研格創(chuàng)東智
- 6 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 7 百億AI芯片訂單,瘋狂傾銷中東?
- 8 Robotaxi新消息密集釋放,量產(chǎn)元年誰在領(lǐng)跑?
- 9 格斗大賽出圈!人形機器人致命短板曝光:頭腦過于簡單
- 10 一文看懂視覺語言動作模型(VLA)及其應用