def white_balance(device, cap, ctrl, debug, log_file): results = [] cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3840) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) for c in ctrl: logprint.send("\nwhite_balance_temperature: {:<5}".format(c), debug, log_file) subprocess.call(['{} -c white_balance_temperature={}'.format(device, str(c))], shell=True) wb = cap.get(cv2.CAP_PROP_TEMPERATURE) logprint.send("White balance temperature: {}".format(wb), debug, log_file) results.append(wb) return results
def brightness(device, cap, ctrl, debug, log_file): results = [] cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3840) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) for c in ctrl: logprint.send("\nBrightness: {:<5}".format(c), debug, log_file) subprocess.call(['{} -c brightness={}'.format(device, str(c))], shell=True) t_end = time.time() + 3 while True: ret, frame = cap.read() if time.time() > t_end and ret is True: break # convert to grayscale and calculate luma f = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) luma = np.average(f) logprint.send("luma: {:<5}".format(luma), debug, log_file) results.append(luma) return results
def sharpness(device, cap, ctrl, debug, log_file): results = [] cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3840) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) for c in ctrl: logprint.send("\nsharpness: {:<5}".format(c), debug, log_file) subprocess.call(['{} -c sharpness={}'.format(device, str(c))], shell=True) t_end = time.time() + 3 while True: ret, frame = cap.read() if time.time() > t_end and ret is True: break # convert to grayscale and calculate lapacian variance f = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) variance = cv2.Laplacian(f, cv2.CV_64F).var() logprint.send("Laplacian variance: {}".format(variance), debug, log_file) results.append(variance) return results
def saturation(device, cap, ctrl, debug, log_file): results = [] cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3840) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) for c in ctrl: logprint.send("\nsaturation: {:<5}".format(c), debug, log_file) subprocess.call(['{} -c saturation={}'.format(device, str(c))], shell=True) t_end = time.time() + 3 while True: ret, frame = cap.read() if time.time() > t_end and ret is True: break # convert to HSV and calculate saturation average hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) h, s, v = cv2.split(hsv) sat_avg = np.average(s) logprint.send("Saturation (HSV) avg: {}".format(sat_avg), debug, log_file) results.append(sat_avg) return results
def contrast(device, cap, ctrl, debug, log_file): results = [] cap.set(cv2.CAP_PROP_FRAME_WIDTH, 3840) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) for c in ctrl: logprint.send("\nContrast: {:<5}".format(c), debug, log_file) subprocess.call(['{} -c contrast={}'.format(device, str(c))], shell=True) t_end = time.time() + 3 while True: ret, frame = cap.read() if time.time() > t_end and ret is True: break # convert to grayscale and calculate otsu f = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(f, 0, 255, cv2.THRESH_OTSU) otsu = np.average(thresh) logprint.send("Otsu threshold: {}".format(otsu), debug, log_file) results.append(otsu) return results
def get_set(device, prop, val, debug, log_file): subprocess.call(['{} -c {}={}'.format(device, prop, str(val))], shell=True) s = subprocess.check_output(['{} -C {}'.format(device, prop)], shell=True) s = s.decode('UTF-8') value = re.match("(.*): (\d+)", s) logprint.send("setting {} to: {}".format(prop, value.group(2)), debug, log_file) if value.group(2) != str(val): logprint.send("FAIL: {} get/set not working as intended".format(prop), debug, log_file) return -1 else: logprint.send("PASS: Successful {} get/set".format(prop), debug, log_file) return 1