Acties:
  • 0 Henk 'm!

  • DiederikRhee
  • Registratie: December 2013
  • Laatst online: 02-04 09:05
Beste Forumleden,


Ik zal me even voorstellen,

Ik ben Diederik van der Rhee uit wapenveld, 2e jaar elektrotechniek student op Windesheim (Zwolle). Ik knutsel al een paar jaar aan elektronica en ben bezig met een leuk project. Ik heb een behuizing voor mijn dartbord gemaakt, met allerlei elektronica erin.

Afbeeldingslocatie: http://s9.postimg.org/p8gmnyv0v/IMG_20150118_121054.jpg


Afbeeldingslocatie: http://s9.postimg.org/f9vo1hllb/IMG_20150118_122928.jpg

Ik heb eerst software geschreven voor het handmatig invoeren van de software en het maken van een menu, Maar mijn doel is om dit allemaal automatisch te laten gebeuren.

Doel: Een potje waarbij de Raspberry Pi de score bijhoudt en ik verder niks hoeft te doen.
Software: Python en eventueel OpenCV
Hardware:
Raspberry Pi (model b+)
Raspberry Pi Camera Module
2X Sound Sensor (geven laag signaal bij geluid, gegooide dart)
Ultrasonic Afstandsensor (kan afstand van speler tov het dartbord meten)
2X 4X4 keypad
16X2 ic2 RGB lcd display
6X 7 segment display
6X C4511 --------
6X C4510 --------> Aansturing 6 displays met 4 pinnen.
2X 230V Spotjes.

Ik zag op het forum al eerdere pogingen maar mijn specifieke doel is om niks aan het dartbord en aan de pijltje te doen. Alles moet in originele staat blijven!

Het is idee is om door middel van het verschil in afbeeldingen te laten doen. De pi neemt een foto van het bord, en als er een pijltje wordt gegooid nog een foto. Dan neemt hij het verschil van de foto en maakt hier een nieuwe foto van. (dit gedeelte heb ik al werkend). Het probleem is dat ik nu een zwart witte foto krijg met in het wit het pijltje. Ik moet nu de locatie van de bovenkant van het witte gedeelte zien te bepalen, maar ik weet niet hoe ik dit snel kan doen. Wie heeft een idee????

Ik hoopt dat jullie mij kunnen helpen. Hier vinden jullie nog een paar foto's: https://www.dropbox.com/s...OElmcTEdfFYKdSoPBtva?dl=0

[ Voor 21% gewijzigd door DiederikRhee op 28-01-2015 22:18 ]


Acties:
  • 0 Henk 'm!

  • Dogooder
  • Registratie: April 2004
  • Laatst online: 17:08

Dogooder

dus...

Aangezien je al een verschil foto hebt en je dus weet naar wat voor vorm je zoekt, zou je dat als input kunnen geven aan object tracking or recognition software. Er zijn heel wat voorbeelden voor de Rpi te vinden.

Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 08-05 11:59

Armageddon_2k

Trotse eigenaar: Yamaha R6

Toevallig heb ik eenzelfde systeem gebouwd toen ik nog in opleiding was.
Dit was alleen wel met een volwaardig vision systeem. Dus op gebied van de Rpi kan ik je niet helpen.
Maar let op de volgende valkuilen:

-De Camera lens is bol en zorgt voor een afwijking in je coordinaten.
-Als er 2 pijlen vlak bij elkaar in het bord komen (achter elkaar voor een camera) dan mis je die pijl
-Het bord heeft geen eenvoudige indeling, het omrekenen van de positie naar een aantal punten kan nog knap lastig zijn.

Acties:
  • 0 Henk 'm!

  • DiederikRhee
  • Registratie: December 2013
  • Laatst online: 02-04 09:05
Oké dat hoopte ik al! Ik heb inmiddels aardige vorderingen gemaakt! Kan het nu nog niet laten zien, maar ik kan inmiddels de locatie van de dart achterhalen. Dit is nog niet heel nauwkeurig maar met een beetje finetunen moet aardig precies kunnen worden. Ik zoek dus een manier hoe ik de coördinaten (x en y, linksboven is (0,0)) kan omrekenen. Mijn idee is al volgt:

Ik reken het om naar 2 waardes: één waarde is de afstand van de dart tov de bull eye (het midden). De andere waarde is de hoek deze lijn tov een lijn recht naar boven vanaf de bull. Ik zit alleen met een paar problemen:

1. Ik moet heel precies weten bij welke waarde het dartbord begint. Dus ik moet is van een callibratie doen denk ik.
2. De camera hangt schuin boven het bord. Voor de horizontale afstanden maakt dit niet uit, maar de verticalen afstanden wel. Op de afbeelding is zijn de verticale afstanden korter.

Ik zal vrijdag even alles illustreren, maar ben nu druk met tentamens.

Groeten Diederik

Acties:
  • 0 Henk 'm!

  • DiederikRhee
  • Registratie: December 2013
  • Laatst online: 02-04 09:05
Update!::

Het gaat zeer goed! I Het werkt allemaal volledig maar het is nog niet heel nauwkeurig(hij zit er soms naast). Hier een beetje uitleg voor de mensen die het iets interesseert:

