栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

基于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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号