рдЖрдк рдФрд░ рдмреНрд░реИрдб рдкрд┐рдЯ 99% рд╣реИрдВ

рдХрд▓ рдЫреБрдЯреНрдЯреА рдкрд░ рд╣реИрдВ


рд╣рдо рдСрдирд▓рд╛рдЗрди рд╕рд┐рдиреЗрдорд╛ рдУрдХреЛрдХреЛ рдХреЗ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд╡рд┐рднрд╛рдЧ рдореЗрдВ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдиреЗрд╡реНрд╕реНрдХреА рдХреА рдлрд┐рд▓реНрдо рдлреАрд╕ рдХреА рдЧрдгрдирд╛ рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ, рдФрд░ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдирдИ рдЪреАрдЬреЗрдВ рд╕реАрдЦрдиреЗ рдФрд░ рд╢рд╛рдВрдд рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 2018 рдлреАрдлрд╛ рд╡рд┐рд╢реНрд╡ рдХрдк рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдХрд╛рдордХрд╛рдЬреА рдЪреИрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЙрдЯ рдХреЛ рд░реЛрд▓ рдЖрдЙрдЯ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдкрд░ рджрд╛рдВрд╡ рдПрдХрддреНрд░ рдХрд┐рдП, рдФрд░ рдлрд╛рдЗрдирд▓ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдкреВрд░реНрд╡-рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдореАрдЯреНрд░рд┐рдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдФрд░ рд╡рд┐рдЬреЗрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдХреНрд░реЛрдПрд╢рд┐рдпрд╛ рдиреЗ рд╢реАрд░реНрд╖ рдЪрд╛рд░ рдореЗрдВ рдЪрд╛рд░ рдирд╣реАрдВ рдбрд╛рд▓реЗ рд╣реИрдВред


рдЯреЙрдк -10 рд░реВрд╕реА рдХреЙрдореЗрдбреАрдЬрд╝ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╣рд╛рд▓ рдХреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рд╣рдо рдПрдХ рдРрд╕реЗ рдмреЙрдЯ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реЗрд▓рд┐рдмреНрд░рд┐рдЯреА рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рд╡рд░реНрдХрд┐рдВрдЧ рдЪреИрдЯ рдореЗрдВ, рд╕рднреА рдиреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдХрд┐ рд╣рдордиреЗ рдмреЙрдЯ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред


рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдПрдХ рд╕рд╛ (рдЬреНрдпрд╛рджрд╛рддрд░ рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ)


рдЪреЗрд╣рд░рд╛ рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдПрдХ рдЗрдЪреНрдЫреБрдХ рдкрд╛рдардХ рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдиреАрдЪреЗ рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░реВрдВрдЧрд╛ред


рддреЛ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рддрд╕реНрд╡реАрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ, рд╢рд╛рдпрдж, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЪреЗрд╣рд░рд╛ рднреА рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдк рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕рдХрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 4 рд╕рд░рд▓ рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


  1. рдЪреЗрд╣рд░реЗ рдХреА рд╕реАрдорд╛ рдЖрдпрдд рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
  2. рдЪреЗрд╣рд░реЗ рдХреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░реЗрдВред
  3. рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдирд╛ рдЪреЗрд╣рд░рд╛ рдХреНрд░реЙрдк рдХрд░реЗрдВред
  4. рдХреБрдЫ рдорд╢реАрди-рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдПрдХ рдЪреЗрд╣рд░реЗ рдХреА рдЫрд╡рд┐ рдмрджрд▓реЗрдВред
  5. рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рджреГрд╢реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред

рдЪреЗрд╣рд░реЗ рдХрд╛ рдЪрдпрди


рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрдирдлреНрд▓рд┐рдХреНрдЯ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдиреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЪреЗрд╣рд░реЗ рдХреЛ рд╢рд╛рд╕реНрддреНрд░реАрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЦрд░рд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрд╛ рд╣реИ, рд╡реЗ рдЕрднреА рднреА рдХреНрд▓рд╛рд╕рд┐рдХ рдПрдЪрдУрдЬреА рдХреА рдЧрддрд┐ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрдорддрд░ рд╣реИрдВред


