Difference between revisions of "PlayChessWithAWebCam/DetectState"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
+ | [https://gitter.im/play-chess-with-a-webcam/community Click here to comment] | ||
+ | see {{Link|target=PlayChessWithAWebCam}} for the project the DetectState approach is used in | ||
= State transitions = | = State transitions = | ||
<graphviz> | <graphviz> |
Revision as of 12:27, 17 December 2019
Click here to comment see PlayChessWithAWebCam for the project the DetectState approach is used in
State transitions
Relevant Source parts
class ImageChange:
...
def isStable(self):
delta=abs(self.movingAverage.gradient())
stable=delta<ImageChange.gradientDelta
if stable:
self.stableCounter+=1
else:
self.stableCounter=0
return stable
...
class SimpleDetector:
def updateState(self,cbImageSet):
calibrationWindow=5
ic=self.imageChange
ics=ic.changeState
if ics==ChangeState.CALIBRATING:
# leave calibrating when enough stable values are available
if ic.isStable() and ic.stableCounter>=calibrationWindow:
ic.changeState=ChangeState.PRE_MOVE
elif ics==ChangeState.PRE_MOVE:
if not ic.isStable():
ic.changeState=ChangeState.IN_MOVE
ic.minInMove=ic.pixelChanges
ic.maxInMove=ic.pixelChanges
elif ics==ChangeState.IN_MOVE:
ic.maxInMove=max(ic.maxInMove,ic.pixelChanges)
peak=ic.maxInMove-ic.minInMove
dist=ic.pixelChanges-ic.minInMove
if peak>0:
relativePeak=dist/peak
if ic.isStable():
if relativePeak<0.1:
self.onMoveDetected(cbImageSet)