Tensorflow:如果我有一个训练有素的 MNIST 模型,我如何检测图像中的手写数字?
Posted
技术标签:
【中文标题】Tensorflow:如果我有一个训练有素的 MNIST 模型,我如何检测图像中的手写数字?【英文标题】:Tensorflow: how can I detect handwriting numbers in an image if I have a trained MNIST model? 【发布时间】:2022-01-19 12:47:06 【问题描述】:我已经通过示例代码使用 MNIST 数据集训练了一个模型 https://keras.io/examples/vision/mnist_convnet/
我有一张图片,其中包含多个手写数字和其他字符,大小不同,颜色也不同。
我想使用训练好的模型检测手写数字(0-9),并在每个数字周围绘制一个边界矩形。
有可能吗?任何建议表示赞赏。 我的环境:tensorflow 2.7 + python 3。使用的是Keras。
【问题讨论】:
您将需要构建一个对象检测器。这是关于此事的link to a good tutorial。 @tromgy 非常感谢 【参考方案1】:因为您的输出层如下所示:
(Dense) (None, 10) 16010
你定义了你的类:
num_classes = 10
你使用
pred = model.predict(image)
其中 image 是您的图像。
请注意,您的图像需要形状 = (28, 28, 1) 所以它的x值为28,y值为28,颜色通道为1 =(灰度)。 您需要将图像转换为 numpy 数组。
它会给你一个数组,其中最大的数字是你的数字的结果。
喜欢:[0.2, 0.4, 0.9, 0.1, 0.3, 0.3, 0.5, 0.6, 0.6, 0.2]
所以在这种情况下,数字将是 2
如果你真的想在它周围画一个盒子,你需要一个更复杂和耗时的物体检测器。
【讨论】:
可以将我的图像传递给模型吗?我的图像包含许多数字和其他字符,而不是单个数字。 不,解决这个问题的唯一方法是扫描图像,使用 28 x 28 的矩阵,但是如果你这样做,结果是不可靠的,所有的问题,你会遇到已经被物体检测器解决了。您可以尝试的是,使用图像处理,例如opencv 对数字进行聚类,然后将帧传递给模型。以上是关于Tensorflow:如果我有一个训练有素的 MNIST 模型,我如何检测图像中的手写数字?的主要内容,如果未能解决你的问题,请参考以下文章
在 Keras/Tensorflow 中实现可训练的广义 Bump 函数层