Een computer leren wat een bal is....

Gewoon even offtopic praten over van alles en nog wat.

Moderator: Moderators

Plaats reactie
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Een computer leren wat een bal is....

Bericht door Tolp2 »

Even een avondje klussen in Python met een leuk resultaat, computer weet nu wat een bal is. Zolang deze maar geel is in dit geval. Een 2-jarig kind doet het beter, maar het is een leuk beginnetje.

23313

Maar wat moet je nu met zoiets? Kwam dit video'tje tegen met de eerste versie die ik nastreef:



Maar uiteindelijk is dit natuurlijk wel het ultieme:



In ieder geval: het houdt me van de straat 8)
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 12033
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: Een computer leren wat een bal is....

Bericht door hugo stoutjesdijk »

Leuk, en dan 2 naast elkaar de bal over laten gooien.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Een computer leren wat een bal is....

Bericht door DaBit »

Blijft geinig, dit soort klusjes.

Hoe doe je het? Conversie naar HSV, drempeltjes, Hough transformatie?
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Kjelt
Donateur
Berichten: 6307
Lid geworden op: 14 jun 2007 21:51
Locatie: Eindhoven

Re: Een computer leren wat een bal is....

Bericht door Kjelt »

Zit ook een camera bij voor machine learning ?
Gebruikersavatar
Markus
Donateur
Berichten: 1012
Lid geworden op: 01 sep 2007 22:43
Locatie: Aduard, Groningen
Contacteer:

Re: Een computer leren wat een bal is....

Bericht door Markus »

Hoi Tolp2

Ik heb een aantal jaren geleden voor een opdracht wat tijd aan het tracken van voorwerpen op kleur besteed en het best aardig aan de gang gekregen. Als ik naar je voorbeeld kijk dan schat ik zo in dat je blob detectie gebruikt in opencv (cv2.SimpleBlobDetector) . Ik heb om die blobdetectie te verbeteren meerdere beeldbewerkingen gedaan alvorens de blobdetectie te doen.

1. Contrast verbetering met cv2.equalizeHist
2. Ruis en artifacts onderdrukking met cv2.erode daarna blobs vetter maken met cv2.dilate
3. flink blurren met cv2.GaussianBlur om daarna cv2.threshold de boel flink zwart wit te trekken (soort van super contrast)

Bovenstaande maakt je blob veel meer een blob en onderdrukt sommige belichtingseffecten.

Als ik het opnieuw zou doen zou ik het misschien nu met deeplearning proberen met bijvoorbeeld pythorch (met cuda ondersteuning) en dan leren alleen jouw bal te zien met een eigen dataset (weet nog niet hoe dat moet). Maar ik heb al wat eravring met tensorflow en ook yolo3 met andermans datasets en kan niet zeggen dat de herkenning altijd even geweldig is. En zonder Nvidia videokaart is dat ernstig traag.


Greetz,

Markus
chimaerion
Berichten: 245
Lid geworden op: 28 nov 2017 19:50
Locatie: Oost-vlaanderen

Re: Een computer leren wat een bal is....

Bericht door chimaerion »

Ik zou het gewoon mooi houden bij hough transform, nergens nodig die deep learning voor zo een simpel task, dat is zoals een grote graafmachine gebruiken om een klein putje te graven in je tuin.

Blob kan goed werken en zeer snel zelfs als je belichting en beeldkwaliteit uitstekend is.

Hough transform is een pak robuuster voor wat uitdagender omstandigheden.
Deze kan trager zijn omwille van de canny edge detection dat eraan voorafgegaan wordt. Nogmaals, als je belichting en contrast goed is kan je deze zelfs proberen eruit te laten.
Voor de rest is het tweaken van de parameters van de hough transform: als je weet tussen welke grenzen de diameter van je cirkel ligt, kun je je detectie een heel pak sneller maken.

Als je machine learning pad op gaat heb je heel vaak een NVIDIA Jetson of iets gelijkaardigs nodig.
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Een computer leren wat een bal is....

Bericht door Tolp2 »

Wat een leuke reacties 8) .
DaBit schreef: 18 apr 2021 11:37 Blijft geinig, dit soort klusjes.

Hoe doe je het? Conversie naar HSV, drempeltjes, Hough transformatie?
De video wordt real-life verwerkt met behulp van de webcam in mijn laptop. Gemiddelde frame-rate is ongeveer 30 frames per seconde. Op iedere frame worden de volgende stappen doorlopen:
  • resize naar 640 x 480 pixels;
  • Gaussian blur;
  • omzetten naar HSV
  • mask creëren op basis van inRange, de kleuren die hiervoor gebruikt worden zijn de sliders in de GUI;
  • erode, met twee iteraties;
  • dilate, met twee iteraties;
  • contour detectie;
  • bepalen minimale omschreven cirkel voor de contour. Het middelpunt van de cirkel ligt op het zwaartepunt van de 'blob'.
