Jul-10-2018, 06:04 AM
Hello, need help. I am trying to build a light spectrometer on a raspberry PI 3 from "http://blog.durablescope.com/post/BuiltASpectrometer/"
when i implement spectrometer.py file I get this message:
"File "spectrometer.py", line 42
def find_aperture(pic_pixels, pic_width: int, pic_height: int) -> object:
^
SyntaxError: invalid syntax"
here is part of code:
when i implement spectrometer.py file I get this message:
"File "spectrometer.py", line 42
def find_aperture(pic_pixels, pic_width: int, pic_height: int) -> object:
^
SyntaxError: invalid syntax"
here is part of code:
import sys
import math
import time
import picamera
from fractions import Fraction
from collections import OrderedDict
from PIL import Image, ImageDraw, ImageFile, ImageFont
# scan a column to determine top and bottom of area of lightness
def get_spectrum_y_bound(pix, x, middle_y, spectrum_threshold, spectrum_threshold_duration):
c = 0
spectrum_top = middle_y
for y in range(middle_y, 0, -1):
r, g, b = pix[x, y]
brightness = r + g + b
if brightness < spectrum_threshold:
c = c + 1
if c > spectrum_threshold_duration:
break
else:
spectrum_top = y
c = 0
c = 0
spectrum_bottom = middle_y
for y in range(middle_y, middle_y * 2, 1):
r, g, b = pix[x, y]
brightness = r + g + b
if brightness < spectrum_threshold:
c = c + 1
if c > spectrum_threshold_duration:
break
else:
spectrum_bottom = y
c = 0
return spectrum_top, spectrum_bottom
# find aperture on right hand side of image along middle line
def find_aperture(pic_pixels, pic_width: int, pic_height: int) -> object:
middle_x = int(pic_width / 2)
middle_y = int(pic_height / 2)
aperture_brightest = 0
aperture_x = 0
for x in range(middle_x, pic_width, 1):
r, g, b = pic_pixels[x, middle_y]
brightness = r + g + b
if brightness > aperture_brightest:
aperture_brightest = brightness
aperture_x = x
aperture_threshold = aperture_brightest * 0.9
aperture_x1 = aperture_x
for x in range(aperture_x, middle_x, -1):
r, g, b = pic_pixels[x, middle_y]
brightness = r + g + b
if brightness < aperture_threshold:
aperture_x1 = x
break
aperture_x2 = aperture_x
for x in range(aperture_x, pic_width, 1):
r, g, b = pic_pixels[x, middle_y]
brightness = r + g + b
if brightness < aperture_threshold:
aperture_x2 = x
break
aperture_x = (aperture_x1 + aperture_x2) / 2
spectrum_threshold_duration = 64
aperture_y_bounds = get_spectrum_y_bound(pic_pixels, aperture_x, middle_y, aperture_threshold, spectrum_threshold_duration)
aperture_y = (aperture_y_bounds[0] + aperture_y_bounds[1]) / 2
aperture_height = (aperture_y_bounds[1] - aperture_y_bounds[0]) * 0.9
return {'x': aperture_x, 'y': aperture_y, 'h': aperture_height, 'b': aperture_brightest}Thank you
