opencv4arts: рдореЗрд░рд╛ рд╢рд╣рд░, рд╡рд┐рдВрд╕реЗрдВрдЯ рдбреНрд░рд╛

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


рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлреА рдореЗрдВ рд╡рд┐рд╢реНрд╡ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдпреЛрдЧ рдерд╛ред рд▓реЗрдЦ рд╕реЗ рдЖрдк рдЬрд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рджрд┐рд▓ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдП OpenCV.js рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - OpenCV рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрд╕реНрдХрд░рдгред



рд╢реИрд▓реА рд╣рд╕реНрддрд╛рдВрддрд░рдг


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


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


OpenCV.js


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


OpenCV.js рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ 2017 рдореЗрдВ Google рд╕рдорд░ рдСрдл рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИред рд╡реИрд╕реЗ, рдПрдХ рдмрд╛рд░ рдбреАрдк рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ OpenCV рдЦреБрдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖ рдерд╛ред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдлрд┐рд▓рд╣рд╛рд▓ OpenCV.js рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореВрд▓ рддрд░реАрдХреЛрдВ рдХрд╛ рдЖрд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд▓рд╡реАрд╡реАрдПрдо рдФрд░ рдХреНрд▓реЗрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкреВрд░рд╛ рд╕рдВрдХрд▓рди рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ C рдФрд░ C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,


 #include <iostream> int main(int argc, char** argv) { std::cout << "Hello, world!" << std::endl; return 0; } 

asm.js рдореЗрдВ рд╕рдВрдХрд▓рди


 emcc main.cpp -s WASM=0 -o main.js 

рдФрд░ рд▓реЛрдб рдХрд░реЗрдВ:


 <!DOCTYPE html> <html> <head> <script src="main.js" type="text/javascript"></script> </head> </html> 

рдЖрдк OpenCV.js рдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рд░рд╛рддреНрд░рд┐ рдирд┐рд░реНрдорд╛рдг):


 <script src="https://docs.opencv.org/master/opencv.js" type="text/javascript"></script> 

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


 <script src="https://docs.opencv.org/master/utils.js" type="text/javascript"></script> 

рдЫрд╡рд┐рдпрд╛рдБ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ


OpenCV.js рдореЗрдВ рдЫрд╡рд┐рдпрд╛рдБ canvas рдпрд╛ img рдЬреИрд╕реЗ рддрддреНрд╡реЛрдВ рд╕реЗ рдкрдврд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЗрдореЗрдЬ рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдпреВрдЬрд░ рдХрд╛ рдХрд╛рдо рд░рд╣рддрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди addFileInputHandler рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд canvas рддрддреНрд╡ рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ рдЬрдм рдПрдХ рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдкрд░ рдПрдХ рддрд╕реНрд╡реАрд░ рдбрд┐рд╕реНрдХ рд╕реЗ рдЪреБрдиреА рдЬрд╛рддреА рд╣реИред


 var utils = new Utils(''); utils.addFileInputHandler('fileInput', 'canvasInput'); var img = cv.imread('canvasInput'); 

рдЬрд╣рд╛рдБ


 <input type="file" id="fileInput" name="file" accept="image/*" /> <canvas id="canvasInput" ></canvas> 

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ img рдПрдХ 4-рдЪреИрдирд▓ RGBA рдЫрд╡рд┐ рд╣реЛрдЧреА, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп cv::imread рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА cv::imread , рдЬреЛ BGR рдЫрд╡рд┐ рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдмрд╕ рд╡рд╛рдВрдЫрд┐рдд canvas рдХреА id рд╕рд╛рде imshow рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ (рдЖрд░рдЬреАрдмреА рдпрд╛ рдЖрд░рдЬреАрдмреАрдП рдХреА рдЙрдореНрдореАрдж рд╣реИ)ред


 cv.imshow("canvasOutput", img); 

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


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


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдорд╛рдирд╛ рдЧрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ [-1, 1] рдореЗрдВ float рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд╛рд░ рдЖрдпрд╛рдореА рдЯреЗрдВрд╕рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЧрддрд┐ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрд╛рдо, рдЪрд┐рддреНрд░, рдЪреИрдирд▓, рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред рдЗрд╕ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдХреЛ NCHW рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЯреЗрдВрд╕рд░ рдХреЛ рд╣реА рдПрдХ рдмреВрдБрдж, рдмрд╛рдЗрдирд░реА рд▓рд╛рд░реНрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреВрд░реНрд╡-рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдп рдПрдХ OpenCV рдЫрд╡рд┐ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рддреАрд╡реНрд░рддрд╛ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдорд╛рдиреЛрдВ рдХреА рдПрдХ рдЕрдВрддрд░рд╛рд▓ [0, 255] рдкреНрд░рдХрд╛рд░ рдХреЗ unsigned char NCHW рдмреВрдБрдж рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде [-1, 1] ред