De Hough cirkel detection heb ik pas iets over gevonden na het lezen van je post. Wel interessant om die ook te berekenen en kijken wat daar uit gaat komen. Ik kon alleen vinden dat die werkt met grijswaarden, dus dan zijn er eerst wat stappen nodig om de bal goed er uit te laten springen in grijswaarden. Wellicht eerst inRange en dan de Hough toepassen?
chimaerion schreef: 18 apr 2021 22:21 Ik zou het gewoon mooi houden bij hough transform, nergens nodig die deep learning voor zo een simpel task, dat is zoals een grote graafmachine gebruiken om een klein putje te graven in je tuin.
Het is hobby ;-) . Heb ooit een beschoeiing geplaatst in de tuin. Je kan natuurlijk een palenrammer huren bij Boels, een heistelling inzetten (want bouwvak) kan ook en is veel leuker. Het gaat er niet altijd om of het het juiste gereedschap is, wel om de hoeveelheid lol. En het geeft je een uitgelezen kans om je te verdiepen in velden die je nog compleet niet kent.
hugo stoutjesdijk schreef: 18 apr 2021 08:47 Leuk, en dan 2 naast elkaar de bal over laten gooien.
Op de CNC-dag 2025 een ping pong competitie houden?
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 12033
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: Een computer leren wat een bal is....

Bericht door hugo stoutjesdijk »

Tolp2 schreef: 18 apr 2021 23:12 Op de CNC-dag 2025 een ping pong competitie houden?
Precies. :lol:
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Een computer leren wat een bal is....

Bericht door Tolp2 »

Ondertussen wat voorbereidingen getroffen om een 1D-balanceer inrichting te maken. Recept wordt:
  • Een hoek profiel, ongeveer 30 cm lang;
  • Aandrijving door middel van een servo aan een Arduino;
  • Camera er boven hangen aan een PC geknoopt;
  • Alle onderdelen uit de 3D printer
De aandrijving van de servor wordt door middel van een Four bar linkage. Hierbij wordt de vereiste rotatie van het platform vertaald naar een benodigde verdraaiing van de servo door middel van een aangedreven arm die met een pendel vast zit aan een vast punt van het hoekprofiel. Een simulatie kan makkelijk worden gemaakt met https://www.desmos.com/calculator/iuprdl6sxk.

Code: Selecteer alles

import math 

class FourBarLinkageAngleConverter():

    def driver_angle(self, z: float , plate_angle: float):
        """Calculates the angle of the driver linkage based on the z and angle of the plate. See
        https://www.desmos.com/calculator/iuprdl6sxk for more information and simulating 4-bar
        linkages

        Args:
            z (float): The height of the platform relative to the height of the servo
            plate_angle (float): The angle of the plate in radians

        Returns:
            float: The required angle of the servo motor in radians.
        """
        # The center of the plate
        p1 = 0
        q1 = z
        # The edge of the plate
        p2 = p1 - self._r1 * math.cos(plate_angle)
        q2 = q1 - self._r1 * math.sin(plate_angle)
        # The location of the servo motor
        p4 = self._x_servo
        q4 = 0
        # The 'free' hinge
        a1 = self._r4**2 - self._r2**2
        b1 = (p4-p2)**2 + (q4-q2)**2
        p3 = (p2*(a1+b1) - p4*(a1-b1) + (q2-q4) * math.sqrt(4*b1*self._r2**2-(a1-b1)**2)) / (2 * b1)
        q3 = (q2*(a1+b1) - q4*(a1-b1) + (p4-p2) * math.sqrt(4*b1*self._r2**2-(a1-b1)**2)) / (2 * b1)

        print(p3, q3)
        return math.atan2(q3, p3 - self._x_servo)

    def __init__(self, r1, r2, r4, x_servo):
        self._r1 = r1
        self._r2 = r2
        self._r4 = r4
        self._x_servo = x_servo

Waarom zo'n moeilijke aanvliegroute: drie van dit soort armen geven een mooie platform met 3-DOF (2 verdraaiingen om x en y as en translatie in de z-richting).....

TO BE CONTINUED
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13460
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: Een computer leren wat een bal is....

Bericht door Arie Kabaalstra »

https://youtu.be/Z-K68bhhN7Y

de volgende stap? :lol:
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Een computer leren wat een bal is....

Bericht door Tolp2 »

Kan ik uren naar kijken. Dit ding is echt gaaf!
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
serum
Berichten: 5398
Lid geworden op: 08 mar 2008 20:37
Locatie: Zwolle

Re: Een computer leren wat een bal is....

Bericht door serum »

Kan prima in de woonkamer als kinetische kunst. Heel fraai.
Plaats reactie