基于深度学习的中国象棋盘面识别
基于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="黑"
