modified main.py to use picamera instead of opencv
parent
4b60dcc059
commit
8fd9584ec5
@ -0,0 +1,156 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import numpy as np
|
||||
import cv2, math
|
||||
import video
|
||||
|
||||
help_message = '''
|
||||
USAGE: opt_flow.py [<video_source>]
|
||||
|
||||
Keys:
|
||||
1 - toggle HSV flow visualization
|
||||
2 - toggle glitch
|
||||
|
||||
'''
|
||||
|
||||
# def draw_flow(img, flow, step=4): # size grid
|
||||
# h, w = img.shape[:2]
|
||||
# y, x = np.mgrid[step/2:h:step, step/2:w:step].reshape(2,-1)
|
||||
# fx, fy = flow[y,x].T
|
||||
# lines = np.vstack([x, y, x+fx, y+fy]).T.reshape(-1, 2, 2)
|
||||
# lines = np.int32(lines + 0.5)
|
||||
# vis = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
|
||||
# cv2.polylines(vis, lines, 0, (0, 0, 255)) # BGR
|
||||
# for (x1, y1), (x2, y2) in lines:
|
||||
# cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
|
||||
# return vis
|
||||
|
||||
import OSC
|
||||
# from pythonosc import osc_message_builder
|
||||
# from pythonosc import udp_client
|
||||
import time
|
||||
|
||||
def send_flow0(img, flow, step=4): # size grid
|
||||
h, w = img.shape[:2]
|
||||
y, x = np.mgrid[step/2:h:step, step/2:w:step].reshape(2,-1)
|
||||
fx, fy = flow[y,x].T
|
||||
#print "fx, fy", fx, fy
|
||||
lines = np.vstack([x, y, x+fx, y+fy]).T.reshape(-1, 2, 2)
|
||||
lines = np.int32(lines + 0.5)
|
||||
vis = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
|
||||
|
||||
|
||||
flines = []
|
||||
for (x1, y1), (x2, y2) in lines:
|
||||
# print ("y1", y1)
|
||||
if (x1 == 38 or x1 == 46 or x1 == 54 or x1 == 62 or x1 == 70 or x1 == 78 or x1 == 86 or x1 == 94 or x1 == 102 or x1 == 110 or x1 == 118) and y1 in range(38, 90, 8):
|
||||
flines.append(((x1,y1),(x2,y2)))
|
||||
normx = x1 / 8 - 4
|
||||
normy = 1 - ((y1 / 8 - 4) / 3.0)
|
||||
dx = x2-x1
|
||||
dy = y2 - y1
|
||||
m = int(math.sqrt( (dx*dx) + (dy*dy) ))
|
||||
if m>2:
|
||||
print ("dot", (normx, normy))
|
||||
msg = OSC.OSCMessage()
|
||||
msg.setAddress("/dot")
|
||||
#msg.append(dx)
|
||||
#msg.append(dy)
|
||||
#msg.append(m)
|
||||
msg.append(normx)
|
||||
msg.append(normy)
|
||||
client.send(msg)
|
||||
# client.send_message("/franc", m)
|
||||
|
||||
|
||||
# for (x1, y1), (x2, y2) in lines:
|
||||
# # print ("y1", y1)
|
||||
# if (y1 == 38 or y1 == 46 or y1 == 54 or y1 == 70 or y1 == 86) and x1 in range(38, 118, 8):
|
||||
# flines.append(((x1,y1),(x2,y2)))
|
||||
# dx = x2-x1
|
||||
# dy = y2 - y1
|
||||
# m = int(math.sqrt( (dx*dx) + (dy*dy) ))
|
||||
# if m>2:
|
||||
# print ("x", (dx, dy, m, x1, y1))
|
||||
# msg = OSC.OSCMessage()
|
||||
# msg.setAddress("/x")
|
||||
# msg.append(dx)
|
||||
# msg.append(dy)
|
||||
# msg.append(m)
|
||||
# msg.append(x1)
|
||||
# msg.append(y1)
|
||||
# client.send(msg)
|
||||
|
||||
|
||||
# Here goes BPM
|
||||
|
||||
|
||||
|
||||
|
||||
# for (x1, y1), (x2, y2) in lines:
|
||||
# # print ("y1", y1)
|
||||
# if (y1 == 10 or y1 == 110) and x1 in range(90, 150, 4):
|
||||
# flines.append(((x1,y1),(x2,y2)))
|
||||
# dx = x2-x1
|
||||
# dy = y2 - y1
|
||||
# m = int(math.sqrt( (dx*dx) + (dy*dy) ))
|
||||
# if m>2:
|
||||
# print ("l", (dx, dy, m, x1, y1))
|
||||
# msg = OSC.OSCMessage()
|
||||
# msg.setAddress("/left")
|
||||
# msg.append(dx)
|
||||
# msg.append(dy)
|
||||
# msg.append(m)
|
||||
# msg.append(x1)
|
||||
# msg.append(y1)
|
||||
# client.send(msg)
|
||||
|
||||
|
||||
flines = np.int32(flines)
|
||||
cv2.polylines(vis, flines, 0, (0, 40, 255)) # BGR
|
||||
for (x1, y1), (x2, y2) in flines:
|
||||
cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
|
||||
return vis
|
||||
|
||||
flines = np.int32(flines)
|
||||
cv2.polylines(vis, flines, 0, (0, 40, 255)) # BGR
|
||||
for (x1, y1), (x2, y2) in flines:
|
||||
cv2.circle(vis, (x1, y1), 1, (0, 255, 0), -1)
|
||||
return vis
|
||||
|
||||
# cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
print help_message
|
||||
try: fn = sys.argv[1]
|
||||
except: fn = 0
|
||||
|
||||
|
||||
# connect to pd
|
||||
# Init OSC
|
||||
client = OSC.OSCClient()
|
||||
client.connect(('127.0.0.1', 9001)) # first argument is the IP of the host, second argument is the port to use
|
||||
#data="hello"
|
||||
# client = udp_client.SimpleUDPClient("127.0.0.1", 9001)
|
||||
|
||||
# connect camera
|
||||
# cam = video.create_capture(fn)
|
||||
cam = video.create_capture("0:size=160x120") #canvas size in pixels
|
||||
ret, prev = cam.read()
|
||||
prevgray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)
|
||||
cur_glitch = prev.copy()
|
||||
|
||||
while True:
|
||||
# print "GRAB FRAME"
|
||||
ret, img = cam.read()
|
||||
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
||||
flow = cv2.calcOpticalFlowFarneback(prevgray, gray, 0.5, 3, 15, 3, 5, 1.2, 0)
|
||||
prevgray = gray
|
||||
|
||||
cv2.imshow('flow', send_flow0(gray, flow))
|
||||
|
||||
ch = 0xFF & cv2.waitKey(5)
|
||||
if ch == 27:
|
||||
break
|
||||
cv2.destroyAllWindows()
|
Loading…
Reference in New Issue