рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ Node.js рдХреЗ рд╕рд╛рде Tensorflow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рд╕рд╛рдерд┐рдпреЛрдВ!

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

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

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

Tensorflow.js рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯ-рдПрдВрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рд╛рд▓ Node.js рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, TensorFlow.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреИрдХрдПрдВрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдкрд╛рдпрдерди рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред

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

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реЙрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рднреА рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд┐рдпрд╛ ! рд╣реБрд░реНрд░реЗ!

рдХреЛрдб рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

TensorFlow

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

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

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

TensorFlow Lite

Tensorflow Lite , рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд▓рд╛рдЗрдЯ рд╕рдВрд╕реНрдХрд░рдг, рдордИ 2017 рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рд╕рд╛рде, рдкреИрдЯрд░реНрди рдорд╛рдиреНрдпрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЧрд╣рд░реЗ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред MobileNet рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреБрд╢рд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ред

TensorFlow.js

Tensorflow Lite рдХреЗ рдмрд╛рдж, TensorFlow.js рдХреА рдШреЛрд╖рдгрд╛ рдорд╛рд░реНрдЪ 2018 рдореЗрдВ рдХреА рдЧрдИ рдереАред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬрд┐рд╕реЗ deeplearn.js рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред WebGL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ GPU рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ, рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдмрд╛рдж рдореЗрдВ TensorFlow.js рдХреЛ Node.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП tfjs-node рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдРрдб- tfjs-node рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореМрдЬреВрджрд╛ рдореЙрдбрд▓ рдХреЛ TensorFlow.js рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рд░реЗрдбреА-рдореЗрдб TensorFlow рдФрд░ Keras рдореЙрдбрд▓ TensorFlow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЙрдбрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ, рдкреЛрдЬрд╝ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЗ-рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдФрд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдореЙрдбрд▓ рдЧрд┐рдердм рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред

Node.js рдХреЗ рд╕рд╛рде TensorFlow.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

TensorFlow.js рдХреЛ NPM рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 npm install @tensorflow/tfjs @tensorflow/tfjs-node // ... npm install @tensorflow/tfjs @tensorflow/tfjs-node-gpu 

Node.js рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреЗрд╢реА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдорд╛рдВрдЧ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ Tensorflow рдХреЗ рд▓рд┐рдП JavaScript API рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЛрдИ рдПрдХреНрд╕рдЯреЗрдВрд╢рди API рдирд╣реАрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ Node.js. рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ

  const tf = require('@tensorflow/tfjs') //   ( CPU) require('@tensorflow/tfjs-node') //    ( GPU) require('@tensorflow/tfjs-node-gpu') 

TensorFlow рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

TensorFlow.js рдПрдХ NPM рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( tfjs-models ) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ , рдкреЙрдЬрд╝ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдХреЗ-рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдФрд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЛ рд╕рд░рд▓ tfjs-models рд╣реИ ред

MobileNet рдХреА рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдореЙрдбрд▓ рдПрдХ рдЧрд╣рд░реА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИ рдЬреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ 1000 рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП README рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 import * as mobilenet from '@tensorflow-models/mobilenet'; //   const model = await mobilenet.load(); 

рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдореБрдЭреЗ рд╣реБрдИ рдереА, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб Node.js. рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

 Error: browserHTTPRequest is not supported outside the web browser. 

рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореЛрдмрд┐рд▓рдиреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА tf.Model рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдЬрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ load() рд╡рд┐рдзрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдмрд╛рд╣рд░реА HTTP рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рдЖрд╡рд╢реНрдпрдХ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреА рд╣реИ рдФрд░ TensorFlow рдореЙрдбрд▓ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рддреА рд╣реИред

рд▓реЗрдЦрди рдХреЗ рд╕рдордп Node.js рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрддрд┐рд╢реАрд▓ рдореЙрдбрд▓ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред рдЬреЛ рдХреБрдЫ рднреА рдерд╛ рд╡рд╣ рд╕рднреА рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдерд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓рд╛рдпрдмреНрд░реЗрд░реА рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ ...

рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛

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

 const path = "mobilenet/model.json" const mn = new mobilenet.MobileNet(1, 1); mn.path = `file://${path}` await mn.load() 

рдХреВрд▓, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рд▓реЗрдХрд┐рди рдореЙрдбрд▓ рдлрд╛рдЗрд▓реЗрдВ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреА рд╣реИрдВ?

рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдореЙрдбрд▓

TensorFlow.js рдХреЗ рдореЙрдбрд▓ рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдПрдХ рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдФрд░ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореЙрдбрд▓ рд╡рдЬрдиред рдмреНрд░рд╛рдЙрдЬрд░ рдХреИрдЪрд┐рдВрдЧ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рд╡реЗрдЯ рдХреЛ рдЕрдХреНрд╕рд░ рдХрдИ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

 https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v${version}_${alpha}_${size}/ 

URL рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╣рд╛рдБ рд╕реВрдЪреАрдмрджреНрдз рдореЙрдбрд▓ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ ред рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдЯреАрдХрддрд╛ рднреА рдЙрд╕реА рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред

рд╕реНрд░реЛрдд рдХреЛрдб рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ v1 рдХреЗ рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЛ tensorflow-models/mobilenet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

HTTP рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЛрдб рд╕реНрдЯреЛрд░реЗрдЬ рд╕реНрдерд╛рди рд╕реЗ model.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ model.json рд╕рд╛рде рдореЙрдбрд▓ рдХреЗ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдпреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╛рдЗрд▓ рд╣реИрдВ groupX-shard1of1 ред

рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓

рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рднреА рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рд╕рднреА рднрд╛рд░рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд░рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
рдореИрдВ 1.0 рдХреЗ рдЕрд▓реНрдлрд╛ рдорд╛рди рдФрд░ 224 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде MobileNet V1 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ ред рддреЛ рдореБрдЭреЗ рдореЙрдбрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди URL рдорд┐рд▓рддрд╛ рд╣реИред

 https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/model.json 

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

 $ cat model.json | jq -r ".weightsManifest[].paths[0]" group1-shard1of1 group2-shard1of1 group3-shard1of1 ... 

sed рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╡рдЬрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП URL рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП URL рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ HTTP рддрддреНрд╡ рдХрд╛ рдирд╛рдо рдЙрдкрд╕рд░реНрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 $ cat model.json | jq -r ".weightsManifest[].paths[0]" | sed 's/^/https:\/\/storage.googleapis.com\/tfjs-models\/tfjs\/mobilenet_v1_1.0_224\//' https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group1-shard1of1 https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group2-shard1of1 https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_1.0_224/group3-shard1of1 ... 

parallel рдФрд░ curl рдХрдорд╛рдВрдб рддрдм рдЖрдкрдХреЛ рдЗрди рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдореЗрд░реА рд╕реНрдерд╛рдиреАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

 cat model.json | jq -r ".weightsManifest[].paths[0]" | sed 's/^/https:\/\/storage.googleapis.com\/tfjs-models\/tfjs\/mobilenet_v1_1.0_224\//' | parallel curl -O 

рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг

TensorFlow.js рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдирдореВрдирд╛ рдХреЛрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПред

 const img = document.getElementById('img'); //   const predictions = await model.classify(img); 

DOM рд╕рдкреЛрд░реНрдЯ рди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг Node.js рдореЗрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

classify рд╡рд┐рдзрд┐ рд╡рд┐рднрд┐рдиреНрди DOM рддрддреНрд╡реЛрдВ ( canvas , video , image ) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрди рддрддреНрд╡реЛрдВ рд╕реЗ "рдЪрд┐рддреНрд░" рдмрд╛рдЗрдЯреНрд╕ рдХреЛ tf.Tensor3D рд╡рд░реНрдЧ рдореЗрдВ tf.Tensor3D , рдФрд░ рдореЙрдбрд▓ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, tf.Tensor3D рдХреЛ рд╕реАрдзреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ DOM рддрддреНрд╡ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдкрд╛рдпрд╛ рдХрд┐ tf.Tensor3D рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ ред

рд╣рдо рдЫрд╡рд┐ рд╕реЗ Tensor3D рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ

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

 const values = new Int32Array(image.height * image.width * numChannels); //     ,    const outShape = [image.height, image.width, numChannels]; const input = tf.tensor3d(values, outShape, 'int32'); 

pixels рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИ (Int32Array) рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдорд╛рдиреЛрдВ рдХреА рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИред numChannels рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдЪреИрдирд▓ рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

JPEG рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд╡реИрд▓реНрдпреВ рдмрдирд╛рдирд╛

