рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЫрд╡рд┐ рдорд╛рдиреНрдпрддрд╛ рдореЗрдВ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╣рд╛рд▓ рдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рд╕рд╛рде, рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдирдПрди-рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдПрдХ рд╕рд░рд▓ рджрд┐рдирдЪрд░реНрдпрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдЦреИрд░, рдХреБрдЫ рд╣рдж рддрдХ рдпрд╣ рд╕рдЪ рд╣реИ: рдпрджрд┐ рдЖрдк рдЫрд╡рд┐ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рдПрдХ рдЖрд╡реЗрджрди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рд╣реЛред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ Google рдХреЛ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рдФрд░ рджреЛрд╣рд░рд╛рдирд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрднреА рднреА рдЕрдирдЧрд┐рдирдд рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдг рд╣реИрдВ рдХрд┐ ... рд╡реЗ рдЕрдЫреВрддрд╛ рдирд╣реАрдВ рд╣реИрдВ, рдирд╣реАрдВред рд╡реЗ рдХреЗрд╡рд▓ рдЖрдкрдХрд╛ рдмрд╣реБрдд рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдк рдПрдХ рд╢реБрд░реБрдЖрдд рд╣реИрдВред рдорджрдж рд╕реЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдПрдХ рдХрджрдо-рджрд░-рдЪрд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛, рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд┐рд╕рдореЗрдВ "рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд▓реЛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ" рдХрдердиред рдЦреИрд░, рд▓рдЧрднрдЧ :)
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рдПрдХ рдбреЙрдЧ рдмреНрд░реАрдб рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ: рд╣рдо рдПрдХ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рд╕рд┐рдЦрд╛рдПрдВрдЧреЗ, рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ Google Play рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдЖрдк рдореЗрдВ рд╕реЗ рдЬреЛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ Google Play рдкрд░
NeuroDog App рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореЗрд░реЗ рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕рд╛рдЗрдЯ:
robotics.snowcron.com ред
рдХреЗ рд╕рд╛рде рд╡реЗрдм рд╕рд╛рдЗрдЯ:
рдиреНрдпреВрд░реЛрдбреЙрдЧ рдпреВрдЬрд░ рдЧрд╛рдЗрдб ред
рдпрд╣рд╛рдБ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИ:

