- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 20

Thema: Schnelle(!) Objekterkennung mit Raspi+USB-Cam

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.04.2005
    Beiträge
    84
    Zitat Zitat von phantom111 Beitrag anzeigen
    Wenn ich in OpenCV ein nur(!) ein cv.CreateCameraCapture(0) in einer Schleife mache, komme ich auf 4 fps (mit 320x240). Deswegen brauche ich doch gar keinen weiteren Code geben.
    Das ist so auch etwas seltsam, da cvCreateCameraCapture() die Kamera initialisiert.

    Die Doku verstehe ich so:
    Code:
    # 1 mal am Anfang:
    capture = cv.CreateCameraCapture(0)
    while True:
        frame = cv.QueryFrame(capture)
    Geändert von EZ81 (02.03.2013 um 03:09 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Kennst du dieses Video:

    9fps sollten schon möglich sein. Allerdings wird hier ein RasPi mit 512MB verwendet.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Das lustige ist, dass so viele Leute zum Holen des Bildes von der Kamera ohne irgendwelche anderen Algorithmen schon nur 3-4fps haben. Beim OP wird das jetzt schneller gehen, wenn er wirklich bei jedem Durchlauf die Kamera initialisiert hat, aber das gilt für viele der anderen Leidensgenossen nicht. OpenCV scheint da sehr verschwenderisch mit den Resourcen umzugehen.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    16.03.2006
    Beiträge
    18
    OK, danke. Das Initialisieren hatte ich leider nicht in der Schleife. Habe mich vertippt. Schade eigentlich. Die Lösung wäre einfach gewesen.

    Hier mein Code. Ich mache das in der Schleife. Danach gehe ich durch die Elemente in contour. Es werden sehr viele gefunden. Das macht alles sehr langsam. Wo ist der Fehler!?

    Code:
                color_image = cv.QueryFrame(self.capture)
                cv.Smooth(color_image, color_image, cv.CV_GAUSSIAN, 3, 0)
                cv.Threshold(grey_image, grey_image, 70, 255, cv.CV_THRESH_BINARY)
                down = cv.Scalar(10,100,100,0) # cv.Scalar(30,100,100) # 
                up = cv.Scalar(40, 255,255,0) #(35,255,255)
                imghsv=cv.CreateImage(cv.GetSize(color_image),8,3)
                cv.CvtColor(color_image,imghsv,cv.CV_BGR2HSV)                # Convert image from RGB to HSV
            
                imgyellow=cv.CreateImage(cv.GetSize(color_image),8,1)
                imgthreshold=cv.CreateImage(cv.GetSize(color_image),8,1)
                cv.InRangeS(imghsv,down,up,imgyellow)    # Select a range of yellow color
                storage = cv.CreateMemStorage(0)
                contour = cv.FindContours(imgthreshold, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE)

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Zitat Zitat von ichbinsisyphos Beitrag anzeigen
    Das lustige ist, dass so viele Leute zum Holen des Bildes von der Kamera ohne irgendwelche anderen Algorithmen schon nur 3-4fps haben. Beim OP wird das jetzt schneller gehen, wenn er wirklich bei jedem Durchlauf die Kamera initialisiert hat, aber das gilt für viele der anderen Leidensgenossen nicht. OpenCV scheint da sehr verschwenderisch mit den Resourcen umzugehen.
    OpenCV ist hier eher resourcenschonend. Meist ist das Problem nicht die Software sondern die Verbindung. Bsp. USB 1 statt USB 2. Auch in der industriellen Bildverarbeitung ist das reine Bild einziehen meist sehr untergeordnet. Die Anzeigealgorithmen haben bsp. nichts mit dem Bildeinzug gemein. Wenn es um den Bildeinzug geht, eben nur einziehen und nicht anzeigen. Hier ist dann auch nochmal ein Flaschenhals. Bsp. nicht funktionierende Hardwarebeschleunigung.

    Gruß
    Georg

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    16.03.2006
    Beiträge
    18
    Ich habe die hier http://download.p4c.philips.com/file...00_pss_deu.pdf
    Der Code dort oben kommt auf 10 fps. Problem ist, das Durchlaufen durch die "contour" (Liste).

    Code:
         while contour:
    
                    bound_rect = cv.BoundingRect(list(contour))
                    contour = contour.h_next()
    
                    pt1 = (bound_rect[0], bound_rect[1])
                    pt2 = (bound_rect[0] + bound_rect[2], bound_rect[1] + bound_rect[3])
                    points.append(pt1)
                    points.append(pt2)
                    centroidx=cv.Round((pt1[0]+pt2[0])/2)
                    centroidy=cv.Round((pt1[1]+pt2[1])/2)
                    centroid = (centroidx, centroidy)
                if len(points):
                    radius = abs(pt1[0]-pt2[0])/2 
                    if True: #radius > 2 and radius != 159:
                        self.centroid = centroid
                        self.radius = radius
                        if self.gui is True:
                            cv.Circle(color_image, centroid , radius , cv.CV_RGB(255,0,0), 1)
                            cv.Rectangle(color_image, pt1, pt2, cv.CV_RGB(255,0,0), 1)
                            cv.PutText(color_image, str(centroid)+" r="+str(radius), centroid, cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1, 1, 0, 2, 1), cv.CV_RGB(255,0,0))
    #                    print str(centroid)+" r="+str(radius)
                    else:
                        self.centroid = None
                        self.radius = None

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    01.04.2005
    Beiträge
    84
    Auf meinem Core2Duo mit 1.8GHz schafft der Code im Anhang (deine Schnipsel halbwegs lauffähig gemacht) mit Anzeigefenster auch nur ~22 Frames/s mit einer Playstation Eye (640x480, 30fps), ohne die contour-Liste immerhin 24fps. Ohne Gui schafft er in beiden Fällen fast 30fps. Die 4 fps auf der RasPi scheinen also leider realistisch.
    Ein winziges Stück mehr Geschwindigkeit brachte es, das cv.CreateMemStorage(0) vor die Endlos-Schleife zu setzen.
    Angehängte Dateien Angehängte Dateien
    • Dateityp: txt 1.txt (2,8 KB, 12x aufgerufen)

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    16.03.2006
    Beiträge
    18
    ich könnte mir vorstellen, dass in contour einfach zu viele Objekte drin sind. Vielleicht kann man irgendwie in der Richtung optimieren.

Ähnliche Themen

  1. Schnelle USB FIFO
    Von flo1 im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 1
    Letzter Beitrag: 07.10.2010, 10:16
  2. günstige ccd Cam für USB ( OEM ? )
    Von looy78 im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 1
    Letzter Beitrag: 15.11.2009, 15:30
  3. USB Cam am microcontroller?
    Von .Johannes. im Forum Sensoren / Sensorik
    Antworten: 48
    Letzter Beitrag: 29.07.2006, 12:08
  4. USB-Cam an AVR
    Von Nitronic im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 02.01.2006, 21:50
  5. Daten von USB Cam an Microcontroller
    Von .Johannes. im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 04.08.2005, 15:37

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests