网络知识 娱乐 基于深度学习的中国象棋盘面识别

基于深度学习的中国象棋盘面识别

基于CNN的中国象棋盘面识别

文章目录

    • **基于CNN的中国象棋盘面识别**
  • 前言
  • 一、霍夫变换圆检测算法HoughCircles
  • 二、CNN识别棋子
  • 三、识别棋子颜色
  • 总结


前言

例如:这是本人整个alphazero项目中的一个分支部分,主要是为了实现天天象棋盘面的自动检测,参考了网上的一些做法,同时利用卷积神经网络以最简便的方式实现了中国象棋盘面识别,因为识别速度和效果还算理想,所以记录一夕
在这里插入图片描述天天象棋截图

在这里插入图片描述象棋盘面识别


整个ocr_chessboard.py 分为三个小部分,分别是(1)使用opencv霍夫变换圆检测实现棋子定位,(2)利用自己训练的cnn模型进行棋子识别,(3)opencv识别棋子颜色
分为三步而不是直接用cnn检测棋子类别跟颜色,主要是因为那样的话cnn数据集制作复杂,模型效果不理想,精准度也不高。

一、霍夫变换圆检测算法HoughCircles

代码如下(示例):

qipan = cv.imread('test2.png',1)
gray = cv.cvtColor(qipan, cv.COLOR_BGR2GRAY)
edges = cv.Canny(gray,100,200,apertureSize = 3)
circle1 = cv.HoughCircles(gray, cv.HOUGH_GRADIENT, 1, 20, param1=100, param2=24, minRadius=26, maxRadius=30)
circles = circle1[0, :, :]  # 提取为二维
circles = np.uint16(np.around(circles))  # 四舍五入,取整
    # cv.circle(qipan, (i[0], i[1]), i[2], (255, 0, 0), 5)  # 画圆
    # cv.circle(qipan, (i[0], i[1]), 1, (255, 0, 0), 10)  # 画圆心

在这里插入图片描述

二、CNN识别棋子

代码如下(示例):

    #棋盘横坐标
    x=int((i[0])/69)
    #棋盘纵坐标
    y=int((i[1])/69)
    #CNN识别棋子是什么
    grab_img=qipan[i[1] - i[2]:i[1] + i[2], i[0] - i[2]:i[0] +i[2]]
    grab_gray_img=cv.cvtColor(grab_img, cv.COLOR_BGR2GRAY)
    grab_gray_img = cv.cvtColor(grab_gray_img, cv.COLOR_GRAY2RGB)
    result=chess_recon.recon_img(grab_img)

三、识别棋子颜色

    #识别棋子颜色
    img_hsv = cv.cvtColor(grab_img, cv.COLOR_BGR2HSV)
    mask1 = cv.inRange(img_hsv, (0, 50, 20), (5, 255, 255))
    mask2 = cv.inRange(img_hsv, (175, 50, 20), (180, 255, 255))
    mask = cv.bitwise_or(mask1, mask2)
    if cv.countNonZero(mask) > 0:
        color="红"
    else:
        color="黑"

总结

源码模型下载地址:源码模型下载地址
到这里就基本实现了棋盘盘面的自动识别,为后续接入alphazero做好了准备工作,因为在代码实现过程中参考了网络上的一些做法,如果有侵权行为,请及时联系本人。QQ:365033268