Rpi als IP CAM

Begonnen von no_Legend, 17 Juli 2014, 16:59:56

Vorheriges Thema - Nächstes Thema

Waldmensch

Hallo, bin über Google auf diesen Thread gestoßen. Ich habe eine IP-Cam und versuche krampfhaft entweder ein Standbild alle X Sekunden auf einen FTP zu verschieben oder per HTTP einen Schnappschuss zu holen. Über wireshark habe ich folgendes abgegriffen:

{
    "Name": "SystemInfo",
    "Ret": 100,
    "SessionID": "0x25",
    "SystemInfo": {
        "AlarmInChannel": 2,
        "AlarmOutChannel": 1,
        "AudioInChannel": 1,
        "BuildTime": "2014-10-23 16:54:02",
        "CombineSwitch": 0,
        "DeviceRunTime": "0x00000CE6",
        "DigChannel": 0,
        "EncryptVersion": "Unknown",
        "ExtraChannel": 0,
        "HardWare": "HI3518E_50H10L_S39",
        "HardWareVersion": "Unknown",
        "SerialNo": "8931c344f31c5dcc",
        "SoftWareVersion": "V4.02.R12.00006510.10010.1303",
        "TalkInChannel": 1,
        "TalkOutChannel": 1,
        "UpdataTime": "",
        "UpdataType": "0x00000000",
        "VideoInChannel": 1,
        "VideoOutChannel": 1
    }
}


Das Telnet PW von weiter oben passt, ich komme drauf. Hier wurde eine Firmware verlinkt "General_HZXM_IPC_HI3518E_50H10L_S38_V4.02.R12.20140915_ALL.bin" allerdings steht bei mir _S39_ Ich trau mich nicht, das zu flashen. Kennt sich jemand mit diesen chinesischen Dingern aus? Ziel ist halt einfach eine Webcam die alle X Sekunden einen Schnappschuss liefert. Nicht nur bei bewegung sondern ganz stur nach Zeit. Die Software läßt auch irgendwelche Alarmkanäle zu, also vermutlich Schalter die ein Bild auslösen. Das könnte man ja mit einem Arduino simulieren. Allerdings hatte ich die Cam noch nicht offen, um zu schauen ob da Anschlüsse am Board sind.

HolyMoly

Mal abgesehen davon dass das Interface dieser Camera so schlecht ist ... Standbild alle X Sekunden auf einen FTP müsste mit Boardmitteln gehen...
Vergiss telnet ... wenn ich mich recht erinnere sind die config files gescrambled und werden jedes mal von der proprietären software unscrambled. Wenn dann könntest du versuchen ein eigenes motion auf dieser camerplatform zu installieren...
FHEM auf Raspi2 & Radxa Rock

Waldmensch

Zitat von: HolyMoly am 16 Juli 2015, 09:30:30
Mal abgesehen davon dass das Interface dieser Camera so schlecht ist ... Standbild alle X Sekunden auf einen FTP müsste mit Boardmitteln gehen...
Vergiss telnet ... wenn ich mich recht erinnere sind die config files gescrambled und werden jedes mal von der proprietären software unscrambled. Wenn dann könntest du versuchen ein eigenes motion auf dieser camerplatform zu installieren...

Das Webinterface ist grottenschlecht, ich habe es nur im IE zum Laufen bekommen. Die beigelegte CD ist kaputt bzw. leer. Ich habe in dem Webinterface nur die Möglichkeit eines FTP uploads bei "Alarm". Das heißt, entweder bei Bewegung im Bild oder beim betätigen eines Alarmkontaktes (keine Ahnung ob am Board der Kamera ein Anschluss dafür ist). Das einzige, was sich der Kamera von außen entlocken läßt, ist der rtsp stream im VLC, mit dem weiter oben schon geposteten Link. Die "üblichen Verdächtigen" von hier http://www.ispyconnect.com/man.aspx?n=IPCC funktionieren alle nicht.

Ein eigenes motion installieren/ auf der Platform zu kompilieren ist mir zu hoch. Es scheint eine kleine community für diese Cam, bzw. eine Baugleiche Dom Cam in Russland zu geben. Allerdings werde ich dort auch nicht wirklich schlau. Hier hat jemand richtig nachgeforscht http://www.ipcamtalk.com/showthread.php/1812-Review-TOP-201-Super-Mini-720P-HD-IP-Cam-(The-Cheapest-IP-Cam-So-Far-!!)?s=10afacd22fc1c4d0d7eff0643906cb53&p=19499&viewfull=1#post19499 allerdings komme ich damit auch nicht wirklich weiter :-(

Waldmensch

