محاولة التقاط إخراج العرض للتحليل في الوقت الفعلي مع OpenCV ؛ أحتاج إلى مساعدة في التواصل مع نظام التشغيل للدخول

StackOverflow https://stackoverflow.com/questions/4060265

سؤال

أرغب في تطبيق العمليات من مكتبة OpenCV Computer Vision ، في الوقت الفعلي ، على الفيديو الذي تم التقاطه من شاشة الكمبيوتر الخاصة بي. تتمثل الفكرة في هذه الحالة بالذات في اكتشاف ميزات مثيرة للاهتمام أثناء اللعب في لعبة شهيرة وتزويد المستخدم بتجربة محسّنة ؛ لكنني يمكن أن أفكر في العديد من السيناريوهات الأخرى حيث يريد المرء الوصول المباشر إلى هذه البيانات أيضًا. على أي حال ، بالنسبة لمرحلة التطوير ، قد يكون من المقبول استخدام الفيديو المعلب ، ولكن من الواضح أن أداء التطبيق النهائي واستجابةه أمران بالغ الأهمية.

أحاول القيام بذلك على Ubuntu 10.10 حتى الآن ، وأفضل استخدام نظام يشبه UNIX ، ولكن أي خيارات ذات أهمية. مهاراتي C محدودة للغاية ، لذلك عندما يكون التحدث إلى OpenCV من خلال Python ممكنًا ، أحاول استخدام ذلك بدلاً من ذلك. يرجى ملاحظة أنني أحاول التقاط ليس من جهاز الكاميرا ، ولكن من دفق مباشر من إخراج العرض ؛ وأنا في حيرة بشأن كيفية أخذ المدخلات. بقدر ما أستطيع أن أقول ، يعمل CaptureFromCam فقط لأجهزة الكاميرا ، ويبدو لي أن شرط الأداء في الوقت الفعلي في النتيجة النهائية يجعل التخزين في الملف والقراءة من خلال capturefromfile خيارًا سيئًا.

يبدو أن أكثر الطرق الواعدة التي وجدتها حتى الآن تستخدم FFMPEG مع خيار X11GRAB للالتقاط من شاشة X11 ؛ (على سبيل المثال الأمر FFMPEG -F X11GRAB -SAMEQ -R 25 -S WXGA -I: 0.0 OUT.MPG يلتقط 1366x768 من العرض 0 إلى 'Out.mpg'). أتصور أنه يجب أن يكون من الممكن التعامل مع دفق الإخراج من FFMPEG كملف يمكن قراءته بواسطة OpenCV (من المفترض باستخدام وظيفة capturefromfile) ربما باستخدام الأنابيب ؛ ولكن هذا كله على مستوى أعلى بكثير مما تعاملت معه من قبل ويمكنني حقًا استخدام بعض الاتجاهات. هل تعتقد أن هذا النهج ممكن؟ والأهم من ذلك يمكنك التفكير في أفضل؟ كيف يمكنك أن تفعل ذلك؟

هل كانت مفيدة؟

المحلول

أود أن أتجاهل X11Grab أو أي أدوات أخرى لخط CMD لأخذ لقطات شاشة إذا كنت تبحث عن أداء في الوقت الفعلي.

اكتب الشى الذى تريده الشاشة Grabber حتى تتمكن من إرسالها مباشرة إلى OpenCV. يمكنك إلقاء نظرة على كود المصدر XWD إذا كنت تريد معرفة كيفية القيام بذلك تحت X11.

نصائح أخرى

أعتقد أن التحدي الرئيسي هو شرط الوقت الحقيقي. أعتقد أنه يتعين عليك إنشاء بعض البرامج لـ OpenCV ، مستوحاة من رمز الاستيلاء على الفيديو في FFMPEG. ولكن هذا بالتأكيد سوف ينطوي على ترميز مستوى C.

اقتراحي هو محاولة الحصول على خوارزمية الرؤية الخاصة بك أولاً ، باستخدام الفيديو الذي تم تعزيزه FFMPEG.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top