HOG - рдУрд░рд┐рдПрдВрдЯреЗрдб рдЧреНрд░реЗрдЬреБрдПрдЯреНрд╕ рдХреЗ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдоред рдпрд╣ рдЖрджрдореА рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдЕрдкрдиреА рдврд╛рд▓ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ - рдПрдХ рд╡реЗрдХреНрдЯрд░ рдЬрд┐рд╕рдореЗрдВ рджрд┐рд╢рд╛ рдХреА рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЪрдордХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрджрд▓рддреА рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЪрдордХ рдХреЗ рдкреВрд░реНрдг рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрдирдХрд╛ рдЕрдиреБрдкрд╛рдд рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЕрдВрдзреЗрд░рд╛, рдФрд░ рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рдЬрд▓рд╛рдпрд╛, рдФрд░ рд╢реЛрд░ рдХрд╛ рдЪреЗрд╣рд░рд╛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХреЗ рд░реЛрдЧрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рджрд┐рд╢рд╛рддреНрдордХ рдЪреЗрд╣рд░реЗ рдХреЗ рдврд╛рд▓ рдХрд╛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо


рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдврд╛рд▓ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЫреЛрдЯреЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдврд╛рд▓ n рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдкреНрд░рд╛рдкреНрдд рд╡реЗрдХреНрдЯрд░ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдлрд┐рд░ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╕рд╛рде рдХреБрдЫ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЦрд┐рдбрд╝рдХреА рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдЪреЗрд╣рд░рд╛ рдХрд┐рддрдиреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдбрд┐рдЯреЗрдХреНрдЯрд░ SVM, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЬрдВрдЧрд▓, рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рдкрд╣рдЪрд╛рди


рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░реЗрдВ


рдЪреЗрд╣рд░реЗ рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЗ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ


рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдРрд╕реЗ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬреЛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдХрдордЬреЛрд░ рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ 68 рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкреЗрдХреНрд╖рд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХред рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕реА рд▓рдбрд╝рдХреЗ, рдЬреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 300k рдХрдорд╛рддреЗ рдереЗ, рдЙрдирдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдкрд░реНрдпрд╛рдкреНрдд рдкрд╛рдВрдЪ рдереЗ: рдЖрдВрдЦреЛрдВ рдФрд░ рдирд╛рдХ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реА рдХреЛрдиреЗред


рдкреБрд░рд╛рдиреА рдореЗрдореЛрд░реА


рдРрд╕реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдХреИрд╕реНрдХреЗрдб рджреНрд╡рд╛рд░рд╛ред


рдЪреЗрд╣рд░рд╛ рд╕рдВрд░реЗрдЦрдг


рдмрдЪрдкрди рдореЗрдВ рд╕рд░реЗрдЖрдо рдЖрд╡реЗрджрди? рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ: рдЖрдк рдПрдХ рд╢рд╛рд▓реАрди рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рддреАрди рдордирдорд╛рдиреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЙрдирдХреЗ рдорд╛рдирдХ рдкрджреЛрдВ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдирд╛рдХ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдВрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЗрдВрджреНрд░реЛрдВ рдХреЛ рдЧрд┐рдирдиреЗ рдХреЗ рд▓рд┐рдП - рдпреЗ рддреАрди рдмрд┐рдВрджреБ рддреИрдпрд╛рд░ рд╣реИрдВред


рдЪреЗрд╣рд░реЗ рдХрд╛ рдШреВрдордирд╛


рдЪреЗрд╣рд░рд╛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдмрджрд▓реЗрдВ


рдХрдо рдкреБрд░рд╛рдиреА рдореЗрдореЛрд░реА


рдлреЗрд╕рдиреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЛ рддреАрди рд╕рд╛рд▓ рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ, рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреЛрдЬрдирд╛рдПрдВ рдФрд░ рдиреБрдХрд╕рд╛рди рдХреЗ рдХрд╛рд░реНрдп рджрд┐рдЦрд╛рдИ рджрд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЙрдкрд▓рдмреНрдз рдУрдкрдирд╕реЛрд░реНрд╕ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдмреАрдЪ рд╣рд╛рд╡реА рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкреВрд░реА рдмрд╛рдд рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд╕рднреНрдп рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд┐ рдкрд┐рдЫрд▓реЗ рддреАрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ ResNet рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдирдИ рдореЗрдореЛрд░реА


рдлреЗрд╕рдиреЗрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рддреНрд░рд┐рдЧреБрдгреЛрдВ рд╕реЗ рд╕реАрдЦрддрд╛ рд╣реИ: (рд▓рдВрдЧрд░, рд╕рдХрд╛рд░рд╛рддреНрдордХ, рдирдХрд╛рд░рд╛рддреНрдордХ)ред рдПрдВрдХрд░ рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЛ рджреВрд╕рд░реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд╣рд▓реЗ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИред рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЧрд▓рддрдлрд╣рдореА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╢реНрдпрдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рдПрдВ рдФрд░ рдЙрдирд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред


GucciNet


рдЪреЗрд╣рд░реЗ рдХреЗ рдЪреЗрд╣рд░реЗ рдФрд░ рджрд┐рдорд┐рддреНрд░реА рдорд▓рд┐рдХреЛрд╡


рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдЕрдВрддрд┐рдо рдкрд░рдд рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЫреЛрдЯреЗ рдЖрдпрд╛рдо (рдЖрдорддреМрд░ рдкрд░ 128-рдЖрдпрд╛рдореА) рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд╛рди рдореЗрдВ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред


рдЪреЗрд╣рд░реЗ рдХреА рддреБрд▓рдирд╛


рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЪреЗрд╣рд░реЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдХреБрдЫ рдЫреЛрдЯреЗ рдкрдбрд╝реЛрд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЗ рдПрдореНрдмреЗрдб рд╕реЗ рд░рд┐рдореЛрдЯред рддреЛ, рдЗрд╕ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рдорд╛рдирддрд╛ рдХрд╛ рдПрдХ рдорд╛рдк рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреВрд░реА рдХрд╛ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ: рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рдпрд╛ рдХреЛрд╕рд╛рдЗрди, рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдХрд┐рд╕ рджреВрд░реА рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХрд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреГрддреНрд░рд┐рдо рдЙрджрд╛рд╣рд░рдг


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рд╣рдореЗрдВ рдЙрди рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдореНрдмреЗрдб рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдмреАрдЪ рдЦреЛрдЬ рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ рдлрд┐рд░, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рдмреАрдЪ рдирд┐рдХрдЯрддрдо рд╡реЗрдХреНрдЯрд░ рдЦреЛрдЬреЗрдВред рдпрд╛, рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ, k рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ k рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рдирд╣реАрдВ, рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рдФрд░ рдЙрдиреНрдирдд рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬреЛ рд╡реНрдпрдХреНрддрд┐ рдкрд░рд┐рдгрд╛рдо рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ, рд╡рд╣ рдЕрдиреБрд░реЛрдз рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред


рдЖрдордиреЗ рд╕рд╛рдордиреЗ рдХреА рд╕рдорд╛рдирддрд╛


рдХрд┐рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?


рдкрд╛рдЗрдк рд▓рд╛рдЗрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдУрдкрди рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЪреБрдирд╛рд╡ рдмрдврд╝рд┐рдпрд╛ рд╣реИред dlib рдФрд░ dlib рдЪреЗрд╣рд░реЗ рдФрд░ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рд╕реА рднреА рдмрдбрд╝реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдУрдкрдирдлреИрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЧрддрд┐ рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рддреАрди рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдореЗрдВ рдЪреЗрд╣рд░реЗ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд╕рднреА 5 рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: dlib ред рдЙрд╕реА рд╕рдордп, рдпрд╣ рдЖрдзреБрдирд┐рдХ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, BLAS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИ, рдЗрд╕рдореЗрдВ GPU рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ CPU рдкрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдкрд╕рдВрдж рдЙрд╕рдХреЗ рдКрдкрд░ рдЧрд┐рд░ рдЧрдИред


рдЕрдкрдирд╛ рдмреЙрдЯ рдмрдирд╛рдирд╛


рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЙрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рдЧрд╛рдЗрдб рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдРрд╕рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо @BotFather рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рд╕реЗ рд╣рдорд╛рд░реЗ рдирдП рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдорд╛рдВрдЧрддреЗ рд╣реИрдВред


рдЯреЛрдХрди рдХреНрдпреЛрдВ?


рдЯреЛрдХрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: 643075690:AAFC8ola8WRdhGbJtzjmkOhne1FGfu1BFg ред рдпрд╣ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдПрдкреАрдЖрдИ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдХрд┐рд╕реА рдХреЛ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЪреБрдирдиреЗ рдкрд░ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред


 import System.Process main :: IO () main = do (_, _, _, handle) <- createProcess (shell "python bot.py") _ <- waitForProcess handle putStrLn "Done!" 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреАрдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдбреАрдПрд╕рдПрд▓ рдкрд░ рдХреЛрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реЛрддрд╛ рд╣реИред рдбреЛрдореЗрди рднрд╛рд╖рд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред


 python -m venv .env source .env/bin/activate pip install python-telegram-bot 

python-telegram-bot рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмреЙрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдврд╛рдВрдЪрд╛ рд╣реИред рдпрд╣ рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓рдЪреАрд▓рд╛, рд╕реНрдХреЗрд▓реЗрдмрд▓, рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдлрд┐рд▓рд╣рд╛рд▓ рдПрдХ рднреА рд╕рд╛рдорд╛рдиреНрдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рджрд┐рд╡реНрдп рдХреЛрд░реВрдЯреАрдиреНрд╕ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╛рдЪреАрди рдзрд╛рдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред


asyncio рдореЗрд░рд╛ рдПрдХрдорд╛рддреНрд░ рджреЗрд╡рддрд╛ рд╣реИ