#48
Mit Bordmitteln dieser Kamera ist es nicht möglich, zeitgesteuerte Bilder (Bsp alle 5 Minuten) zu machen. Aber wir sind ja hier in der Bastel Ecke ;)

Mehr Details und wie der Entwicklungsweg war ist hier dokumentiert: http://www.ipcamtalk.com/showthread.php/1812-Review-TOP-201-Super-Mini-720P-HD-IP-Cam-(The-Cheapest-IP-Cam-So-Far-!!)/page40

Wenn man die Kamera öffnet, sieht man auf dem Board ein paar ungenutzte Lötpads. Das ist ein USB Anschluss und ein Signaleingang. Bei manchen Modellen hängt dort ein WLAN Adapter dran. Ich habe mir Pin1 (GND), Pin4 (+5V) und Pin8 (Alarm Signal) rausgeführt. Dort habe ich einen Arduino Nano angeschlossen und lege den Signal Pin über einen Optokoppler auf Masse. Die Kamera Registriert das als Alarm und macht einen Schnappschuß, der über FTP hochgeladen werden kann.

Hier das triviale Arduino Programm
int led = 13;
int out = 6;

// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pins as an output. Led is the status LED on arduino as indicator
  pinMode(led, OUTPUT);
  pinMode(out, OUTPUT); 
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);  // turn the LED on (HIGH is the voltage level)
  digitalWrite(out, HIGH);  // fire/close D6
  delay(500);               // wait for 500ms
  digitalWrite(led, LOW);   // turn the LED off by making the voltage LOW
  digitalWrite(out, LOW);   // open D6
  delay(300000);             // wait for 5 minutes
}


Jetzt gibt es aber noch zusätzliche Probleme:
1) Die Kamera macht nicht nur ein Bild sondern 2, keine Ahnung warum, und lädt die auf den FTP
2) Die Kamera erstellt auf dem FTP eine sehr tiefe Baumstruktur (Verzeichnisse)
3) Die Bilder sind in einem ganz komischen Format, kein 16:9 wie man es von einer 720p Kamera erwarten würde.

Um das oben zu fixen habe ich mir ein kleines Python script geschrieben, was die Bilder aus den Tiefen des Baums holt, Dubletten löscht und das Seitenverhältnis geraderückt. Dieses Script läuft quasi auf dem FTP Server über einen cronjob regelmäßig.

import os, errno
import glob
import sys
import PIL
from PIL import Image
import datetime

#------ Start settings ------
#the path your camera uploads
search_path = '/home/tommy/Bilder'
#the path you expext the images in format YYYY-MM-DD_HHMM
new_path = '/home/tommy/Musik/test'
#expected width
target_width = 1280
#expected heigth
target_height = 720
#remove originals
remove = true
#------ End Settings -------

def symlink_force(target, link_name):
    try:
        os.symlink(target, link_name)
    except OSError, e:
        if e.errno == errno.EEXIST:
            os.remove(link_name)
            os.symlink(target, link_name)

def modification_date(filename):
    t = os.path.getmtime(filename)
    return datetime.datetime.fromtimestamp(t).strftime('%Y-%m-%d')
   
for root, subdirs, files in os.walk(search_path):

    for filename in files:
        file_path = os.path.join(root, filename)
        f_name, f_extension = os.path.splitext(file_path)
        new_file_path = os.path.join(new_path, modification_date(file_path) + '_' + filename[:4] + f_extension)
           
       
        if not os.path.isfile(new_file_path):
            stat = os.stat(file_path)
           
            #image processing
            img = Image.open(file_path)
            img = img.resize((target_width, target_height), PIL.Image.ANTIALIAS)
            img.save(new_file_path)
               
            #setting creation date from original
            os.utime(new_file_path, (stat.st_atime, stat.st_mtime))
           
        #delete original file
        if remove:
            remove(file_path)

newest = max(glob.iglob(os.path.join(new_path, '*.jpg')), key=os.path.getmtime)
symlink_force(newest, os.path.join(newest, os.path.join(new_path,'last_image.jpg')))
print('all done')


Das ist zwar alles nicht besonders hübsch, aber besser als die Cam in der Bastelkiste zu versenken

Marlen

Zitat von: Norbert_G am 28 August 2014, 23:53:03
Hallo noch einmal,

ich kann mittlerweile Standbilder erzeugen! Das Ganze funktioniert per avconf. Hier wird aus dem Stream ein Bild abgegriffen und unter camera.jpg gespeichert.

avconv -y -i rtsp://192.168.178.223/user=admin_password=_channel=1_stream=0.sdp?real_stream -r 10 -f image2 /opt/fhem/camera.jpg

ein HTTP-Stream wäre mir lieber, aber man wird sehen...

/Norbert


Wo muss das avconv hin????