######################################################################
#       Count_Coins.py
#
# This program can detect circles and counting the coins.
######################################################################

import cv2
import numpy as np
import CaptureDeviceRPiCamera

try:
    import cv2.cv as cv
except: pass

def CountCoins(img, cimg):
    circles = []
    try:
        circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
                            param1=50,param2=30,minRadius=0,maxRadius=0)
    except:
        circles = cv2.HoughCircles(img, cv.CV_HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)

    if(circles is None):
        return

    circles = np.uint16(np.around(circles))
    for i in circles[0, :]:
        # draw the outer circle
        cv2.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2)
        # draw the center of the circle
        cv2.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3)

if __name__ == "__main__":
    captureDevice = CaptureDeviceRPiCamera.CaptureDeviceRPiCamera((320, 240), 32)
    while(True):
        img = captureDevice.GrabFrame(True)
        img = cv2.medianBlur(img, 5)
        cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
        CountCoins(img, cimg)
        cv2.imshow('detected circles',cimg)
        if (cv2.waitKey(1) and 0xFF == ord('q')):
            break

    cv2.destroyAllWindows()