首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对MNIST手写数字预测的数字进行中心/检测?

如何对MNIST手写数字预测的数字进行中心/检测?
EN

Stack Overflow用户
提问于 2022-11-20 21:11:01
回答 1查看 24关注 0票数 0

我正在制作一个移动应用程序,在其中的第一部分,用户将不得不拍摄一个sudoku网格的照片,计算机将扫描和阅读它,使用我受过训练的TensorFlow模型。

我对TensorFlow模型有一个很大的问题,它似乎不太擅长它的工作,我认为这不是模型的错,而是被发送的张量没有以数字为中心。

显然,我不期望100%的准确性,但特别是数字打印在[网格,我希望更好,因为大约20%的数字似乎是错误的。

这是一张模型预测为8的6的图片

代码语言:javascript
运行
复制
img=<base64 string represeting 313*320 image of grid> 

[This is the base64 image at the top](https://i.stack.imgur.com/OrPis.jpg)

import cv2
import json
import numpy as np
import tensorflow as tf
import base64
import matplotlib.pyplot as plt

model = tf.keras.models.load_model("newmodel")
data = base64.b64decode(img)
np_data = np.fromstring(data, np.uint8)
img = cv2.imdecode(np_data, cv2.IMREAD_GRAYSCALE)
height, width = img.shape
img = cv2.resize(img, (width, width))
height, width = img.shape
print(height,width)
nums = []
for y in range(9):
    row = []
    for x in range(9):

            left = round(x*(width)/9+3)
            top = round(y*(height)/9+3)
            right = round((x+1)*(width)/9-3)
            bottom = round((y+1)*(height)/9-3)
            image = img[top:bottom, left:right]
            image = np.array(image)
            image = cv2.resize(image, (28,28))
            image = 255-image 

            #Checking for empty cells
            numofBlack = 0
            for r in image:
                for item in r:
                    if item > 127:
                        numofBlack += 1
            if numofBlack < 50:
                row.append(0)

            else:
                pred = model.predict(image.reshape(1,28, 28, 1))
                row.append(int(pred.argmax()))

    nums.append(row)
print(nums)

上面图像中的网格返回:

[8,3,0,0,7,0,0,0,0,0,8,0,0,1,9,5,0,0,0,0,9,8,0,0,0,0,6,0,8,0,0,0,0,8,4,0,0,8,0,3,0,0,7,7,0,0,0,0,0,0,0,6,0,0,0,0,6,0,8,0,0,0,0,2,8,0,0,0,0,4,1,9,0,0,5,0,0,0,0,8,0,0,7,6]

把一两个数字弄错了--这对我来说没什么问题,因为我可以在图像检测之后进行手动检查,我知道模型不会完美,但从数字不是8中读取的8的数字是可疑的,我觉得它可能来自于稍微偏离中心的数字。

因此,问题是:我是否可以使用python中的库来检测单元格中的数字,而不是用圆形(x*(宽度)/9+3)和丑陋的数学方法来检测单元格中的数字-- OR是我面临的问题,也是解决方案,完全不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-20 22:02:07

感谢NickODell的有益评论,我的解决方案是找到每个图像的质量中心,并将图像转移到中心。

下面是我使用的python解决方案的链接:

灰度图像中像素质量中心

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74512039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档