ΠΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Android. Π Π°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅Ρ Π΄ΠΎΡΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΠΊΠΈ.
ΠΠ°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ. ΠΠ³ΠΎ Π·Π°Π΄Π°ΡΠ° - ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎΡΠΎΠΆΠ½ΡΡ Π·Π½Π°ΠΊΠΎΠ² Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΌΠ°ΡΡΡΠΎΠ½Π°.
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π½ΠΈΠΆΠ΅ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΠΈΠ΄Π΅ΠΎ.
ΠΠ°Π½Π½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΡΡ "ΠΡΠ±Π»ΠΈΡΠ½Π°Ρ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ Creative Commons Π‘ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π°Π²ΡΠΎΡΡΡΠ²Π°-ΠΠ΅ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠ°Ρ Π²Π΅ΡΡΠΈΠΈ 4.0 ΠΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½Π°Ρ".
Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» RoadSignsDetector.apk ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅.
Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΠΏΠΎΠ²:
- ΠΠ° Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠΈΡΠΊ Π·Π½Π°ΠΊΠΎΠ². ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ Π·Π½Π°ΠΊΠΈ Π½Π΅ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΡΡΡΡΡ.
- ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ Π·Π½Π°ΠΊΠΎΠ².
- ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ Π·Π½Π°ΠΊΠ°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ Π·Π½Π°ΠΊ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½, Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ°Π΄ΡΠΎΠ² Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΈ ΠΊΠ°Π΄ΡΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»ΠΎ Π΄Π°Π½Π½ΡΠΉ Π·Π½Π°ΠΊ. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°Π΄ΡΠΎΠ², ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ Π² ΡΠ°ΡΡΡΡ, Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°Π΄ΡΠΎΠ². ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΊΠ°Π·Π°Π½Ρ Π² ΡΠ°ΠΉΠ»Π΅ Config.java.
- ΠΠΎΡΠ»Π΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΡ Π·Π½Π°ΠΊΠ° ΠΎΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° ΠΏΡΠΎΠΈΠ·Π½Π΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π² ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΠΈΠ·Π½ΠΎΡΠΈΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ Π·Π½Π°ΠΊ, ΡΠΎ Π΄Π°Π½Π½ΡΠΉ Π·Π½Π°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π½Π΅ΡΡΠ½ ΠΏΠΎΡΠ»Π΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π½Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π½Π°ΠΊΠΎΠ².
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ:
- ΠΠ½Π°ΠΊΠΈ, ΠΎΠ±Π²Π΅Π΄ΡΠ½Π½ΡΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ°ΠΌΠΊΡ, ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ.
- ΠΠ΅ΠΉΡΠΎΡΠ΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Β«ΠΏΡΠΎΡΠ΅Π΅Β», ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π΄Π°Π½Π½ΡΡ Π·Π½Π°ΠΊΠΎΠ².
- ΠΡΠ΅Π³ΠΎ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ 29 ΠΊΠ»Π°ΡΡΠΎΠ².
- ΠΠ½Π°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ 90 ΠΊΠΌ/Ρ Π½Π° ΡΡΡΠ½ΠΎΠΌ ΡΠΎΠ½Π΅ - ΡΡΠΎ Π·Π½Π°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΉ Π½Π° ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΌ ΡΠ°Π±Π»ΠΎ. ΠΠ½ Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π΄Π»Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°. ΠΡΠΎΡ Π·Π½Π°ΠΊ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ. ΠΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΏΠΎΡΡΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΊΠ»Π°ΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ 90 ΠΊΠΌ/Ρ. Π‘ΠΌ. Config.java#L36.
ΠΠ°ΡΡΡΠΎΠ΅ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ Config.java.
ΠΠΎΠ΄Π±ΠΎΡ ΡΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ.
ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎ ΡΠΎΡΡΠ°Π²ΠΈΠ»Π° 1:31:56. ΠΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π°ΠΏΠΈΡΡ Π΅Π·Π΄Ρ ΠΏΠΎ Π³ΠΎΡΠΎΠ΄Ρ Π»Π΅ΡΠΎΠΌ. ΠΡΠ΅ΠΌΡ ΡΡΡΠΎΠΊ - ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ²Π΅ΡΠ»ΠΎΠ΅, Π½ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π·Π° 20-25 ΠΌΠΈΠ½ΡΡ Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΠΈΠ΄Π΅ΠΎ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΡΡΡ Π·Π°ΠΊΠ°Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ½Π΅ΡΡ. ΠΠΎΠ³ΠΎΠ΄Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎ - Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ Π²ΠΈΠ΄Π΅ΠΎ Ρ ΠΎΡΠΎΡΠΈΠ΅. ΠΠ° 20 ΠΌΠΈΠ½ΡΡ Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π΄ΠΎΠΆΠ΄Ρ.
ΠΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Π±ΡΠ»ΠΎ Π²ΡΡΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΎ β Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΡ ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ Π·Π½Π°ΠΊΠΎΠ². ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π»ΠΈΡΡ ΠΊΠ°ΠΊ Β«Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅Β». ΠΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ Π·Π½Π°ΠΊΠ° Π² ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΡΡΠΎ Π½Π΅ ΡΡΠΈΡΠ°Π»ΠΎΡΡ Π½ΠΈ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π½ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΠΊ Π²ΡΠΎΠ΄Π΅ Π±Ρ Π²ΠΈΠ΄Π΅Π½, Π½ΠΎ Π΅ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄Π°Π»Π΅ΠΊΠΎ. ΠΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ Π·Π½Π°ΠΊΠ°.
ΠΡΠ΅Π³ΠΎ Π±ΡΠ»ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΎ 1149 ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΉ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ 5 Ρ 30 ΠΌΠΈΠ½. ΠΠ· Π½ΠΈΡ ΠΎΠΊΠΎΠ»ΠΎ 12 ΠΌΠΈΠ½ - ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅, 4 Ρ 51 ΠΌΠΈΠ½ - ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅, 26 ΠΌΠΈΠ½ - Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΡΡΡ.
ΠΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎ Π±ΡΠ»ΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΎ 51 ΠΎΡΠΈΠ±ΠΎΠΊ (Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ 0,57 ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΌΠΈΠ½ΡΡΡ). ΠΠ· Π½ΠΈΡ 42 ΠΎΡΠΈΠ±ΠΊΠΈ (Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ 0,47 ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΌΠΈΠ½ΡΡΡ) β Π½Π΅ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π·Π½Π°ΠΊΠ° (ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ΄Π°) ΠΈ 9 ΠΎΡΠΈΠ±ΠΎΠΊ (Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ 0,10 ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΌΠΈΠ½ΡΡΡ) β ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π·Π½Π°ΠΊΠ° (ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΠ΄Π°).
ΠΠ»Ρ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠΈ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ΅ΠΉ ΠΏΠΎΠΈΡΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π±ΡΠ»Π° Π²ΡΠ±ΡΠ°Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° yolov5 ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° ΠΈΠ· Π»ΡΡΡΠΈΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ/ΡΠΊΠΎΡΠΎΡΡΡ.
Π‘ΡΠ΅Π΄ΠΈ ΠΏΠΎΠ΄Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ Π²Π°ΡΠΈΠ°Π½Ρ yolov5s, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π» Π½Π°ΠΈΠ»ΡΡΡΡΡ ΡΠΎΡΠ½ΠΎΡΡΡΡ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΠΈΠ»ΡΡΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ.
ΠΠ»Ρ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠΈ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΠ΅ΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π·Π½Π°ΠΊΠΎΠ², Π±ΡΠ»Π° ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ Π½Π° Π±Π°Π·Π΅ ΡΠ²ΡΡΡΠΎΡΠ½ΡΡ ΡΠ΅ΡΠ΅ΠΉ. ΠΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π±ΡΠ»Π° Π²ΡΠ±ΡΠ°Π½ Π²Π°ΡΠΈΠ°Π½Ρ, Π΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΡΠΈ ΡΠ΅ΠΊΠΎΡΠ΄Π½ΡΡ ΡΠΎΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ.
ΠΠ»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠ΅ΠΉ Π±ΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Ρ Π·Π½Π°ΠΊΠΈ Π½Π° 1576 ΠΊΠ°Π΄ΡΠ°Ρ (Π½Π΅ ΠΈΠ· ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎ).
ΠΠ΅ΠΉΡΠΎΡΠ΅ΡΡ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ°Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π±ΡΠ»Π° ΠΎΠ±ΡΡΠ΅Π½Π° Π½Π° ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈΡΡΠΌ Π² ΠΎΠ±ΡΡΠ°ΡΡΠ΅ΠΌ Π΄Π°ΡΠ°ΡΠ΅ΡΠ΅ Π²ΡΠ΅ Π·Π½Π°ΠΊΠΈ Π±ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Ρ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π°Π½Π½Π°Ρ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΠΊΠΈ, Π½Π΅ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΡΡ ΠΈΡ .
ΠΠ»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠΈ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ΅ΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π·Π±ΠΈΠ²Π°Π»ΠΈΡΡ Π½Π° ΠΎΠ±ΡΡΠ°ΡΡΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΡΡ Π²ΡΠ±ΠΎΡΠΊΠΈ. ΠΠ°ΡΠ΅ΠΌ Π΄Π»Ρ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π°ΡΠ³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΠΏΠΎ 10000 ΠΎΠ±ΡΡΠ°ΡΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ 1000 ΠΏΡΠΎΠ²Π΅ΡΠΎΡΠ½ΡΡ . ΠΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΡΡ ΠΊΠ»Π°ΡΡ Β«ΠΏΡΠΎΡΠ΅Π΅Β», Π² ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ°Π»ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ, Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΠΈΠ΅ΡΡ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π·Π½Π°ΠΊΠΎΠ². ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅Π½ΡΠ° Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠΈ Π±ΡΠ»ΠΈ ΠΊΠ²Π°Π½ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ.
ΠΠ»Ρ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠΈ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ΅ΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π±ΡΠ»ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄ΠΎΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Quantization Aware Training.
- Precision: 0.968
- Recall: 0.983
- mAP@.5: 0.993
- mAP@.5:.95: 0.904
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
- Accuracy Π΄ΠΎ ΠΊΠ²Π°Π½ΡΠΈΠ·Π°ΡΠΈΠΈ: 0.99831
- Accuracy ΠΏΠΎΡΠ»Π΅ ΠΊΠ²Π°Π½ΡΠΈΠ·Π°ΡΠΈΠΈ: 0.99893
ΠΠ»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π·Π½Π°ΠΊΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ Π½ΠΎΠ²ΡΡ Π·Π½Π°ΠΊΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠ±ΡΡΠΈΡΡ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΠΈ.
ΠΠ»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π΄ΠΎΡΠΎΠΆΠ½ΡΡ Π·Π½Π°ΠΊΠΎΠ² ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠ±ΡΡΠΈΡΡ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΠΈ. Π’Π°ΠΊΠΆΠ΅ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΡΡΠ΅ΠΊΡ Π΄Π°ΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠΈ Π½Π° Π±ΠΎΠ»ΡΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ Π΄Π΅Π»Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠ° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Redmi Note 9 (MIUI Global 12.0.7).
- Π‘ΠΊΠ°ΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ
- ΠΡΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π² Android Studio
- ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π² ΡΠ°ΠΉΠ»Π°Ρ gradle.properties, local.properties
- Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ
ΠΠ»Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ openCV.
ΠΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ Π½Π° email:
Road Signs Detector is a mobile application for Android. It recognizes and names road signs.
This application is demonstrational. Its purpose is to demonstrate the possibility of real-time recognition of a wide class of road signs with high accuracy using a conventional smartphone.
Click on the image below to view the video.
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
Download the file RoadSignsDetector.apk and install it on your mobile device.
Recognition is carried out in several stages:
- Road signs are searched for in the input image. At this stage, the signs are not classified.
- The found road signs are classified.
- Information about the found signs is additionally processed. For example, in order to finally assume that a sign has been detected, it is necessary that over the last few frames at least a certain proportion of frames contain this sign. The number of frames taken into account depends on the frame processing speed. The specific values of the configuration parameters are specified in the file Config.java.
- After the final confirmation of presence of a sign, it is added to the queue for pronouncing. If another sign is being pronounced at the moment, then this sign will be pronounced after the end of pronouncing of the previous signs added to the queue.
Comments:
- The signs placed in each frame are recognized as one class.
- The neural network also recognizes a separate class "other", which means the absence of any of these signs.
- In total, the neural network recognizes 29 classes.
- A 90 km/h speed limit sign on a black background is a speed limit sign displayed on an electronic board. It was added for an experiment. This sign is recognized as a separate class. But at the post-processing stage, it is mapped to the class of a usual 90 km/h speed limit sign. See Config.java#L36.
The configuration parameters of the algorithm are contained in the file Config.java.
The selection of these parameters was carried out by emulating the operation of the application with different configuration parameters values on the validation video and analyzing the results of its operation.
The duration of the validation video is 1:31:56. The validation video contains a recording of driving around the city in summer. The time of day is mostly light, but about 20-25 minutes before the end of the video, sunset is observed, after which it begins to darken a little. The weather conditions on the validation video are good in the first part of the video. A little rain starts 20 minutes before the end.
The validation video was manually marked up: the intervals of presence and absence of the recognized signs were determined. Some intervals were marked as "undefined". When a sign was detected in this interval, it was not considered either an error or the absence of an error. For example, when a sign seems to be visible, but is still too far away. Or when only a part of a sign is visible.
In total, 1,149 video fragments with a total duration of 5 hours and 30 minutes were marked up. Of them, about 12 minutes - presence, 4 hours 51 minutes - absence, 26 minutes - undefined.
The application made 51 errors (on average 0.57 errors per minute) on the validation video with the optimized configuration parameters. Of them, 42 errors (on average 0.47 errors per minute) β non-detection of a present sign (type II error, false negative) and 9 errors (on average 0.10 errors per minute) β detection of a non-existent sign (type I error, false positive).
For object detection neural network, yolov5 architecture has been chosen as one of the best at the time of training in terms of quality/speed ratio.
The yolov5s variant has been chosen among the sub-variants, because it showed the best accuracy and at the same time the best speed of inference.
Several different architectures based on convolutional networks have been tested for the classification neural network. After the training, a variant that gives almost the best accuracy at high speed has been chosen.
To train neural networks, road signs were marked on 1,576 frames (not from the validation video).
The object detection neural network was trained on this data. In the training dataset, all signs were mapped to one class. Thus, this neural network only detects road signs without classifying them.
To train a neural network that performs classification, the initial data was divided into training and verification subsets. Then, using augmentation 10,000 training images and 1000 validation images were generated for each class to align the class sizes. Separately, the "other" class was created by taking various image fragments that did not intersect with the marked fragments of signs. After that, the training was carried out.
To optimize the speed of inference on the mobile devices, neural networks were quantized.
For the classification neural network, additional training has been also performed using the Quantization Aware Training technique.
- Precision: 0.968
- Recall: 0.983
- mAP@.5: 0.993
- mAP@.5:.95: 0.904
See also appendix.
- Accuracy before quantization: 0.99831
- Accuracy after quantization: 0.99893
To increase the number of recognized road signs, it is necessary to mark new road signs and retrain the neural networks.
To increase the recognition accuracy, it is necessary to mark more already recognized road signs and retrain the neural networks. Also, training neural networks on a larger number of examples on which the current version makes errors will have a good effect.
At the moment, the application has been tested only on Redmi Note 9 (MIUI Global 12.0.7).
- Download the project
- Open a project in Android Studio
- Change settings in gradle.properties, local.properties files
- Compile
For compilation stability, this repository contains a directory with OpenCV library source codes.
For all questions and suggestions, please contact us by email:
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π΅ΠΉΡΠΎΡΠ΅ΡΠΈ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ΅ΠΉ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Object detection neural network characteristics.