0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用計(jì)算機(jī)視覺(jué)技術(shù)識(shí)別棋子及其在棋盤(pán)上的位置

新機(jī)器視覺(jué) ? 來(lái)源:小白學(xué)視覺(jué) ? 作者:小白學(xué)視覺(jué) ? 2022-03-21 13:16 ? 次閱讀

本期我們將一起學(xué)習(xí)如何使用計(jì)算機(jī)視覺(jué)技術(shù)識(shí)別棋子及其在棋盤(pán)上的位置

我們利用計(jì)算機(jī)視覺(jué)技術(shù)和卷積神經(jīng)網(wǎng)絡(luò)(CNN)為這個(gè)項(xiàng)目創(chuàng)建分類算法,并確定棋子在棋盤(pán)上的位置。最終的應(yīng)用程序會(huì)保存整個(gè)圖像并可視化的表現(xiàn)出來(lái),同時(shí)輸出棋盤(pán)的2D圖像以查看結(jié)果。

01. 數(shù)據(jù)

我們對(duì)該項(xiàng)目的數(shù)據(jù)集有很高的要求,因?yàn)樗罱K會(huì)影響我們的實(shí)驗(yàn)結(jié)果。我們?cè)诰W(wǎng)上能找到的國(guó)際象棋數(shù)據(jù)集是使用不同的國(guó)際象棋集、不同的攝影機(jī)拍攝得到的,這導(dǎo)致我們創(chuàng)建了自己的數(shù)據(jù)集。我使用國(guó)際象棋和攝像機(jī)(GoPro Hero6 Black以“第一人稱視角”角度)生成了自定義數(shù)據(jù)集,這使我的模型更加精確。該數(shù)據(jù)集包含2406張圖像,分為13類(請(qǐng)參閱下文)。總結(jié):這花費(fèi)了我們很多時(shí)間,但是這使得訓(xùn)練圖像盡可能地接近在應(yīng)用程序中使用時(shí)所看到的圖像。

如何使用計(jì)算機(jī)視覺(jué)技術(shù)識(shí)別棋子及其在棋盤(pán)上的位置

自定義數(shù)據(jù)集的細(xì)分

為了構(gòu)建該數(shù)據(jù)集,我首先創(chuàng)建了capture_data.py,當(dāng)單擊S鍵時(shí),該視頻從視頻流中獲取一幀并將其保存。這個(gè)程序使我能夠無(wú)縫地更改棋盤(pán)上的棋子并一遍又一遍地捕獲棋盤(pán)的圖像,直到我建立了大量不同的棋盤(pán)配置為止。接下來(lái),我創(chuàng)建了create_data.py,以使用下一部分中討論的檢測(cè)技術(shù)將其裁剪為單獨(dú)小塊。最后,我通過(guò)將裁剪后的圖像分成帶標(biāo)簽的文件夾來(lái)對(duì)它們進(jìn)行分類。

02. 棋盤(pán)檢測(cè)

對(duì)于棋盤(pán)檢測(cè),我想做的事情比使用OpenCV函數(shù)findChessboardCorners復(fù)雜的多,但又不像CNN那樣高級(jí)。使用低級(jí)和中級(jí)計(jì)算機(jī)視覺(jué)技術(shù)來(lái)查找棋盤(pán)的特征,然后將這些特征轉(zhuǎn)換為外邊界和64個(gè)獨(dú)立正方形的坐標(biāo)。該過(guò)程以Canny邊緣檢測(cè)和Hough變換生成的相交水平線、垂直線的交點(diǎn)為中心。層次聚類用于按距離對(duì)交叉點(diǎn)進(jìn)行分組,并對(duì)各組取平均值以創(chuàng)建最終坐標(biāo)(請(qǐng)參見(jiàn)下文)。

如何使用計(jì)算機(jī)視覺(jué)技術(shù)識(shí)別棋子及其在棋盤(pán)上的位置

完整的棋盤(pán)檢測(cè)過(guò)程

03. 棋盤(pán)分類

項(xiàng)目伊始,我們想使用Keras / TensorFlow創(chuàng)建CNN模型并對(duì)棋子進(jìn)行分類。但是,在創(chuàng)建數(shù)據(jù)集之后,僅考慮CNN的大小,單靠CNN就無(wú)法獲得想要的結(jié)果。為了克服這一障礙,我利用了ImageDataGenerator和transfer learning,它增加了我的數(shù)據(jù)并使用了其他預(yù)訓(xùn)練的模型作為基礎(chǔ)。

創(chuàng)建CNN模型

