2016-10-26 17 views
5

Videodan python ve opencv ile kareleri yakalamak ve daha sonra yakalanan Mat görüntülerini tensorflow ile sınıflandırmak istiyorum. Sorun şu ki, de Mat formatını bir 3D Tensör değişkenine dönüştürmeyi bilmiyorum. i (dosyadan resim yükleme) tensorflow şimdi yapıyorum budur: Herhangi bir yardıma takdir edecektirPython opencv mat görüntüsünü tensorflow görüntü verilerine dönüştürün

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}) 

, şimdiden teşekkürler

+0

Olası kopyalar http://stackoverflow.com/ques: RGB görüntüyü oluşturmadan önce bunları dönüştürmek için bu kodu kullanın lütfen tions/37620330/import-tensör-mat-format-to-tensorflow) – thesonyman101

cevap

7

Yük OpenCV görüntü imread kullanarak, daha sonra bir numpy dizi dönüştürmek etmektir.

Başlangıç ​​v3'e besleme için, giriş noktası olarak Mult: 0 Tensor'u kullanmanız gerekir, bu, düzeni olan 4 boyutlu bir Tensor bekler: [Toplu dizin, Genişlik, Yükseklik, Kanal] Son üç mükemmel bir cv :: Mat'dan ince, ilki sadece bir resim görüntüsünü değil, tek bir görüntüyü beslemek istemediğiniz için sadece 0 olmalıdır. kodu gibi görünüyor:

#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! 

Saygılarımızla,

Chris

Düzenleme: Ben sadece başlangıç ​​ağ yüzden, yoğunluk [-0.5,0.5] olarak su baskını gibi normalize değerleri istediğini fark

np_image_data=cv2.normalize(np_image_data.astype('float'), None, -0.5, .5, cv2.NORM_MINMAX) 
[tensorflow için mat formatı ile ithalat tensör] (içinde
+1

Teşekkür ederim! işe yarıyor – Txeif

1

Bir Numpy için opencv mat biçimini dönüştürmek mümkün olmalıdır dizi olarak: bir numpy dizi olarak verisi olduktan sonra

np_image_data = np.asarray(image_data) 

bağlantıya gibi bir feeding mechanism aracılığıyla tensör akışına bunu geçebilir @ thesonyman101 başvurulan bu:

feed_dict = {some_tf_input:np_image_data} 
predictions = sess.run(some_tf_output, feed_dict=feed_dict) 
3

DecodeJpeg/contents:0 adında bir tensöre sahip önceden eğitilmiş ve önceden tanımlı Inception modelini kullanıyor gibi görünüyorsunuz. Öyleyse, bu tensör bir JPEG görüntüsü için baytları içeren bir skaler dizge bekler.

Bir kaç seçeneğiniz var, bir tanesi JPEG'in matrise dönüştürüldüğü düğüm için ağa daha fazla bakmak. MAT formatının ne olduğundan emin değilim, ama bu bir [height, width, colour_depth] gösterimi olacaktır. Resminizi bu formatta alabiliyorsanız, DecodeJpeg... dizgesini, beslemek istediğiniz düğümün adıyla değiştirebilirsiniz.

Diğer seçenek sadece JPEG resimlerinizi dönüştürmek ve düz onları doyur.

+0

Teşekkürler Mark, ben opencv Mat görüntü geçici bir dosyaya kaydetme ve sonra gönderirken yükleme sorunu çözüldü. Bu en temiz çözüm değil ama çalışıyor – Txeif

İlgili konular