From 0cf48f35045dcb65aac64c31b5f9cbb4a9e6be03 Mon Sep 17 00:00:00 2001 From: Phyks Date: Thu, 17 Oct 2013 00:11:16 +0200 Subject: [PATCH] Added license + new "music" script Added license information in the README. The music.py file is just here for TODO purpose, it is not working yet. --- README.md | 13 +++++++ color.py | 22 ++++++++++-- music.py | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 136 insertions(+), 3 deletions(-) create mode 100755 music.py diff --git a/README.md b/README.md index a19d8bd..7d2afd1 100644 --- a/README.md +++ b/README.md @@ -35,3 +35,16 @@ This script represents the position of your hand in the RGB space. You can then * Same as colors.py but representing it with a 3D view. * Then, use the previous code as a control interface for your computer, just like Minority Report :) * Other ideas ? It's up to you :) + +## Note about the license +# ============================================================================ +# All the scripts in this repository are released under a very permissive +# license. To make a long story short : do whatever you want with these +# scripts (but try to have fun :), I don't mind. It would be cool to quote +# the origin of the script if you reuse it, but you don't have to. I'd like to +# be noticed of what you did cool with it (if you think it's worth). :) +# Ah, I almost forgot : If by chance we ever meet and you think this script is +# worth, you can buy me a soda :) +# +# Phyks +# ============================================================================= diff --git a/color.py b/color.py index a7cab33..178f869 100755 --- a/color.py +++ b/color.py @@ -1,5 +1,20 @@ #!/bin/env python +# ============================================================================ +# This script maps the 3D position of your hand, as detected by the electrodes +# in the RGB space, allowing you to pick a color for real. + +# As all the other scripts in this repository, I release it under a very +# permissive license. To make a long story short : do whatever you want with +# this script (but try to have fun :), I don't mind. It would be cool to quote +# the origin of the script if you reuse it, but you don't have to. I'd like to +# be noticed of what you did cool with it (if you think it's worth). :) +# Ah, I almost forgot : If by chance we ever meet and you think this script is +# worth, you can buy me a soda :) +# +# Phyks +# ============================================================================= + import serial import pygame import sys @@ -28,16 +43,17 @@ def compute_value(line, minimum, maximum): serial_port = "/dev/ttyACM0" try: - opts, args = getopt.getopt(sys.argv[1:], "hs:",["help", "serial="]) + opts, args = getopt.getopt(sys.argv[1:], "hs:", ["help", "serial="]) for opt, arg in opts: if opt == "-h" or opt == "-help": print("Touchless 3D tracking with color mapping") print("\nUsage : "+sys.argv[0]+" [OPTIONS]") - print("\nTrack the position of your hand in 3D and map it in RGB space") + print("\nTrack the position of your hand in 3D and map it " + + "in RGB space") print("\nOptions :") print("\t-h (--help) \t display this help message") - print("\t-s (--serial) \t change serial port (default is "+ + print("\t-s (--serial) \t change serial port (default is " + "/dev/tty/ACM0") sys.exit(0) elif opt in ("-s", "--serial"): diff --git a/music.py b/music.py new file mode 100755 index 0000000..99951c9 --- /dev/null +++ b/music.py @@ -0,0 +1,104 @@ +#!/bin/env python + +# NOTE : This script is *not* working yet... + +# ============================================================================ +# I had to play "Petit papa Noël" in an original way for some events. So, why +# not using these cool electrodes to handle it ? Left hand would control the +# volume and right hand, the note which is played. +# +# Disclaimer : Even with a lot of practice, I'm not sure you will be able to +# play a nice with this script :) +# +# As all the other scripts in this repository, I release it under a very +# permissive license. To make a long story short : do whatever you want with +# this script (but try to have fun :), I don't mind. It would be cool to quote +# the origin of the script if you reuse it, but you don't have to. I'd like to +# be noticed of what you did cool with it (if you think it's worth). :) +# Ah, I almost forgot : If by chance we ever meet and you think this script is +# worth, you can buy me a soda :) +# +# Phyks +# ============================================================================= + +import serial +import pygame +import sys +import getopt + + +serial_port = "/dev/ttyACM0" + +try: + opts, args = getopt.getopt(sys.argv[1:], "hs:", ["help", "serial="]) + + for opt, arg in opts: + if opt == "-h" or opt == "-help": + print("Touchless 3D tracking with color mapping") + print("\nUsage : "+sys.argv[0]+" [OPTIONS]") + print("\nTrack the position of your hand in 3D and map it " + + "in RGB space") + print("\nOptions :") + print("\t-h (--help) \t display this help message") + print("\t-s (--serial) \t change serial port (default is " + + "/dev/tty/ACM0") + sys.exit(0) + elif opt in ("-s", "--serial"): + serial_port = arg +except getopt.GetoptError: + pass + +ser = serial.Serial(serial_port, 115200) + +try: + ser.open() +except Exception as e: + print("Error while opening serial port : "+str(e)) + +if ser.isOpen(): + try: + ser.flushInput() + ser.flushOutput() + + print("Calibration :") + print("Press any key to launch the program when calibration is " + + "finished.") + running = True + while running: + for event in pygame.event.get(): + if event.type == pygame.KEYDOWN: + running = False + continue + + line = ser.readline() + line = line.decode().strip("\r\n") + line = line.split(" ") + line = [int(j or 0) for j in line] + + for i in range(3): + if line[i] < minimum[i] or minimum[i] < 0: + minimum[i] = line[i] + if line[i] > maximum[i]: + maximum[i] = line[i] + + print(line) + + print("Running...") + running = True + while running: + # Read line from serial + line = ser.readline() + line = line.decode().strip("\r\n") + line = line.split(" ") + line = [int(j or 0) for j in line] + + # Compute the value for red + value[1] = value[0] + value[0] = compute_value(line, minimum, maximum) + value_bg = [(value[0][i] + value[1][i])/2 for i in range(3)] + value_text = [255 - i for i in compute_value(line, minimum, + maximum)] + + ser.close() + except Exception as e: + print("Error while fetching data from serial : "+str(e))