python-telegram-bot рдмреЙрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдмреЙрдЯ рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ bot.py рдЬреЛрдбрд╝реЗрдВред


 from telegram.ext import Updater from telegram.ext import MessageHandler, Filters #      TOKEN = '<TOKEN>' def echo(bot, update): bot.send_message(chat_id=update.message.chat_id, text=update.message.text) updater = Updater(token=TOKEN) dispatcher = updater.dispatcher echo_handler = MessageHandler(Filters.text, echo) dispatcher.add_handler(echo_handler) 

рдмреЙрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд┐рдирд╛ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЛрдб рдХреЛ python bot.py рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреЙрдЯ рдПрдХ рдиреНрдпреВрдирддрдо рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдПрдордЖрд░-рдПрдВрдбрд┐рдпрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╡рд╛рдж


рд▓реЗрдХрд┐рди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕реАрдорд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдорд╛рд░ рджреЗрдВрдЧреЗ рдФрд░ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреЗрд╡рд▓ рдлрд╝реЛрдЯреЛ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВрдЧреЗред рдХреЛрдб рдХреЛ рдирд┐рдореНрди рдореЗрдВ рдмрджрд▓реЗрдВред


 from telegram.ext import Updater from telegram.ext import MessageHandler, Filters #      TOKEN = '<TOKEN>' def handle_photo(bot, update): bot.send_message(chat_id=update.message.chat_id, text='nice') updater = Updater(token=TOKEN) dispatcher = updater.dispatcher photo_handler = MessageHandler(Filters.photo, handle_photo) dispatcher.add_handler(photo_handler) updater.start_polling() updater.idle() 

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдПрдордЖрд░-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реИ


рдЬрдм рдЪрд┐рддреНрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рд░реНрд╡рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрдХрд╛рд░реЛрдВ рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдмреЙрдЯ, рдмрджрд▓реЗ рдореЗрдВ, message.photo рдореЗрдВ рдирд┐рд╣рд┐рдд рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреА рдПрдХ рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЫрд╛рдВрдЯ рд▓реА рдЧрдИ рд╕реВрдЪреАред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк: рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЫрд╡рд┐ рд▓реЗрдВред рдмреЗрд╢рдХ, рдХрд┐рд░рд╛рдиреЗ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЛрдб рдФрд░ рд▓реЛрдб рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рдиреНрдпреВрдирддрдо рдЙрдкрдпреБрдХреНрдд рдЖрдХрд╛рд░ рдХреА рдПрдХ рдЫрд╡рд┐ рдЪреБрдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред handle_photo рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред


 import io 

 message = update.message photo = message.photo[~0] with io.BytesIO() as fd: file_id = bot.get_file(photo.file_id) file_id.download(out=fd) fd.seek(0) 

рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛ рдЪреБрдХреА рд╣реИ рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╣реИред рдЗрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рддреАрд╡реНрд░рддрд╛ рдХреЗ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Pillow рдФрд░ numpy рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


 from PIL import Image import numpy as np 

рдирд┐рдореНрди рдХреЛрдб with рдмреНрд▓реЙрдХ рдХреЗ with рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред


 image = Image.open(fd) image.load() image = np.asarray(image) 

рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ dlibред рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░, рдПрдХ рдлреЗрд╕ рдбрд┐рдЯреЗрдХреНрдЯрд░ рдмрдирд╛рдПрдВред


 import dlib 

 face_detector = dlib.get_frontal_face_detector() 

рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


 face_detects = face_detector(image, 1) 

рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдЖрд╡рд░реНрдзрди рдЬреЛ рдЪреЗрд╣рд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдбрд┐рдЯреЗрдХреНрдЯрд░ рдХреЗ рдЫреЛрдЯреЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЪреЗрд╣рд░реЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред face_detects - рдбрд┐рдЯреЗрдХреНрдЯрд░ рдХреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЫрд╛рдВрдЯреЗ рдЧрдП рдЪреЗрд╣рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬреЛ рд╕рд╛рдордиреЗ рд╣реИред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡реЗрджрди рдореЗрдВ, рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдореБрдЦреНрдп рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рдХреБрдЫ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдФрд░ рдорд╛рдорд▓реЗ рдХреЗ рдЕрдзреНрдпрдпрди рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВрдЧреЗред


 if not face_detects: bot.send_message(chat_id=update.message.chat_id, text='no faces') face = face_detects[0] 

рд╣рдо рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ - рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЦреЛрдЬред рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕рдХрд╛ рд▓реЛрдб рдмрдврд╝рд╛рдПрдВред


 shape_predictor = dlib.shape_predictor('path/to/shape_predictor_5_face_landmarks.dat') 

рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред


 landmarks = shape_predictor(image, face) 

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЫреЛрдЯреА рд╣реИ: рдЪреЗрд╣рд░реЗ рдХреЛ рд╕реАрдзрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд░реЗрд╕рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ 128-рдЖрдпрд╛рдореА рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, dlib рдЖрдкрдХреЛ рдПрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 face_recognition_model = dlib.face_recognition_model_v1('path/to/dlib_face_recognition_resnet_model_v1.dat') 

 embedding = face_recognition_model.compute_face_descriptor(image, landmarks) embedding = np.asarray(embedding) 

рдЬрд░рд╛ рджреЗрдЦрд┐рдП рдХрд┐ рд╣рдо рдХрд┐рддрдиреЗ рд╢рд╛рдирджрд╛рд░ рд╕рдордп рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред рджреАрдХреНрд╖рд╛рдВрдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕рдВрдкреВрд░реНрдг рдЬрдЯрд┐рд▓рддрд╛, рд╕рдорд░реНрдерди рд╡реЗрдХреНрдЯрд░ рд╡рд┐рдзрд┐, рдФрд░ рдорд╛рдиреНрдпрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рддреАрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЙрд▓ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред


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


 bot.send_message( chat_id=update.message.chat_id, text=f'yours embedding mean: {embedding.mean() * 1e3:.2f}' ) 

рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ


рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреМрди рд╕реА рд╣рд╕реНрддрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рд╣реИрдВ, рд╣рдореЗрдВ рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓рд┐рдмреНрд░рд┐рдЯреА рдХреА рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрд╕реНрд╡реАрд░ рдвреВрдВрдврдиреА рд╣реЛрдЧреА, рдЙрд╕ рдкрд░ рдПрдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЕрдкрдиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдмреЙрдЯ рдореЗрдВ рдХреЗрд╡рд▓ 10 рд╣рд╕реНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЙрдирдХреА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рд╣рд╛рде рд╕реЗ рдвреВрдВрдврдХрд░ photos рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдбрд╛рд▓реЗрдВрдЧреЗред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдпрд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:


рджреЗрдЦреЛ, рдореЗрд░реЗ рдкрд╛рд╕ рдореИрдХрдмреБрдХ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдкреИрд╕рд╛ рдирд╣реАрдВ рд╣реИред


рдпрджрд┐ рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд▓рд╛рдЦ рд╕реЗрд▓реЗрдмреНрд░рд┐рдЯреА рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм dlib рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ build_embeddings.py рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрдирдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реЗрд▓рд┐рдмреНрд░рд┐рдЯреА рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред


 import os import dlib import numpy as np import pickle from PIL import Image face_detector = dlib.get_frontal_face_detector() shape_predictor = dlib.shape_predictor('assets/shape_predictor_5_face_landmarks.dat') face_recognition_model = dlib.face_recognition_model_v1('assets/dlib_face_recognition_resnet_model_v1.dat') fs = os.listdir('photos') es = [] for f in fs: print(f) image = np.asarray(Image.open(os.path.join('photos', f))) face_detects = face_detector(image, 1) face = face_detects[0] landmarks = shape_predictor(image, face) embedding = face_recognition_model.compute_face_descriptor(image, landmarks, num_jitters=10) embedding = np.asarray(embedding) name, _ = os.path.splitext(f) es.append((name, embedding)) with open('assets/embeddings.pickle', 'wb') as f: pickle.dump(es, f) 

рд╣рдорд╛рд░реЗ рдмреЙрдЯ рдХреЛрдб рдореЗрдВ рдПрдореНрдмреЗрдб рд▓реЛрдбрд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВред


 import pickle 

 with open('assets/embeddings.pickle', 'rb') as f: star_embeddings = pickle.load(f) 

рдФрд░ рд╕рдВрдкреВрд░реНрдг рдЦреЛрдЬ рд╕реЗ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕рдХреЗ рд╕рдорд╛рди рд╣реИред


 ds = [] for name, emb in star_embeddings: distance = np.linalg.norm(embedding - emb) ds.append((name, distance)) best_match, best_distance = min(ds, key=itemgetter(1)) bot.send_message( chat_id=update.message.chat_id, text=f'your look exactly like *{best_match}*', parse_mode='Markdown' ) 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рджреВрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ dlib рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдореБрдЭреЗ рд▓реЗрдЦ рдореЗрдВ рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИ


