본문 바로가기
프로젝트

[StableDiffusion for children] 아이들을 위한 프로그램을 개발해 보면서

by itstime0809 2023. 8. 26.
728x90

소개

 세상에는 정말 많은 멋진 프로그램들이 있죠. 그런 좋은 프로그램들을 보며 누군가에게 도움이 되고, 실사용에 무리 없이 사용할 수 있는 프로그램을 만들고 싶어서 개발자로 걸음을 내딛었습니다. 군대를 제대한 후 안드로이드 개발을 시작으로 본격적으로 공부를 시작했어요. 처음에는 뷰 단을 다루는 것이 너무 재미있어서 안드로이드 개발이 정말 즐거웠고, 복학 전 한 해 동안 클론 앱 프로젝트 1개, 아이디어 앱 프로젝트 1개를 진행하고 구글 플레이 스토어에 앱을 1개 출시해봤습니다. 큰 프로젝트는 아니었지만, 사용자에게 도움이 될 아이디어로 개발해 보았어요.

 그런데 복학 전 3개월 전에 '역량'이라는 단어가 큰 변화를 일으켰어요. 개발자로서 필요한 역량은 무엇일까 고민하게 되었죠. 앱을 만들기는 했지만, 논리적 모순들이 생각을 헷갈리게 하더군요. 그래서 안드로이드 개발을 중단하고 알고리즘을 공부하기 시작했습니다. 논리력을 키우기 위해서였죠. 하지만 여전히 아이디어는 떠오르고는 해요. 메모에 적어두고 설계까지 해보는데, 아이디어를 실현하고 싶은 마음이 남아 있었습니다.

2023년 여름 방학 한 달 동안 그 아이디어를 실현해내는 데 성공했습니다. 베타 테스트를 위해 개발은 완료됐지만, 아직 서비스화를 위해선 설계 방식을 변경해야 하고 아직 구현하지 못한 기능들이 많기 때문에 여름 방학 동안 만든 프로그램은 완벽한 상태는 아니지만, 포스팅을 통해서 소개해보고자 합니다.

 

StableDiffusion for Children

 프로젝트 이름은 적당한 이름이 생각나지 않아 사용한 기술의 이름을 기반으로 정해졌습니다. 해당 프로그램은 유치원 교사가 아이들과 함께 책을 읽는 시간에 학습하는 과정속에 도움을 주는 프로그램입니다. 프로그램의 목적은 아이들의 상상력을 더욱 다양하게 할 수 있게 도움을 주기 위한 목적을 가지고 있습니다. 프로그램의 아이디어는 유치원 교사와 아이들이 책을 읽는 수업을 진행하면서 아이들에게 책을 읽고 난 후에 생각나는 단어들을 말하게 함으로써 그 단어에 대해 학습하는 것과 다른 아이들이 생각해 낸 단어들을 보며 학습해 나가는 과정 속에서 아이디어를 얻었습니다. 그러한 과정 속에서 아쉽다는 생각을 느꼈습니다. 정말로 저 단어에 대해서 알고 있는 걸까? 그냥 넘어간다고 하더라도 무언가 더 도움이 될 수 있는 방법이 없을까? 생각이 들었습니다. 텍스트로만 보이는 단어는 단어가 어떻게 구성되어 있는지를 아는 거지 정말 그 단어가 무엇을 가리키는지 모른다고 생각했기 때문입니다. 단어를 그림이나 상상을 통해서 떠올리게 되면 이해하기도 쉽고 기억에도 더 잘 남습니다. 때문에 위와 같은 학습시간에서 단어들을 말하는데 그치지 않고 그 단어들을 조합해서 어떤 그림이 나올지 예상해 보며 그림이 만들어졌을 때 아이들이 생각했던 것과 다른 무언가에 대해서 알게 되고 하나의 생각에서 다양한 생각이 나올 수 있다는 걸 알려줄 수 있습니다. 굳이 단어를 여러 개 조합하지 않더라도 하나의 단어만 가지고도 그림이 완성될 수 있기 때문에 '고양이'라는 단어를 여러 방면의 그림으로 보여준다면 아이들은 흥미를 가지고 수업에 대한 참여도 또한 높아질 것이라고 생각합니다. 아래는 해당 프로그램을 오픈소스 형태로 올려둔 링크입니다.

 

 

https://github.com/ITSTIME1/StableChildren

 

GitHub - ITSTIME1/StableChildren: StableChildren is ai web aplication for children.

StableChildren is ai web aplication for children. Contribute to ITSTIME1/StableChildren development by creating an account on GitHub.

