Add video abstraction class
This commit is contained in:
166
banner_ivu_export.py
Executable file
166
banner_ivu_export.py
Executable file
@@ -0,0 +1,166 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import socket
|
||||
from datetime import datetime
|
||||
from time import sleep
|
||||
from util import fprint
|
||||
|
||||
"""
|
||||
|
||||
from: https://github.com/MoisesBrito31/ve_data_log/blob/main/serverContagem/VE/drive.py
|
||||
(no license)
|
||||
|
||||
(partially) adapted to English language & iVu camera instead of classic VE by Cole Deck
|
||||
|
||||
"""
|
||||
|
||||
def gravaLog(ip="1",tipo="Evento", msg="", file="log_imagem.txt"):
|
||||
# removed full logging
|
||||
fprint(msg)
|
||||
|
||||
class DriveImg():
|
||||
HEADERSIZE = 100
|
||||
ip = "192.168.0.1"
|
||||
port = 32200
|
||||
onLine = False
|
||||
|
||||
def __init__(self, ip, port, pasta = "media/"):
|
||||
self.pasta = pasta
|
||||
self.ip=ip
|
||||
self.port = port
|
||||
self.trans = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
self.trans.settimeout(5)
|
||||
fprint("Trying to connect...")
|
||||
try:
|
||||
self.trans.connect((self.ip,self.port))
|
||||
self.onLine = True
|
||||
fprint("Camera Online")
|
||||
#self.trans.close()
|
||||
except:
|
||||
self.onLine = False
|
||||
fprint("Offline")
|
||||
|
||||
def read_img(self):
|
||||
resposta = 'Falha'
|
||||
try:
|
||||
if not self.onLine:
|
||||
#print(f'tentando Conectar camera {self.ip}...')
|
||||
gravaLog(ip=self.ip,msg=f'Trying to connect...')
|
||||
sleep(2)
|
||||
try:
|
||||
self.trans = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
self.trans.connect((self.ip,self.PORT))
|
||||
self.onLine = True
|
||||
gravaLog(ip=self.ip,msg=f'Connection established.')
|
||||
except:
|
||||
self.onLine = False
|
||||
self.trans.close()
|
||||
return resposta
|
||||
ret = self.trans.recv(64)
|
||||
try:
|
||||
valida = str(ret[0:15].decode('UTF-8'))
|
||||
#print(valida)
|
||||
if valida.find("TC IMAGE")<0:
|
||||
self.onLine = False
|
||||
self.trans.close()
|
||||
sleep(2)
|
||||
gravaLog(ip=self.ip,tipo="Falha",msg=f'Unable to find TC IMAGE bookmark')
|
||||
return "Error"
|
||||
except Exception as ex:
|
||||
self.onLine = False
|
||||
self.trans.close()
|
||||
sleep(2)
|
||||
gravaLog(ip=self.ip,tipo="Falha",msg=f'Error - {str(ex)}')
|
||||
return "Error"
|
||||
if ret:
|
||||
frame = int.from_bytes(ret[24:27],"little")
|
||||
isJpeg = int.from_bytes(ret[32:33],"little")
|
||||
img_size = int.from_bytes(ret[20:23],"little")
|
||||
data = self.trans.recv(5000)
|
||||
while img_size>len(data) and ret:
|
||||
ret = self.trans.recv(10000)
|
||||
if ret:
|
||||
data = data+ret
|
||||
#print(f'{len(ret)}b dados recebidos, total de: {len(data)+64}b')
|
||||
else:
|
||||
gravaLog(ip=self.ip,tipo="Falha",msg="Unable to recieve the image")
|
||||
self.onLine = False
|
||||
return "Unable to recieve the image"
|
||||
hoje = datetime.now()
|
||||
idcam = self.ip.split('.')
|
||||
"""try:
|
||||
nomeFile = f'{hoje.day}{hoje.month}{hoje.year}-{idcam[3]}-{frame}'
|
||||
if isJpeg==1:
|
||||
file = open(f'{self.pasta}{nomeFile}.jpg','wb')
|
||||
nomeFile = f'{nomeFile}.jpg'
|
||||
else:
|
||||
file = open(f'{self.pasta}{nomeFile}.bmp','wb')
|
||||
nomeFile = f'{nomeFile}.bmp'
|
||||
file.write(data)
|
||||
file.close()
|
||||
except Exception as ex:
|
||||
sleep(2)
|
||||
gravaLog(ip=self.ip,tipo="Falha",msg=f'Error - {str(ex)}')
|
||||
return "Falha"
|
||||
"""
|
||||
if isJpeg==1:
|
||||
return "jpeg",data
|
||||
else:
|
||||
return "bmp",data
|
||||
|
||||
except Exception as ex:
|
||||
gravaLog(ip=self.ip,tipo="Falha Generica",msg=f'Error - {str(ex)}')
|
||||
#print(f'erro {str(ex)}')
|
||||
self.onLine = False
|
||||
self.trans.close()
|
||||
sleep(2)
|
||||
return resposta
|
||||
|
||||
class DriveData():
|
||||
HEADERSIZE = 100
|
||||
ip = "192.168.0.1"
|
||||
port = 32100
|
||||
onLine = False
|
||||
|
||||
def __init__(self, ip, port):
|
||||
gravaLog(ip=self.ip,msg=f'iniciou drive',file="log_data.txt")
|
||||
self.ip=ip
|
||||
self.port = port
|
||||
self.trans = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
try:
|
||||
self.trans.connect((self.ip,self.port))
|
||||
self.onLine = True
|
||||
except:
|
||||
self.onLine = False
|
||||
|
||||
def read_data(self):
|
||||
resposta = 'falha'
|
||||
try:
|
||||
if not self.onLine:
|
||||
#print(f'tentando Conectar...\n')
|
||||
gravaLog(ip=self.ip,msg=f'tentando Conectar...',file="log_data.txt")
|
||||
sleep(2)
|
||||
try:
|
||||
self.trans = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||
self.trans.connect((self.ip,self.PORT))
|
||||
self.onLine = True
|
||||
gravaLog(ip=self.ip,msg=f'Conexão restabelecida...',file="log_data.txt")
|
||||
except:
|
||||
self.onLine = False
|
||||
return resposta
|
||||
resposta = self.trans.recv(self.HEADERSIZE).decode("utf-8")
|
||||
resposta = str(resposta).split(',')
|
||||
return resposta
|
||||
except Exception as ex:
|
||||
self.onLine = False
|
||||
gravaLog(ip=self.ip,tipo="Falha Generica",msg=f'erro {str(ex)}',file="log_data.txt")
|
||||
sleep(2)
|
||||
return resposta
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test = DriveImg("192.168.1.125", 32200)
|
||||
x = 0
|
||||
while x < 100:
|
||||
x=x+1
|
||||
imgtype, img = test.read_img()
|
||||
Reference in New Issue
Block a user