jpeg-js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП Node.js рдХреЗ рд▓рд┐рдП JPEG рдПрдирдХреЛрдбрд░ / рдбрд┐рдХреЛрдбрд░ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП RGB рдорд╛рди рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

 const pixels = jpeg.decode(buffer, true); 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ ( width * height ) рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдЪреИрдирд▓ рдорд╛рди ( RGBA ) рдХреЗ рд╕рд╛рде Uint8Array рдорд┐рд▓рддрд╛ рд╣реИред MobileNet рдореЙрдбрд▓ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рддреАрди рд░рдВрдЧ рдЪреИрдирд▓реЛрдВ ( RGB ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдЪрд╛рд░-рдЪреИрдирд▓ рд╕рд░рдгреА рдХреЛ рдПрдХ рд╕рдЪреНрдЪреЗ рддреАрди-рдЪреИрдирд▓ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред

  const numChannels = 3; const numPixels = image.width * image.height; const values = new Int32Array(numPixels * numChannels); for (let i = 0; i < numPixels; i++) { for (let channel = 0; channel < numChannels; ++channel) { values[i * numChannels + channel] = pixels[i * 4 + channel]; } } 

MobileNet рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ

рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореЛрдмрд╛рдЗрд▓рдиреЗрдЯ рдореЙрдбрд▓ 224 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЙрдЪреНрдЪ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдЯреЗрдирд░реНрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рддреАрди рдЪреИрдирд▓ рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП -1 рд╕реЗ 1 рдХреА рд╕реАрдорд╛ рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╡реИрд▓реНрдпреВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдЕрд▓рдЧ рдЖрдпрд╛рдо рд╡рд╛рд▓реА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╣реА рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, JPEG рдбрд┐рдХреЛрдбрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд┐рдХреНрд╕реЗрд▓ рдорд╛рди 0 - 255, рдирдВ -1 - 1. рд╢реНрд░реЗрдгреА рдореЗрдВ рд╣реИрдВред рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рднреА рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

TensorFlow.js рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рдПрдХ рд╡рд┐рд╢реЗрд╖ tfjs-models/mobilenet рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ !

рдбреЗрд╡рд▓рдкрд░ рдЗрдирдкреБрдЯ Tensor3Ds рдХреЗ рдкреНрд░рдХрд╛рд░ int32 , рд╕рд╛рде рд╣реА classify рдкрджреНрдзрддрд┐ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдпрд╛рдореЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ рдХреЛ рд╕рд╣реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдХрд░рдиреЗ рдХреЛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рд╕реБрдкрд░!

рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдБ рд╣реЛ рд░рд╣реА рд╣реИрдВ

Tensorflow рдХреЗ MobileNet рдореЙрдбрд▓ ImageNet рдХреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╕реЗ 1000 рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рд╕реАрдЦрддреЗ рд╣реИрдВред рдореЙрдбрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕рдВрднрд╛рд╡реНрдп рдореВрд▓реНрдп рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЧреАрдХреГрдд рдЫрд╡рд┐ рдореЗрдВ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреНрдпрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдЗрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИ ред

tfjs-models/mobilenet MobileNet рдХреНрд▓рд╛рд╕ рдореЗрдВ classify рдкрджреНрдзрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬреЛ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ MobileNet X рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИред

 const predictions = await mn_model.classify(input, 10); 

predictions рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХреНрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред

  { className: 'panda', probability: 0.9993536472320557 } 

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

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ Node.js рдореЗрдВ TensorFlow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ MobileNet рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рдЕрдм рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЫрд╡рд┐ рдХреЛ рдХреИрд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддреА рд╣реИред

рд╕реНрд░реЛрдд рдХреЛрдб

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдкреИрдХреЗрдЬ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред

 { "name": "tf-js", "version": "1.0.0", "main": "script.js", "license": "MIT", "dependencies": { "@tensorflow-models/mobilenet": "^0.2.2", "@tensorflow/tfjs": "^0.12.3", "@tensorflow/tfjs-node": "^0.1.9", "jpeg-js": "^0.3.4" } } 

 const tf = require('@tensorflow/tfjs') const mobilenet = require('@tensorflow-models/mobilenet'); require('@tensorflow/tfjs-node') const fs = require('fs'); const jpeg = require('jpeg-js'); const NUMBER_OF_CHANNELS = 3 const readImage = path => { const buf = fs.readFileSync(path) const pixels = jpeg.decode(buf, true) return pixels } const imageByteArray = (image, numChannels) => { const pixels = image.data const numPixels = image.width * image.height; const values = new Int32Array(numPixels * numChannels); for (let i = 0; i < numPixels; i++) { for (let channel = 0; channel < numChannels; ++channel) { values[i * numChannels + channel] = pixels[i * 4 + channel]; } } return values } const imageToInput = (image, numChannels) => { const values = imageByteArray(image, numChannels) const outShape = [image.height, image.width, numChannels]; const input = tf.tensor3d(values, outShape, 'int32'); return input } const loadModel = async path => { const mn = new mobilenet.MobileNet(1, 1); mn.path = `file://${path}` await mn.load() return mn } const classify = async (model, path) => { const image = readImage(path) const input = imageToInput(image, NUMBER_OF_CHANNELS) const mn_model = await loadModel(model) const predictions = await mn_model.classify(input) console.log('classification results:', predictions) } if (process.argv.length !== 4) throw new Error('incorrect arguments: node script.js <MODEL> <IMAGE_FILE>') classify(process.argv[2], process.argv[3]) 

рдкрд░реАрдХреНрд╖рдг

рдКрдкрд░ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдореЛрдмрд┐рд▓рдиреЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореЙрдбрд▓ рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
NPM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╕реЗрдЯ рдХрд░реЗрдВ

npm install

рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ JPEG рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

wget http://bit.ly/2JYSal9 -O panda.jpg



рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рддрд░реНрдХ рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рд╣реЛрдВрдЧреЗред

node script.js mobilenet/model.json panda.jpg

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

  classification results: [ { className: 'giant panda, panda, panda bear, coon bear', probability: 0.9993536472320557 } ] 

рдЫрд╡рд┐ рдХреЛ 99.93% рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдкрд╛рдВрдбрд╛ рдпреБрдХреНрдд рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!

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

TensorFlow.js рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдиреЗ рдХреЗ рдЧрд╣рд░реЗ рдЕрд╡рд╕рд░реЛрдВ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИред TensorFlow.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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


All Articles