প্রকল্প সম্পর্কে

## MediaPipe ইউনিটি প্লাগইন এটি MediaPipe (0.10.22) ব্যবহারের জন্য একটি ইউনিটি (>= 2022.3) নেটিভ প্লাগইন। লক্ষ্য হল MediaPipe C++ API-কে একে একে C#-এ পোর্ট করা যাতে এটি ইউনিটি থেকে কল করা যায়। এই পদ্ধতিটি লুপে একাধিক API কল করার সময় কর্মক্ষমতা বিসর্জন দিতে পারে, তবে নমনীয়তা প্রদান করে। ### বৈশিষ্ট্য - C#-এ MediaPipe কোড লিখুন। - ইউনিটিতে MediaPipe-এর অফিসিয়াল সমাধান চালান। - ইউনিটিতে কাস্টম `Calculator` এবং `CalculatorGraph` চালান (নির্দিষ্ট ইনপুট/আউটপুট ধরনের জন্য C++ প্রয়োজন হতে পারে)। ### হ্যালো ওয়ার্ল্ড উদাহরণ ```cs using Mediapipe; using UnityEngine; public sealed class HelloWorld : MonoBehaviour { private const string _ConfigText = @" input_stream: ""in"" output_stream: ""out"" node { calculator: ""PassThroughCalculator"" input_stream: ""in"" output_stream: ""out1"" } node { calculator: ""PassThroughCalculator"" input_stream: ""out1"" output_stream: ""out"" } "; private void Start() { using var graph = new CalculatorGraph(_ConfigText); using var poller = graph.AddOutputStreamPoller<string>("out"); graph.StartRun(); for (var i = 0; i < 10; i++) { graph.AddPacketToInputStream("in", Packet.CreateStringAt("Hello World!", i)); } graph.CloseInputStream("in"); var packet = new Packet<string>(); while (poller.Next(packet)) { Debug.Log(packet.Get()); } graph.WaitUntilDone(); } } ``` আরও বিস্তারিত ব্যবহারের জন্য, API ওভারভিউ বা টিউটোরিয়াল দেখুন। ### ইনস্টলেশন রিলিজ পেজ থেকে প্রি-বিল্ট প্যাকেজ ডাউনলোড করুন: | ফাইল | বিষয়বস্তু | | --- | --- | | MediaPipeUnityPlugin-all.zip | প্রয়োজনীয় লাইব্রেরি সহ সমস্ত সোর্স কোড। | | MediaPipeUnityPlugin-all-stripped.zip | উপরের মতোই তবে সিম্বল স্ট্রিপ করা। | | com.github.homuler.mediapipe-*.tgz | ইউনিটি প্যাকেজ ম্যানেজারের জন্য টারবল প্যাকেজ। | | MediaPipeUnityPlugin.*.unitypackage | ইউনিটি প্যাকেজ ফাইল। | মোবাইল স্যাম্পল সিনের জন্য, `MediaPipeUnityPlugin-all.zip` বা `-stripped.zip` পছন্দ করুন কারণ এতে প্রয়োজনীয় মডেল এবং সেটআপ অন্তর্ভুক্ত রয়েছে। ### প্লাগইন নিজে তৈরি করা বেশিরভাগ ক্ষেত্রে, আপনাকে প্লাগইন নিজে তৈরি করার প্রয়োজন নেই। শুধুমাত্র যদি প্রি-বিল্ট প্যাকেজ কাজ না করে, তবে বিল্ড গাইড অনুসরণ করুন। রিপোজিটরিতে প্রয়োজনীয় লাইব্রেরি বা মডেল অন্তর্ভুক্ত নেই, তাই ক্লোন করার পরে বিল্ড করা প্রয়োজন। ### প্যাকেজ তৈরি করা - **ইউনিটি প্যাকেজ**: প্রকল্পটি খুলুন, `Tools > Export Unitypackage` ক্লিক করুন। - **টারবল**: `npm` ইনস্টল করুন, তারপর `Packages/com.github.homuler.mediapipe`-এ `npm pack` চালান। ### সমর্থিত প্ল্যাটফর্ম macOS এবং Windows-এ GPU মোড সমর্থিত নয়। সমর্থিত প্ল্যাটফর্মগুলির মধ্যে রয়েছে Linux (x86_64), macOS (x86_64/ARM64), Windows (x86_64), Android, iOS এবং WebGL (সীমাবদ্ধতা সহ)। ### সমর্থিত সমাধান প্লাগইনটি বেশ কয়েকটি MediaPipe টাস্কের জন্য C# API প্রয়োগ করে, যার মধ্যে রয়েছে: - অবজেক্ট ডিটেকশন - ইমেজ সেগমেন্টেশন - হ্যান্ড ল্যান্ডমার্ক ডিটেকশন - জেসচার রিকগনিশন - ফেস ডিটেকশন - ফেস ল্যান্ডমার্ক ডিটেকশন - পোজ ল্যান্ডমার্ক ডিটেকশন - অডিও ক্লাসিফিকেশন MediaPipe ফ্রেমওয়ার্কের মাধ্যমে লিগ্যাসি সমাধানও উপলব্ধ তবে তাদের সমর্থন শেষ হয়েছে। ### ব্যবহার `.unitypackage` বা `.tar.gz` ব্যবহার করে আপনার প্রকল্পে প্লাগইনটি আমদানি করুন। #### অ্যান্ড্রয়েড নোট অ্যান্ড্রয়েড বিল্ডের জন্য, নিশ্চিত করুন যে `libstdc++_shared.so` আপনার APK-তে অন্তর্ভুক্ত রয়েছে, অন্যথায় `DllNotFoundException` নিক্ষেপ করা হবে। এটি `Assets/Plugins/Android`-এ রাখুন বা বিল্ড সময়ে এটি অন্তর্ভুক্ত করতে Gradle কোড যোগ করুন। #### স্যাম্পল অ্যাপ `Assets/MediaPipeUnity/Samples/Scenes`-এর অধীনে স্যাম্পল সিন দেখুন। ইনস্পেক্টরে, সঠিক ইনফারেন্স মোড (CPU বা GPU) এবং অ্যাসেট লোডার টাইপ (এডিটরের জন্য লোকাল, ডিভাইসের জন্য StreamingAssets) নির্বাচন করুন। ### প্রযুক্তিগত সীমাবদ্ধতা - প্লাগইনটি নেটিভ লাইব্রেরি ব্যবহার করে; বাগগুলি UnityEditor বা অ্যাপ ক্র্যাশ করতে পারে। Linux/macOS-এ, ক্র্যাশ এড়াতে `SIGABRT` পরিচালনা করা হয়, তবে Windows-এ এটি সম্ভব নয়। - GPU ইনফারেন্সের জন্য, OpenGL Core API সমর্থিত নয়; PC স্ট্যান্ডঅ্যালোন বিল্ডে Vulkan ব্যবহার করুন। ### লাইসেন্স MIT, কিছু ফাইল অন্যান্য লাইসেন্সের অধীনে (MediaPipe Apache 2.0, emscripten MIT, FontAwesome)। বিস্তারিত জানতে থার্ড পার্টি নোটিশ দেখুন।