TensorFlow Lite рдФрд░ Azure рдХрд╕реНрдЯрдо рд╡рд┐рдЬрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Android рдкрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реЗрдВ

рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рд╣рдорд╛рд░реЗ Xamarin рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

Azure рдХрд╕реНрдЯрдо рд╡рд┐рдЬрд╝рди рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдореЗрдВ рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реАрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдпрд╣ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдЬрд╝реНрдпреЛрд░ рдХрд╕реНрдЯрдо рд╡рд┐рдЬрд╝рди рд╕реЗрд╡рд╛ , рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рд▓рд╛рдЗрдЯ (рдУрдкрди рд╕реЛрд░реНрд╕ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо), рдФрд░рдЬрд╝рд╛рдорд░реАрди ред


рдиреЛрдЯ: рдХреЗ рд▓рд┐рдП Xamarin.iOS, рд╣рдо рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Azure рдХрд╕реНрдЯрдо рд╡рд┐рдЬрди рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде CoreML , рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдФрд░ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдпрд╣ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп


рд╣рдо рдЕрдкрдиреА рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдЬрд╝реНрдпреЛрд░ рдХрд╕реНрдЯрдо рд╡рд┐рдЬрди рд╕реЗрд╡рд╛ рдФрд░ рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рд▓рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

1. рдПрдЬрд╝реНрдпреЛрд░ рдХрд╕реНрдЯрдо рд╡рд┐рдЬрди рд╕рд░реНрд╡рд┐рд╕


Azure рдХрд╕реНрдЯрдо рд╡рд┐рдЬрди рд╕реЗрд╡рд╛ рдПрдХ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреА рд╣реИ - Artificail Intelligence (AI) рдпрд╛ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ (ML) рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреБрднрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХрд╕реНрдЯрдо рд╡рд┐рдЬрд╝рди рд╕реЗрд╡рд╛

рдХреЗ рд╡реЗрдм рдкреЛрд░реНрдЯрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП , рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА AI / ML рдХреЛрдб рдХреЛ рд▓рд┐рдЦреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
  2. рдЗрдореЗрдЬ рдореЗрдВ рдорд╛рд░реНрдХ рдЯреИрдЧ / рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЯреИрдЧ
  3. рджреЛрд╣рд░рд╛рдПрдВ (рдореЙрдбрд▓ рдЕрдзрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)
  4. рдпрд╣ рдмрд╛рдд рд╣реИ - рдХрд╕реНрдЯрдо рд╡рд┐рдЬрди рдмрд╛рдХреА рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИ!

2. TensorFlow Lite


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

GensHub рдкрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рдкрд░ TensorFlow Lite рдФрд░ TensorFlow рдЙрдкрд▓рдмреНрдз рд╣реИрдВ ред

Azure + Xamarin.Android рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛


GitHub рдкрд░ рдПрдХ рдкреВрд░реНрдг рдирдореВрдирд╛ рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

1. рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг


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

1. рдкрд░ рдХрд╕реНрдЯрдо рд╡рд┐рдЬрди рд╕реЗрд╡рд╛ рд╡реЗрдм рдкреЛрд░реНрдЯрд▓, рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ

рдЫрд╡рд┐

2. рдирдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдПрдВ , рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ:

  • рдирд╛рдо: XamarinImageClassification
  • рд╡рд┐рд╡рд░рдг: рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдиреЗрдВ
  • рд╕рдВрд╕рд╛рдзрди: [рдПрдХ рдирдпрд╛ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдБ]
  • рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░: рд╡рд░реНрдЧреАрдХрд░рдг
  • рд╡рд░реНрдЧреАрдХрд░рдг рдкреНрд░рдХрд╛рд░: рдмрд╣реБрднрд╛рд╖реА (рдкреНрд░рддрд┐ рдЫрд╡рд┐ рдХрдИ рдЯреИрдЧ)
  • рдбреЛрдореЗрди: рд╕рд╛рдорд╛рдиреНрдп (рдХреЙрдореНрдкреИрдХреНрдЯ)
  • рдирд┐рд░реНрдпрд╛рдд рдХреНрд╖рдорддрд╛рдПрдВ: рдореВрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо

3. рдореЗрдВ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдЦрд┐рдбрд╝рдХреА, рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛

4. рдореЗрдВ XamarinImageClassification рдЦрд┐рдбрд╝рдХреА , рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝

5. рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рд▓рд╛ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ

6. рдореЗрдВ рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рдЦрд┐рдбрд╝рдХреА, рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдПрдХ рдЯреИрдЧ
рдиреЛрдЯ: рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдорд╢рд░реВрдо рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ

7. рдореЗрдВ рдЫрд╡рд┐ рдЦрд┐рдбрд╝рдХреА рдЕрдкрд▓реЛрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЕрдкрд▓реЛрдб
рдиреЛрдЯ: рдЬрдм рддрдХ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо 5 рдЫрд╡рд┐рдпрд╛рдВ рд╣реЛрдВ, рддрдм рддрдХ рдЪрд┐рддреНрд░ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд░рд╣реЗрдВ

