Solution
app = Flask(__name__)
@app.route("/")
def home():
return render_template('theme1.html')
@app.get("/update")
def update():
total = str(random.random()) ## replace this with what you want to send
return total
if __name__ == "__main__":
app.run(debug=True)
Document
app = Flask(__name__)
def output():
lower = np.array([35, 192, 65])
upper = np.array([179, 255, 255])
video = cv2.VideoCapture(1, 0)
times = []
total = 0
is_round = False
while True:
success, img = video.read()
image = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(image, lower, upper)
blur = cv2.GaussianBlur(mask, (15, 15), 0)
circles = cv2.HoughCircles(blur, cv2.HOUGH_GRADIENT, 1, 14,
param1=34, param2=10, minRadius=4, maxRadius=10)
circles = np.uint16(np.around(circles))
if (len(circles[0, :]) == 7) and not is_round:
start_time = time.time()
is_round = True
curr_count = 0
round_total = 0
elif is_round:
if len(circles[0, :]) == 1:
end_time = time.time()
is_round = False
time_taken = end_time - start_time
print('Round time: ', str(
datetime.timedelta(seconds=time_taken))[2:7])
times.append(time_taken)
average = sum(times) / len(times)
print('Average time: ', str(
datetime.timedelta(seconds=average))[2:7])
elif len(circles[0, :]) < 7:
curr_count = (7 - round_total) - len(circles[0, :])
total += curr_count
round_total += curr_count
for i in circles[0, :]:
cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)
cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 3)
yield total # Yield the value to get values on demand
@app.route("/")
def home():
return render_template('theme1.html')
gen_total = output() # initate the function out of the scope of update route
@app.get("/update")
def update():
global gen_total # get the global iterator
# return the next value in iterator
return str(next(gen_total))
if __name__ == "__main__":
app.run(debug=True)