macbook + iSight = мобильный шпион

Предисловие

Посещая мою любимую девушку на прошлой неделе (мы живем в разных городах, на разных побережьях) мы игрались с приложением для моего iPhone Touch под названием Locations. Программка довольно простая — поиск и просмотр веб камер со всего мира. Можно сохранить какое-то количество камер и она их будет периодически обновлять.

Рассматривая камеры в Милане да Париже мне захотелось сделать что-нибудь подобное для себя — онлайн веб камеру. Я подобными вещами никогда раньше не занимался, да и на поиски в интернете времени тратить особенно не хотелось (все что нашел — какие-то сложные сервисы с live video и прочими вкусностями, но всё какое-то слишком перегруженное). Так что решил сделать это сам. В итоге ушло минут 10-15, и вот что мы получили в результате:

Страничку накидал очень быстро, просто чтобы как-то отобразить время последнего обновления.

Как это все работает, и как сделать такоё же

Всё до безобразия просто. Просто — если у вас Макбук. Про остальные системы чуть ниже.

Первым делом нам понадобится isightcapture. Скачиваем, копируем в /usr/bin/.

Далее, нам нужно научиться делать снимки и сохранять их локально. Тут нет ничего сложного: открываем терминал и пишем:

isightcapture ~/current.jpg

Эта команда сделает фотографию того, что видит камера и сохранит её как current.jpg в вашей домашней директории.

Самое интересно состоит в загрузке получившейся фотографии на какой-нибудь сервер. Это так же и является наверное самым сложным этапом. У меня есть домашний сервер с уникальным IP адресом\своим доменом, у кого-то есть свои хостинги с SSH доступом, но у большинства ничего этого нет. Что делать? Читайте самый низ этого поста.

Ну а для тех у кого есть доступ к каким-нибудь серверам — давайте воспользуемся scp. Налаживает необходимые public keys дабы не вопрошало пароль (очень хорошая статья на эту тему), и в терминале пишем:

scp ~/current.jpg media.mywebserver.com:/home/mywebserver/media/webcam/

Эта команда загрузит ваш файл на ваш же сервер в нужное место. Это я тут пишу для полноты рассказа, ведь скорее всего если вам есть куда загружать файл по ssh протоколу вы и без меня знаете как это сделать :)

Автоматизация этих простых двух шагов заключается вот в чем. Первым делом создайте где-нибудь, скажем в ~/Scripts файл под названием, к примеру, webcam.sh. Далее поместите в него обе команды:

#!/bin/bash

isightcapture ~/current.jpg

scp ~/current.jpg media.mywebserver.com:/home/mywebserver/media/webcam/

Первая строка говорит о том, чем именно нужно запускать этот файл. Узнать где у вас находится bash можно написав в Терминале which bash. Сохраните файл, и теперь откройте терминал и добавьте запись в кронтаб (командой crontab -e):

*/1 * * * * sh ~/Scripts/webcam.sh

Это заставит крон вызывать ваш маленький скрипт каждую минуту. Подробнее про крон почитать можно вот тут.

На сервере можно теперь, к примеру, создать веб страничку которая будет отображать картинку current.jpg так как вам этого захочется. Из неё самой можно выдергивать информацию о том когда она была создана. К примеру вот так, на PHP:

Last spied on Grisha: <?php echo date(«F jS, Y @ h:i:s A», filemtime(«current.jpg»)); ?>

Получится то, что видно сверху на скриншоте.

Так как при каждом обновлении с вебкамеры файл перезаписывается, картинка на веб странице тоже будет обновляться вместе с этой информацией.

А если не мак осх?

Конечно же далеко не у всех маки с камерами iSight. Тут я вам не в помощь, так как у меня к сожалению нет времени на поиски консольного софта для снятия фотографий с вебкамер под Windows или даже под другие *nix системы. Наверняка софт какой-нибудь есть, наверняка есть и бесплатный. Многие вебкамеры идут с подобными программки (так мне рассказывали, сам не пробовал — не знаю), так что возможно вы как-нибудь воспользуетесь ими. Пишите в комментарии если хотите поделится инструкциями для других систем, было бы интересно почитать.

А как-нибудь проще можно?