為了使用GPU,我在云中創(chuàng)建并訓(xùn)練了CNN模型,從而大大減少了訓(xùn)練時(shí)間。快速提示:Google Colab是使用GPU快速入門(mén)的簡(jiǎn)便方法。為了提高數(shù)據(jù)的有效性,我使用了ImageDataGenerator來(lái)擴(kuò)展原始圖像并將模型暴露給不同版本的數(shù)據(jù)。ImageDataGenerator函數(shù)針對(duì)每個(gè)時(shí)期隨機(jī)旋轉(zhuǎn),重新縮放和翻轉(zhuǎn)(水平)訓(xùn)練數(shù)據(jù),從本質(zhì)上創(chuàng)建了更多數(shù)據(jù)。盡管還有更多的轉(zhuǎn)換選項(xiàng),但這些轉(zhuǎn)換選項(xiàng)對(duì)該項(xiàng)目最有效。

from keras.preprocessing.image import ImageDataGeneratordatagen = ImageDataGenerator(        rotation_range=5,        rescale=1./255,        horizontal_flip=True,        fill_mode='nearest')test_datagen = ImageDataGenerator(rescale=1./255)train_gen = datagen.flow_from_directory(    folder + '/train',    target_size = image_size,    batch_size = batch_size,    class_mode = 'categorical',    color_mode = 'rgb',    shuffle=True)test_gen = test_datagen.flow_from_directory(    folder + '/test',    target_size = image_size,    batch_size = batch_size,    class_mode = 'categorical',    color_mode = 'rgb',    shuffle=False)

我們沒(méi)有從頭開(kāi)始訓(xùn)練模型,而是通過(guò)利用預(yù)先訓(xùn)練的模型并添加了使用我的自定義數(shù)據(jù)集訓(xùn)練的頂層模型來(lái)實(shí)現(xiàn)轉(zhuǎn)移學(xué)習(xí)。我遵循了典型的轉(zhuǎn)移學(xué)習(xí)工作流程:

1.從先前訓(xùn)練的模型(VGG16)中獲取圖層。

from keras.applications.vgg16 import VGG16model = VGG16(weights='imagenet')model.summary()

2.凍結(jié)他們,以避免破壞他們?cè)谟?xùn)練回合中包含的任何信息。

3.在凍結(jié)層的頂部添加了新的可訓(xùn)練層。

from keras.models import Sequentialfrom keras.layers import Dense, Conv2D, MaxPooling2D, Flattenfrom keras.models import Modelbase_model = VGG16(weights='imagenet', include_top=False, input_shape=(224,224,3))  # Freeze convolutional layers from VGG16for layer in base_model.layers:    layer.trainable = False# Establish new fully connected blockx = base_model.outputx = Flatten()(x) x = Dense(500, activation='relu')(x) x = Dense(500, activation='relu')(x)predictions = Dense(13, activation='softmax')(x)# This is the model we will trainmodel = Model(inputs=base_model.input, outputs=predictions)model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['categorical_accuracy'])

4.在自定義數(shù)據(jù)集上訓(xùn)練新層。

epochs = 10history = model.fit(    train_gen,     epochs=epochs,    verbose = 1,    validation_data=test_gen)model.save_weights('model_VGG16.h5')

當(dāng)我們使用VGG16或VGG19作為預(yù)訓(xùn)練模型創(chuàng)建模型時(shí),由于驗(yàn)證精度更高,因此選擇了使用VGG16的模型。另外,最佳epochs 是10。任何大于10的數(shù)均不會(huì)使驗(yàn)證準(zhǔn)確性的提高,也不會(huì)增加訓(xùn)練與驗(yàn)證準(zhǔn)確性之間的差異。總結(jié):轉(zhuǎn)移學(xué)習(xí)使我們可以充分利用深度學(xué)習(xí)在圖像分類中的優(yōu)勢(shì),而無(wú)需大型數(shù)據(jù)集。

04. 結(jié)果

為了更好地可視化驗(yàn)證準(zhǔn)確性,我創(chuàng)建了模型預(yù)測(cè)的混淆矩陣。通過(guò)此圖表,可以輕松評(píng)估模型的優(yōu)缺點(diǎn)。優(yōu)點(diǎn):空-準(zhǔn)確率為99%,召回率為100%;白棋和黑棋(WP和BP)-F1得分約為95%。劣勢(shì):白騎士(WN)-召回率高(98%),但準(zhǔn)確性卻很低(65%);白主教(WB)-召回率最低,為74%。

如何使用計(jì)算機(jī)視覺(jué)技術(shù)識(shí)別棋子及其在棋盤(pán)上的位置

測(cè)試數(shù)據(jù)的混淆矩陣

05. 應(yīng)用

