
Добрый день.
Предыстория:
Как-то выпал разгрузочный день на работе, по этому дабы не скучать в голову впала одна идея. Ничего серьёзного, только фан — плагин для «Sublime Text 2». Который будет снимать веб-камерой разработчика сохраняющего код и естественно сам сохраняемый код.
Внимание:
Сразу хочу обратить Ваше внимание уважаемый читатель, питон я трогал первый раз, как и видел его тоже впервые. Так же признаю, что в моём тексте могут быть грамматические, за, что прошу
Сегодня без воды.
Идея:
Плагин должен при каждом 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. Корректировки и поправки по плагину приветствуются.
