2017-05-25 6 views
5

मैं सी ++ में एंड्रॉइड पर एक तंत्रिका नेटवर्क चलाने की कोशिश कर रहा हूं। उदाहरण (https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/androidhttps://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/android) दिखाएं कि जावा एपिस का उपयोग करके टेन्सफोर्लो का उपयोग कैसे करें जो जेएनआई कार्यों का उपयोग कर सी ++ को कॉल करते हैं। क्या किसी ने एंड्रॉइड पर सीधे सी ++ में tensorflow का उपयोग करने की कोशिश की है? एंड्रॉइड पर सी ++ एपिस का उपयोग करने के लिए tensorflow लाइब्रेरी का निर्माण और लिंक कैसे किया जा सकता है। क्या आप कृपया उस पर मार्गदर्शन कर सकते हैं? मैं आईओएस उदाहरणों में किए गए तरीके से एंड्रॉइड पर सी ++ एपिस का उपयोग करना चाहता हूं।एंड्रॉइड एनडीके पक्ष पर सीधे tensorflow का उपयोग (जावा एपीआई का उपयोग नहीं)

उत्तर

0

100% संभव है, एक छोटे से चेतावनी के साथ ...

एंड्रॉयड के यूआई के अधिकांश जावा में किया जाता है। आप native activity बना सकते हैं, लेकिन स्क्रीन पर कोई आउटपुट प्राप्त करने के लिए, आपको या तो ओपनजीएल (जिसमें सभी अच्छे एंड्रॉइड यूआई व्यू नहीं हैं) का उपयोग करने की आवश्यकता है या आपको अपना डेटा आउटपुट प्राप्त करने के लिए जेएनआई बाधा को संक्रमण करने की आवश्यकता होगी और से उपयोगकर्ता को प्रदर्शित करने के लिए मूल कोड।

ओपनगल, ईजीएल, आदि के साथ आपकी परिचितता के आधार पर .. आप देशी_एक्टिविटी बनाने के बजाय जेएनआई बाधा को बदलने का विकल्प चुन सकते हैं, लेकिन बहुत छोटे क्रॉस सेक्शन में।

आप एक रननेबल बना सकते हैं और काम करने के दौरान इसे सिग्नल कर सकते हैं। परिणाम प्राप्त करने के लिए काम और अन्य (समवर्ती) कतार सबमिट करने के लिए एक समवर्ती कतार (जावा में) का उपयोग करें। रननेबल काम कतार पॉप करता है, काम जमा करने और JSON स्ट्रिंग को वापस करने के लिए एक एकल जेएनआई/सी फ़ंक्शन को कॉल करता है। फिर यह काम समाप्त कतार में जमा करता है।

+0

मुझे खेद है कि मेरा प्रश्न स्पष्ट नहीं था। मैं यूआई भाग के बारे में चिंतित नहीं हूं। जेएनआई द्वारा डेटा पास करके मैं वैसे भी संभालूंगा। मेरा प्रश्न एंड्रॉइड के लिए टेन्सफोर्लो बनाने के तरीके के बारे में है और एंड्रॉइड ऐप के सी ++ पक्ष पर टेंसफोर्लो एपिस को कॉल करने के लिए एंड्रॉइड प्रोजेक्ट में शामिल करें। मेरे पास सी ++ पक्ष पर छवि बफर है जिसे मैं एक तंत्रिका नेट हालांकि इसे जावा पर भेजने के बिना चलाने के लिए चाहता हूं। –

2

यहां इस समस्या को हल किया गया है। यद्यपि एंड्रॉइड पर सी ++ एपिस का उपयोग करने और एनडीके में टेन्सफोर्लो को संकलित करने और जोड़ने के लिए बहुत अधिक दस्तावेज नहीं हैं, मेकफ़ाइल के पास महत्वपूर्ण टिप्पणियां हैं और साथ ही स्क्रिप्ट संबंधित हैं। संकलन चरण आईओएस के समान ही हैं।

  1. निम्नलिखित निर्भरताओं को स्थापित करें a) autoconf b) automake c) automake। फिर tensorflow/contrib/makefile/download_dependencies.sh चलाएं; मैं पहली बार 10 मई, 2017 रिपोजिटरी में भाग गया, जब यह पूरी तरह से काम करता था। 1 जून के बाद के संस्करण में, tensorflow/workspace.bzl में कुछ बदलावों के कारण, मुझे download_dependencies.sh में समझ में नहीं आता है, tar फ़ाइलों को पहचानने में विफल रहता है download_dependencies डाउनलोड करने का प्रयास कर रहा है। मैंने बस 10 मई से वर्कस्पेस.बीजीएल को दोबारा बदल दिया।
  2. चरण 2 tensorflow/योगदान/makefile/इस

    NDK_ROOT तरह compile_android_protobuf.sh = पूर्ण/पथ चलाने के लिए// NDK/फ़ोल्डर में ./tensorflow/contrib/makefile/compile_android_protobuf.sh

  3. है

    रन बनाओ। लेकिन सबसे पहले आपको मेकफ़ाइल में कुछ बदलाव करने की आवश्यकता हो सकती है। -एफपीआईई झंडे के साथ -पीपीआईई झंडे बदलें। HOST_CXXFLAGS में -fPIC ध्वज भी जोड़ें।

    मेकअप -f tensorflow/योगदान/makefile/Makefile लक्ष्य = Android के NDK_ROOT = पूर्ण/path/to/NDK/फ़ोल्डर

    वैकल्पिक रूप से एक भी चला सकते हैं build_all_android.sh जो सभी 3 चलाता है: तो फिर इस तरह बनाना चलाने एक बार में कदम, लेकिन आपको झंडे के लिए मेकफ़ाइल परिवर्तन करने की आवश्यकता हो सकती है।

यह उत्पन्न tensorflow/योगदान/makefile/जनरल/Protobuf/lib/libprotobuf.a और tensorflow/योगदान/makefile/जनरल/lib/libtensorflow-core.a; इसे एंड्रॉइड एनडीके प्रोजेक्ट से एंड्रॉइड.एमके फ़ाइल में LOCAL_LDLIBS के तहत जोड़ा जा सकता है। इन लिंक्ड झंडे -Wl,--build-id -Wl,--allow-multiple-definition -Wl,--whole-archive का उपयोग करना चाहिए- एंड्रॉइड.एमके फ़ाइल में LOCAL_CFLAGS में -std = C++ 11 और APP_STL: = gnustl_shared एप्लिकेशन.एमके फ़ाइल में।

यह आपके एनडीके प्रोजेक्ट की साझा लाइब्रेरी बनाने के लिए पर्याप्त होना चाहिए।

+0

कोई विचार यह है कि इस काम को नए एंड्रॉइड में सीएमके के साथ कैसे बनाया जाए? मैंने चीजों का एक गुच्छा करने की कोशिश की है, लेकिन एंड्रॉइड एनडीके सी ++ कोड के साथ सी ++ tensorflow कॉल का उपयोग करने में सक्षम नहीं हैं। –

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