FaceCodeред SublimeText2 (рд▓рд┐рдирдХреНрд╕ рдУрдПрд╕) рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди



рд╢реБрдн рджреЛрдкрд╣рд░



рдкреГрд╖реНрдарднреВрдорд┐:


рдХрд┐рд╕реА рддрд░рд╣, рдПрдХ рдЙрдкрд╡рд╛рд╕ рджрд┐рди рдХрд╛рдо рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рдКрдм рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ред рдЧрдВрднреАрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ, рдмрд╕ рдЙрджрд╛рддреНрдд рдкрд╛рда 2 рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢рдВрд╕рдХ рдкреНрд▓рдЧрдЗрдиред рдЬреЛ рдХреЛрдб рдХреЛ рдмрдЪрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╡реЗрдмрдХреИрдо рдХреЛ рд╢реВрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЛрдб рдХреЛ рд╣реАред


рдЪреЗрддрд╛рд╡рдиреА:


рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рддреБрд░рдВрдд рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдкреНрд░рд┐рдп рдкрд╛рдардХ, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдЬрдЧрд░ рдХреЛ рдЫреБрдЖ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рджреЗрдЦрд╛ рдерд╛ред рдореИрдВ рдпрд╣ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рда рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрдкрд╕реЗ рдорд╛рдлреА рдорд╛рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ , рдмрд▓реНрдХрд┐ рдореЗрд▓ (shcoder.alex@gmail.com) рдкрд░ рдпрд╛ рдкреАрдПрдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдкреНрд▓рдЧрдЗрди рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧ рдФрд░ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред

рдЖрдЬ рдмрд┐рдирд╛ рдкрд╛рдиреА рдХреЗред

рд╡рд┐рдЪрд╛рд░:


рдкреНрд▓рдЧ-рдЗрди, рдкреНрд░рддреНрдпреЗрдХ N (рд╕реМрд╡реЗрдВ) рдкрд░ рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕реНрдХреНрд░реАрди рд╕реНрдХреНрд░реАрди рдФрд░ рд╡реЗрдмрдХреИрдо рд╕реЗ рдПрдХ рдлреЛрдЯреЛ рдмрдирд╛рддрд╛ рд╣реИред
рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рдлреЗрдВрдХреЗрдВ рдФрд░ рд╕рдЯреАрдХ рддрд╛рд░реАрдЦ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдирд╛рдо рджреЗрдВред

рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП:


рдХреЛрдИ рднреА рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг - рдЕрдлрд╕реЛрд╕, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдкреНрд░рд╢реНрди рдореЗрдВ рдореИрдХ)
рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдЯреНрд░реАрдорд░ - рдПрдХ рд╡реЗрдмрдХреИрдо рд╕реЗ рдЪрд┐рддреНрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП
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 } 



рдкрд░рд┐рдгрд╛рдо:


рдореБрдЭреЗ рд╡рд╣реА рдорд┐рд▓рд╛ рдЬреЛ рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереАред рдореИрдВрдиреЗ рдПрдХ "рднрдпрд╛рдирдХ" рдЕрдЬрдЧрд░ рджреЗрдЦрд╛ - рдЕрдиреБрднрд╡ рд╕рдм рдХреЗ рдмрд╛рджред

рдЙрджрд╛рд╣рд░рдг



рд╕реНрдХреНрд░реАрди рд╕реНрдХреНрд░реАрди


рд╡реЗрдм рдХреИрдорд░рд╛ рдлреЛрдЯреЛ

рдЬреАрдердм рдкреНрд▓рдЧрдЗрди
рдкрд░рд┐рдгрд╛рдо GIF (рдзреНрдпрд╛рди 12 рдПрдордмреА - 800+ рдлреНрд░реЗрдо)

рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдХрд╛рдо рдкрд░ рдЧрдпрд╛ред

PS рд╕реБрдзрд╛рд░ рдФрд░ рдкреНрд▓рдЧрдЗрди рдкрд░ рд╕реБрдзрд╛рд░ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

Source: https://habr.com/ru/post/In170403/


All Articles