সুচিপত্র:

অঙ্গভঙ্গি হক: হাতের অঙ্গভঙ্গি নিয়ন্ত্রিত রোবট ইমেজ প্রসেসিং ভিত্তিক ইন্টারফেস ব্যবহার করে: 13 টি ধাপ (ছবি সহ)
অঙ্গভঙ্গি হক: হাতের অঙ্গভঙ্গি নিয়ন্ত্রিত রোবট ইমেজ প্রসেসিং ভিত্তিক ইন্টারফেস ব্যবহার করে: 13 টি ধাপ (ছবি সহ)

ভিডিও: অঙ্গভঙ্গি হক: হাতের অঙ্গভঙ্গি নিয়ন্ত্রিত রোবট ইমেজ প্রসেসিং ভিত্তিক ইন্টারফেস ব্যবহার করে: 13 টি ধাপ (ছবি সহ)

ভিডিও: অঙ্গভঙ্গি হক: হাতের অঙ্গভঙ্গি নিয়ন্ত্রিত রোবট ইমেজ প্রসেসিং ভিত্তিক ইন্টারফেস ব্যবহার করে: 13 টি ধাপ (ছবি সহ)
ভিডিও: এই Secret কেবল 1% লোক জানে | 7 Most Powerful Hand Gestures You Should Have To Know | Hast Mudras 2024, নভেম্বর
Anonim
অঙ্গভঙ্গি হক: ইমেজ প্রসেসিং ভিত্তিক ইন্টারফেস ব্যবহার করে হাতের অঙ্গভঙ্গি নিয়ন্ত্রিত রোবট
অঙ্গভঙ্গি হক: ইমেজ প্রসেসিং ভিত্তিক ইন্টারফেস ব্যবহার করে হাতের অঙ্গভঙ্গি নিয়ন্ত্রিত রোবট

একটি সহজ ইমেজ প্রসেসিং ভিত্তিক হিউম্যান-মেশিন ইন্টারফেস হিসাবে অঙ্গভঙ্গি হক TechEvince 4.0 এ প্রদর্শিত হয়েছিল। এর উপযোগিতা এই সত্যের মধ্যে রয়েছে যে ডিফারেনশিয়াল ড্রাইভ নীতি অনুসারে চলা রোবোটিক গাড়িটি নিয়ন্ত্রণ করার জন্য গ্লাভস ছাড়া কোন অতিরিক্ত সেন্সর বা পরিধানযোগ্য নয়। এই নির্দেশে, আমরা আপনাকে সিস্টেমে ব্যবহৃত বস্তু ট্র্যাকিং এবং অঙ্গভঙ্গি সনাক্তকরণের পিছনে কাজের নীতিটি নিয়ে যাব। এই প্রকল্পের সোর্স কোড লিথের মাধ্যমে গিথুব থেকে ডাউনলোড করা যাবে:

ধাপ 1: প্রয়োজনীয় জিনিসগুলি:

প্রয়োজনীয় জিনিস
প্রয়োজনীয় জিনিস
প্রয়োজনীয় জিনিস
প্রয়োজনীয় জিনিস
প্রয়োজনীয় জিনিস
প্রয়োজনীয় জিনিস
প্রয়োজনীয় জিনিস
প্রয়োজনীয় জিনিস
  1. L298N মোটর ড্রাইভার
  2. ডিসি মোটরস
  3. রোবট গাড়ির চ্যাসি
  4. আরডুইনো উনো
  5. লিপো ব্যাটারি
  6. আরডুইনো ইউএসবি কেবল (দীর্ঘ)
  7. পাইথন সহ OpenCV লাইব্রেরি

ধাপ 2: কাজের নীতি:

কাজ নীতি
কাজ নীতি

Gesture Hawk হল তিনটি ফেজ প্রসেসিং সিস্টেম যা আপনি উপরের ডায়াগ্রামে দেখতে পাচ্ছেন।

ধাপ 3: ইনপুট ক্যাপচার এবং প্রসেসিং:

ইনপুট ক্যাপচার এবং প্রসেসিং
ইনপুট ক্যাপচার এবং প্রসেসিং

উপরের ডায়াগ্রামে প্রদত্ত বিস্তৃত বিভাগগুলিতে ইনপুট ক্যাপচার বোঝা যায়।

