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

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


前言

象棋盘面识别


整个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="黑"

总结

经验分享 程序员 微信小程序 职场和发展