import cv2
import numpy as np

# Подключаемся к камере
cam = cv2.VideoCapture(0)

while True:
    _, frame = cam.read()
    # Перевод изображения в HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # Немного размываем изображение
    hsv = cv2.blur(hsv,(5,5))

    # Задаем параметр из прошлого примера
    mask = cv2.inRange(hsv, (78,154,93),(86,224,255))

    # С помощью специального алгоритма ищем контур обьекта
    (contours, hierarchy) = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    # Отрисовывем найденый контур чтобы его было видно на экране
    cv2.drawContours(frame, contours, -1, (255,0,0), 3, cv2.LINE_AA, hierarchy, 1 )

    max_radius = 0
    center = (0,0)

    # Находим контур с максимальным радиусом
    for contour in contours:
        (x,y),radius = cv2.minEnclosingCircle(contour)
        if max_radius < int(radius):
            max_radius = int(radius)
            center = (int(x),int(y))

    # Описываем максимальный контур кругом        
    frame = cv2.circle(frame,center,max_radius,(0,255,0),2)

    S = 3.1415 * max_radius * max_radius
    # Выводим на эран площадь круга
    cv2.putText(frame, str(S), (30, 30),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)
    
    # Выводим сообщение если круг слишком близко или далеко
    if S > 100:
        if S > 10000:
            cv2.putText(frame, "UP", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)
        elif S < 5000:
            cv2.putText(frame, "DOWN", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)

    # Промежуточные изображения
    #cv2.imshow("Image with opening", mask)
    #cv2.imshow("Image with closing", hsv)
    
    # выводим то что получилось вместе с текстом и контуром
    cv2.imshow("Image", frame)
 
    k = cv2.waitKey(2)
    if k == 27:
        cv2.destroyAllWindows()
        break