Stap 1: Detecteren dat er een dart is gegooid en de x en y locatie van de punt van de dart achterhalen.
Stap 2: Met de x en y coördinaten bepalen welke score is gegooid.


Stap 1: Detecteren dat er een dart is gegooid en de x en y locatie van de punt van de dart achterhalen.

Het detecteren dat er een dart gegooid is doe ik nu nog door middel van geluidssensoren. Ik heb een interrupt pin van de sensoren gemaakt. Het probleem hiermee is dat als je in je handen klapt hij ook geluid signaleert dus misschien moet dit nog anders. Als er een dart is gedetecteerd slaat hij het frame van dat moment op en vergelijkt die met het vorige frame (cv2.absdif()). Nu is er een afbeelding met alleen de dart inbeeld. Nu zoek ik welke contour het hoogste ligt (de punt van de dart ligt het hoogste). Dan zoek ik van deze contour het hoogste punt en dan heb ik de coordinaten. (cv2.findContours()).

Stap 2: Met de x en y coördinaten bepalen welke score is gegooid.

Hier heb ik iets heel makkelijk voor bedacht! Ik heb de volgende afbeelding gemaakt:

Afbeeldingslocatie: http://s11.postimg.org/i2fq650v7/Dart_Color.png

De schaal van deze tekening is heel precies. Alle hoek zijn precies gelijk en de afstanden ook. Het is een 800X800 afbeelding en de bull zit dus ook precies in het midden. Het gaat om de kleur van de vakjes. Hiermee achterhaal ik de score: de rode waarde doet niks, de blauwe waarde geeft de waarde van het vakje (0 - 20, 25), de blauwe waarde geeft de vermenigvuldiger (single = 1, double = 2, triple = 3). Dus de single twaalf heeft de BGR waarde van (20, 1, x) door de x een beetje handig te kiezen kan ik er nog een dartbord in zien. De triple 20 heeft de BGR waarde van (20, 3, x). De bulleye heeft de waarde van (25, 2, x).

Als ik de coördinaten van de dart heb, kan ik kijken welke kleur de pixel heeft op die coördinaten. Dan heb ik de waarde.

Een klein probleem is hiermee dat het dartbord precies gelijk moet staan met de afbeelding. Dit is standaard niet het geval van de camera staat van boven en ziet dus alles in een andere verhouding. Hiervoor heb ik een calibratie programma gemaakt. Met de functie cv2.getPerspectiveTransform(pts1,pts2), kan ik de gemaakte afbeelding precies recht zetten. pts2 is een 4x dubbele array. Met in elke array de coördinaten van een pixel Er zijn dus vier pixels die hij verplaatst naar de punten in pts1. De waarde van die punten is het kruispunten boven de negen, vier, zeven en twee. Dus deze pixels:

Afbeeldingslocatie: http://s11.postimg.org/7ebz7aqw3/test.jpg

De pts1 punten zijn altijd hetzelfde van dit zijn de coördinaten van punten boven de (9, 4, 7 en 2) in de gemaakte afbeelding. pts1 is dus altijd: np.float32([[160, 159],[640, 159], [159,640], [640,640]])

Ik moet voor de calibratie dus zoeken naar deze hoeken en die coördinaten gebruiken als pts2. Dit zoeken doe ik moet (cv2.matchTemplat()).


En het werkt allemaal al heel goed. Als er iemand benieuwt is naar de volledige python code moet die het maar zeggen.

[ Voor 9% gewijzigd door DiederikRhee op 28-01-2015 22:14 ]


Acties:
  • 0 Henk 'm!

  • The White B.A.
  • Registratie: Januari 2010
  • Laatst online: 01-05 13:53
Hoi Diederik,

Ligt het aan mij of doen je plaatjes het niet?

Acties:
  • 0 Henk 'm!

  • DiederikRhee
  • Registratie: December 2013
  • Laatst online: 02-04 09:05
The White B.A. schreef op woensdag 28 januari 2015 @ 20:21:
Hoi Diederik,

Ligt het aan mij of doen je plaatjes het niet?
Gefixt!

Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Nu online

DukeBox

Voor je 't weet wist je 't nie

Denk het niet.. je kan niet direct naar dropbox linken.

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • DiederikRhee
  • Registratie: December 2013
  • Laatst online: 02-04 09:05
DukeBox schreef op woensdag 28 januari 2015 @ 21:20:
[...]

Denk het niet.. je kan niet direct naar dropbox linken.
Ow.... Hoe moet ik het dan doen??

Acties:
  • 0 Henk 'm!

  • DukeBox
  • Registratie: April 2000
  • Nu online

DukeBox

Voor je 't weet wist je 't nie

In je foto album zetten ?

Duct tape can't fix stupid, but it can muffle the sound.


Acties:
  • 0 Henk 'm!

  • DiederikRhee
  • Registratie: December 2013
  • Laatst online: 02-04 09:05
Nu wel als het goed is. Excuus

Acties:
  • 0 Henk 'm!

  • sypie
  • Registratie: Oktober 2000
  • Niet online
[quote]DukeBox schreef op woensdag 28 januari 2015 @ 21:20:
[...]

Denk het niet.. je kan niet direct naar dropbox linken.
[/quote]
Kan wel, je moet alleen de s achter http weghalen.
Pagina: 1