рдпрд╣реА рд╕рдм рд╣реИ, рдмрдзрд╛рдИ! рд╣рдордиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреЙрдЯ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕ рд╕реЗрд▓рд┐рдмреНрд░рд┐рдЯреА рдХреА рддрд░рд╣ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рддрд╕реНрд╡реАрд░реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдмреНрд░рд╛рдВрдбрд┐рдВрдЧ, рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА, рд▓реЙрдЧрд┐рдВрдЧ рдХреА рдПрдХ рдЪреБрдЯрдХреА рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╕рднреА рд╡рд┐рд╖рдп рдмрд╣реБрдд рдмрдбрд╝реА рдХреЛрдб рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдЧрд▓реЗ рдЦрдВрдб рдореЗрдВ рдкреНрд░рд╢реНрди-рдЙрддреНрддрд░ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░реВрдВрдЧрд╛ред


рдкреВрд░рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдмреЙрдЯ рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред


рд╣рдо рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ


рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд┐рддрдиреА рд╣рд╕реНрддрд┐рдпрд╛рдВ рд╣реИрдВ? рдЖрдкрдиреЗ рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдВ рдкрд╛рдпрд╛?


рдмреЙрдЯ рдмрдирд╛рддреЗ рд╕рдордп рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░реНрдгрдп рд╣рдорд╛рд░реЗ рдЖрдВрддрд░рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдЖрдзрд╛рд░ рд╕реЗ рд╕реЗрд▓рд┐рдмреНрд░рд┐рдЯреА рдбреЗрдЯрд╛ рд▓реЗрдирд╛ рдкреНрд░рддреАрдд рд╣реБрдЖред рд╡рд╣ рдлрд┐рд▓реНрдореЛрдВ рдФрд░ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рдХреЛрдВ рд╕рд╣рд┐рдд рдлрд┐рд▓реНрдореЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЧреНрд░рд╛рдл рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░рдЦрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕рдХрд╛ рдирд╛рдо, рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб iCloud, рд╕рдВрдмрдВрдзрд┐рдд рдлрд┐рд▓реНрдореЛрдВ рдФрд░ рдЕрдиреНрдп рдирд╛рдореЛрдВ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдЗрдЯ рдкрд░ рд▓рд┐рдВрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдФрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж, json рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


 [ { "name": " ", "alias": "tilda-swinton", "role": "actor", "n_movies": 14 }, { "name": " ", "alias": "michael-shannon", "role": "actor", "n_movies": 22 }, ... ] 

рдХреИрдЯрд▓реЙрдЧ рдореЗрдВ 22,000 рдРрд╕реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдереАрдВред рд╡реИрд╕реЗ, рдПрдХ рдХреИрдЯрд▓реЙрдЧ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдХреИрдЯрд▓реЙрдЧред


рдЗрди рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реЛрдЯреЛ рдХрд╣рд╛рдБ рдвреВрдВрдвреЗрдВ?


рдЦрддрд░рдирд╛рдХ рд╕рдордп рдореЗрдВ рд╣рдо рдЬреАрддреЗ рд╣реИрдВ


рдЦреИрд░, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдФрд░ рд╡рд╣рд╛рдБ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрджреНрднреБрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдЖрдкрдХреЛ Google рд╕реЗ рдЪрд┐рддреНрд░-рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдо рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред 22 рд╣рдЬрд╛рд░ рд▓реЛрдЧ - рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдирд╣реАрдВ, 56 рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рддрд╕реНрд╡реАрд░реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред


рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдЧрд▓рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯреВрдЯреА рд╣реБрдИ, рд╢реЛрд░рдЧреБрд▓ рд╡рд╛рд▓реА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдЬрд╣рд╛рдВ рдЪреЗрд╣рд░реЗ рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рдпреЗ рдЪреЗрд╣рд░реЗ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ: рдЖрдВрдЦреЛрдВ рдХреЗ рдмреАрдЪ рдиреНрдпреВрдирддрдо рджреВрд░реА, рд╕рд┐рд░ рдХрд╛ рдЭреБрдХрд╛рд╡ред рдпрд╣ рд╕рдм рд╣рдореЗрдВ 12,000 рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред


12 рд╣рдЬрд╛рд░ рд╣рд╕реНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рд╕рдордп рдХреЗрд╡рд▓ 2 рдорд┐рд▓реЗ рд╣реИрдВред рдЕрд░реНрдерд╛рдд, рд▓рдЧрднрдЧ 8 рд╣рдЬрд╛рд░ рд╣рд╕реНрддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА рдХрд┐рд╕реА рдФрд░ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕реЗ рдРрд╕реЗ рд╣реА рдордд рдЫреЛрдбрд╝реЛ! рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдвреВрдВрдвреЗрдВред


рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирддрд╛ рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ?