рдирд┐рдЬрд╝рдиреА рдиреЛрд╡рдЧреЛрд░реЛрдб рдХреНрд░реЗрдорд▓рд┐рди рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреЗрдЦрддрд╛ рд╣реИ)



interleaved рджреГрд╢реНрдп (OpenCV рд╕реНрдЯреЛрд░ рдХреИрд╕реЗ)



рдкреНрд▓рд╛рдирд░ рд╡реНрдпреВ (рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП)


рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрд▓рдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛: рдиреЗрдЯрд╡рд░реНрдХ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдирд╕реАрдПрдЪрдбрдмреНрд▓реНрдпреВ рдмреВрдБрдж рд▓реМрдЯрд╛рддрд╛ рд╣реИ [-1, 1] , рдЬрд┐рд╕реЗ рдЪрд┐рддреНрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ [0, 255] рдФрд░ unsigned char рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, OpenCV.js рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрджрдо рдЖрдХрд╛рд░ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ:


 imread -> RGBA -> BGR [0, 255] -> NCHW [-1, 1] -> [] [] -> NCHW [-1, 1] -> RGB [0, 255] -> imshow 

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


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЬрд┐рд╕реЗ рд╣рдо рдЪрд▓рд╛рдПрдВрдЧреЗ, рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


 var net; var url = 'style_vangogh.t7'; utils.createFileFromUrl('style_vangogh.t7', url, () => { net = cv.readNet('style_vangogh.t7'); }); 

рд╡реИрд╕реЗ, url рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░реНрдг рд▓рд┐рдВрдХ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдмрд╕ рд╡рд░реНрддрдорд╛рди HTML рдкреГрд╖реНрда рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдореВрд▓ рд╕реНрд░реЛрдд рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбрд╛рдЙрдирд▓реЛрдб рд╕рдордп рд▓рдВрдмрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред


canvas рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдкрдврд╝рдирд╛ рдФрд░ RGBA рд╕реЗ BGR рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛:


 var imgRGBA = cv.imread('canvasInput'); var imgBGR = new cv.Mat(imgRGBA.rows, imgRGBA.cols, cv.CV_8UC3); cv.cvtColor(imgRGBA, imgBGR, cv.COLOR_RGBA2BGR); 

рдПрдХ 4D рдмреНрд▓реЙрдм рдмрдирд╛рдирд╛, рдЬрд╣рд╛рдВ blobFromImage рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ float рдбреЗрдЯрд╛ float рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ - рдиреЗрдЯрд╡рд░реНрдХ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред


 var blob = cv.blobFromImage(imgBGR, 1.0 / 127.5, //  {width: imgBGR.cols, height: imgBGR.rows}, //  [127.5, 127.5, 127.5, 0]); //   net.setInput(blob); var out = net.forward(); 

рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдЫрд╡рд┐ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ [0, 255]


 //     [-1, 1]  [0, 255] var outNorm = new cv.Mat(); out.convertTo(outNorm, cv.CV_8U, 127.5, 127.5); //  interleaved   planar  var outHeight = out.matSize[2]; var outWidth = out.matSize[3]; var planeSize = outHeight * outWidth; var data = outNorm.data; var b = cv.matFromArray(outHeight, outWidth, cv.CV_8UC1, data.slice(0, planeSize)); var g = cv.matFromArray(outHeight, outWidth, cv.CV_8UC1, data.slice(planeSize, 2 * planeSize)); var r = cv.matFromArray(outHeight, outWidth, cv.CV_8UC1, data.slice(2 * planeSize, 3 * planeSize)); var vec = new cv.MatVector(); vec.push_back(r); vec.push_back(g); vec.push_back(b); var rgb = new cv.Mat(); cv.merge(vec, rgb); //   cv.imshow("canvasOutput", rgb); 

рдлрд┐рд▓рд╣рд╛рд▓, OpenCV.js рдХреЛ рдЕрд░реНрдз-рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЙрдирдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, dnn рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП, рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ:


 dnn = {'dnn_Net': ['setInput', 'forward'], '': ['readNetFromCaffe', 'readNetFromTensorflow', 'readNetFromTorch', 'readNetFromDarknet', 'readNetFromONNX', 'readNet', 'blobFromImage']} 

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


рдирд┐рд╖реНрдХрд░реНрд╖


рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ GitHub рдкрд░ рдПрдХ рдкреГрд╖реНрда рддреИрдпрд╛рд░ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдБ рдЖрдк рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://dkurtaev.imtqy.com/opencv4arts (рд╕рд╛рд╡рдзрд╛рдиреА! 22MB рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рдЕрдкрдирд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдмрдЪрд╛рдирд╛ред рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЧрдИ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рд╕реА рддрд░рд╣ рджреГрдврд╝рддрд╛ рд╕реЗ рд╡рд┐рдХреГрдд рд╣реИ)ред рдПрдХ рд▓рдВрдмреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реЗрдВ рдпрд╛ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЬреЛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛, рдПрдХ рд╕реНрд▓рд╛рдЗрдбрд░ред


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


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


рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


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


All Articles