» »

Droidcam, shranjevanje posnetka?

Droidcam, shranjevanje posnetka?

zamotsloteh ::

Droidcam (odslužen mobilnik z še malo delujočo baterijo) in PC (prenosnik) sta povezana in slika pride na ekran PC-ja. Je nadzorna kamera parkirnega prostora ob garaži in bi rad snemal in shranjeval dogodke na parkirišču (v moji lasti) po možnosti na disk E: v neko mapo tako da bi zvečer lahko pregledal dogodke čez celi dan na parkirišču. Gre za vandalizem. Kakšen program se da uporabiti za to in kake so nastavitve.
Prosim za pomoč.
LP
Jest

zamotsloteh ::

Naše program in odlično dela v tej kombinaciji. CAMSTUDIO

acookook ::

Za potrebo zajema kamer(e) iz iPhonea in analize slike s OpenCV, potrebujem 60FPSov oziroma več - androidne naprave in eken h9r tega na žalost niso sposobne, zato sem se odločil za DroidCam Web Cam & OBS za iphone. Trenutno je zadeva sicer dovolj dobra, bi pa probal programabilno nastavitve urejati preko skripte s Pythonom in HTTP klici, npr namesto glavne kamere bi uporabil UltraWide kamero. Problem je, da ne vem kako bi ugotovil, kam točno poslati request, da bo delovalo, saj izgleda, da ima tale zadeva več različnih endpointov, od katerih se v preko web vmesnika (moram kupiti pro ali odstraniti z ublockom) kot izgleda kličejo stari endpointi (vsaj na iphone vereziji), drugje pa novi.
Primer je recimo ko hočem dobiti podatek o bateriji in je delujoč klic GET /battery (sem si pomagal z wiresharkom in dobim pravilen % napolnjenosti baterije) ne delujoč pa na web vmesniku GET /v1/camera/battery (al nekaj podobnega in dobim 0% ali pa HTTP 500/550 error). Prav tako je kolegu z androidom preko vmesnika uspelo vklopiti flash, na iphone-u pa ne. Je kak podoben pogram, ki to omogoča, ker enostavno ne zaupam aplikaciji, da bi dal 15€?
.

acookook ::

je bilo treba kupiti app ker očitno so put requesti zaklenjeni na Pro verzijo aplikacije.
Anyway tukaj je wrapper, če ni typotov bi moralo delati:
import requests
import json
import os

class DroidCamController:
    """
    Controls DroidCam Pro on iPhone 16 Pro Max (hardcoded mappings).
    Torch states are tracked per camera index.
    Future configs can go into /Configurations.
    """

    CONF_PATH = "./Configurations"
    TORCH_STATE_JSON = "torch_state.json"
    TORCH_STATE_CONF = f"{CONF_PATH}/{TORCH_STATE_JSON}"

    CAMERA_MAP = {
        0: {"name": "Front", "torch_supported": False},
        1: {"name": "Main", "torch_supported": True},
        2: {"name": "Telephoto", "torch_supported": True},
        3: {"name": "Ultrawide", "torch_supported": True}
    }

    def __init__(self, ip, port=4747):
        self.base_url = f"http://{ip}:{port}"
        self.current_camera = 1  # Default to Main Camera
        self.torch_state = {}    # Dict: camera_index -> torch_state
        self._load_torch_state()

    def _load_torch_state(self):
        if os.path.exists(self.TORCH_STATE_CONF):
            with open(self.TORCH_STATE_CONF, "r") as f:
                self.torch_state = json.load(f)
        else:
            self.torch_state = {"1": False, "2": False, "3": False}

    def _save_torch_state(self):
        os.makedirs(self.CONF_PATH, exist_ok=True)
        with open(self.TORCH_STATE_CONF, "w") as f:
            json.dump(self.torch_state, f)

    def _put(self, endpoint):
        url = f"{self.base_url}{endpoint}"
        try:
            r = requests.put(url, timeout=2)
            r.raise_for_status()
        except Exception as e:
            print(f"Failed PUT {url}: {e}")

    def select_camera(self, cam_id):
        if cam_id not in self.CAMERA_MAP:
            print(f"Camera ID {cam_id} not recognized.")
            return
        self._put(f"/v1/camera/active/{cam_id}")
        self.current_camera = cam_id
        print(f"Switched to {self.CAMERA_MAP[cam_id]['name']}")
        self._sync_torch_state()

    def _sync_torch_state(self):
        cam_id = str(self.current_camera)
        if self.CAMERA_MAP[self.current_camera]['torch_supported']:
            desired_state = self.torch_state.get(cam_id, False)
            print(f"Torch Sync for Camera {cam_id}: {'ON' if desired_state else 'OFF'}")
            self._put("/v1/camera/torch_toggle")  # Toggle once to ensure sync
            if not desired_state:
                self._put("/v1/camera/torch_toggle")  # Toggle back if OFF desired
        else:
            print("Torch not available on current camera.")

    def toggle_torch(self):
        cam_id = str(self.current_camera)
        if self.CAMERA_MAP[self.current_camera]['torch_supported']:
            self._put("/v1/camera/torch_toggle")
            current_state = self.torch_state.get(cam_id, False)
            self.torch_state[cam_id] = not current_state
            self._save_torch_state()
            print(f"Torch manually toggled to: {'ON' if self.torch_state[cam_id] else 'OFF'} for Camera {cam_id}")
        else:
            print("Torch toggle ignored: not supported on current camera.")

    def set_zoom(self, level):
        self._put(f"/v3/camera/zoom/{level}")

    def set_exposure(self, value):
        self._put(f"/v3/camera/ev/{value}")

    def set_white_balance(self, kelvin):
        self._put(f"/v3/camera/wb/{kelvin}")

    def set_manual_focus(self, value):
        self._put(f"/v3/camera/mf/{value}")

    def autofocus(self):
        self._put("/v1/camera/autofocus")

    def set_autofocus_mode(self, mode):
        self._put(f"/v1/camera/autofocus_mode/{mode}")

    def set_wb_mode(self, mode):
        self._put(f"/v1/camera/wb_mode/{mode}")

    def lock_exposure(self):
        self._put("/v1/camera/el_toggle")

    def lock_white_balance(self):
        self._put("/v1/camera/wbl_toggle")

    def apply_default_settings(self):
        """
        Applies hardcoded defaults. Configurations can later be added in /Configurations.
        """
        self.select_camera(1)  # Main Camera
        self.set_zoom(1.5)
        self.set_exposure(0)
        self.set_white_balance(6000)
        self.set_autofocus_mode("auto")
        print("Default settings applied.")

# Example Usage in detection.py (after opening stream):
# cam_ctrl = DroidCamController("10.15.58.196")
# cam_ctrl.apply_default_settings()
.

acookook ::

.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Katera športna kamera

Oddelek: Kaj kupiti
424020 (283) acookook
!

[Python] Povezave

Oddelek: Programiranje
4345875 (1822) d4vid

Banggood nasveti, kuponi in čas pošiljanja (strani: 1 2 3 418 19 20 21 )

Oddelek: Kaj kupiti
1010118008 (68138) bluefish
»

Predstavitev dvojiškega drevesa z seznamom

Oddelek: Programiranje
142100 (1700) ktka

Več podobnih tem