版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第如何使用Python在2秒內(nèi)評估國際象棋位置詳解#Cropeachsqureofthechessboardandsavethe64grayscaleimages.Eachimage
#willalignwithaspecificsquareonthechessboard.
foriinrange(8):
forjinrange(8):
im1=im.crop(
(j*(box_width),
i*(box_width),
(j+1)*(box_width-0),
(i+1)*(box_width-0)))
im1.save('pieces//'+str(nn)+'.png')
n+=1
n=myList[i][j]
image=cv2.imread('pieces//'+str(nn)+'.png')
#countthenumberofblackpixelsperimage
BlackPiece=np.sum(image==0)
BlackPixelList.append(BlackPiece)
#countthenumberofwhitepixelsperimage
WhitePiece=np.sum(image==255)
WhitePixelList.append(WhitePiece)
nn+=1
下面的代碼旨在識別每個棋子的黑白像素數(shù)。我已經(jīng)從上面創(chuàng)建了一個包含黑白像素數(shù)量的列表。
對于每種顏色,我執(zhí)行以下操作:
保留唯一的像素值以升序?qū)α斜磉M行排序,并保留六個最大的像素值每個像素值將與BPieces/Wpieces中指定的部分對齊
#Filteroutvaluesequal0andkeepuniquepixelvalues
#sortthelistinascendingorder
#keepthesixlargestpixelvalues
BlackPixelList=set(list(filter(lambdax:x0,BlackPixelList)))
BlackPixelList=list(BlackPixelList)
BlackPixelList.sort()
BlackPixelList=BlackPixelList[-6:]
WhitePixelList=set(list(filter(lambdax:x0,WhitePixelList)))
WhitePixelList=list(WhitePixelList)
WhitePixelList.sort()
WhitePixelList=WhitePixelList[-6:]
#Createadictionaryforeachcolorandassign
#pixelvaluetoeachchesspiece,piecetype,
#andpiececolor(False=Black,True=White).
BlackPieces={}
fori,valinenumerate(BPieces):
BlackPieces[val]=(BlackPixelList[i],BPieceType[i],False)
WhitePieces={}
fori,valinenumerate(WPieces):
WhitePieces[val]=(WhitePixelList[i],WPieceType[i],True)
第7步:為每個棋子分配像素數(shù)。
如果這是第一次運行代碼,請使用步驟6輸出為BlackPieces分配黑色像素數(shù),為WhitePieces分配白色像素數(shù)。下面的代碼以我的顯示器為例。
BlackPieces=\
{'BlackKing':(5028,6,False),
'BlackBishop':(5052,3,False),
'BlackPawn':(5679,1,False),
'BlackRook':(6489,4,False),
'BlackQueen':(6495,5,False),
'BlackKnight':(7623,2,False)}
WhitePieces=\
{'WhiteBishop':(2520,3,True),
'WhiteQueen':(3039,5,True),
'WhiteRook':(3741,4,True),
'WhitePawn':(3933,1,True),
'WhiteKing':(4410,6,True),
'WhiteKnight':(6057,2,True)}
BlackPixelValues=[i[0]foriinlist(BlackPieces.values())]
WhitePixelValues=[i[0]foriinlist(WhitePieces.values())]
第8步:設(shè)置評估棋盤的函數(shù)。
我們已經(jīng)完成了所有的設(shè)置步驟。我們首先將stockfish的等級設(shè)置為3000ELO,并將深度設(shè)置為15。你可以將深度設(shè)置為26,但這會顯著增加處理時間。然后我們創(chuàng)建evaluate_position函數(shù)。該函數(shù)將:
截屏將彩色圖像轉(zhuǎn)換為灰度并保存圖像確定每個棋子在棋盤上的位置,并使用國際象棋庫將這些棋子放置在棋盤上的適當位置將該回合分配給指定的顏色。默認是輪到白棋。根據(jù)國際象棋庫中的位置分配stockfish中的FEN位置生成請求的輸出
stockfish.set_elo_rating(3000)
stockfish.set_depth(15)
defevaluate_position(white_turn=True,board_flipped=is_board_flipped):
start_time=time.time()
#takeascreenshotoftheboard
take_screenshot('image1.png')
image=cv2.imread('image1.png')
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imwrite('grayimage.png',gray)
im=Image.open('grayimage.png')
#SetuptheboardfromtheChesslibrary
board=chess.Board()
#Removeallthepiecesbecausetheywillbespecifiedinthenextstep
board.clear()
#SettheturntoWhitetoplay,unlessotherwisespecified
board.turn=white_turn
nn=0;
foriinrange(8):
forjinrange(8):
im1=im.crop((j*(box_width),i*(box_width),(j+1)*(box_width-0),(i+1)*(box_width-0)))
im1.save('pieces//'+str(nn)+'.png')
n+=1
n=myList[i][j]
#Readeachcroppedchesssquareandidentifythechesspieceandcolor.
image=cv2.imread('pieces//'+str(nn)+'.png')
BlackPiece=np.sum(image==0)
WhitePiece=np.sum(image==255)
res_val=(0,0,True)
ifBlackPiecemin(BlackPixelValues)-50:
#Identifythechesspiecebasedonhenumberofblackpixelsclosesttothe
#valuesfromtheBlackPiecesdictionary.
col_key,res_val=min(BlackPieces.items(),key=lambdax:abs(BlackPiece-x[1][0]))
ifWhitePiecemin(WhitePixelValues)-50:
#Identifythechesspiecebasedonhenumberofwhitepixelsclosesttothe
#valuesfromtheBlackPiecesdictionary.
col_key,res_val=min(WhitePieces.items(),key=lambdax:abs(WhitePiece-x[1][0]))
#setthechesspieceontheboardbasedonitposition,piecetype,andcolor.
board.set_piece_at(n,piece=chess.Piece(piece_type=res_val[1],color=res_val[2]))
nn+=1
#createtheFENbasedonthecurrentposition
turn_fen='w--10'ifboard.turn==Trueelse'b--01'
current_fen=board.board_fen()+turn_fen
#AssignthepostioninStockfishbasedonFEN
stockfish.set_fen_position(current_fen)
#Getthetopmoves
top_moves=stockfish.get_top_moves()
#Getthebestmove
my_move=top_moves[0]['Move']
#Movethechesspiecebasedonthebestmove
board.push(chess.Move.from_uci(my_move))
#Createoutput
print('Time:',time.time()-start_time)
print('BestMove:',my_move)
print('Evaluation:',stockfish.get_evaluation())
print('Topmoves:')
foriintop_moves:
print(i)
ifboard_flipped:
board.apply_transform(chess.flip_vertical)
board.apply_transform(chess.flip_horizontal)
display(board)
else:
display(board)
第9步:運行棋盤評估。
恭喜,你完成了!指定是輪到白(設(shè)置white_turn=True)還是輪到黑(white_turn=False)并運行評估函數(shù)。該函數(shù)將輸出:
Time:運行函數(shù)所花費的時間BestMo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026江蘇東南大學(xué)招聘18人備考題庫(含答案詳解)
- 2026浙江嘉興市嘉善縣江南幼兒園食堂從業(yè)人員招聘1人考試備考題庫及答案解析
- 2026西安未央鳳凰城小學(xué)教師招聘筆試參考題庫及答案解析
- 2026中國能建江蘇電建一公司校園招聘考試備考題庫及答案解析
- 2026山東能源集團所屬企業(yè)招聘筆試備考題庫及答案解析
- 2026年銅陵市銅官區(qū)事業(yè)單位統(tǒng)一公開招聘工作人員10名筆試備考題庫及答案解析
- 2026陜西咸陽渭城區(qū)就業(yè)見習人員招聘筆試模擬試題及答案解析
- 2026四川九州電子科技股份有限公司招聘技術(shù)員3人考試參考題庫及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考貴州省廣播電視局招聘31人考試備考試題及答案解析
- 2026廣西貴港市電子商務(wù)促進中心招募就業(yè)見習人員2人筆試備考試題及答案解析
- 衛(wèi)生管理研究論文
- 2025-2026學(xué)年人教版(新教材)小學(xué)數(shù)學(xué)二年級下冊(全冊)教學(xué)設(shè)計(附教材目錄P161)
- 委托市場調(diào)研合同范本
- 畜牧安全培訓(xùn)資料課件
- 2025年度黨支部書記述職報告
- 2026四川省引大濟岷水資源開發(fā)限公司公開招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 2026年安徽糧食工程職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性考試備考試題及答案詳解
- 內(nèi)科學(xué)總論小兒遺傳代謝病課件
- 雨課堂學(xué)堂在線學(xué)堂云《中國電影經(jīng)典影片鑒賞(北京師范大學(xué))》單元測試考核答案
- 核電站防地震應(yīng)急方案
- 2025江西江新造船有限公司招聘70人模擬筆試試題及答案解析
評論
0/150
提交評論