рдЫрд╡рд┐

8. рдореЗрдВ XamarinImageClassification рдЦрд┐рдбрд╝рдХреА рд╡рд┐рдВрдбреЛ рдХреЗ рдКрдкрд░реА рджрд╛рдПрдБ рдХреЛрдиреЗ рдореЗрдВ, рдХреНрд▓рд┐рдХ рдЯреНрд░реЗрди рдореЙрдбрд▓ рдмрдЯрди (рд╣рд░реА рдЧрд┐рдпрд░ рдЫрд╡рд┐)

9. рдореЗрдВ рдЪреБрдиреЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХрд╛рд░ рдЦрд┐рдбрд╝рдХреА, рдЪрдпрди рддреНрд╡рд░рд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг

10 рдореЗрдВ рдЪреБрдиреЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХрд╛рд░ рдЦрд┐рдбрд╝рдХреА, рдЪрдпрди рдЯреНрд░реЗрди

рдЫрд╡рд┐

2. рдПрдЬрд╝реНрдпреЛрд░ рдХрд╕реНрдЯрдо рд╡рд┐рдЬрди рд╕реЗрд╡рд╛ рд╕реЗ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛


рдЕрдм рдЬрдм рд╣рдордиреЗ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдкрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ ред

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

рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВ:

1. рдореЗрдВ XamarinImageClassifcation рдЦрд┐рдбрд╝рдХреА рдкреЗрдЬ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░, рдХрд╛ рдЪрдпрди рдкреНрд░рджрд░реНрд╢рди рдЯреИрдм

2. рдкрд░ Performace рдЯреИрдм рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдирд┐рд░реНрдпрд╛рдд рдмрдЯрди (рдиреАрдЪреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рддреАрд░)

3. рдореЗрдВ рдЕрдкрдирд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЪреБрдиреЗрдВ рдЦрд┐рдбрд╝рдХреА, рдЪрдпрди TensorFlow

рдЫрд╡рд┐

4. рдореЗрдВ рдЕрдкрдирд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЪреБрдиреЗрдВ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА, рдЪрдпрди TensorFlow рд▓рд╛рдЗрдЯ

5. рдореЗрдВ рдЕрдкрдирд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЪреБрдиреЗрдВ рдЦрд┐рдбрд╝рдХреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб

рдЫрд╡рд┐

3. рд╣рдорд╛рд░реЗ Xamarin.Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ TensorFlow Lite рдЖрдпрд╛рдд рдХрд░реЗрдВ


1. рд╕реНрдерд╛рдкрд┐рдд рдЙрдЪрд┐рдд NuGet рдкреИрдХреЗрдЬ рдореЗрдВ рд╣рдорд╛рд░реЗ Xamarin.Android рдкрд░рд┐рдпреЛрдЬрдирд╛
рдиреЛрдЯ: рдЗрд╕ NuGet рдкреИрдХреЗрдЬ рдПрдХ рд╣реИ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдкрд░ Xamarin рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИред рдЗрд╕рдореЗрдВ рдореВрд▓ TensorFlow Lite рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП C # рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ Xamarin.Aroidroid

2 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдХрд╕реНрдЯрдо рд╡рд┐рдЬрд╝рди рд╕реЗрд╡рд╛ рд╡реЗрдм рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдерд╛ред
рдиреЛрдЯ: рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ label.txt рдФрд░ model.tflite :

  • label.txt рдореЗрдВ рдХрд╕реНрдЯрдо рд╡рд┐рдЬрд╝рди рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░реА рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рдЧрдП рдЫрд╡рд┐ рдЯреИрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
  • model.tflite рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЕрдкрдиреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

3. рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ, Xamarin.Android рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдЖрд╕реНрддрд┐рдпреЛрдВ рдлрд╝реЛрд▓реНрдбрд░

4. рдкреЙрдк-рдЕрдк рдореЗрдиреВ, рдЪрдпрди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ тЖТ рдореМрдЬреВрджрд╛ рдЖрдЗрдЯрдо ...

5. рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдореМрдЬреВрджрд╛ рдЖрдЗрдЯрдо рдореЗрдиреВ, рджреЛрдиреЛрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреИрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди:

  • models.tflite
  • labels.txt

6. рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ, рдореЗрдВ рдореЗрдВ Xamarin.Android тЖТ рдЖрд╕реНрддрд┐рдпреЛрдВ , рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ labels.txt

7. рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдореЗрдВ, рдЧреБрдг

8. рдореЗрдВ рдЧреБрдг рдЦрд┐рдбрд╝рдХреА, рдЪрдпрди рдмрд┐рд▓реНрдб рдХрд╛рд░реНрд░рд╡рд╛рдИ тЖТ рдПрдВрдбреНрд░реЙрдпрдб рдПрд╕реЗрдЯ

9. рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ, рдореЗрдВ Xamarin.Android тЖТ рдЖрд╕реНрддрд┐рдпреЛрдВ , рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ models.tflite

10 рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдореЗрдВ, рдЧреБрдг