該應(yīng)用程序的目標(biāo)是使用CNN模型并可視化每個(gè)步驟的性能。我們創(chuàng)建了cv_chess.py,它清楚地顯示了步驟,并創(chuàng)建了cv_chess_functions.py,它顯示了每個(gè)步驟的詳細(xì)信息。此應(yīng)用程序保存實(shí)時(shí)視頻流中的原始幀,每個(gè)正方形的64個(gè)裁剪圖像以及棋盤(pán)的最終2D圖像。

print('Working...')        # Save the frame to be analyzed        cv2.imwrite('frame.jpeg', frame)        # Low-level CV techniques (grayscale & blur)        img, gray_blur = read_img('frame.jpeg')        # Canny algorithm        edges = canny_edge(gray_blur)        # Hough Transform        lines = hough_line(edges)        # Separate the lines into vertical and horizontal lines        h_lines, v_lines = h_v_lines(lines)        # Find and cluster the intersecting        intersection_points = line_intersections(h_lines, v_lines)        points = cluster_points(intersection_points)        # Final coordinates of the board        points = augment_points(points)        # Crop the squares of the board a organize into a sorted list        x_list = write_crop_images(img, points, 0)        img_filename_list = grab_cell_files()        img_filename_list.sort(key=natural_keys)        # Classify each square and output the board in Forsyth-Edwards Notation (FEN)        fen = classify_cells(model, img_filename_list)        # Create and save the board image from the FEN        board = fen_to_image(fen)        # Display the board in ASCII        print(board)# Display and save the chessboard image        board_image = cv2.imread('current_board.png')        cv2.imshow('current board', board_image)        print('Completed!')

原文標(biāo)題:基于計(jì)算機(jī)視覺(jué)的棋盤(pán)圖像識(shí)別

文章出處:【微信公眾號(hào):機(jī)器視覺(jué)智能檢測(cè)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6713

    瀏覽量

    88301
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7168

    瀏覽量

    87147
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1075

    瀏覽量

    40266

