Always-on computer music
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

radio.py 1.5KB

3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import cv2
  2. import numpy as np
  3. import math
  4. import itertools as it
  5. DENSITY = 4
  6. RED = [0, 0, 255]
  7. N_COLORS = 3
  8. def draw_rectangle(frame, sp, ep):
  9. """ Draw a rectangle on the frame """
  10. return cv2.rectangle(frame, sp, ep, RED)
  11. def analyze_block(frame, index, sp, ep):
  12. """ Analyze a block """
  13. block = frame[sp[1]:ep[1], sp[0]:ep[0], 0:3]
  14. average_color = np.average(block, (0, 1))
  15. sp2 = tuple(int(x) for x in (2 * np.array(sp) + np.array(ep)) / 3)
  16. ep2 = tuple(int(x) for x in (np.array(sp) + 2 * np.array(ep)) / 3)
  17. average_color = [int(x) for x in average_color]
  18. frame = cv2.rectangle(frame, sp2, ep2, average_color, 5)
  19. average_color = np.uint8([[average_color]])
  20. h, s, v = cv2.cvtColor(average_color, cv2.COLOR_BGR2HSV)[0][0]
  21. print(index, h, s, v)
  22. return frame
  23. def analyze(frame):
  24. """ Analyze the full frame """
  25. height, width, d = frame.shape
  26. n = DENSITY
  27. m = math.ceil(n * (height / width))
  28. dx = width / n
  29. dy = height / m
  30. for index, (x, y) in enumerate(it.product(range(n), range(m))):
  31. sp = (int(x * dx), int(y * dy))
  32. ep = (int(x * dx + dx), int(y * dy + dy))
  33. frame = draw_rectangle(frame, sp, ep)
  34. frame = analyze_block(frame, index, sp, ep)
  35. return frame
  36. if __name__ == '__main__':
  37. camera = cv2.VideoCapture(0)
  38. while True:
  39. ret, frame = camera.read()
  40. frame = analyze(frame)
  41. cv2.imshow('Input', frame)
  42. c = cv2.waitKey(1)
  43. if c == 27:
  44. break
  45. camera.release()
  46. cv2.destroyAllWindows()