#测试的方法进行操作,得到最终的预测数字。 import numpy as np import matplotlib.pyplot as plt from PIL import Image import cv2 @tf.autograph.experimental.do_not_convert def predict(image_path): img= Image.open(image_path).convert("L") img=np.array(np.array(img)/255).reshape((1,28,28, 1)) img=tf.cast(img,dtype=tf.float64) #print(img) checkpoint.restore(manager.latest_checkpoint) logits=cnnmodel.predict(img) prob = tf.nn.softmax(logits, axis=1) pred = tf.argmax(prob, axis=1) pred = tf.cast(pred, dtype=tf.int32) print("经过识别大概率认为这个数字是",int(pred[0])) print(prob)#查看0-9每个数字的概率预 predict(r"D:\QQDownload\手写数字识别\5.png") img=cv2.imread(r"D:\QQDownload\手写数字识别\5.png") plt.imshow() plt.show(img)
时间: 2024-04-26 12:26:54 浏览: 104
在这段代码中,首先导入了必要的模块,包括 numpy、matplotlib、PIL 和 cv2 等模块。然后定义了一个 `predict` 函数,该函数接受一个图像路径作为输入,并使用 PIL 库将图像转换为灰度图像。接着将图像转换为 numpy 数组并进行归一化处理,然后将其转换为 Tensor 类型的数据。然后使用 TensorFlow 的 `tf.autograph.experimental.do_not_convert` 装饰器来避免自动转换 Python 控制流代码。接着从最新的检查点中恢复模型,并对输入图像进行预测。使用 TensorFlow 的 `tf.nn.softmax` 函数来计算每个数字的概率预测结果,并使用 `tf.argmax` 函数获取最终预测结果。最后将预测结果转换为整数类型,并输出预测结果和每个数字的概率预测结果。
在函数的最后,使用 OpenCV 的 `cv2.imread` 函数读取图像,并使用 matplotlib 的 `plt.imshow` 和 `plt.show` 函数来显示图像。但是在 `plt.imshow` 函数中,需要传入图像数组 `img` 作为参数,因此需要将 `cv2.imread` 返回的图像数组作为 `plt.imshow` 函数的参数传入。否则会出现参数错误或者无法显示图像的情况。
相关问题
import numpy as np import paddle as paddle import paddle.dataset.mnist as mnist import paddle.fluid as fluid from PIL import Image import matplotlib.pyplot as plt from pathlib import Path import os from paddle.vision.datasets import DatasetFolder,ImageFolder from paddle.vision.transforms import Compose,Resize,Transpose import paddle.nn.functional as F from sklearn.metrics import confusion_matrix,f1_score,classification_report import seaborn as sns
这段代码看起来是在导入需要用到的Python库,包括numpy、paddle、PIL、matplotlib、pathlib、os、sklearn等。其中paddle库是深度学习框架PaddlePaddle的Python API,paddle.fluid是PaddlePaddle的核心模块,paddle.dataset.mnist是PaddlePaddle内置的手写数字MNIST数据集,paddle.vision.datasets是PaddlePaddle内置的视觉数据集,paddle.vision.transforms是PaddlePaddle内置的图像变换函数,paddle.nn.functional是PaddlePaddle内置的函数式API模块。而sklearn.metrics则是sklearn库的metrics模块,包含了一些常用的度量指标函数,如混淆矩阵、F1-Score等。sns则是seaborn库,用于绘制统计图表。
from PIL import Image import numpy as np import matplotlib.pyplot as plt img = Image.open("work/Lena_RGB.jpg") plt.imshow(img) plt.show() plt.close() img_arr = np.array(img) h,w = img_arr.shape gray_levels = np.arange(256) freq = np.zeros(256) for i in range(h): for j in range(w): freq[img_arr[i, j]] += 1 prob = freq / (h * w) 检查并改正代码
在代码中有一个缺失的部分,需要计算出图像的灰度值后再计算灰度直方图。
以下是更正后的代码:
```python
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = Image.open("work/Lena_RGB.jpg")
plt.imshow(img)
plt.show()
plt.close()
img_gray = img.convert('L') # 转换为灰度图像
img_arr = np.array(img_gray)
h, w = img_arr.shape
gray_levels = np.arange(256)
freq = np.zeros(256)
for i in range(h):
for j in range(w):
freq[img_arr[i, j]] += 1
prob = freq / (h * w)
plt.bar(gray_levels, prob)
plt.show()
```
在这个代码中,我们首先使用 `convert()` 函数将 RGB 彩色图像转换为灰度图像。然后,我们计算出图像的灰度值后再计算灰度直方图。最后,我们使用 `bar()` 函数绘制灰度直方图。
阅读全文