2016-11-06 15 views
11

मैं रास्पबेरी Pi के लिए एक प्रस्ताव डिटेक्टर की कोशिश में बहुत अजीब कुछ देखा:ओपनसीवी का आयात क्यों बड़े पैमाने पर CPU उपयोग का कारण बनता है?

स्क्रिप्ट से कैमरा लॉगिंग निकाला जा रहा है, यह लगभग 0 सीपीयू का उपयोग करता है:

#from gpiozero import MotionSensor 
#import cv2 
from datetime import datetime 
from time import sleep 
#camera = cv2.VideoCapture(0) 
#pir = MotionSensor(4, queue_len=2, sample_rate=2, threshold=0.5) 
import RPi.GPIO as GPIO 
GPIO.setmode(GPIO.BCM) 
PIR_PIN = 4 
GPIO.setup(PIR_PIN, GPIO.IN) 
while True: 
    sleep(1) 
    if GPIO.input(PIR_PIN): 
     print("detected!") 
     filename = 'motionpics/' + datetime.now().strftime("%Y-%m-%d_%H.%M.%S.jpg") 
     #ret, frame = camera.read() 
     #cv2.imwrite(filename, frame) 
     #camera.release() 
     #pir.wait_for_no_motion() 

हालांकि, सिर्फ एक लाइन uncommenting - आयात cv2, यह स्क्रिप्ट 300% CPU उपयोग पर जाता है !!

ओपनसीवी के साथ क्या गलत है और मैं इसे सीपीयू के समूह का उपयोग करके और बैटरी पहनने के बिना यूएसबी कैमरा छवियों को पकड़ने के लिए क्यों उपयोग नहीं कर सकता?

+3

मैं अपने रास्पबेरी पीआई 3 पर एक ही समस्या को देख रहा हूं। मैंने Pyimagesearch ब्लॉग पर सूचीबद्ध सटीक विवरण का उपयोग करके OpenCV3.2-dev इंस्टॉल करने का प्रयास किया है, लेकिन केवल लाइब्रेरी आयात करने से मुझे 75% CPU पर रखा जाता है। मेरे यूएसबी कैमरा परिणामों से एक फ्रेम को पकड़ने की कोशिश कर रहे कार्यक्रम में दोबारा नहीं आ रहा है। नवीनतम रास्पियन (पिक्सेल) और पायथन 3.4 का उपयोग करना। –

+0

क्या आप अपने आवेदन को 'gdb' ('gdb -p pid_of_it') से जोड़ सकते हैं और सभी थ्रेड स्टेटस (' जानकारी थ्रेड', 'थ्रेड 1', 'बैकट्रैक',' थ्रेड 2', 'बैकट्रैक' और इसी तरह की जांच कर सकते हैं)।मुझे लगता है कि यह किसी प्रकार के समांतर धागे से हो सकता है, काम करने के लिए तैयार है और कार्यक्षेत्र पर मतदान (जैसे ओपनएमपी या टीबीबी के सक्रिय मोड)। कृपया, 'env' कमांड का परिणाम भी पोस्ट करें (यहां ओएमपी या सीवी या टीबीबी संबंधित चर हो सकते हैं)। (टायलर द्वारा क्रॉस पोस्ट: http://raspberrypi.stackexchange.com/questions/63021)। ओपनसीवी (और रूट छवि) का आपका संस्करण क्या है, सीवी लिब कैसे संकलित किया गया था और 'ldd .../libopencv.so' क्या है? – osgx

उत्तर

9

हम्मम्म, अगर मुझे गलत नहीं लगता है तो opencv को सही सही चाहिए? आप निम्नलिखित की कोशिश कर सकते:

$ sudo apt-get install libatlas3-base 
$ sudo update-alternatives --config libblas.so.3 

libatlas विकल्प

$ sudo update-alternatives --config liblapack.so.3 

चुनें libatlas विकल्प

$ sudo aptitude purge libopenblas-{base,dev} 

Source

5

मैं पुष्टि कर सकता है कि Giannis 'जवाब सही है चुनें। मैंने अभी उनके जवाब में सूचीबद्ध चरणों का प्रदर्शन किया है और उच्च cpu उपयोग के बिना python 3.4 में cv2 आयात करने में सक्षम हूं। तो कम से कम वह है। मैं एक फ्रेम पकड़ने और एक छवि प्रदर्शित करने में सक्षम हूँ। यह मेरे उपयोग के मामले के लिए काम करता है।

मैंने नोटिस किया कि उपर्युक्त चरणों के दौरान, libtiff5, wolfram, और कई अन्य पुस्तकालयों को अनइंस्टॉल किया गया था।

आप इन पुस्तकालयों और अनुप्रयोगों की जरूरत है (मैं इस समय एक पूरी सूची नहीं है) मैं अस्थायी रूप से सिफारिश करेंगे नहीं प्रदर्शन

उपयुक्त sudo- मिल जिले-उन्नयन

और

Sudo आरपीआई-अपडेट

इस समय, और रास्पियन जेसी में रहते हैं। यह सिर्फ मेरे व्यक्तिगत अनुभव से बाहर है।

संपादित करें:

इसके अलावा, मैं जोड़ने के लिए है कि Giannis सही था चाहते हैं, इस मालूम होता है एक numpy मुद्दा है, और आसानी से बस द्वारा परीक्षण किया जा सकता है: प्रारंभ मेनू

अपने रास्पबेरी PI3 के डेस्कटॉप चल रहा> -> कोड-> पायथन 3; टाइप करें "आयात numpy" (उद्धरण के बिना)।

आपको अपने सीपीयू उपयोग छत के माध्यम से देखना चाहिए। यह कहने का एक तरीका है कि आप इस फिक्स काम के लिए योग्य हैं।

+0

मैं यह भी जोड़ना चाहता हूं कि गियानिस सही था, यह प्रतीत होता है कि यह एक मामूली समस्या है, और आसानी से इसका परीक्षण किया जा सकता है: अपने रास्पबेरी पी 3 के डेस्कटॉप पर जाकर-> मेनू शुरू करें-> कोड-> पायथन 3; टाइप करें "आयात numpy" (उद्धरण के बिना)। आपको छत के माध्यम से अपने सीपीयू उपयोग को देखना चाहिए। यह कहने का एक तरीका है कि आप इस फिक्स काम के लिए योग्य हैं। –

+0

आप अपनी टिप्पणी से प्रासंगिक जानकारी शामिल करने के लिए अपना उत्तर संपादित कर सकते हैं। –

+0

हूप्स। अच्छी बात। मेरे पास अब कोई प्रतिनिधि नहीं था इसलिए यह मुझे कुछ स्थानों पर संपादन/टिप्पणी जैसी चीजें करने नहीं दे रहा था। हो गया है। –

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