Estou querendo gravar um vídeo de parte da minha casa com uma webcam enquanto estou ausente por alguns dias para tentar garantir que todos os hambúrgueres sejam fotografados e a foto carregada no meu servidor antes que eles percebam.
Eu configurei uma webcam para transmitir imagens usando mjpg_streamer. Isso funciona e está transmitindo bem.
É possível fazer uma captura imóvel do fluxo sempre que você quiser chamado 'FileName.jpg':
wget http://127.0.0.1:8080/?action=snapshot -O FileName.jpg
Eu tenho um servidor FTP da Amazon com Amazon Web Services e acesso ao FTP usando sFTP. Estou conectado usando o plug-in FireFTP do Firefox atualmente, para que funcione. A idéia é deixar o computador funcionando com a conexão ativa.
Gostaria de criar um script para tirar uma foto do fluxo, digamos a cada 1 minuto e fazer o upload da foto para o meu servidor através da conexão FTP ao vivo, e excluir o arquivo original do meu PC para que o próximo salve O ou acrescente um número ao final de cada arquivo e, em seguida, envie-o por FTP. por exemplo, FileName1.jpeg, Filename2.jpeg.
Pesquisei no Google por horas e, embora existam muitas postagens sobre scripts de envio de FTP, não consigo encontrar nada sobre um fluxo constante de envios ... ou seja, "Assista a esta pasta, envie o conteúdo a cada 1 minuto e depois um minuto depois faça upload de qualquer conteúdo novo ".
Eu acho que preciso de um script bash que:
- mantenha um contador para que cada arquivo recém-criado obtenha um nome diferente
- Envie esse nome de arquivo para o "wget http://127.0.0.1:8080/?action=snapshot -O FileName XX .jpg" a cada 30 segundos ou 1 minuto
- Carregue o nome do arquivo XX .jpg no servidor FTP
Mas não tenho ideia de como fazer isso! Alguém pode me dirigir? Ou alguém sabe alguma maneira de fazer com o FileZilla ou algo assim (que não pode assistir a uma pasta AFAIK: https://forum.filezilla-project.org/viewtopic.php?t=41609 ?
fonte
Respostas:
Minha primeira dica seria nomear os arquivos usando a data e a hora em que foram tirados. Dessa forma, você não precisará manter um contador em nenhum lugar, o que seria difícil em um script que não seja executado continuamente, pois suas variáveis serão redefinidas a cada chamada. Você pode armazenar as variáveis em arquivos, mas é mais fácil garantir que os nomes não colidam. Algo como
wget http://127.0.0.1:8080/?action=snapshot -O "Snapshot-$(date).jpg"
se você estivesse usando o Bash. (Desculpe, se a sintaxe não funcionar, eu não sou especialista em Bash e estou digitando isso no meu telefone.)Como você mencionou, existem vários tutoriais sobre scripts de upload de FTP disponíveis. Pelo menos um deles deveria ter incluído um exemplo que carrega arquivos por um padrão, como "Snapshot - *. Jpg", em que o curinga corresponderia ao carimbo de data / hora. Ou, você pode apontar o programa FTP (como lftp ou ncftp, que possui binários para script) para fazer upload de tudo em uma determinada pasta. Em seguida, limpe a pasta se o programa tiver êxito. Dessa forma, você pode executar seu script quantas vezes quiser usando o cron ou um timer do systemd, e seja flexível o suficiente para sempre tentar carregar os arquivos que não foram bem-sucedidos na execução posterior.
Também há software projetado para executar essa tarefa e muito mais por conta própria. Um desses programas, que eu já usei, é simplesmente chamado de "movimento" e está disponível para a maioria das distribuições. Possui acionamento de movimento interno (gravar e / ou tirar instantâneos) ou modos contínuos. Pode ser um pouco intensivo de CPU em sistemas como um Raspberry-Pi, mas certamente funciona.
Se você quiser acelerar um pouco, talvez execute várias câmeras remotas / locais e tenha a detecção de movimento descarregada em uma máquina central mais poderosa, consulte o Zoneminder. Demora mais tempo para configurar e, na minha experiência, é exigente que você defina manualmente as resoluções corretas nos feeds da câmera, mas pode ser um script até certo ponto.
fonte
Eu usaria o AWS S3 em vez de um servidor FTP no EC2 e a ferramenta AWS CLI para fazer upload dos arquivos. É uma solução muito mais leve que não requer administração de sistemas. O S3 fornece armazenamento muito mais durável do que os volumes do EC2.
Download da ferramenta: https://aws.amazon.com/cli/
Documentos relevantes: http://docs.aws.amazon.com/cli/latest/reference/s3/
Você pode criar um usuário que só pode fazer upload para o bucket S3 usando o IAM (para que os criminosos não possam apagar os arquivos!)
Eu realizaria essa tarefa criando um script bash (ou perl, node.js, ruby, powershell ?, ...) que chama wget e gera um nome de arquivo com a data e hora. Chame
aws s3 cp ...
um loop for para carregar todos os arquivos na pasta. No loop, a cadaaws s3 cp
chamada bem-sucedida de cada arquivo, mova-o para uma pasta de arquivamento para ser salva localmente também. Se você não deseja que um arquivo local use,aws s3 mv
limpe automaticamente os itens que já foram enviados.fonte
Senhores - muito obrigado a todos que ajudaram. Em parte, todas as suas sugestões me ajudaram a chegar ao resultado final. Portanto, dei todo o crédito pelas respostas, mas postamos minha própria resposta abaixo, na esperança de que seja útil para outras pessoas. Sei que geralmente não é o que está feito, mas neste caso há muitas áreas para formar a solução, então juntei tudo em uma delas abaixo.
Instale os serviços necessários para usar o AWS S3
Inscreva-se no Serviço AWS S3 com sua própria conta Amazon: https://aws.amazon.com/s3/
Defina a nova chave de acesso para sua conta de usuário em 'Teclas de acesso -> Criar nova chave de acesso' e faça o download do arquivo CSV quando solicitado. Se você não fizer isso, não poderá usar as funções da linha de comando S3: https://console.aws.amazon.com/iam/home?#security_credential
Abra o arquivo ROOTKEY.CSV, copie e cole o valor AccessKeyID contido e o valor SecretKey quando solicitado quando você inicia o 'aws configure', que é iniciado na linha de comando antes de usar a AWS com Linux.
Teste você pode conectar e fazer upload de um arquivo com um arquivo sample.txt:
> aws s3 mv ~/SourceFolder/sample.txt s3://NameOfYourAWSS3Bucket
/ AFolderYouHaveCreatedFaça o download e instale o mjpg_streamer seguindo as instruções de compilação aqui: https://github.com/jacksonliam/mjpg-streamer#building--installation Depois de concluído, navegue até a pasta
Inicie o streamer mjpg:
Verifique se está funcionando, visitando o seguinte link no seu navegador da web:
Pegue um único arquivo com data e hora (e salve-o no diretório local a partir do qual está sendo executado) com:
Isso criará um arquivo na subpasta 'www' da pasta mjpeg_streamer, chamada 'output-16-09-01-22-35-30.jpg', se executado às 22:35 de 1º de setembro de 2016.
Crie um novo script bash (como MyScript.sh) e dê permissões executáveis a ele e copie o conteúdo na parte inferior. Quando executado, ele cria um JPEG com carimbo de data e hora a cada 5 segundos até que a data atual se torne a data final especificada. Nesse caso, começa na data A e termina na data B. Substitua suas próprias datas.
Copie isso no script, substituindo os caminhos relevantes:
Sugestões de melhorias são bem-vindas.
Além disso, você pode verificar o andamento do seu armazenamento no AWS S3 com
Deixei por duas horas disparando a cada 10 segundos e gerou 74Mb de uploads. Por isso, calculo que são 6,5 Gb por uma semana - menos do que o nível de preços do serviço em que os custos aumentam, o que eu acho que é 8 Gb.
Obrigado novamente.
fonte