原文標(biāo)題:基于計(jì)算機(jī)視覺(jué)的棋盤(pán)圖像識(shí)別

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    讓機(jī)器“看見(jiàn)”—計(jì)算機(jī)視覺(jué)入門(mén)及實(shí)戰(zhàn) 第二期基礎(chǔ)技術(shù)

    過(guò)優(yōu)異成績(jī)。其主要的興趣是關(guān)注人工智能特別是計(jì)算機(jī)視覺(jué)技術(shù)如何從技術(shù)、產(chǎn)品和商業(yè)角度真實(shí)世界中大規(guī)模落地。主題簡(jiǎn)介及亮點(diǎn):本次直播,講者將
    發(fā)表于 09-04 17:56

    單片機(jī)控制的13*13路棋盤(pán)能夠自動(dòng)感知棋子位置棋盤(pán)棋子走勢(shì)

    要求做出一個(gè)單片機(jī)控制的13*13路棋盤(pán),能夠自動(dòng)感知棋子位置棋盤(pán)棋子走勢(shì),并具備一些五子棋對(duì)弈功能,此電子
    發(fā)表于 04-10 22:27

    計(jì)算機(jī)視覺(jué)及其焊接中的應(yīng)用

    簡(jiǎn)要闡述了計(jì)算機(jī)視覺(jué)的基本原理、系統(tǒng)結(jié)構(gòu)和計(jì)算機(jī)視覺(jué)的基本處理方法,并著重講解了焊接自動(dòng)化領(lǐng)域的應(yīng)用情況。關(guān)鍵詞:
    發(fā)表于 07-18 10:19 ?9次下載

    基于OpenCV的計(jì)算機(jī)視覺(jué)技術(shù)實(shí)現(xiàn)

    基于OpenCV的計(jì)算機(jī)視覺(jué)技術(shù)實(shí)現(xiàn)OpencV是用來(lái)實(shí)現(xiàn)計(jì)算機(jī)視覺(jué)相關(guān)技術(shù)的開(kāi)放源碼工作庫(kù),是
    發(fā)表于 11-23 21:06 ?0次下載
    基于OpenCV的<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b><b class='flag-5'>技術(shù)</b>實(shí)現(xiàn)

    計(jì)算機(jī)視覺(jué)講義

    計(jì)算機(jī)視覺(jué)講義:機(jī)器視覺(jué)是研究用計(jì)算機(jī)來(lái)模擬生物外顯或宏觀視覺(jué)功能的科學(xué)和技術(shù).機(jī)器
    發(fā)表于 03-19 08:08 ?0次下載

    計(jì)算機(jī)視覺(jué)與機(jī)器視覺(jué)區(qū)別

     “計(jì)算機(jī)視覺(jué)”,是指用計(jì)算機(jī)實(shí)現(xiàn)人的視覺(jué)功能,對(duì)客觀世界的三維場(chǎng)景的感知、識(shí)別和理解。計(jì)算機(jī)
    的頭像 發(fā)表于 12-08 09:27 ?1.2w次閱讀

    為什么說(shuō)現(xiàn)在是計(jì)算機(jī)視覺(jué)最好的時(shí)代?

    過(guò)程極具挑戰(zhàn)性,光是隔離圖像并進(jìn)行識(shí)別的簡(jiǎn)單概念就花費(fèi)了研究人員大量的時(shí)間。經(jīng)過(guò)多年的努力,使用計(jì)算機(jī)視覺(jué)軟件和硬件算法部署深度學(xué)習(xí)技術(shù)的企業(yè)
    的頭像 發(fā)表于 07-29 18:27 ?2148次閱讀

    使用計(jì)算機(jī)視覺(jué)和人工智能來(lái)識(shí)別X射線中的計(jì)算機(jī)模型

    這些模型使用計(jì)算機(jī)視覺(jué)和人工智能(AI)分析胸部X射線圖像。它可以對(duì)肉眼通常無(wú)法識(shí)別的信息進(jìn)行分類,并有助于診斷。
    發(fā)表于 05-29 11:07 ?891次閱讀

    計(jì)算機(jī)視覺(jué)技術(shù)簡(jiǎn)介

    由于“計(jì)算機(jī)視覺(jué)”反映了對(duì)視覺(jué)環(huán)境及其上下文的相對(duì)理解,因此,一些科學(xué)家認(rèn)為,該領(lǐng)域?yàn)槿斯ぶ悄茴I(lǐng)域鋪平了道路。那么什么是計(jì)算機(jī)
    發(fā)表于 07-11 11:24 ?4351次閱讀

    剖析計(jì)算機(jī)視覺(jué)識(shí)別簡(jiǎn)史

    最近,物體識(shí)別已經(jīng)成為計(jì)算機(jī)視覺(jué)和 AI 最令人激動(dòng)的領(lǐng)域之一。即時(shí)地識(shí)別出場(chǎng)景中所有的物體的能力似乎已經(jīng)不再是秘密。隨著卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)的發(fā)展,以及大型訓(xùn)練數(shù)據(jù)集和高級(jí)
    的頭像 發(fā)表于 04-30 10:14 ?2597次閱讀
    剖析<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b><b class='flag-5'>識(shí)別</b>簡(jiǎn)史

    計(jì)算機(jī)視覺(jué)識(shí)別是如何工作的?

    計(jì)算機(jī)視覺(jué)識(shí)別是一種人工智能技術(shù),旨在使計(jì)算機(jī)系統(tǒng)從數(shù)字圖像、視頻等視覺(jué)信息中
    的頭像 發(fā)表于 02-09 13:41 ?3248次閱讀

    使用計(jì)算機(jī)視覺(jué)進(jìn)行電梯乘客計(jì)數(shù)

    電子發(fā)燒友網(wǎng)站提供《使用計(jì)算機(jī)視覺(jué)進(jìn)行電梯乘客計(jì)數(shù).zip》資料免費(fèi)下載
    發(fā)表于 06-12 15:35 ?0次下載
    使<b class='flag-5'>用計(jì)算機(jī)</b><b class='flag-5'>視覺(jué)</b>進(jìn)行電梯乘客計(jì)數(shù)

    機(jī)器視覺(jué)計(jì)算機(jī)視覺(jué)的區(qū)別

    機(jī)器視覺(jué)計(jì)算機(jī)視覺(jué)的區(qū)別 機(jī)器視覺(jué)計(jì)算機(jī)視覺(jué)是兩個(gè)相關(guān)但不同的概念。雖然許多人使用這兩個(gè)術(shù)語(yǔ)
    的頭像 發(fā)表于 08-09 16:51 ?1753次閱讀

    計(jì)算機(jī)視覺(jué)的工作原理和應(yīng)用

    計(jì)算機(jī)視覺(jué)(Computer Vision,簡(jiǎn)稱CV)是一門(mén)跨學(xué)科的研究領(lǐng)域,它利用計(jì)算機(jī)和數(shù)學(xué)算法來(lái)模擬人類視覺(jué)系統(tǒng)對(duì)圖像和視頻進(jìn)行識(shí)別、
    的頭像 發(fā)表于 07-10 18:24 ?1057次閱讀

    機(jī)器視覺(jué)計(jì)算機(jī)視覺(jué)有什么區(qū)別

    機(jī)器視覺(jué)計(jì)算機(jī)視覺(jué)是兩個(gè)密切相關(guān)但又有所區(qū)別的概念。 一、定義 機(jī)器視覺(jué) 機(jī)器視覺(jué),又稱為計(jì)算機(jī)
    的頭像 發(fā)表于 07-16 10:23 ?279次閱讀