Txe*_*eif 8 python opencv tensorflow
我想用python和opencv从视频中捕获帧,然后用张量流对捕获的Mat图像进行分类.问题是我不知道如何将de Mat格式转换为3D Tensor变量.这就是我现在用tensorflow(从文件加载图像)的方式:
image_data = tf.gfile.FastGFile(imagePath, 'rb').read()
with tf.Session() as sess:
softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
predictions = sess.run(softmax_tensor,
{'DecodeJpeg/contents:0': image_data})
Run Code Online (Sandbox Code Playgroud)
我会感激任何帮助,提前谢谢
Chr*_*doP 11
使用imread加载OpenCV图像,然后将其转换为numpy数组.
为了进入初始v3,你需要使用Mult:0 Tensor作为入口点,这需要一个具有布局的4维张量:[批量索引,宽度,高度,通道]最后三个从cv完全没问题: :Mat,第一个只需要为0,因为你不想提供一批图像,而是一个图像.代码如下:
#Loading the file
img2 = cv2.imread(file)
#Format for the Mul:0 Tensor
img2= cv2.resize(img2,dsize=(299,299), interpolation = cv2.INTER_CUBIC)
#Numpy array
np_image_data = np.asarray(img2)
#maybe insert float convertion here - see edit remark!
np_final = np.expand_dims(np_image_data,axis=0)
#now feeding it into the session:
#[... initialization of session and loading of graph etc]
predictions = sess.run(softmax_tensor,
{'Mul:0': np_final})
#fin!
Run Code Online (Sandbox Code Playgroud)
亲切的问候,
克里斯
编辑:我刚刚注意到,初始网络希望强度值标准化为浮点数为[-0.5,0.5],因此请在构建RGB图像之前使用此代码进行转换:
np_image_data=cv2.normalize(np_image_data.astype('float'), None, -0.5, .5, cv2.NORM_MINMAX)
Run Code Online (Sandbox Code Playgroud)
看起来您正在使用预训练和预定义的 Inception 模型,该模型具有一个名为DecodeJpeg/contents:0. 如果是,则此张量需要一个包含 JPEG 图像字节的标量字符串。
您有几种选择,一种是在网络中进一步查看 JPEG 转换为矩阵的节点。我不确定 MAT 格式是什么,但这将是一种[height, width, colour_depth]表示。如果您可以获得该格式的图像,您可以将DecodeJpeg...字符串替换为您想要输入的节点的名称。
另一种选择是简单地将您的图像转换为 JPEG 并直接输入。
使用 Tensorflow 2.0 和 OpenCV 4.2.0,您可以通过以下方式进行转换:
import numpy as np
import tensorflow as tf
import cv2 as cv
width = 32
height = 32
#Load image by OpenCV
img = cv.imread('img.jpg')
#Resize to respect the input_shape
inp = cv.resize(img, (width , height ))
#Convert img to RGB
rgb = cv.cvtColor(inp, cv.COLOR_BGR2RGB)
#Is optional but i recommend (float convertion and convert img to tensor image)
rgb_tensor = tf.convert_to_tensor(rgb, dtype=tf.float32)
#Add dims to rgb_tensor
rgb_tensor = tf.expand_dims(rgb_tensor , 0)
#Now you can use rgb_tensor to predict label for exemple :
#Load pretrain model, made from: https://www.tensorflow.org/tutorials/images/cnn
model = tf.keras.models.load_model('cifar10_model.h5')
#Create probability model
probability_model = tf.keras.Sequential([model,
tf.keras.layers.Softmax()])
#Predict label
predictions = probability_model.predict(rgb_tensor, steps=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10763 次 |
| 最近记录: |