Я понимаю что для многих это по той или иной причине будет не совсем доступно, пусть и достаточно гибко. К примеру, моя любимая теперь сможет смотреть как я работаю или же пью кофе где-нибудь в кафе в гавани Виктории, но вот я не смогу посмотреть как она занимается в центре Торонто. Хотя бы по этому я постепенно начал делать небольшой онлайн сервис, который упростит задачу до двух простых шагов: регистрация + установка маленькой программки. Программка эта будет делать фотографии с камеры и посылать их на сервис, а он же будет их отображать избранным (или же всем подряд) людям. Можно будет настроить временной интервал, степень публичности момента (показывать всем, только друзьям, только избранным), ну и еще пару вещей.

Всё это имеет смысл интегрировать с сервисами вроде Twitter’a (о котором я как-то писал), и тогда получится вполне себе неплохой инструмент для слежки за близкими людьми :)

Следите за обновлениями, думаю через несколько недель запущу что-нибудь для публичного тестирования. Ну или найду что-нибудь готовое и расскажу вам всем об этом =)

29 июля, 2008. Метки: , , , , , , , , , , , . программирование, life hacks.

9 комментариев

  1. katerinka replied:

    славно, славно)

  2. Xenia replied:

    а вы еще не написали прогу-утилиту для мака?? я ооочень хочу, а в терминале ничего не получается. есть готовые…ноони просто делают фото и кидают на http://ftp…т.е. просматривать неудобно. и еще, а реально сделать так, чтобы снимок делать удаленно??? (это, например, удобно как шпион, пока тебя нет дома или еще что ))))

    буду ждать ответ на мыло.

  3. qwe replied:

    There is more fast way

    1. copy isightcapture to /Library/WebServer/CGI-Executables
    2. open terminal
    3. chmod a+s /Library/WebServer/CGI-Executables/isightcapture
    4. :> /Library/WebServer/CGI-Executables/test.sh
    5. chmod 755 /Library/WebServer/CGI-Executables/test.sh
    6. edit /Library/WebServer/CGI-Executables/test.sh with TextEdit:
    #!/bin/bash
    exec 2>/dev/null
    echo «Content-Type: image/jpeg»
    echo
    ./isightcapture /tmp/qq$$.jpg
    exec < /tmp/qq$$.jpg
    rm -f /tmp/qq$$.jpg
    cat
    7. enable web-server sharing in system preferences
    8. http://localhost/cgi-bin/test.sh

  4. qwe replied:

    блин забыл что я на русском сайте. кароче я по-русски умею говорить )))

  5. grigory replied:

    qwe, you’re missing the point, как говорится :)

    то есть можно конечно и так, но мне ведь нужно было именно чтобы видно было удаленно что происходит на лэптопе, где бы он ни находился, в любых сетях. Ваш вариант мне лично будет абсолютно бесполезен, ибо толку от того что я могу посмотреть то что видит моя камера на моем же локалхосте который никому кроме меня не доступен? Мой вариант загружает фотографию на публично-доступный сервер, и там уже избранные мне люди получают к ней доступ.

  6. grigory replied:

    Xenia, написал, да. Примерно через день после того как написал этот пост :) Я сделал себе widget для дашбоарда, выглядит он примерно вот так:

    http://dl.getdropbox.com/u/113816/widget-cam.png (front)
    http://dl.getdropbox.com/u/113816/widget-cam-back.png (back)

    Если есть интерес, могу подработать его и выложить публично. Я вообще-то хочу все сделать вебсервис который с этим всем будет работать, чтобы действительно кто угодно мог подобное сделать, без каких-либо технических знаний и на любых платформах. Как появится время — думаю сделаю. (переслал это и на имейл)

  7. qwe replied:

    локалхост для примера. если на компе реальный белый айпи — то можно на него снаружи подключиться… всяко удобнее чем письмо слать

  8. grigory replied:

    В 99% случаев на лэптопах нет реального айпи. Конечно если дома — можно настроить порт форвардинг на раутере, но мне это совершенно не нужно. Задача была в том чтобы где бы я не находился этот мини-сервис — работал бы. И тем более, о каких письмах идет речь? :)
    Фотографии посылаются по ssh.

  9. александр replied:

    спасибо за добрые и теплые фотографии

Оставьте комментарий

Trackback URI