diff --git a/entropy.py b/entropy.py index 854b618..ed7f3d7 100644 --- a/entropy.py +++ b/entropy.py @@ -13,7 +13,7 @@ def fetch_frame_opencv(url): raise ValueError("Failed to fetch frame.") return frame -def generate_random_numbers(frame, bit_lengths=[512]): +def generate_random_numbers(frame, bit_lengths): _, img_encoded = cv2.imencode('.jpg', frame) img_bytes = img_encoded.tobytes() entropy = hashlib.sha256(img_bytes).digest() @@ -22,22 +22,21 @@ def generate_random_numbers(frame, bit_lengths=[512]): def main(): parser = argparse.ArgumentParser(description="Generate random numbers from camera entropy.") parser.add_argument("--url", default="http://192.168.0.200/mjpg/video.mjpg", help="Camera MJPEG stream URL") - parser.add_argument("--single", action="store_true", help="Run once (single mode)") + parser.add_argument("--single", type=int, default=1, help="Generate N random numbers and exit (default: 1)") + parser.add_argument("--bit", type=int, default=256, help="Bit length of each random number (default: 256)") args = parser.parse_args() - while True: + for i in range(args.single): try: frame = fetch_frame_opencv(args.url) - random_numbers = generate_random_numbers(frame) + random_numbers = generate_random_numbers(frame, [args.bit]) for number in random_numbers.values(): print(f"{number:x}") # Print as hex without '0x' prefix except Exception as e: print(f"Error: {e}", file=sys.stderr) - if args.single: - return # Exit after one attempt in single mode - if args.single: - break # Exit after one iteration in single mode - time.sleep(1) # Wait 1 second before fetching the next frame + return 1 + if args.single > 1 and i < args.single - 1: + time.sleep(1) # Small delay between frames in single mode if __name__ == "__main__": import sys