Iro*_*Man 5 python image python-imaging-library python-3.x tensorflow
我有一个脚本,它掩盖了图像的一部分,并通过预测网络运行它,以查看图像的哪些部分对标签预测的影响最大。为此,我使用 PIL 打开本地图像并调整其大小,同时以不同的间隔添加一个黑框。我使用 Tensorflow 打开我的模型,我想将图像传递给模型,但它不期望具有此特定形状的值:
Traceback (most recent call last):
File "obscureImage.py", line 55, in <module>
originalPrediction, originalTag = predict(originalImage, labels)
File "obscureImage.py", line 23, in predict
{'DecodeJpeg/contents:0': image})
File "C:\Users\User\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 766, in run
run_metadata_ptr)
File "C:\Users\User\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\client\session.py", line 943, in _run
% (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (224, 224, 3) for Tensor 'DecodeJpeg/contents:0', which has shape '()'
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
def predict(image, labels):
with tf.Session() as sess:
#image_data = tf.gfile.FastGFile(image, 'rb').read() # What I used to use.
softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
predictions = sess.run(softmax_tensor,
{'DecodeJpeg/contents:0': image})
predictions = np.squeeze(predictions)
top_k = predictions.argsort()[-5:][::-1] # Getting top 5 predictions
return predictions[0], labels[top_k[0]] # Return the raw value of tag matching and the matching tag.
originalImage = Image.open(args.input).resize((args.imgsz,args.imgsz)).convert('RGB')
originalPrediction, originalTag = predict(originalImage, labels)
Run Code Online (Sandbox Code Playgroud)
从磁盘打开和使用图像工作正常,但当然这不是我修改后的图像。我尝试使用tf.image.decode_jpeg(image,0)作为 softmax 张量的参数,但这给了我TypeError: Expected string passed to parameter 'contents' of op 'DecodeJpeg', got <PIL.Image.Image image mode=RGB size=224x224 at 0x2592F883358> of type 'Image' instead.
使用img_to_arrayKeras 中的函数:
from PIL import Image
pil_img = Image.new(3, (200, 200))
image_array = tf.keras.preprocessing.image.img_to_array(pil_img)
Run Code Online (Sandbox Code Playgroud)
你可以使用PIL getdata()
将图像的内容作为包含像素值的序列对象返回。序列对象被展平,因此第一行的值直接跟在零行的值之后,依此类推。
或张量流的gfile.
from tensorflow.python.platform import gfile
image_data = gfile.FastGFile(image_filename, 'rb').read()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8933 次 |
| 最近记录: |