From ab36b50a304549d6d549d1520bb9dbf8a7f7b94d Mon Sep 17 00:00:00 2001 From: Radek Date: Thu, 12 Mar 2026 10:17:18 +0000 Subject: [PATCH] random loop --- entropy.py | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/entropy.py b/entropy.py index 8b2fe0e..854b618 100644 --- a/entropy.py +++ b/entropy.py @@ -1,6 +1,9 @@ +#!/usr/bin/env python3 import cv2 import hashlib import secrets +import time +import argparse def fetch_frame_opencv(url): cap = cv2.VideoCapture(url) @@ -10,18 +13,32 @@ def fetch_frame_opencv(url): raise ValueError("Failed to fetch frame.") return frame -def generate_random_numbers(frame, bit_lengths=[16, 32, 64, 128, 256, 512, 1024, 2048, 4096): +def generate_random_numbers(frame, bit_lengths=[512]): _, img_encoded = cv2.imencode('.jpg', frame) img_bytes = img_encoded.tobytes() entropy = hashlib.sha256(img_bytes).digest() - # Use secrets.randbits directly return {length: secrets.randbits(length) for length in bit_lengths} -url = "http://192.168.0.200/mjpg/video.mjpg" -try: - frame = fetch_frame_opencv(url) - random_numbers = generate_random_numbers(frame) - for length, number in random_numbers.items(): - print(f"{length}-bit random number: {hex(number)}") -except Exception as e: - print(f"Error: {e}") +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)") + args = parser.parse_args() + + while True: + try: + frame = fetch_frame_opencv(args.url) + random_numbers = generate_random_numbers(frame) + 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 + +if __name__ == "__main__": + import sys + main()