//////
Search
Duplicate
๐Ÿ“

์Šค์œ„์บ 

ํ•œ ์ค„ ์†Œ๊ฐœ
ํ•™์Šต์ž ํ–‰๋™๋ถ„์„์„ ํ†ตํ•œ ํ•™์Šต ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Android ์•ฑ
์ง„ํ–‰ ๊ธฐ๊ฐ„
2021/10/01 โ†’ 2021/12/01
๋‹ด๋‹น Skills & ์‚ฌ์šฉ Libraries
Android
Kotlin
Firebase
MVVM
ํŒ€ ๊ตฌ์„ฑ
Android ๊ฐœ๋ฐœ์ž 1, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž 1, AI ๊ฐœ๋ฐœ์ž 2
Related to Awards (Property)

Link

source
video

ํ”„๋กœ์ ํŠธ ์„ค๋ช…

โ€˜์Šค์œ„์บ โ€™์€ ์ž๊ธฐ ์ฃผ๋„ ํ•™์Šต์„ ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชจ๋‘์—๊ฒŒ ๋„์›€์„ ์ฃผ๊ณ ์ž ํ•˜์—ฌ, ํ•™์Šต์ž์˜ ์‹œ๊ฐ„ ๊ด€๋ฆฌ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Android ์•ฑ ์ž…๋‹ˆ๋‹ค. ํ•™์Šต์‹œ๊ฐ„ ๊ด€๋ฆฌ, ํ•™์Šต ํƒœ๋„ ๋ถ„์„(์ง‘์ค‘ ์—ฌ๋ถ€ ํŒ๋‹จ), ์‚ฌ์šฉ์ž์˜ ํ•™์Šต ๊ด€๋ จ ๋ฐ์ดํ„ฐ ํ†ต๊ณ„ ์ž๋ฃŒ ์ œ๊ณต์ด โ€˜์Šค์œ„์บ โ€™์˜ ์ฃผ๊ธฐ๋Šฅ ์ž…๋‹ˆ๋‹ค. ํ•™์Šต์ž์˜ ์ง‘์ค‘ ์—ฌ๋ถ€๋Š” ํ•˜ํ’ˆ ์—ฌ๋ถ€๋กœ ํŒ๋‹จ๋˜๋ฉฐ ํ˜„์žฌ ๋ˆˆ๊ณผ ์ž…์„ ์ธ์‹ํ•˜์—ฌ ๋ˆˆ์„ ๊ฐ๊ณ  ์ž…์„ ๋ฒŒ๋ฆฐ ์ƒํƒœ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ์ง€์†๋˜๋Š” ๊ฒฝ์šฐ ํ•˜ํ’ˆ์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. 2021๋…„๋„ ๋™๊ตญ๋Œ€ํ•™๊ต โ€˜์ปดํ“จํ„ฐ ๊ณตํ•™ ์ข…ํ•ฉ์„ค๊ณ„1โ€™์˜ ํ”„๋กœ์ ํŠธ๋กœ ์ง„ํ–‰ํ•˜์˜€์œผ๋ฉฐ, ์„ค๊ณ„๋ฅผ ๋งˆ์น˜๊ณ  MVP(Minimum Viable Product)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ 1์ฐจ ๋ชฉํ‘œ๋กœ ํ•˜์—ฌ ํ˜„์žฌ ํƒ€์ด๋จธ ๊ธฐ๋Šฅ, ์นด๋ฉ”๋ผ๋ฅผ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ง‘์ค‘ ์—ฌ๋ถ€์˜ ์ •ํ™•ํ•œ ํŒ๋‹จ์„ ์œ„ํ•ด AI ๋ชจ๋ธ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ, API ์—ฐ๊ฒฐ ๋“ฑ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ธฐ์ˆ  ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โ€ข
Android, Kotlin
โ€ข
CameraX
โ€ข
Retrofit2, Moshi
โ€ข
Firebase

๋‹ด๋‹นํ•œ ๊ธฐ๋Šฅ (Android)

โ€ข
UI ์„ค๊ณ„ ๋ฐ ์ „์ฒด ํ™”๋ฉด ๊ฐœ๋ฐœ
โ€ข
Firebase Auth๋ฅผ ์ด์šฉํ•œ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ
โ€ข
ํƒ€์ด๋จธ ๊ธฐ๋Šฅ
โ€ข
CameraX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ Preview ๊ธฐ๋Šฅ
โ€ข
Firebase ML์„ ์ด์šฉํ•œ ์ปค์Šคํ…€ Tensorflow-lite ๋ชจ๋ธ ๊ด€๋ฆฌ
โ€ข
Tensorflow-lite ๋ชจ๋ธ๊ณผ ์นด๋ฉ”๋ผ ์—ฐ๊ฒฐ์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์ด๋ฏธ์ง€ ๋ถ„์„ ๊ธฐ๋Šฅ
โ€ข
MPAndroidChart ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ํ†ต๊ณ„ ๊ธฐ๋Šฅ
โ€ข
์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์ €์žฅ

๊นจ๋‹ฌ์€ ์ 

โ€ข
ViewModel์„ ์ด์šฉํ•˜๋ฉด UI ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
Firebase ML : Firebase๋ฅผ ์‚ฌ์šฉํ•ด ์ปค์Šคํ…€ Tensorflow-lite ๋ชจ๋ธ์„ ์•ฑ๊ณผ ํ•จ๊ป˜ ํŒจํ‚ค์ง• ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
์•ฑ์— ML Kit SDK๋ฅผ ํฌํ•จํ•˜๋ฉด ML Kit๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๋ชจ๋ธ์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์œ ์ง€ํ•˜์—ฌ ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
โ—ฆ
์ปค์Šคํ…€ Tensorflow-lite ๋ชจ๋ธ์˜ ์šฉ๋Ÿ‰์€ 40MB๋กœ ์ œํ•œ๋œ๋‹ค.
โ€ข
CameraX๋Š” Android Jetpack ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์นด๋ฉ”๋ผ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
โ—ฆ
cameraProvider.bindToLifecycle() ๋ฉ”์„œ๋“œ๋กœ ์นด๋ฉ”๋ผ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
imageAnalyzer๋ฅผ ์„ค์ •ํ•˜์—ฌ bindToLifecycle()์— ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋ฏธ์ง€ ํ”„๋กœ์„ธ์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
CameraX์˜ ๊ฒฐ๊ณผ๋ฌผ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋Š” YUV ํ˜•ํƒœ์ด๋ฉฐ Bytebuffer ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌTensorflow-lite ๋ชจ๋ธ์— ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
Android 9.0๋ถ€ํ„ฐ๋Š” ๋ณด์•ˆ ์ƒ์˜ ๋ฌธ์ œ๋กœ http ๊ด€๋ จ ํ˜ธ์ถœ์„ ์ฐจ๋‹จํ•˜๋ฉฐ UnknownServiceException์ด ๋ฐœ์ƒํ•œ๋‹ค. https๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
Moshi๋Š” ๋Œ€์„ธ JSON Converter๋กœ GSON์— ๋น„ํ•ด Kotlin ์นœํ™”์ ์ด๋ฉฐ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ด๋‹ค.
โ€ข
MPAndroidChart ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„, ์›ํ˜• ๊ทธ๋ž˜ํ”„, ๊บพ์€์„  ๊ทธ๋ž˜ํ”„ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.