Zeng-fh 2022-08-07 14:15 采纳率: 89.8%
浏览 112
已结题

关于python运行的疑问,功能上是象棋棋谱识别

这种报错如何处理呀?
原码如下

import numpy as np
import cv2 as cv

from CNN import chess_recon


chess_recon=chess_recon()

qipan = cv.imread('test.png',1)

def ocr_chess(qipan):
    chess_list = ['帅', '仕', '相', '马', '炮', '车', '兵', '卒', '将', '象','士']
    state_list_init = [['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'],
                       ['一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一', '一一'], ]
    gray = cv.cvtColor(qipan, cv.COLOR_RGB2GRAY)
    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))  # 四舍五入,取整



    for i in 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)  # 画圆心


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


        result=chess_recon.recon_img(grab_img)
        if x==3 and y==0:
            cv.imwrite("che.png",grab_gray_img)
            print(result)
        #识别棋子颜色
        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="黑"

        #组合成识别的期盼状态

        state_list_init[y][x] =  color+chess_list[result.item()]

    return state_list_init


 #for i in    state_list_init:
  #  print(i)

 #cv.imshow("chess_board",qipan)
 #cv.waitKey(0)
 #x=ocr_chess(qipan)
 #for i in x:
  #   print(i)

报错如下


= RESTART: D:\Matlab\bin\Matlab数学建模工具\中国象棋棋子识别\ai_chess_board\ai_chess_board\ocr_chessboard.py
Traceback (most recent call last):
  File "D:\Matlab\bin\Matlab数学建模工具\中国象棋棋子识别\ai_chess_board\ai_chess_board\ocr_chessboard.py", line 7, in <module>
    chess_recon=chess_recon()
  File "D:\Matlab\bin\Matlab数学建模工具\中国象棋棋子识别\ai_chess_board\ai_chess_board\CNN.py", line 114, in __init__
    self.model.load_state_dict(torch.load("models/cnn.pkl"), False)
  File "C:\Users\ZengFH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\torch\serialization.py", line 712, in load
    return _load(opened_zipfile, map_location, pickle_module, **pickle_load_args)
  File "C:\Users\ZengFH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\torch\serialization.py", line 1049, in _load
    result = unpickler.load()
  File "C:\Users\ZengFH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\torch\serialization.py", line 1019, in persistent_load
    load_tensor(dtype, nbytes, key, _maybe_decode_ascii(location))
  File "C:\Users\ZengFH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\torch\serialization.py", line 1001, in load_tensor
    wrap_storage=restore_location(storage, location),
  File "C:\Users\ZengFH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\torch\serialization.py", line 175, in default_restore_location
    result = fn(storage, location)
  File "C:\Users\ZengFH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\torch\serialization.py", line 152, in _cuda_deserialize
    device = validate_cuda_device(location)
  File "C:\Users\ZengFH\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\torch\serialization.py", line 136, in validate_cuda_device
    raise RuntimeError('Attempting to deserialize object on a CUDA '
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.
  • 写回答

2条回答 默认 最新

  • herosunly Python领域优质创作者 2022-08-07 15:09
    关注

    如果没有GPU的话,在文件D:\Matlab\bin\Matlab数学建模工具\中国象棋棋子识别\ai_chess_board\ai_chess_board\CNN.py大约114的位置,在__init__内把self.model.load_state_dict(torch.load("models/cnn.pkl"), False)修改为

    self.model.load_state_dict(torch.load("models/cnn.pkl", map_location=torch.device('cpu'))), False)
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月8日
  • 创建了问题 8月7日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败