github.com

 

 해당 프로그램은 생성형 그림 인공지능 기술인 StableDiffusion 기술을 통해 제작 되어졌으며, 추가적으로 구글의 모션인식 기술인 MediaPipe 기술을 활용했습니다. 정확히 말하면 제스처 인식 기능이 사용되어졌는데 그 이유 또한 그러한 과정을 살펴보며 얻은 아이디어입니다. 아이들이 단어를 말하고 발표하는 수업은 어쩌면 굉장히 지루할 수 있을 것 같다는 생각이 들었습니다. 아이들이 집중할 수 있는 시간은 비교적 짧다고 알고 있습니다. 그렇기 때문에 책을 읽고 나서 아이들이 생각나는 단어만 말하라고 하기에는 아이들의 흥미도도 떨어질 수 있을 것이라 생각했습니다. 그래서 아이들이 말하는 혹은 발표하는 단어는 교사가 직접 타이핑을 통해서 추가하지만, 이후 그림을 위해서 선택하는 단어들은 아이들에게 맡기게 하기 위해 제스처 인식이 사용되었습니다. 따라서 아래와 같이 활용할 수 있습니다.

 

 

 

 

 위 이미지에서 보듯 교사가 사전에 아이들과 단어를 말하는 시간에서 단어를 추가하게 되지만 실제로 아이들이 말한 단어들 중 어떤 특정한 상황을 생각해 보며 단어들을 일부만 추가하거나 혹은 전부 추가할 수 있도록 제작되었습니다. 그렇기 때문에 항상 같은 그림의 결과가 나오지 않으며 그렇다고 같은 단어들만 추가한다고 해서 같은 그림이 나오는 것도 아닙니다. 단 단어가 주는 영향이 크기 때문에 의도했던 혹은 어떤 그림이 나올 거라고 예상했던 것과 결과가 많이 다를 수 있습니다. 이러한 불확실성을 아이들의 상상력에 활용할 수 있을 것이라 생각합니다. 또한 지루하지 않도록 애니메이션을 추가해서 수업에 더욱 집중할 수 있도록 의도했습니다. 위와 같은 과정들을 거치고 나서는 이제 그림의 스타일을 선택하게 되고 그림이 생성되는걸 아이들이 볼 수 있습니다.

 

 

 

 

안전한가?

 가장 우려스러워하고 해당 기술에 대해서 조금이라도 지식이 있는 분이라면 아마 가장 우려되는 부분이 NSFW 선정성 문제일 것입니다. 그렇기 때문에 해당 원천 기술을 제공해 주는 곳에서 이러한 선정성 그림이 생성되게 되면 자동으로 블랙 이미지 처리 하게 됩니다. 또한 교사가 의도하거나 혹은 의도하지 않다고 하더래도 성인과 관련된 단어만 들어가도 대부분의 그림은 블랙 이미지 처리 됩니다. 따라서 그러한 단어들은 입력 자체가 불가능하며 그런 단어들을 입력한다고 하더라도 그림이 생성되지 않습니다.

 

 하지만 또 하나의 문제가 존재할 수 있습니다. 선정성의 기준은 객관적이지 않습니다. 그렇기 때문에 저는  '교사 페이지'를 따로 제작하여 아이들이 그림을 보기 위해 기다리는 시간 동안 교사가 먼저 그림을 확인할 수 있도록 하였습니다. 그래서 교사가 판단 했을 때 해당 이미지가 잘못 나온 부분이 있거나 혹은 이런 부분은 아이들에게 보여주기에 부적합 하다고 생각드는 부분은 과감히 다시 생성 할 수 있습니다. 따라서 한번더 필터링을 거쳐 아이들에게 좋은 그림만 보여주게끔 의도할 수 있습니다. 이러한 것이 아래와 같이 진행 될 수 있습니다.

 

 

 

 

 위와 같은 사진들을 보고 아이들이 만약 '고양이'가 생각나서 말을 했을때 그 고양이가 정말 어떤 자세로 있을 수 있고, 어떤 고양이가 있는지 줄무늬 고양이가 있는지 하얀 털을 가진 고양이가 있는지와 같이 고양이라고 하더라도 여러 종류의 고양이들을 보고 기억할 수 있습니다. 따라서 단순 텍스트로만 바라보며 고양이가 생각나요! 가 아니라 저런 고양이도 있을 수 있네요! 고양이가 벚꽃 아래에 있어요! 와 같은 표현 또한 배울 수 있습니다. 제가 강조하고 해당 프로그램에서 가장 잘 표현할 수 있고 활용할 수 있는 부분이라고 생각이 듭니다. 

 

추가적인 기능은?

 사실 추가적인 기능을 개발하기 위한 준비를 했었습니다. 아이들이 할 수 있는 활동 범위 내에서 도움을 줄 수 있는 기능을 제작하고자 했지만 해당 프로그램의 개발 기간은 종료되었고 2학기 개강을 앞두고 있기 때문에 기능 개발은 여기서 중단하고 있습니다. 이후에 또 다른 아이디어와 통합하거나, 더 발전시킬 여지가 있다면 추가로 개발해보려고 합니다.

 

 누군가에게는 도움이 될 수 있는 프로그램을 제작한다는 것이 지금까지도 개발 공부를 할 수 있게 도와주는 원동력인 것 같습니다.  혹시라도 해당 프로그램에 대해서 더 궁금한 사항이 있다면 댓글로 남겨주신다면 도움을 드릴 수 있을 것 같습니다! 이상으로 2학기 프로그램 개발 프로젝트 소개를 마치겠습니다!