#!/usr/bin/env python # coding=utf-8 # trigger espeak colophon by covering the camera with a finger # import dependencies # sudo pip install PiCamera[array] # sudo pip install aplay import imutils from imutils.video import VideoStream from io import BytesIO from PIL import Image import time, sys, os from time import sleep import cv2 import datetime from datetime import datetime from subprocess import call pwd = os.path.dirname( os.path.realpath(__file__) ) + "/" #current dir # check open cv version #print(cv2.__version__) # choose video source from camera pi vs = VideoStream(usePiCamera=True).start() # let camera warm up sleep(0.5) image = vs.read() count = 0 success = True buffer = [] playing = False iteration=0 while success: iteration = iteration +1 #print("iteration:", iteration) if iteration > 500: sys.exit() # save live frame as JPEG file cv2.imwrite("check_frame.jpg", image) image = vs.read() # open the frame img = Image.open("check_frame.jpg") # resize the frame img2 = img.resize((1, 1)) # get the color of pixel color = img2.getpixel((0, 0)) # print the color of pixel print('#{:02x}{:02x}{:02x}'.format(*color)) # create a sum of the 3 parts that constitute the value sum = color[0] + color[1] + color[2] # this allows the color not to be complete black, but also dark shades, by raising the sum value, we can increase the sensability if sum < 10 : buffer.append(True) else : # the values are set to be datetime.now to prevent the triggering of the colophon while all the values are False buffer.append(datetime.now()) # create an array with all the values that we got, when the array is bigger than 300 values, start erasing being the first one first to go if len(buffer) > 100: buffer.pop(0) # print(buffer) # For calling the colophon.wav some conditions must be met. # By the order of: # all the values must be the same # we need to have at least 200 values, this prevents it from starting when there is just 1 value if ( (len(set(buffer))==1) & ( len(buffer) > 99 ) & ( playing == False ) ): #print ("All elements in list are same") call(["aplay", pwd+"colophon.wav"]) # to record the espeak sentence into a .wav file -> # -> espeak "sentence goes here" -ven+whisper -s 150 --stdout > colophon.wav # espeak 'Iris Version 0.5 Contributors: Gill Baldwin, Simon Browne, Tancredi Di Giovanni, Paloma García, Rita Graça, Artemis Gryllaki, Pedro Sá Couto, Biyi Wen, Bohye Woo, Silvio Lorusso, Aymeric Mansoux, André Castro, Steve Rushton, Michael Murtaugh, Leslie Robbins. Produced and published by the Experimental Publishing (XPUB) program of the Piet Zwart Institute, Rotterdam, December 2018. A collaboration between the Research Department of Het Nieuwe Instituut and XPUB. playing = True # else: # print ("All elements in list are not same")