2016-10-26 13 views
5

मैं पाइथन और ओपनसीवी के साथ एक वीडियो से फ़्रेम कैप्चर करना चाहता हूं और फिर टैन्सफोर्लो के साथ कैप्चर की गई मैट छवियों को वर्गीकृत करना चाहता हूं। समस्या यह है कि मुझे नहीं पता कि डी मैट प्रारूप को 3 डी टेंसर चर में कैसे परिवर्तित किया जाए। यह वह जगह है मैं कैसे tensorflow के साथ अब कर रहा हूँ (फ़ाइल से छवि लोड):python opencv mat image को 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}) 

मैं किसी भी मदद की सराहना करेंगे, अग्रिम धन्यवाद

+0

संभावित डुप्लिकेट http://stackoverflow.com/ques: उन्हें आरजीबी छवि के निर्माण से पहले कन्वर्ट करने के लिए इस कोड का उपयोग करें tions/37620330/import-tensor-with-mat-format-to-tensorflow) – thesonyman101

उत्तर

7

लोड OpenCV छवि है, तो यह एक numpy सरणी में बदलने के लिए है।

प्राप्ति v3 में भोजन करने के लिए, आपको मल्टी: 0 टेंसर को प्रवेश बिंदु के रूप में उपयोग करने की आवश्यकता है, यह 4 आयामी टेंसर की अपेक्षा करता है जिसमें लेआउट है: [बैच इंडेक्स, चौड़ाई, ऊंचाई, चैनल] अंतिम तीन पूरी तरह से हैं एक सीवी :: मैट से ठीक है, पहले व्यक्ति को 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! 

सधन्यवाद,

क्रिस

संपादित करें: मैं सिर्फ देखा, स्थापना के नेटवर्क, तीव्रता [-0.5,0.5] को तैरता के रूप में सामान्यीकृत को महत्व देता है चाहता है कि इतने

np_image_data=cv2.normalize(np_image_data.astype('float'), None, -0.5, .5, cv2.NORM_MINMAX) 
[चटाई प्रारूप के साथ आयात टेन्सर tensorflow करने के लिए] (की
+1

काम करता है धन्यवाद! यह काम करता हैं – Txeif

1

आप एक numpy को opencv चटाई प्रारूप कन्वर्ट करने के लिए सक्षम होना चाहिए सरणी के रूप में:

np_image_data = np.asarray(image_data) 

बार जब आप एक numpy सरणी के रूप में डेटा है कि आप इसे टेन्सर प्रवाह के लिए एक feeding mechanism के माध्यम से लिंक के रूप में पारित कर सकते हैं कि @ thesonyman101 संदर्भित:

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

ऐसा लगता है कि आप पूर्व-प्रशिक्षित और पूर्व परिभाषित प्रारंभ मॉडल का उपयोग कर रहे हैं, जिसमें DecodeJpeg/contents:0 नामक एक टेंसर है। यदि ऐसा है, तो यह टेंसर एक जेपीईजी छवि के लिए बाइट युक्त स्केलर स्ट्रिंग की अपेक्षा करता है।

आपके पास कुछ विकल्प हैं, एक नोड के लिए नेटवर्क को और नीचे देखना है जहां जेपीईजी को मैट्रिक्स में परिवर्तित किया गया है। मुझे यकीन नहीं है कि MAT प्रारूप क्या है, लेकिन यह [height, width, colour_depth] प्रतिनिधित्व होगा। यदि आप उस प्रारूप में अपनी छवि प्राप्त कर सकते हैं तो आप उस नोड के नाम से DecodeJpeg... स्ट्रिंग को प्रतिस्थापित कर सकते हैं जिसमें आप फ़ीड करना चाहते हैं।

अन्य विकल्प बस JPEGs के लिए अपनी छवियों को बदलने और imread का प्रयोग करने में उन्हें सीधे खाते हैं।

+0

धन्यवाद मार्क, मैंने ओपनसीवी मैट छवि को एक temp फ़ाइल में सहेजने में समस्या हल की और फिर जब मैं पोस्ट करता हूं तो लोड हो रहा था। यह सबसे साफ समाधान नहीं है लेकिन यह – Txeif

संबंधित मुद्दे