Я хочу записать видео части моего дома с помощью веб-камеры, пока я нахожусь в течение нескольких дней, чтобы попытаться сфотографировать всех бургалеров и загрузить их на мой сервер еще до того, как они это осознают.
Я настроил веб-камеру для потоковой передачи видео с помощью mjpg_streamer. Это работает и работает нормально.
Можно сделать снимок из потока, когда вы захотите, под названием FileName.jpg:
wget http://127.0.0.1:8080/?action=snapshot -O FileName.jpg
У меня есть Amazon FTP-сервер с Amazon Web Services и FTP-доступ с использованием sFTP. Я подключен с помощью плагина FireFTP Firefox в настоящее время, так что это работает. Идея состоит в том, чтобы оставить компьютер работающим с подключением к сети.
Я хотел бы написать сценарий получения изображения из потока, скажем, каждую минуту и загрузить изображение на мой сервер через FTP-соединение в реальном времени, либо удалить исходный файл с моего компьютера, чтобы следующий файл сохранил O или добавьте номер в конец каждого файла, а затем отправьте его по FTP. например, FileName1.jpeg, Filename2.jpeg.
Я гуглил в течение нескольких часов, и, хотя есть множество сообщений о сценариях загрузки по FTP, я не могу найти ничего о постоянном потоке загрузки ... т.е. "Смотреть эту папку, загружать контент каждую минуту, а затем минуту спустя загрузить любой новый контент в нем ".
Я думаю, мне нужен скрипт bash, который будет:
- вести счетчик, чтобы каждый новый файл получал свое имя
- Отправляйте это имя файла на "wget http://127.0.0.1:8080/?action=snapshot -O FileName XX .jpg" каждые 30 секунд или 1 минуту.
- Загрузите FileName XX .jpg на FTP-сервер
Но я понятия не имею, как это сделать! Кто-нибудь может направить меня? Или кто-нибудь знает способ сделать с FileZilla или что-то (что не может посмотреть папку AFAIK: https://forum.filezilla-project.org/viewtopic.php?t=41609 ?
источник
Ответы:
Мой первый совет - назвать файлы, используя дату и время, когда они были взяты. Таким образом, вам не нужно хранить счетчик где-либо, что было бы трудно в скрипте, который не работает непрерывно, поскольку его переменные будут сбрасываться при каждом вызове. Вы можете хранить переменные в файлах, но это проще, если вы убедитесь, что имена не будут конфликтовать. Что-то вроде,
wget http://127.0.0.1:8080/?action=snapshot -O "Snapshot-$(date).jpg"
если вы используете Bash. (Извините, если синтаксис не работает, я не эксперт по Bash, и я набираю это на своем телефоне.)Как вы упомянули, есть несколько учебных пособий о сценариях загрузки по FTP. По крайней мере, один из них должен был включать пример, который загружает файлы по шаблону, например, «Снимок - *. Jpg», где подстановочный знак будет соответствовать метке времени. Или вы можете указать программе FTP (например, lftp или ncftp, у которой есть двоичные файлы для сценариев), чтобы загрузить все в определенную папку. Затем протрите папку, если программа прошла успешно. Таким образом, вы можете запускать ваш скрипт так часто, как вы хотите, используя cron или системный таймер, и он будет достаточно гибким, чтобы всегда пытаться загружать любые файлы, которые не удалось выполнить с более поздним временем его запуска.
Есть также программное обеспечение, предназначенное для выполнения этой задачи, и многое другое, самостоятельно. Одна из таких программ, которую я использовал сам, называется просто «движение» и доступна для большинства дистрибутивов. Он имеет встроенный запуск движения (запись и / или делать снимки) или непрерывные режимы. В таких системах, как Raspberry-Pi, он может быть немного загружен процессором, но, безусловно, работает.
Если вы хотите немного увеличить его, возможно, запустить несколько удаленных / локальных камер и выгрузить детектор движения на более мощную центральную машину, посмотрите на Zoneminder. Установка занимает больше времени, и по моему опыту привыкает к тому, что вы вручную устанавливаете правильные разрешения на каналах вашей камеры, но это может быть до некоторой степени записано в сценарии.
источник
Я бы использовал AWS S3 вместо FTP-сервера в EC2 и инструмент AWS CLI для загрузки файлов. Это гораздо более легкое решение, не требующее системного администрирования. S3 обеспечивает гораздо более длительное хранение, чем тома для EC2.
Загрузка инструмента: https://aws.amazon.com/cli/
Соответствующие документы: http://docs.aws.amazon.com/cli/latest/reference/s3/
Вы можете создать пользователя, который сможет загружать данные только в корзину S3, используя IAM (так что преступники не смогут стереть файлы!)
Я бы выполнил эту задачу, создав скрипт bash (или perl, node.js, ruby, powershell ?, ...), который вызывает wget и выводит имя файла с указанием даты и времени. Вызовите
aws s3 cp ...
цикл for, чтобы загрузить все файлы в папке. В цикле после каждого успешногоaws s3 cp
вызова для каждого файла перемещайте его в папку архива, чтобы также сохранить его локально. Если вы не хотите, чтобы локальный архив использовалсяaws s3 mv
для автоматической очистки вещей, которые уже были загружены.источник
Мужская уборная - большое спасибо всем, кто помог. Частично все ваши предложения помогли мне добраться до конечного результата. Итак, я дал вам всю благодарность за ответы, но разместил свой собственный ответ ниже в надежде, что он будет полезен для других. Я понимаю, что это обычно не готово, но в этом случае есть много областей для формирования решения, поэтому я связал все это в одну ниже.
Установите службы, необходимые для использования AWS S3
Зарегистрируйтесь в сервисе AWS S3 со своей учетной записью Amazon: https://aws.amazon.com/s3/
Определите новый ключ доступа для вашей учетной записи пользователя через «Ключи доступа -> Создать новый ключ доступа» и загрузите файл CSV при появлении запроса. Если вы этого не сделаете, вы не сможете использовать функции командной строки S3: https://console.aws.amazon.com/iam/home?#security_credential
Откройте файл ROOTKEY.CSV и скопируйте, а затем вставьте содержащееся в нем значение AccessKeyID и значение SecretKey при появлении запроса при запуске «aws configure», которую вы запускаете из командной строки перед использованием AWS с Linux.
Тест вы можете подключить и загрузить файл с файлом sample.txt:
> aws s3 mv ~/SourceFolder/sample.txt s3://NameOfYourAWSS3Bucket
/ AFolderYouHaveCreatedЗагрузите и установите mjpg_streamer, следуя инструкциям по сборке здесь: https://github.com/jacksonliam/mjpg-streamer#building--installation После завершения перейдите в его папку.
Запустите mjpg стример:
Убедитесь, что он работает, перейдя по следующей ссылке в вашем веб-браузере:
Возьмите один файл с датой и временем (и сохраните его в локальном каталоге, из которого он выполняется) с:
Это создаст файл в подпапке «www» вашей папки mjpeg_streamer с именем «output-16-09-01-22-35-30.jpg», если он будет выполнен в 22:35 1 сентября 2016 года.
Создайте новый сценарий bash (например, MyScript.sh) и дайте ему исполняемые разрешения и скопируйте в него содержимое внизу. При запуске он будет создавать JPEG с меткой времени каждые 5 секунд, пока текущая дата не станет указанной датой окончания. В этом случае он начинается с даты A и заканчивается датой B. Замените ваши собственные даты.
Скопируйте это в скрипт, заменив соответствующие пути:
Предложения по улучшению приветствуются.
Кроме того, вы можете проверить прогресс вашего хранилища в AWS S3 с помощью
Я оставлял его на два часа, стреляя каждые 10 секунд, и он генерировал 74Mb загрузок. Таким образом, я работаю, чтобы получить 6,5 ГБ в неделю - меньше, чем уровень цен на услугу, где стоимость возрастает, я думаю, что 8 ГБ.
Еще раз спасибо.
источник