পরিবেশ থেকে হাতের আকৃতি বের করার জন্য, আমাদের একটি নির্দিষ্ট রঙের মাস্কিং বা ফিল্টারিং ব্যবহার করতে হবে (এই ক্ষেত্রে - বেগুনি নীল ')। এটি করার জন্য আপনাকে ছবিটি BGR থেকে HSV ফর্ম্যাটে রূপান্তর করতে হবে যা নিম্নলিখিত কোড স্নিপেট ব্যবহার করে করা যেতে পারে।

hsv = cv2.cvtColor (ফ্রেম, cv2. COLOR_BGR2HSV)

এখন, পরবর্তী ধাপ হল মাস্ক বা ফিল্টারের মাধ্যমে হাত বের করার জন্য HSV প্যারামিটারের পছন্দসই পরিসীমা খুঁজে বের করা। এর জন্য, একটি উপযুক্ত পরিসীমা খোঁজার জন্য ট্র্যাক বারগুলি ব্যবহার করা সর্বোত্তম উপায়। এই প্রকল্পের জন্য ব্যবহৃত একটি ট্র্যাক বারের স্ক্রিনশট এখানে।

ধাপ 4:

ছবি
ছবি

ধাপ 5:

এখানে, মুখোশ নির্মাণের জন্য এই ধরনের একটি ট্র্যাকবার তৈরির জন্য নিচে একটি কোড স্নিপেট দেওয়া হয়েছে:

আমদানি cv2

npdef nothing (x) হিসাবে numpy আমদানি করুন: cv2.namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, nothing) cv2.createTrackbar ('l_S ',' ইমেজ ', 50, 255, কিছুই না) cv2.createTrackbar (' l_V ',' image ', 50, 255, nothing) cv2.createTrackbar (' h_H ',' image ', 130, 255, nothing) cv2 createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing) while (1): _, frame = img.read ()

hsv = cv2.cvtColor (ফ্রেম, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'ইমেজ') lS = cv2.getTrackbarPos ('l_S', 'image') 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') lower_R = np অ্যারে ([lH, lS, lV]) higher_R = np.array ([hH, hS, hV]) mask = cv2.inRange (hsv, lower_R, higher_R) res = cv2.bitwise_and (ফ্রেম, ফ্রেম, মাস্ক = মাস্ক) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF যদি k == 27: break cv2.destroyAllWindows ()

ধাপ 6: প্রক্রিয়াকরণ অংশ:

প্রসেসিং পার্ট
প্রসেসিং পার্ট

ঠিক আছে, আমরা একটি হাতের জ্যামিতিক আকৃতি পেয়েছি, এখন সময় এসেছে এটিকে কাজে লাগানোর এবং হাতের অঙ্গভঙ্গি বের করার জন্য এটি ব্যবহার করার।

উত্তল জাহাজের কাঠাম:

উত্তল হুলের মাধ্যমে, আমরা আকৃতিতে উপস্থিত চরম পয়েন্টগুলির মাধ্যমে একটি আনুমানিক বহুভুজকে ফিট করার চেষ্টা করি। বামে উপস্থিত চিত্রটি আনুমানিক বহুভুজ দেখায় যা আকৃতিতে লাল দিয়ে চিহ্নিত উত্তল পয়েন্ট দিয়ে নির্ধারিত হয়েছিল।

উত্তল বিন্দু হল আকৃতির সেই বিন্দু যা এই আনুমানিক বহুভুজের একটি দিক থেকে সবচেয়ে দূরে। কিন্তু, উত্তল হুলের সমস্যা হল যে তার গণনার সময়, আমরা সমস্ত উত্তল বিন্দুর একটি অ্যারে পাব কিন্তু আমাদের যা দরকার তা হল নীল বিন্দু উত্তল বিন্দু। কেন এটি প্রয়োজন তা আমরা আপনাকে বলব।

এই উত্তল বিন্দুটি খুঁজে পেতে, আমাদের নিকটতম দিকের সাথে উত্তল বিন্দুর দূরত্ব বের করার জন্য লম্ব দূরত্ব সূত্র প্রয়োগ করতে হবে। আমরা লক্ষ্য করেছি যে নীল বিন্দু বিন্দু পাশ থেকে সর্বাধিক দূরত্ব ধারণ করে এবং তাই আমরা এই বিন্দুটি পাই।

ধাপ 7:

ছবি
ছবি

ধাপ 8:

ছবি
ছবি

পরবর্তীতে আমাদের থাম্বের ডগায় (অথবা চরম বিন্দু) অনুভূমিকভাবে এই উত্তল বিন্দুতে যোগ হওয়া রেখার প্রবণতা খুঁজে বের করতে হবে।

ধাপ 9:

ছবি
ছবি

উপরের ক্ষেত্রে, অঙ্গভঙ্গি 0 থেকে 90 ডিগ্রির মধ্যে হওয়া উচিত যদি অঙ্গভঙ্গি বাম দিকে ঘুরতে হয়। যে tan (α) ইতিবাচক হওয়া উচিত।

ধাপ 10:

ছবি
ছবি

উপরের ক্ষেত্রে, কোণ 180 180 থেকে 90 ডিগ্রির মধ্যে হওয়া উচিত যদি অঙ্গভঙ্গি ডানদিকে ঘুরতে হয়। যে tan (α) নেতিবাচক হওয়া উচিত।

