একাধিক-অভিন্ন-ইউএসবি-ডিভাইস সমস্যা
আমার কাছে চারটি ক্যামেরা সহ রাস্পেরি পাই রয়েছে। আমি, pix নিতে fswebcamযা শনাক্ত ক্যামেরা /dev/video0.. video3। কখনও কখনও ক্যামেরা video0, vide02, video4এবং video6কিন্তু আমরা এখন জন্য যে ভুলে যেতে পারেন।
আমার একটি ক্যামেরা নম্বর সনাক্ত করার জন্য একটি অবিরাম আইডি প্রয়োজন যাতে উদাহরণস্বরূপ video0সর্বদা একই ক্যামেরা থাকায় আমি ছবিগুলি ক্যাপশন করি। দুর্ভাগ্যক্রমে এটি নির্ভরযোগ্যভাবে ঘটে না - বুটে, ক্যামেরাগুলি গণনা করা হয় video0.. video3তবে সবসময় একইভাবে হয় না।
ক্যামেরা সমস্ত একই আইডি এবং ক্রমিক নম্বর আছে।
এই সমস্যার সমাধানে ইউদেব বিধি জড়িত, তবে সেখানে প্রচুর ফিশুক রয়েছে।
কমান্ড জারি করলে
udevadm info –attribute-walk –path=/dev/video0
আপনি আউটপুট একটি স্কিড পেতে কিন্তু প্রধান বিট হয়
KERNEL=”video0”, SUBSYSTEM=”video4linux” and KERNELS=”1:1.2.4:1.0”.
কার্নেলস বিটটি একটি ইউএসবি হাব পোর্ট। চারটি ক্যামেরা সহ এগুলির মধ্যে চারটি রয়েছে - সেগুলি পুনরায় বুটে পরিবর্তন হয় না, তবে video{x}কোনও বন্দরের সাথে সম্পর্কিত পরিবর্তন হতে পারে ।
সুতরাং একটি ইউএসবি হাব পোর্টে একটি ভিডিও নম্বর টাই করার জন্য আমাদের একটি ওদেব নিয়ম প্রয়োজন - এরকম কিছু:
KERNEL==”video0”,SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0”,SYMLINK+=”camera0”
দেখতে সহজ দেখাচ্ছে - এর সাথে ক্যামেরাটি অ্যাক্সেস করুন
fswebcam –d $realpath /dev/camera0
এটি কাজ না করে - আপনি যদি এটি কোনও ওদেব নিয়মে রাখেন এবং সিস্টেমটি বিভিন্ন বন্দরে ভিডিও0 (বুট-এ) বরাদ্দ করে তবে উদেব নিয়ম উপেক্ষা করা হয়। থেকে সিমবলিক লিঙ্ক /dev/camera0মূলত বলছেন no such device। স্কয়ার এক।
আমরা যা চাই তা হ'ল কোনও video{x}সংখ্যার নয়, একটি ইউএসবি হাব ঠিকানার সাথে একটি সিমিলিঙ্ক বাঁধাই । এটি একটি পাইথন প্রোগ্রাম নিয়েছে।
প্রথম পদক্ষেপ ছিল চালানো
fswebcam –d /dev/video${x} tst.jpg
জন্য x1 এবং 8 অস্তিত্ব মধ্যে tst.jpgপ্রতিটি কলের পর শনাক্ত এই ভিডিওটির সংখ্যার উপর একটি ক্যামেরা কিনা। এটি থেকে সক্রিয় ভিডিও নম্বরগুলির একটি তালিকা তৈরি করুন। আমার অভিজ্ঞতা হয়েছে যে এটি হয় 0,1,2,3বা 0,2,4,6আমি ব্যবহার করা ক্যামেরাগুলির জন্য।
অন্যরা অবশ্যই একটি ভিন্ন প্রক্রিয়া ব্যবহার করে এই তালিকাটি তৈরি করতে পারেন।
তারপরে তালিকার প্রতিটি ভিডিও নম্বরের জন্য রান করুন
udevadm info –attribute-walk –path=/dev/videox > dd
এবং KERNELS= lineথেকে এক্সট্রাক্ট dd। এই প্রক্রিয়াটি থেকে আপনি ক্যামেরাগুলির জন্য ইউএসবি পোর্ট অ্যাড্রেসের একটি তালিকা শেষ করেন। এই তালিকাটি বাছাই করুন যাতে পরবর্তী ধাপে আপনি সর্বদা একই ক্রমে প্রক্রিয়া করুন। এটিকে "ঠিকানা তালিকা" বলুন।
udevadm … > ddজিনিসটি আবার চালান এবং দেখতে একটি তালিকা তৈরি করুন
KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camerax”. Call this the “video list”.
এখন ঠিকানা তালিকার মধ্য দিয়ে পদক্ষেপ দিন - প্রতিটি প্রবেশের জন্য ভিডিও তালিকা থেকে সংশ্লিষ্ট এন্ট্রি সন্ধান করুন। লাইনের সংকলনের মতো দেখতে একটি নতুন তালিকা তৈরি করুন
KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camera2”
X (syMLink নম্বর) ঠিকানা তালিকার ক্রম সংখ্যা দ্বারা প্রতিস্থাপিত হয়েছে।
এখন আপনার একটি ওদেব বিধি রয়েছে যা কাজ করে। একটি ইউএসবি হাব ঠিকানার সাথে বাঁধা একটি সিমিলিংক বুট করার সময় সেই বন্দরে কী ভিডিও নম্বর বরাদ্দ করা যায় তা বিবেচনা করে না।
একটি ফাইলের মধ্যে চূড়ান্ত তালিকা লিখুন /etc/udev/rules.d/cam.rules। udevadm triggerএটি সক্রিয় করতে চালান এবং কাজটি শেষ হয়েছে। /dev/camera2তার ভিডিও নম্বর নির্বিশেষে একই ক্যামেরা (ইউএসবি পোর্ট) হবে।