Добрый день.
Предыстория:
Как-то выпал разгрузочный день на работе, по этому дабы не скучать в голову впала одна идея. Ничего серьёзного, только фан — плагин для «Sublime Text 2». Который будет снимать веб-камерой разработчика сохраняющего код и естественно сам сохраняемый код.
Внимание:
Сразу хочу обратить Ваше внимание уважаемый читатель, питон я трогал первый раз, как и видел его тоже впервые. Так же признаю, что в моём тексте могут быть грамматические, за, что прошу не кидать в меня яйца прощения, а написать на почту(shcoder.alex@gmail.com) или в личку. Этот плагин был написан, для личного использования и веселья ради.
Сегодня без воды.
Идея:
Плагин должен при каждом N(сотом) сохранении делать скрин экрана и фото с веб-камеры.
Кидать это в разные папки и именновать точной датой и временем.
Для корректной работы нужно:
Любой linux дистрибутив — увы, но будет работать только на линуксе(Маки под вопросом)
Утилитка Streamer — для получения фоток с веб-камеры
ImageMagick — для получения скриншотов с сублайма
import sublime, sublime_plugin, os,time, commands
from datetime import datetime, timedelta
class FaceCodeCommand(sublime_plugin.EventListener):
def __init__(self):
self.cnt = 0
self.settings = sublime.load_settings("FaceCode.sublime-settings")
self.facecode = self.settings.get("facecode")
self.time_format = self.settings.get("time_format")
self.img_format = self.settings.get("img_format")
self.path_photo = self.settings.get("path_save_photo")
self.path_screen = self.settings.get("path_save_screen")
self.device = self.settings.get("device")
self.count_save = self.settings.get("count_save")
self.filename = self.get_file_name()
self.check_folder()
def on_pre_save(self, view):
if self.facecode:
if self.cnt % self.count_save == 0:
self.save_photo()
self.save_screen()
self.cnt += 1
def check_folder(self):
if not os.path.exists(self.path_photo) and self.path_photo:
os.mkdir(self.path_photo, 0777)
if not os.path.exists(self.path_screen) and self.path_screen:
os.mkdir(self.path_screen, 0777)
return
def get_file_name(self):
dt = datetime.now()
ds = str(dt.strftime(self.time_format))
return ds+"."+self.img_format
def save_photo(self):
os.system("streamer -c "+self.device+" -o "+self.path_photo+self.filename)
return
def save_screen(self):
win_id = commands.getoutput(
'xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | awk '{print $5}''
)
os.system("import -window "+win_id+" "+self.path_screen+self.filename)
return
{
//Включаем плагин
"facecode": true,
//Путь для сохранения снимков
//Если не надо делать фото либо скрин сублайма то просто установите false
"path_save_photo": "/home/alex/webcam/photo/",
"path_save_screen": "/home/alex/webcam/screenshot/",
//Формат сохранения
// %d - день
// %m - месяц
// %y - год
// %H - час
// %M - минуты
// %S - секунда
//01_02_13_12_23_18.jpeg
"time_format": "%d_%m_%y_%H_%M_%S",
//Формат картинок на выходе (jpeg|jpg|png|gif)
"img_format": "jpeg",
//само устройство
"device": "/dev/video0",
//при каком по счёту сохранению будут делатся снимки
//1 - при каждом, 100 - при каждом сотом
"count_save": 14
}
Итог:
Я получил, то, что изначально планировал. Узрел «страшный» питон — опыт как никак.
Пример
Скрин экрана
Фото с веб-камеры
Плагин на гитхабе
Результат гифка(ВНИМАНИЕ 12 мб — 800+ кадров)
Всем спасибо, я пошёл работать.
P.S. Корректировки и поправки по плагину приветствуются.
Автор: shcoderAlex