рдПрдХ рдЕрд╡рд▓реЛрдХрди
рд╣рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд░рд╕: Google рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЙрдЪреНрдЪ-рд╕реНрддрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рддреЗрдЬреА рд╣реЛрдЧреА, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореИрдВ рддреЗрдЬреА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВред рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ: рдСрдирд▓рд╛рдЗрди рдХрдИ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВред
рд╣рдо CNNs - рдХрдиреНрд╡реЗрдВрд╢рдирд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред CNNs (рдФрд░ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдиреЗрдЯрд╡рд░реНрдХ) рдЫрд╡рд┐ рдорд╛рдиреНрдпрддрд╛ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдХреЛ рдареАрдХ рд╕реЗ рдкрдврд╝рд╛рдирд╛ рдПрдХ рджреБрд░реНрдЬреЗрдп рдХрд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕рдВрд░рдЪрдирд╛, рд╕реАрдЦрдиреЗ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ (рдЙрди рд╕рднреА рд╕реАрдЦрдиреЗ рдХреА рджрд░, рдЧрддрд┐, L1 рдФрд░ L2 рдФрд░ рдЗрд╕реА рддрд░рд╣) рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдХрд╛рд░реНрдп рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ, рд╣рдо рдмрд╕ рд╕рднреА рд╕рдВрднрд╡ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдпрд╣ рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо рддрдерд╛рдХрдерд┐рдд "рд╡реИрдирд┐рд▓рд╛" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП "рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдЬреНрдЮрд╛рди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЯреНрд░рд╛рдВрд╕рдлрд░ рдиреЛрд▓реЗрдЬ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ (Google рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдЗрд╕рдХреА рдкрд┐рдЫрд▓реА рдХреБрдЫ рдкрд░рддреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдЕрдкрдиреА рдЦреБрдж рдХреА рдкрд░рддреЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ... рдФрд░ рдпрд╣ рдЪрдорддреНрдХрд╛рд░ рдХрд╛рдо рдХрд░рддреА рд╣реИред
рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ: рд╣рдордиреЗ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ, рдлреВрд▓реЛрдВ рдФрд░ рдлрд░реНрдиреАрдЪрд░ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП Google рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдЕрдм рдпрд╣ рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ! рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдбреАрдк рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕, рдЬрд┐рд╕рдореЗрдВ рдЫрд╡рд┐ рдорд╛рдиреНрдпрддрд╛, рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╣рдо рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВред рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдкрд╣рд▓реА рдкрд░рдд рд╕рд░рд▓ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ "рд▓рдШреБ рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛", "рдПрдХ рдореЗрд╣рд░рд╛рдм" рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЕрдЧрд▓реА рдкрд░рдд рдЗрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреЛ рд▓реЗрддреА рд╣реИ (рдФрд░ рдЬрд╣рд╛рдВ рд╡реЗ рдЫрд╡рд┐ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ) рдФрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИрдВ, рдЬреИрд╕реЗ "рдлрд░", "рдПрдХ рдЖрдВрдЦ рдХрд╛ рдХреЛрдирд╛" рдЖрджрд┐ред рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд╣реЗрд▓реА рд╣реИ рдЬрд┐рд╕реЗ рдХреБрддреНрддреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдлрд░, рджреЛ рдЖрдВрдЦреЗрдВ, рдореБрдВрд╣ рдореЗрдВ рдорд╛рдирд╡ рдкреИрд░ рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рдЕрдм, рдпрд╣ рд╕рдм рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдкреВрд░реНрд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдкрд░рддреЛрдВ (Google рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдмрдбрд╝реЗ рдЦрд┐рд▓рд╛рдбрд╝реА) рдХреЗ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЗрд╕рдХреЗ рдКрдкрд░ рдЕрдкрдиреА рдЦреБрдж рдХреА рдкрд░рддреЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо "рд╡реИрдирд┐рд▓рд╛" рд╕реАрдПрдирдПрди рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ "рдЯреНрд░рд╛рдВрд╕рдлрд░ рд▓рд░реНрдирд┐рдВрдЧ" рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред "рд╡реЗрдирд┐рд▓рд╛" рдХреЗ рд░реВрдк рдореЗрдВ: рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ "рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд" рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдХреЗрд░рд╕ рдХреБрдЫ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдореИрдВ рдХреБрдЫ рд╡рд┐рдиреНрдпрд╛рд╕ рдЪреБрдиреВрдБрдЧрд╛ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░реВрдБрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреБрддреНрддреЗ рдХреА рдирд╕реНрд▓реЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдирд╕реНрд▓реЛрдВ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ "рджрд┐рдЦрд╛рдирд╛" рдЪрд╛рд╣рд┐рдПред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдорд╛рди рдХрд╛рд░реНрдп (
рдпрд╣рд╛рдВ рдореВрд▓ ) рдХреЗ рд▓рд┐рдП рдПрдХ
рдмрдбрд╝рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ
рдХрд╛рдЧрд▓ рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛
рд╣реВрдВрдлрд┐рд░ рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП "рд╡рд┐рдЬреЗрддрд╛" рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдХреЗрд░рд╕ рдПрдирдПрди рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рд╣рдо рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ Google Play рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдХреЛ рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, Google рд╕рд╣рдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреАрдХреЗ рдХреЗ рд╕реНрд╡реАрдХреГрдд рдЖрдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ: рд╣рдореЗрдВ рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Google рд╣рдорд╛рд░реЗ рдРрдк рдХреЛ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХреБрдЫ рдЬрд╛рджреБрдИ рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ "рдХрдорд░реНрд╢рд┐рдпрд▓" (рдЙрджреНрдзрд░рдг рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдЬрд╝рд╛рд░-рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдореБрдлрд╝реНрдд рд╣реИ) Android NN- рд╕рд╢рдХреНрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧред
рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг
рдХреЗрд░реЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╣реИрдВ, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдУрдПрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдЙрдмрдВрдЯреВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╣реИ), рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб (рдпрд╛ рдирд╣реАрдВ) рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЖрдкрдХреЗ рд╕реНрдерд╛рдиреАрдп рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЗрддрдиреЗ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред рд╕рд┐рд╡рд╛рдп ... рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред
рдкрд╣рд▓реЗ, рдХрдИ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рд╣реЛрдЧрд╛ред рджреВрд╕рд░рд╛, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреЛрдВ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рддреЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рдХреНрд╖рдг рдореЗрдВ, рдПрдирдПрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реАрд░реНрд╖ рдЬреАрдкреАрдпреВ рдХреА рд▓рд╛рдЧрдд 2000 - 7000 рдбреЙрд▓рд░ рд╣реИред рдФрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рднреА рд▓рдЧрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рджреЗрдЦреЗрдВ, Google рдПрдирдПрди-рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд▓реЛрдЧреЛрдВ рдХреЛ рдореБрдлреНрдд рдореЗрдВ рдЕрдкрдиреЗ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╡рд╛рддрд╛рд╡рд░рдг рднреА рдмрдирд╛рдпрд╛ рд╣реИ; рд╕рднреА рдПрдХ рд╕рд╛рде рдЗрд╕реЗ Google Colab рдХрд╣рддреЗ рд╣реИрдВред рд╕реЗрд╡рд╛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрдЬрдЧрд░, рдХреЗрд░рд╕ рдФрд░ рдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рддрдХ рдкрд╣реБрдВрдЪ рджреЗрддреА рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдПрдХ Google рдЦрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ (рдПрдХ рдЬреАрдореЗрд▓ рдЦрд╛рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдм рдХреБрдЫ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдЧреА) рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИред
рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рдХреНрд╖рдг рдореЗрдВ,
рдЗрд╕ рд▓рд┐рдВрдХ рд╕реЗ рдХреЛрд▓рд╛рдм рддрдХ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдмрд╕ Google рдХреЛ "Google Colabред"
рдХреЛрд▓рд╛рдм рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ WEB рд╕реЗрд╡рд╛ рд╣реИред рдЖрдк рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд╕рд╣реЗрдЬрдирд╛, рдЖрдкрдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛ рдЖрджрд┐?
рдХреБрдЫ рд╣реИрдВ (рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рдХреНрд╖рдг рдореЗрдВ - рддреАрди) рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг; рд╣рдо рдЙрд╕ рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ: Google рдбреНрд░рд╛рдЗрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
Google рдбреНрд░рд╛рдЗрд╡ рдПрдХ рдХреНрд▓рд╛рдЙрдб рд╕реНрдЯреЛрд░реЗрдЬ рд╣реИ рдЬреЛ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ Google Colab рдкрд░ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдиреАрдЪреЗ рдХреЛрдб рджреЗрдЦреЗрдВ)ред рддрдм рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдЖрдк рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХреЛрд▓рд╛рдм рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХреБрддреНрддреЛрдВ рдХреА рддрд╕реНрд╡реАрд░реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрди рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдЕрдкрдиреЗ Google рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдмрд╕ред
рдПрдирдПрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг
рдиреАрдЪреЗ, рдореИрдВ рдкрд╛рдпрдерди рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВ, рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХред рдЖрдк рдЙрд╕ рдХреЛрдб рдХреЛ рдЕрдкрдиреА рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реЙрдХ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрдн
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП Google Drive рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рдХреА рд╕рд┐рд░реНрдл рджреЛ рд▓рд╛рдЗрдиреЗрдВред рдЙрд╕ рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХреЛрд▓рд╛рдм рд╕рддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕реЗ, рдХрд╛рдо рдХреЗ рдЫрд╣ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж)ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рджреВрд╕рд░реА рдмрд╛рд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдбреНрд░рд╛рдЗрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдШреБрдбрд╝рд╕рд╡рд╛рд░ рд╣реИред
from google.colab import drive drive.mount('/content/drive/')
рдкрд╣рд▓реА рдмрд╛рд░ рдЖрдкрдХреЛ рдорд╛рдЙрдВрдЯрд┐рдВрдЧ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ - рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
>>> Go to this URL in a browser: ... >>> Enter your authorization code: >>> ┬╖┬╖┬╖┬╖┬╖┬╖┬╖┬╖┬╖┬╖ >>> Mounted at /content/drive/
рдПрдХ рд╕реБрдВрджрд░ рдорд╛рдирдХ
рдореЗрдВ рдЕрдиреБрднрд╛рдЧ
рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ; рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдирдПрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдирдПрди рдХреЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЯрд┐рдкреНрдкрдгреА / рдЕрдирд╕реБрдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, InceptionV3 рдкреНрд░рдХрд╛рд░ NN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, InceptionV3 рдХреЛ рдЕрд╕рд╣рдЬ рдХрд░реЗрдВ, рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ, ResNet50ред рдпрд╛ рдирд╣реАрдВ: рдЖрдк рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИрдВ, рдпрд╣ рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рд╣реИред
import datetime as dt import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from tqdm import tqdm import cv2 import numpy as np import os import sys import random import warnings from sklearn.model_selection import train_test_split import keras from keras import backend as K from keras import regularizers from keras.models import Sequential from keras.models import Model from keras.layers import Dense, Dropout, Activation from keras.layers import Flatten, Conv2D from keras.layers import MaxPooling2D from keras.layers import BatchNormalization, Input from keras.layers import Dropout, GlobalAveragePooling2D from keras.callbacks import Callback, EarlyStopping from keras.callbacks import ReduceLROnPlateau from keras.callbacks import ModelCheckpoint import shutil from keras.applications.vgg16 import preprocess_input from keras.preprocessing import image from keras.preprocessing.image import ImageDataGenerator from keras.models import load_model from keras.applications.resnet50 import ResNet50 from keras.applications.resnet50 import preprocess_input from keras.applications.resnet50 import decode_predictions from keras.applications import inception_v3 from keras.applications.inception_v3 import InceptionV3 from keras.applications.inception_v3 import preprocess_input as inception_v3_preprocessor from keras.applications.mobilenetv2 import MobileNetV2 from keras.applications.nasnet import NASNetMobile
Google рдбрд┐рд╕реНрдХ рдкрд░, рд╣рдо рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ:
working_path = "/content/drive/My Drive/DeepDogBreed/data/" !ls "/content/drive/My Drive/DeepDogBreed/data" >>> all_images labels.csv models test train valid
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрддреНрддреЛрдВ рдХреА рддрд╕реНрд╡реАрд░реЗрдВ (рд╕реНрдЯреИрдирдлреЛрд░реНрдб рдбреЗрдЯрд╛рд╕реЗрдЯ (рдКрдкрд░ рджреЗрдЦреЗрдВ) рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рд▓реЛрдЧ) рд╢реБрд░реВ рдореЗрдВ Google рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рдмрд╛рдж рдореЗрдВ рд╣рдо рдЙрдиреНрд╣реЗрдВ
рдЯреНрд░реЗрди, рд╡реИрдз рдФрд░
рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рд╕рд╣реЗрдЬрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ред рд▓реЗрдмрд▓.рдПрд╕рд╕реАрд╡реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдпрд╣ рдХреБрддреНрддреЗ рдХреА рдирд╕реНрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИред
рдХрдИ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ, рдЖрдЗрдП рдмрд╕ рдПрдХ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
рдареАрдХ рд╣реИ, GPU рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕реЗ рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдвреВрдВрдвреЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВред
рдЕрдм рд╣рдореЗрдВ рдХреБрдЫ рд╕реНрдерд┐рд░рд╛рдВрдХ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐ рд╣рдо 256x256 рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рддрд░рдл рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ, рд╡реЗ 224x224 рдЫрд╡рд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдкреБрд░рд╛рдиреА рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдореЗрдВрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдиреЛрдЯ рдХрд░реЗрдВред
рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдЯрд┐рдкреНрдкрдгреА рдПрдХ - рдЕрдиреНрдп рдХреЛ рдЕрдирд╕реБрдирд╛ рдХрд░рдирд╛) рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рдирд╛рдореЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдЗрд╕рд▓рд┐рдП рдХрд┐ рд╣рдо рдПрдХ рдирдП рдкрд░реАрдХреНрд╖рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдкрд┐рдЫрд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
warnings.filterwarnings("ignore") os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' np.random.seed(7) start = dt.datetime.now() BATCH_SIZE = 16 EPOCHS = 15 TESTING_SPLIT=0.3
рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓рд┐рдП
рд▓реЗрдмрд▓.csv рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб
рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрднреА рддрдХ рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝рд╛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
labels = pd.read_csv(working_path + 'labels.csv') print(labels.head()) train_ids, valid_ids = train_test_split(labels, test_size = TESTING_SPLIT) print(len(train_ids), 'train ids', len(valid_ids), 'validation ids') print('Total', len(labels), 'testing images') >>> id breed >>> 0 000bec180eb18c7604dcecc8fe0dba07 boston_bull >>> 1 001513dfcb2ffafc82cccf4d8bbaba97 dingo >>> 2 001cdf01b096e06d78e9e5112d419397 pekinese >>> 3 00214f311d5d2247d5dfe4fe24b2303d bluetick >>> 4 0021f9ceb3235effd7fcde7f7538ed62 golden_retriever >>> 7155 train ids 3067 validation ids >>> Total 10222 testing images
рдЕрдЧрд▓реА рдмрд╛рдд, рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЫрд╡рд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢рд┐рдХреНрд╖рдг / рд╕рддреНрдпрд╛рдкрди / рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рдкрд╛рд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИред
def copyFileSet(strDirFrom, strDirTo, arrFileNames): arrBreeds = np.asarray(arrFileNames['breed']) arrFileNames = np.asarray(arrFileNames['id']) if not os.path.exists(strDirTo): os.makedirs(strDirTo) for i in tqdm(range(len(arrFileNames))): strFileNameFrom = strDirFrom + arrFileNames[i] + ".jpg" strFileNameTo = strDirTo + arrBreeds[i] + "/" + arrFileNames[i] + ".jpg" if not os.path.exists(strDirTo + arrBreeds[i] + "/"): os.makedirs(strDirTo + arrBreeds[i] + "/")
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рдХреБрддреНрддреЛрдВ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдирд╕реНрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ
рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдлрд╛рдЗрд▓реЛрдВ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕рдмрдлрд╝реЛрд▓реНрдбрд░реНрд╕ рднреА рдмрдирд╛рддреЗ рд╣реИрдВ - рдХреБрддреНрддреЛрдВ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдирд╕реНрд▓ рдХреЗ рдкреНрд░рддрд┐ рдПрдХ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рдирд╕реНрд▓ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЙрд╕рдХреЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╣реИ, рдХреЗрд░реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрдореЗрдЬ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдирдХреА рдЬрд░реВрд░рдд рд╣реИ, рдореЗрдореЛрд░реА рдХреЛ рд╕реЗрд╡ рдХрд░рдирд╛ред рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА 15,000 рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдмрд╣реБрдд рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ред
рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдПрдХ рдУрд╡рд░рдХрд┐рд▓ рд╣реЛрдЧрд╛: рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдХреЙрдкреА рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ, рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрд╛рд╣рд░:
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдореЗрдВ рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
breeds = np.unique(labels['breed']) map_characters = {}
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЫрд╡рд┐рдпреЛрдВ
рд╣рдо Keras рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ ImageDataGenerators рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред ImageDataGenerator рдПрдХ рдЫрд╡рд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрдХрд╛рд░ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдШреБрдорд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣ рдПрдХ
рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рднреА рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд╕реНрдЯрдо рдЫрд╡рд┐ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рддрд╛ рд╣реИред
def preprocess(img): img = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE), interpolation = cv2.INTER_AREA)
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
рд╣рдо ImageDataGenerator рдореЗрдВ рд╣реА рдиреЙрд░реНрдорд▓рд╛рдЗрдЬреЗрд╢рди (рдлрд┐рдЯрд┐рдВрдЧ рдЗрдореЗрдЬ рдЪреИрдирд▓ рдХреА 0-255 рд░реЗрдВрдЬ рд╕реЗ 0-1 рддрдХ) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рд╣рдореЗрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА? рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ (рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ)
рдзрдмреНрдмрд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ: рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рдЫрд╡рд┐ рд╣реЗрд░рдлреЗрд░ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рдПрдЪрдбреАрдЖрд░ рдХреЛ рд╢рд╛рд░реНрдк рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рдХреБрдЫ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ ImageDataGenerators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдПред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐, рд╣рдореЗрдВ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ "рд╡рд┐рд╡рд┐рдз" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд░реЛрдЯреЗрд╢рди рдФрд░ рдЬрд╝реВрдорд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рдирд╣реАрдВ)ред
train_datagen = ImageDataGenerator( preprocessing_function=preprocess,
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдирд╛
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдо рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рднрд┐рдиреНрди рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдЫрд╡рд┐ рдЖрдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдХреЛ рдЯрд┐рдкреНрдкрдгреА / рдЕрдирд▓реЙрдХреНрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд▓реЛ "рд╡реИрдирд┐рд▓рд╛" рд╕реАрдПрдирдПрди рдмрдирд╛рдПрдВред рдпрд╣ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдПрдХ рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ)ред
def createModelVanilla(): model = Sequential()
рдЬрдм рд╣рдо
рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕реАрдЦрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ:
def createModelMobileNetV2():
рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреВрд░реНрд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдирдПрди рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ:
def createModelResNet50(): base_model = ResNet50(weights='imagenet', include_top=False, pooling='avg', input_shape=(IMAGE_SIZE, IMAGE_SIZE, 3)) x = base_model.output x = Dense(512)(x) x = Activation('relu')(x) x = Dropout(0.5)(x) predictions = Dense(NUM_CLASSES, activation='softmax')(x) model = Model(inputs=base_model.input, outputs=predictions)
Attn: рд╡рд┐рдЬреЗрддрд╛! рдЗрд╕ NN рдиреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛:
def createModelInceptionV3():
рдПрдХ рдФрд░:
def createModelNASNetMobile():
рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдирдПрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдЯреАрдХ рдореБрджреНрджреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдХрд╛рд░ рдХреЗ рдорд╛рдорд▓реЗ (рдореЛрдмрд╛рдЗрд▓ рдПрдирдПрди рдЗрдирд╕реЗрдкреНрд╢рди рд╡рди рд╕реЗ 5 рдЧреБрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ) рдФрд░ рдЧрддрд┐ (рдпрджрд┐ рд╣рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕рдЯреАрдХ рдмрд▓рд┐рджрд╛рди рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ)ред
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо
рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдмрдЪрд╛рдП рдЧрдП рдПрдирдПрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдФрд░ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди NN рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ:
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдПрдирдПрди рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рд╡рд╣ рд╕реАрдзрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдЕрдм, рдпрджрд┐ рдЖрдк рдХреЙрд▓
рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рднрдЯрдХрддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдмреГрд╣рд╕реНрдкрддрд┐ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдПрдХ "рд░рди рдЪрдпрди" рдлрд╝рдВрдХреНрд╢рди рд╣реИ - рдХреЗрд╡рд▓ рдЙрд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВред
рдлрд┐рд░ рд╣рдо рдПрдирдПрди рдмрдирд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдЗрд╕рдХреА рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ рддреЛ рдЗрд╕реЗ
рд▓реЛрдб рдХрд░реЗрдВ : рдмреЗрд╢рдХ, рд╣рдо "рд╣рдЯрд╛рдПрдВ" рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдПрдирдПрди рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдЖрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдХреЛ
рд╣рдЯрд╛рдПрдВ рдирд╣реАрдВред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо рдПрдХ рдирдпрд╛ рдПрдирдПрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рдХреНрдпрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рд╕рд░рд▓ рдкрд░рд┐рджреГрд╢реНрдп: рд╣рдордиреЗ рдПрдирдПрди рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рдЫреБрдЯреНрдЯреА рдкрд░ рдЪрд▓реЗ рдЧрдПред Google рдиреЗ рд╣рдореЗрдВ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ NN рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: "рд╣рдЯрд╛рдПрдВ" рднрд╛рдЧ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ рдФрд░ "рд▓реЛрдб" рднрд╛рдЧ рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред
deleteSavedNet(working_path + strModelFileName)
рдПрдирдПрди рдХреЛ рдкрдврд╝рд╛рддреЗ рд╕рдордп
рдЪреЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреБрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдирдПрди рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред
checkpoint = ModelCheckpoint(working_path + strModelFileName, monitor='val_acc', verbose=1, save_best_only=True, mode='auto', save_weights_only=False) callbacks_list = [ checkpoint ]
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдирдПрди рдХреЛ рд╕рд┐рдЦрд╛рдПрдВрдЧреЗ:
рд╡рд┐рдЬреЗрддрд╛ NN рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХрддрд╛ рдФрд░ рд╣рд╛рдирд┐ рдЪрд╛рд░реНрдЯ рд╣реИрдВ:


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реАрдЦрддрд╛ рд╣реИред
рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдирдПрди рдХреЛ рдЙрди рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрд╕рдиреЗ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛ред рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, рд╣рдордиреЗ рдХреБрддреНрддреЗ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдЬрд╛рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд╡рд┐ рдЕрд▓рдЧ рд░рдЦреА рд╣реИред
рдЬрд╛рд╡рд╛ рдХреЛ NN рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдирдПрди рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд╛рд░рдг, рдирд┐рд░реНрдпрд╛рдд рдХреЛрдб рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдмреНрд▓реЙрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдирдПрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдореЗрд░реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдХ
рд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред
рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ - рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЛрдб рдХрд╛ рдЕрд▓рдЧ рдмреНрд▓реЙрдХ рд╣реИ - рд╣рдо рдпрд╣рд╛рдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд╛рдорд┐рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдКрдкрд░ рдмрдврд╝рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ:
from keras.models import Model from keras.models import load_model from keras.layers import * import os import sys import tensorflow as tf
рдереЛрдбрд╝рд╛ рдкрд░реАрдХреНрд╖рдг, рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ:
img = image.load_img(working_path + "test/affenpinscher.jpg")