11. рдореЗрдВ рдЧреБрдг рдЦрд┐рдбрд╝рдХреА, рдЪрдпрди рдмрд┐рд▓реНрдб рдХрд╛рд░реНрд░рд╡рд╛рдИ тЖТ рдПрдВрдбреНрд░реЙрдпрдб рдПрд╕реЗрдЯ

рдЫрд╡рд┐

4. Xamarin.Android рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЛрдб рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЕрдм рдЬрдм рд╣рдордиреЗ рдореЙрдбрд▓ рдЖрдпрд╛рдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдХреЛрдб рд▓реЗрдЦрди рдХрд╛ рд╕рдордп рд╣реИред

рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдирдореВрдирд╛ рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдЖрд╡реЗрджрди GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ ред Xamarin.Android

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ , ImageClassifcationModel.cs рдФрд░ TensorflowClass.gov.in рдЬреЛрдбрд╝реЗрдВ :

ImageClassificationModel.cs


public class ImageClassificationModel 
{ 
    public ImageClassificationModel(string tagName, float probability) 
    { 
        TagName = tagName; 
        Probability = probability; 
    } 
   
    public float Probability { get; } 
    public string TagName { get; } 
}

TensorflowClassifier.cs


using System.Collections.Generic;
using System.IO;
using System.Linq;
using Android.App;
using Android.Graphics;
using Java.IO;
using Java.Nio;
using Java.Nio.Channels;

public class TensorflowClassifier
{
    //FloatSize     4,        4 
    const int FloatSize = 4;
    //PixelSize -     3,        : ,   .
    const int PixelSize = 3;

    public List<ImageClassificationModel> Classify(byte[] image)
    {
        var mappedByteBuffer = GetModelAsMappedByteBuffer();
        var interpreter = new Xamarin.TensorFlow.Lite.Interpreter(mappedByteBuffer);

        //   ,       
        var tensor = interpreter.GetInputTensor(0);
        var shape = tensor.Shape();

        var width = shape[1];
        var height = shape[2];

        var byteBuffer = GetPhotoAsByteBuffer(image, width, height);

        // StreamReader    labels.txt
        var streamReader = new StreamReader(Application.Context.Assets.Open("labels.txt"));

        // labels.txt  List<string>
        var labels = streamReader.ReadToEnd().Split('\n').Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)).ToList();

        //     Java.Lang.Object,    Xamarin.TensorFlow.List.Interpreter.
        var outputLocations = new float[1][] { new float[labels.Count] };
        var outputs = Java.Lang.Object.FromArray(outputLocations);

        interpreter.Run(byteBuffer, outputs);
        var classificationResult = outputs.ToArray<float[]>();

        // classificationResult     ,  ,     
        var classificationModelList = new List<ImageClassificationModel>();

        for (var i = 0; i < labels.Count; i++)
        {
            var label = labels[i]; classificationModelList.Add(new ImageClassificationModel(label, classificationResult[0][i]));
        }

        return classificationModelList;
    }

    // model.tflite  Java.Nio.MappedByteBuffer,    Xamarin.TensorFlow.Lite.Interpreter.
    private MappedByteBuffer GetModelAsMappedByteBuffer()
    {
        var assetDescriptor = Application.Context.Assets.OpenFd("model.tflite");
        var inputStream = new FileInputStream(assetDescriptor.FileDescriptor);

        var mappedByteBuffer = inputStream.Channel.Map(FileChannel.MapMode.ReadOnly, assetDescriptor.StartOffset, assetDescriptor.DeclaredLength);

        return mappedByteBuffer;
    }

    //     TensorFlow
    private ByteBuffer GetPhotoAsByteBuffer(byte[] image, int width, int height)
    {
        var bitmap = BitmapFactory.DecodeByteArray(image, 0, image.Length);
        var resizedBitmap = Bitmap.CreateScaledBitmap(bitmap, width, height, true);

        var modelInputSize = FloatSize * height * width * PixelSize;
        var byteBuffer = ByteBuffer.AllocateDirect(modelInputSize);
        byteBuffer.Order(ByteOrder.NativeOrder());

        var pixels = new int[width * height];
        resizedBitmap.GetPixels(pixels, 0, resizedBitmap.Width, 0, 0, resizedBitmap.Width, resizedBitmap.Height);

        var pixel = 0;

        //     Java.Nio.ByteBuffer
        for (var i = 0; i < width; i++)
        {
            for (var j = 0; j < height; j++)
            {
                var pixelVal = pixels[pixel++];

                byteBuffer.PutFloat(pixelVal >> 16 & 0xFF);
                byteBuffer.PutFloat(pixelVal >> 8 & 0xFF);
                byteBuffer.PutFloat(pixelVal & 0xFF);
            }
        }

        bitmap.Recycle();

        return byteBuffer;
    }
}

рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдЕрдм рд╣рдо TensorflowClassifier.Classify рдХреЛ ImageClassificationModel рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдореЗрдЬ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА


рдиреАрдЪреЗ рджрд┐рдП рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ:


All Articles