рдмрдбрд╝рд╛ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓! рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА, рдХреЛрд╕рд╛рдЗрди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдКрдкрд░ рд╕реЗ рдмрдВрдзреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░рд╢реНрди рдпрд╣ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ "рдмрдзрд╛рдИ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдП, рдПрдВрдЬреЗрд▓рд┐рдирд╛ рдЬреЛрд▓реА рдХреА рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдФрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА 0.27635462738" рд╣реИ? рд╣рдорд╛рд░реА рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рдФрд░ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рдПрдореНрдмреЗрдбреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХрд╛ рд╡рд┐рддрд░рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ред рддреЛ, рдЙрд╕рдХреЗ рд▓рд┐рдП, рдЖрдк рдФрд╕рдд рдФрд░ рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП, рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХрд┐рддрдиреЗ рдкреНрд░рддрд┐рд╢рдд рд▓реЛрдЧ рдЙрдирдХреА рд╣рд╕реНрддрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реИрдВ ред рдпрд╣ d рд╕реЗ рдкреНрд▓рд╕ рдЗрдиреНрдлрд┐рдирд┐рдЯреА рддрдХ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рдШрдирддреНрд╡ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдЬрд╣рд╛рдВ d рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕реЗрд▓рд┐рдмреНрд░рд┐рдЯреА рд░реИрд▓рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рд╣реИред


рдпрд╣ рд╕рдореБрджреНрд░реА рдирд╣реАрдВ рд╣реИ


рдпрд╣рд╛рдБ рд╕рдЯреАрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 def _transform_dist_to_sim(self, dist): p = 0.5 * (1 + erf((dist - self._dist_mean) / (self._dist_std * 1.4142135623730951))) return max(min(1 - p, 1.0), self._min_similarity) 

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдЪ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдпреВрдирд┐рдпрдиреЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?


рдмреЗрд╢рдХ, рдпрд╣ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЧрдгрдирд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╡реИрдХреНрдЯрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЙрдирд╕реЗ рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рд░рдЪрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдШрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ L2 рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 scores = np.linalg.norm(emb - embeddings, axis=1) best_idx = scores.argmax() 

рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рднрд╛рд░реА рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдЖрдк рдФрд░ рднреА рддреЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Nmslib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рдереЛрдбрд╝реА рдХрдореА рдХрд░рдХреЗ рдЦреЛрдЬ рдХреЛ рдХрд╛рдлреА рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HNSW рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рддрдерд╛рдХрдерд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рддрдм рдПрдХ рдЦреЛрдЬ рдХреА рдЬрд╛рдПрдЧреАред рдЖрдк рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛ рдФрд░ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 import nmslib index = nmslib.init(method='hnsw', space='l2', data_type=nmslib.DataType.DENSE_VECTOR) for idx, emb in enumerate(embeddings): index.addDataPoint(idx, emb) index_time_params = { 'indexThreadQty': 4, 'skip_optimized_index': 0, 'post': 2, 'delaunay_type': 1, 'M': 100, 'efConstruction': 2000 } index.createIndex(index_time_params, print_progress=True) index.saveIndex('./assets/embeddings.bin') 

M рдФрд░ efConstruction рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдЯреАрдХрддрд╛, рд╕реВрдЪрдХрд╛рдВрдХ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдФрд░ рдЦреЛрдЬ рдЧрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


 index = nmslib.init(method='hnsw', space='l2', data_type=nmslib.DataType.DENSE_VECTOR) index.loadIndex('./assets/embeddings.bin') query_time_params = {'efSearch': 400} index.setQueryTimeParams(query_time_params) 

efSearch рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдФрд░ рдЧрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ efConstruction рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдЖрдк рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 ids, dists = index.knnQuery(embedding, k=1) best_dx = ids[0] best_dist = dists[0] 

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, nmslib рд░реИрдЦрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 20 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ, рдФрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдФрд╕рддрди 0.005 рд╕реЗрдХрдВрдб рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред


рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдмреЙрдЯ рдХреЛ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдП?


1. рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ handle_photo рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, python-telegram-bot рд▓рд┐рдП рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред


 from telegram.ext.dispatcher import run_async @run_async def handle_photo(bot, update): ... 

рдЕрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрдкрдиреЗ рдкреВрд▓ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ред Updater рдмрдирд╛рддреЗ рд╕рдордп рдкреВрд▓ рдХрд╛ рдЖрдХрд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "рд▓реЗрдХрд┐рди рдЕрдЬрдЧрд░ рдореЗрдВ рдХреЛрдИ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ!" рдЖрдк рдХреЗ рд╕рдмрд╕реЗ рдЕрдзреАрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдл рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред GIL рдХреЗ рдХрд╛рд░рдг, рдирд┐рдпрдорд┐рдд рдкрд╛рдпрдерди рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди GIL рдХреЛ рд╕рднреА IO рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ C рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рднреА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЕрдм рд╣рдорд╛рд░реЗ handle_photo рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ: рдЗрд╕рдореЗрдВ рдмрд╕ IO рдСрдкрд░реЗрд╢рдВрд╕ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдирд╛ (рдлреЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛, рд░рд┐рд╕реНрдкрд╛рдВрд╕ рднреЗрдЬрдирд╛, рдбрд┐рд╕реНрдХ рд╕реЗ рдлреЛрдЯреЛ рдкрдврд╝рдирд╛ рдЖрджрд┐) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ numpy , nmslib рдФрд░ Pillow рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рдлрдВрдХреНрд╢рдиреНрд╕ рд╣реИрдВред


рдореИрдВрдиреЗ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП dlib рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЬреАрдЖрдИрдПрд▓ рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ dlib рдпрд╣ рдЕрдзрд┐рдХрд╛рд░ dlib ред рдЙрд╕реЗ рдЗрд╕ рддрд╛рд▓реЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рдЙрд╕реЗ рдЬрд╛рдиреЗ рдирд╣реАрдВ рджреЗрддреАред рд▓реЗрдЦрдХ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЙрдкрдпреБрдХреНрдд рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╣рд░реНрд╖ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реВрдВред


2. рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

dlib рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдореЗрдВ dlib рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЪрд▓рд╛рдирд╛ рд╣реИред рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд▓ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИред


 def _worker_initialize(config): global model model = Model(config) model.load_state() def _worker_do(image): return model.process_image(image) pool = multiprocessing.Pool(8, initializer=_worker_initialize, initargs=(config,)) 

 result = pool.apply(_worker_do, (image,)) 

3. рд▓реЛрд╣рд╛

рдпрджрд┐ рдЖрдкрдХреЗ рдмреЙрдЯ рдХреЛ рдбрд┐рд╕реНрдХ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдлрд╝реЛрдЯреЛ рдкрдврд╝рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбрд┐рд╕реНрдХ рдПрдХ рдПрд╕рдПрд╕рдбреА рд╣реИред рдпрд╛ рдЙрдиреНрд╣реЗрдВ рднреА RAM рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдВред рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рд░реНрд╡рд░ рдФрд░ рдЪреИрдирд▓ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд┐рдВрдЧ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


4. рдмрд╛рдврд╝ рдирд┐рдпрдВрддреНрд░рдг

рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯреНрд╕ рдХреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 30 рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХрд╛ рдмреЙрдЯ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдкрдХрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдЬреЛ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрдж рд╕реЗ рдирд┐рд░рд╛рд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, python-telegram-bot рд╣рдореЗрдВ рдПрдХ рдХрддрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ, рднреЗрдЬрдиреЗ рдХреЗ рдмреАрдЪ рдмрд░рд╛рдмрд░ рдЕрдВрддрд░рд╛рд▓ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред


 from telegram.ext.messagequeue import MessageQueue 

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ Updater рдмрдирд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 from telegram.utils.promise import Promise class MQBot(Bot): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._message_queue = MessageQueue( all_burst_limit=30, all_time_limit_ms=1000 ) def __del__(self): try: self._message_queue.stop() finally: super().__del__() def send_message(self, *args, **kwargs): is_group = kwargs.get('chat_id', 0) >= 0 return self._message_queue(Promise(super().send_message, args, kwargs), is_group) 

 bot = MQBot(token=TOKEN) updater = Updater(bot=bot) 

5. рд╡реЗрдм рд╣реБрдХ

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


6. рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди

рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рджреМрд░рд╛рди, рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯрди рдХреЗ рд╕рдВрджреЗрд╢ рдХреЛ рд╣рд░ рд╕реЗрдХрдВрдб рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ jsonред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрдЬрд╛рдп рдЕрд▓реНрдЯреНрд░реЛрдЬрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред


рдПрдХ рдЙрдкрдпреЛрдЧреА рдЫреЛрдЯреА рд╕реА рдмрд╛рдд рд╕рднреА IO рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣реА рдереА: рдлрд╝реЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рднреЗрдЬрдирд╛, рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛, рдЕрдкрдбреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдЗрд╕рдХреА рд╡реГрджреНрдзрд┐ рдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдмреЙрдЯ рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдмрд╣реБрдд рдмрдврд╝рд╛ рджрд┐рдпрд╛ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ред


6. рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕

, . , , , . , .


, , BI-tool Splunk .


рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореБрджреНрджрд╛ (рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ)


, . , .


, . , : @OkkoFaceBot .


, . , .

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


All Articles