рдЕрдЧрд▓реА рдмрд╛рдд, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рддреЛрдВ рдХреЗ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рддреЗ рд╕рдордп "рдирд╛рдо" рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ, рдЬреЛ рд╣рдордиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛)ред
model.summary() >>> Layer (type) >>> ====================== >>> input_7 (InputLayer) >>> ______________________ >>> conv2d_283 (Conv2D) >>> ______________________ >>> ... >>> dense_14 (Dense) >>> ====================== >>> Total params: 22,913,432 >>> Trainable params: 1,110,648 >>> Non-trainable params: 21,802,784
рдПрдВрдбреНрд░реЙрдЗрдб рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдирдПрди рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
def print_graph_nodes(filename): g = tf.GraphDef() g.ParseFromString(open(filename, 'rb').read()) print() print(filename) print("=======================INPUT===================") print([n for n in g.node if n.name.find('input') != -1]) print("=======================OUTPUT==================") print([n for n in g.node if n.name.find('output') != -1]) print("===================KERAS_LEARNING==============") print([n for n in g.node if n.name.find('keras_learning_phase') != -1]) print("===============================================") print()
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди Keras Neural Network рдХреЛ
pb рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЬрд┐рд╕реЗ рд╣рдо Android рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
def keras_to_tensorflow(keras_model, output_dir, model_name,out_prefix="output_", log_tensorboard=True): if os.path.exists(output_dir) == False: os.mkdir(output_dir) out_nodes = [] for i in range(len(keras_model.outputs)): out_nodes.append(out_prefix + str(i + 1)) tf.identity(keras_model.output[i], out_prefix + str(i + 1)) sess = K.get_session() from tensorflow.python.framework import graph_util from tensorflow.python.framework graph_io init_graph = sess.graph.as_graph_def() main_graph = graph_util.convert_variables_to_constants( sess, init_graph, out_nodes) graph_io.write_graph(main_graph, output_dir, name=model_name, as_text=False) if log_tensorboard: from tensorflow.python.tools import import_pb_to_tensorboard import_pb_to_tensorboard.import_to_tensorboard( os.path.join(output_dir, model_name), output_dir)
рдирд┐рд░реНрдпрд╛рдд NN рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
model = load_model(working_path + strModelFileName) keras_to_tensorflow(model, output_dir=working_path + strModelFileName, model_name=working_path + "models/dogs.pb") print_graph_nodes(working_path + "models/dogs.pb")
рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╣рдорд╛рд░реЗ рдПрдирдПрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреА рд╣реИред
рдПрдирдПрди-рд╕рд╢рдХреНрдд Android рдРрдк рдмрдирд╛рдирд╛
Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ NN рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЗ рд╣реИрдВ; рд╣рдо рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп (рдХрдо рд╕реЗ рдХрдо, рдЗрд╕ рд╕рдордп) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдо рдХреЛрдиреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдХрд╛рдЯрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реЛрдЧреАред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ "рд╕рдВрдкрддреНрддрд┐" рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рд╣реИред
рдЧреНрд░реЗрдб рдлрд╝рд╛рдЗрд▓
рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ
рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ-рдПрдВрдбреНрд░реЙрдЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛
рд╣реЛрдЧрд╛ ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд╡рд╛ рд╕реЗ Tensorflow (рдФрд░ Keras, рддрджрдиреБрд╕рд╛рд░) рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЕрддрд┐рд░рд┐рдХреНрдд "рд╣рд╛рд░реНрдб рдЯреВ
рдлрд╛рдЗрдВрдб " рдбрд┐рдЯреЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд░реНрдЬрди рдиреЛрдЯ рдХрд░реЗрдВ:
рд╡рд░реНрдЬрдирдХреЛрдб рдФрд░
рд╡рд░реНрдЬрдирдирд╛рдо ред рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЕрдкрдиреЗ рдРрдк рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ Google Play рдкрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ (рдЬреИрд╕реЗ 1 -> 2 -> 3 ...) рдЖрдк рдЗрд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдкреНрд░рдХрдЯ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ appред "рднрд╛рд░реА" рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдПрдХ 100 рдПрдордмреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрдзреБрдирд┐рдХ рдлреЛрди рдХреА рдпрд╛рдж рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЗрд╕рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рдЦреЛрд▓рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдлреЗрд╕рдмреБрдХ рд╕реЗ рдПрдХ рдЫрд╡рд┐ "рд╢реЗрдпрд░" рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдРрдк рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
<activity android:name=".MainActivity" android:launchMode="singleTask">
Android рдЬреЛрдбрд╝рдХрд░
: рд▓реЙрдиреНрдЪрдореИрдб = "рд╕рд┐рдВрдЧрд▓рдЯреИрд╕реНрдХ" рдХреЛ рдореЗрдирдРрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХреЛ рдПрдХ рдореМрдЬреВрджрд╛ рдРрдк рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рдмрдЬрд╛рдп рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗред
рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рдРрдк рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
<intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter>
рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<uses-feature android:name="android.hardware.camera" android:required="true" /> <uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
рдпрджрд┐ рдЖрдк рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдЗрд╕ рднрд╛рдЧ рдХреЛ рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдЙрдард╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдРрдк рдХрд╛ рд▓реЗрдЖрдЙрдЯред
рд╣рдо рджреЛ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдПрдХ рдкреЛрд░реНрдЯреНрд░реЗрдЯ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рд▓реИрдВрдбрд╕реНрдХреЗрдк рдореЛрдб рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдБ
рдкреЛрд░реНрдЯреНрд░реЗрдЯ рд▓реЗрдЖрдЙрдЯ рд╣реИ ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реИ: рдЫрд╡рд┐ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рджреГрд╢реНрдп, рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреА рдПрдХ рдХрд╖реНрдЯрдкреНрд░рдж рд╕реВрдЪреА ("рд╣рдбреНрдбреА" рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ), "рд╕рд╣рд╛рдпрддрд╛" рдмрдЯрди, рдлрд╛рдЗрд▓ / рдЧреИрд▓рд░реА рд╕реЗ рдФрд░ рдХреИрдорд░реЗ рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ (рд╢реБрд░реВ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ) рдмрдЯрди "рдкреНрд░реЛрд╕реЗрд╕"ред

рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рдо рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рддрд░реНрдХ рджрд┐рдЦрд╛рдиреЗ / рдЫрд┐рдкрд╛рдиреЗ рдФрд░ рд╕рдХреНрд╖рдо / рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐
рдЧрддрд┐рд╡рд┐рдзрд┐ рдПрдХ рдорд╛рдирдХ Android рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреА рд╣реИ:
public class MainActivity extends Activity
рдЖрдЗрдП рдПрдирдПрди рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд░рд┐рд╕реНрдкреЙрдиреНрд╕рд┐рдмрд▓ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдирдПрди рдПрдХ рдмрд┐рдЯрдореИрдк рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдХреИрдорд░рд╛ (m_bitmap) рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдмрд┐рдЯрдореИрдк рд╣реИ, рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдорд╛рдирдХ 256x256 рдмрд┐рдЯрдореИрдк (m_bitmapForNn) рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рдореЗрдВ рдЫрд╡рд┐ рдЖрдпрд╛рдо (256) рднреА рд░рдЦрддреЗ рд╣реИрдВ:
static Bitmap m_bitmap = null; static Bitmap m_bitmapForNn = null; private int m_nImageSize = 256;
рд╣рдореЗрдВ рдПрдирдПрди рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░реНрд╕ рдХреЗ рдирд╛рдо рдХреНрдпрд╛ рд╣реИрдВ; рдпрджрд┐ рдЖрдк рдКрдкрд░ рджреА рдЧрдИ рд╕реВрдЪреА рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдирд╛рдо рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИрдВ! рдЖрдкрдХрд╛ рдорд╛рдорд▓рд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!)ред
private String INPUT_NAME = "input_7_1"; private String OUTPUT_NAME = "output_1";
рддрдм рд╣рдо TensofFlow рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдирдПрди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ:
рдирд┐рдЬреА TensorFlowInferenceInterface tf;
рдирд┐рдЬреА рд╕реНрдЯреНрд░рд┐рдВрдЧ MODEL_PATH =
"рдлрд╛рдЗрд▓: ///android_asset/dogs.pb";
рдХреБрддреНрддреЛрдВ рдХреА рдирд╕реНрд▓, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╕рд╛рд░реНрдердХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рдмрдЬрд╛рдп:
private String[] m_arrBreedsArray;
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдо рдПрдХ рдмрд┐рдЯрдореИрдк рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдирдПрди рдЦреБрдж рдЖрд░рдЬреАрдмреА рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬреЛ рдкреНрд░рд╕реНрддреБрдд рдЫрд╡рд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд╕реНрд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рджреЛ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ 120 рд╣рдорд╛рд░реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбрд╛рдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдирд╕реНрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ):
private float[] m_arrPrediction = new float[120]; private float[] m_arrInput = null;
рдЯреЗрдВрд╕реЛрдлрд╝реНрд▓реЛ рдЗрдВрдлрд╝реЗрдХреНрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓реЛрдб рдХрд░реЗрдВ
static { System.loadLibrary("tensorflow_inference"); }
рдЪреВрдВрдХрд┐ рдПрдирдПрди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдПрдХ рд▓рдВрдмрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧреЗ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╕рд┐рд╕реНрдЯрдо "рдРрдк" рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИред рдЬрд╡рд╛рдм рдирд╣реАрдВ "рдЪреЗрддрд╛рд╡рдиреА, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
class PredictionTask extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); }
MainActivity рдХреЗ рдСрдирдХреНрд░рд┐рдПрдЯ () рдореЗрдВ, рд╣рдореЗрдВ "рдкреНрд░реЛрд╕реЗрд╕" рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП onClickListener рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛: m_btn_process.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { processImage(); } });
ProcessImage () рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдмрд╕ рд╣рдо рдКрдкрд░ рджреЗрдЦреЗ рдЧрдП рдзрд╛рдЧреЗ рдХреЛ рдмреБрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ: private void processImage() { try { enableControls(false);
рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг
рд╣рдо рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ UI рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддреБрдЪреНрдЫ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "NN рдкреЛрд░реНрдЯрд┐рдВрдЧ" рдХрд╛рд░реНрдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредрдЬрдм рд╣рдордиреЗ рдЕрдкрдирд╛ рдРрдк рдкреНрд░рд┐рд╡реЗрдЯ рдХрд┐рдпрд╛ред рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рд╕реЗ, рд╣рдордиреЗ рд░реЛрдХрд╛ рд╣реИ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдг рдкрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╡рд╛рд╣: рдпрджрд┐ рдЖрдк рдлреЗрд╕рдмреБрдХ рд╕реЗ рдПрдХ рдЫрд╡рд┐ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрд╡реЗрджрди рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдХреЛ onCreate рдореЗрдВ рдкрдХрдбрд╝рдХрд░ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ "рдкрд╛рд░рдВрдкрд░рд┐рдХ" рддрд░реАрдХрд╛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ onCreate рдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИредрдпрд╣рд╛рдБ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:1. рдореЗрдирдРрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЗ onCreate рдореЗрдВ, рдСрдирд╢реЗрдпрд░рдбреЗрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ: protected void onCreate( Bundle savedInstanceState) { super.onCreate(savedInstanceState); .... onSharedIntent(); ....
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪрд╛рд▓реВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВ: @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); onSharedIntent(); }
OnSaredIntent рдлрд╝рдВрдХреНрд╢рди рд╣реА: private void onSharedIntent() { Intent receivedIntent = getIntent(); String receivedAction = receivedIntent.getAction(); String receivedType = receivedIntent.getType(); if (receivedAction.equals(Intent.ACTION_SEND)) {
рдЕрдм рд╣рдо рдпрд╛ рддреЛ onCreate рд╕реЗ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ (рдпрджрд┐ рдРрдк рдЕрднреА рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдпрд╛ onNewIntent рд╕реЗ рдпрджрд┐ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛редрдЕ рдЫрд╛! рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ "рдкрд╕рдВрдж" рдХрд░реЗрдВ, рд╕рд╛рде рд╣реА рдХрд┐рд╕реА рд╕рд╛рдЗрдЯ рдкрд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рдмрдЯрди рднреА рд╣реИрдВ ред