অতএব, যদি টান positive ধনাত্মক হয়, তাহলে বাম মোড়। যদি Tan negative ণাত্মক হয়, তাহলে ডানদিকে ঘুরুন। এখন, সবচেয়ে গুরুত্বপূর্ণ স্টপ কমান্ডটি কীভাবে সনাক্ত করা যায় তা দেখার সময় এসেছে।

এখানে, একটি নির্দিষ্ট অনুপাত (হিট এবং ট্রায়াল দ্বারা পাওয়া) পরীক্ষা করা হয় এবং সর্বাধিক ক্ষেত্রে এই দূরত্বের অনুপাত এই নির্দিষ্ট পরিসরে থাকে।

ধাপ 11:

ছবি
ছবি

অবশেষে, সামনের গতি অঙ্গভঙ্গি OpenCV- এ matchShape () ফাংশন দ্বারা বিশ্লেষণ করা হয়। এই ফাংশনটি দুটি কাউন্টারের আকৃতির তুলনা করে, এই ক্ষেত্রে, উপরের ছবিতে থ্রাইটের উপর প্রশিক্ষণের উদাহরণের সাথে উপরের চিত্রের বাম পাশে কনট্যুরের সাথে। এটি দুটি কনট্যুরের আকারে বিদ্যমান বৈচিত্র অনুযায়ী 0 থেকে 2 বা 3 পর্যন্ত একটি মান প্রদান করে। একইভাবে একই কনট্যুরের জন্য, এটি 0 প্রদান করে।

ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)

এখানে, cn1 এবং cnt2 হল দুটি কনট্যুর যা তুলনা করতে হবে।

ধাপ 12: গতি নিয়ন্ত্রণ:

গতি নিয়ন্ত্রণ
গতি নিয়ন্ত্রণ

পাই সিরিয়াল:

Arduino USB Cable এর মাধ্যমে Arduino Uno- এর কাছে যোগাযোগ করার জন্য প্রক্রিয়াজাতকৃত তথ্যকে সিরিয়াল ডেটাতে রূপান্তর করার জন্য আমরা পাইথনের PySerial লাইব্রেরি ব্যবহার করেছি। একবার ওপেনসিভি দ্বারা একটি বিশেষ অঙ্গভঙ্গি ধরা পড়লে আমরা একটি অস্থায়ী ভেরিয়েবল তৈরি করে বলি 'x' এবং এটিকে কিছু অনন্য মান নির্ধারিত করেছি এবং নিম্নলিখিত কমান্ড লাইন ব্যবহার করে সিরিয়াল ইনপুটে রূপান্তর করেছি:-

আমদানি সিরিয়াল #পিসেরিয়াল লাইব্রেরি আমদানি করতে

সিরিয়াল।

serial.write (b'x ') # x হল পোর্টে পাঠানো বর্ণমালা … b হল এই স্ট্রিংটিকে বাইটে রূপান্তরিত করা।

Arduino প্রক্রিয়াকরণ:

এখন আরডুইনোকে এমনভাবে কোড করা হয়েছে যে রোবটের মসৃণ গতির জন্য দায়ী নির্দিষ্ট ক্রিয়াকলাপের জন্য প্রতিটি ভিন্ন সিরিয়াল x রৈখিকভাবে ম্যাপ করা হয়েছে (বলুন বাম অঙ্গভঙ্গি সনাক্তকরণ মোটরগুলিকে ডানদিকে বাম দিকে ট্রিগার করবে)। আমরা সঠিকভাবে কোড পরিবর্তন করে প্রতিটি চাকার গতি অনুবাদ এবং ঘূর্ণনগতভাবে নিয়ন্ত্রণ করতে পারি।

L298N মোটর ড্রাইভার:-

মোটর চালক মোটর এবং বিদ্যুতের উৎসের মধ্যস্থতাকারী হিসাবে ব্যবহৃত হয় কারণ কম ভোল্টেজ রেটিং এর কারণে মোটর সরাসরি চালিত হতে পারে না। লি-পো ব্যাটারি তার 12V ইনপুট টার্মিনালের সাথে সংযুক্ত এবং আমরা arduino এর 5V সকেটকে মোটর ড্রাইভারের 5V ইনপুট সকেটের সাথে সংযুক্ত করি যা অবশেষে লি-পো-এর স্থলকে সংযুক্ত করে এবং মোটর ড্রাইভারের একটি সাধারণ গ্রাউন্ড সকেটে আরডুইনোকে সংযুক্ত করে।

এখন মোটরগুলির টার্মিনালগুলি দেওয়া সকেটে সংযুক্ত। পরিশেষে আমরা মোটরের জন্য ইনপুট টার্মিনালগুলিকে আরডুইনো এর PWM আউটপুট সকেটের সাথে সংযুক্ত করি যা আমাদের গতির ঘূর্ণন এবং অনুবাদ দিকগুলি সঠিকভাবে সিদ্ধান্ত নেওয়ার অনুমতি দেয়।

প্রস্তাবিত: