changed the way to call Point2D functions.

Added missing point array generation code
This commit is contained in:
CiscoTheWolf 2023-05-29 20:34:21 +02:00
parent 3a9be4e4ea
commit d35fc3b1ea
2 changed files with 26 additions and 11 deletions

View file

@ -77,6 +77,21 @@ def generate_point_array_from_image(image):
if image_hash in cached_point_arrays:
return [Point2D(point["x"], point["y"], tuple(point["color"])) for point in cached_point_arrays[image_hash]]
width, height = image.size
pixel_array = []
for y in range(height):
for x in range(width):
pixel = image.getpixel((x, y))
if pixel != (0, 0, 0): # any non-white pixels
point = {"x": x, "y": y, "color": pixel}
pixel_array.append(point)
cached_point_arrays[image_hash] = pixel_array
save_cached_point_arrays(cached_point_arrays)
return [Point2D(point["x"], point["y"], tuple(point["color"])) for point in pixel_array]
def generate_image_from_point_array(points: list[Point2D], width: int, height: int) -> Image:

View file

@ -1,5 +1,5 @@
from rgbmatrix import RGBMatrix, RGBMatrixOptions
import Point2D
from Point2D import interpolate_point_pairs, mirror_points, generate_image_from_point_array, generate_point_array_from_image, pair_points
from ProotState import ProotState
import time
@ -78,10 +78,10 @@ startT = curr_time = round(time.time()*1000)
# generate pixel arrays from each image
# TODO ^ storing and loading lists of points will take away this step. (it will require a dedicated script to precompute these)
points_left_eye_open = Point2D.generate_point_array_from_image(image_left_eye_open)
points_left_eye_closed = Point2D.generate_point_array_from_image(image_left_eye_closed)
points_left_nose = Point2D.generate_point_array_from_image(image_left_nose)
points_left_mouth = Point2D.generate_point_array_from_image(image_left_mouth)
points_left_eye_open = generate_point_array_from_image(image_left_eye_open)
points_left_eye_closed = generate_point_array_from_image(image_left_eye_closed)
points_left_nose = generate_point_array_from_image(image_left_nose)
points_left_mouth = generate_point_array_from_image(image_left_mouth)
endT = curr_time = round(time.time()*1000)
print("generating pixel array took: " + str(endT - startT) + " ms")
@ -93,7 +93,7 @@ startT = curr_time = round(time.time()*1000)
#calculate the point pairs between the open and closed left eye
# TODO look into precomputing and storing these animations before runtime
left_eye_blink_pairs = Point2D.pair_points(points_left_eye_open, points_left_eye_closed)
left_eye_blink_pairs = pair_points(points_left_eye_open, points_left_eye_closed)
endT = curr_time = round(time.time()*1000)
print("pairing points for one eye took: " + str(endT - startT) + " ms")
@ -107,13 +107,13 @@ startT = curr_time = round(time.time()*1000)
for alpha in range(0,11):
offscreen_interpolated_canvas = matrix.CreateFrameCanvas()
left_eye = Point2D.interpolate_point_pairs(left_eye_blink_pairs, alpha/10)
right_eye = Point2D.mirror_points(left_eye)
nose = points_left_nose + Point2D.mirror_points(points_left_nose)
mouth = points_left_mouth + Point2D.mirror_points(points_left_mouth)
left_eye = interpolate_point_pairs(left_eye_blink_pairs, alpha/10)
right_eye = mirror_points(left_eye)
nose = points_left_nose + mirror_points(points_left_nose)
mouth = points_left_mouth + mirror_points(points_left_mouth)
face = left_eye + right_eye + nose + mouth
interpolated_face_image = Point2D.generate_image_from_point_array(face, 128, 32)
interpolated_face_image = generate_image_from_point_array(face, 128, 32)
offscreen_interpolated_canvas.SetImage(interpolated_face_image, unsafe=False)
blinkFrameCanvases.append(offscreen_interpolated_canvas)