"우주" 라는 해커톤 주제에 맞춘 개인 성향을 반영한 맞춤형 심리 테스트
![](https://private-user-images.githubusercontent.com/164659935/382416215-3af01b2e-9d48-4d4a-b0da-54a75b230bfd.jpeg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNTE5NTgsIm5iZiI6MTczOTA1MTY1OCwicGF0aCI6Ii8xNjQ2NTk5MzUvMzgyNDE2MjE1LTNhZjAxYjJlLTlkNDgtNGQ0YS1iMGRhLTU0YTc1YjIzMGJmZC5qcGVnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIwOCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMDhUMjE1NDE4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZGIxZjkwMjUxMGIxMGQwMzY4YTgyNTUzZjQ5MGUyOGVhMjE1OTk5NTQ3MjVmOThhZjQ3ZDBlZmJkMzEwYzM4MCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.IxGIXV-U22D-YK50ierI55Z8KEvG7Zm0KaiURwwvjP0)
"우주" 라는 해커톤 주제에 맞춰, 사용자에게 개인 맞춤형 외계인 캐릭터를 제공하는 심리 테스트를 개발하였다.
현대인의 자기 이해에 대한 관심을 반영하여 질문을 구성하였으며, 사용자가 답변을 통해 자신을 돌아볼 수 있도록 하였다.
본 테스트는 5단계의 평가 척도를 통해 다양한 질문에 답변하도록 하며, 개인의 성향을 기반으로 한 맞춤형 이미지를 제공한다.
유형은 두 가지로 구분된다:
1️⃣ 생성형 AI를 활용해 설문 결과에 따라 외형적 특성을 반영한 이미지
2️⃣ OpenCV를 사용해 설문 결과를 수치화하고 외부 기관의 개수를 표현한 이미지
- 성향 분석 설문: 사용자는 5단계 평가 척도로 다양한 질문에 응답
- 맞춤형 이미지 생성: 생성형 AI와 OpenCV를 활용한 이미지
OpenCV를 활용한 맞춤형 이미지 생성
- 눈 이미지 생성
for i in range(num_eyes):
x, y = features['eye']['coords'][0]
w, h = features['eye']['size']
subimg = img[x:x + h, y:y + w]
eye_images.append(cv2.resize(subimg, (50, 20)))
- 눈 위치 설정
if eye_orientation == 'h':
for i in range(num_eyes):
eye_x = moon_x_center - (50 * num_eyes // 2) + (i * 50)
eye_y = moon_y_center - 40
positions.append((eye_x, eye_y))
elif eye_orientation == 'v':
eye_start_y = moon_y_center - (30 * num_eyes // 2)
for i in range(num_eyes):
eye_x = moon_x_center - 25
eye_y = eye_start_y + (i * 30)
positions.append((eye_x, eye_y))
else:
raise ValueError("눈의 방향은 'h' 또는 'v'이어야 합니다.")
- 타겟 이미지에 특징 오버레이
for i in range(num_eyes):
if i < len(eye_images):
target_image = overlay_image(target_image, eye_images[i], positions[i])
if num_noses > 0 and len(nose_images) > 0:
target_image = overlay_image(target_image, nose_images[0], positions[num_eyes])
if num_lips > 0 and len(lip_images) > 0:
for i in range(num_lips):
target_image = overlay_image(target_image, lip_images[i], positions[num_eyes + num_noses + i])
![](https://private-user-images.githubusercontent.com/164659935/382424532-2e8e3656-79bb-4070-9dde-2201e95863b8.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNTE5NTgsIm5iZiI6MTczOTA1MTY1OCwicGF0aCI6Ii8xNjQ2NTk5MzUvMzgyNDI0NTMyLTJlOGUzNjU2LTc5YmItNDA3MC05ZGRlLTIyMDFlOTU4NjNiOC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMTU0MThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lMGU1NWE2ZmI5Zjc4MGVmMTgyOThmOWNmZTA2ZTUzYjU5ZGY4NjYxYTI1NzY4NmMzNzU5ZWY2NDJjMzViYWJlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.02ufLkDJDE1ks8g3BQMaYibwW1J_w14xt-g_mtukfso)
![](https://private-user-images.githubusercontent.com/164659935/382425006-7db6880b-22a6-49f6-9a72-fb772c84b1f3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNTE5NTgsIm5iZiI6MTczOTA1MTY1OCwicGF0aCI6Ii8xNjQ2NTk5MzUvMzgyNDI1MDA2LTdkYjY4ODBiLTIyYTYtNDlmNi05YTcyLWZiNzcyYzg0YjFmMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMTU0MThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01OGQ3MmQ3N2UwMjE2NDJiNWM4Y2IwZDMzNmMyZjBjMDQzODAyN2FjOWNmN2I5MjRjOTcxMzhlYWVkMzcyNDE4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.lN3E-EXeiVeEL0eQ9rXsPzZWiV-CdMybKAP34LC682U)
![](https://private-user-images.githubusercontent.com/164659935/382425052-b926378b-c07f-4afc-91e3-679bf2953bb1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNTE5NTgsIm5iZiI6MTczOTA1MTY1OCwicGF0aCI6Ii8xNjQ2NTk5MzUvMzgyNDI1MDUyLWI5MjYzNzhiLWMwN2YtNGFmYy05MWUzLTY3OWJmMjk1M2JiMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMTU0MThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zYmYzNDliM2JhZjc2ODU0MDA2MzVjZjQxNTFkMzQ4ZTljNjZkZTUxZjk5MzQ2MjI3Y2FkYjc0NDE1ZGU1YzU5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.SqoE6FEsYvioihDq7JfjEN-upC8Pqv0zdjcpHwqnOdE)
![](https://private-user-images.githubusercontent.com/164659935/382425094-6552b6ed-7805-42c1-8d97-7669fe165fe1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwNTE5NTgsIm5iZiI6MTczOTA1MTY1OCwicGF0aCI6Ii8xNjQ2NTk5MzUvMzgyNDI1MDk0LTY1NTJiNmVkLTc4MDUtNDJjMS04ZDk3LTc2NjlmZTE2NWZlMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA4JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwOFQyMTU0MThaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jZjFhNTJlNzBiZTQ0OTI0YWEwYzRmNmFhYTUwODNiNDdmNWQ5NGE2MDVkNzVlNTgzMzJiMDhhYzM5NmUxZTZlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.qqB3vpzw5AuvZYtseO3j6Kg1qrNNYOf0Nonrztibegk)
- 사용자의 실제 외형을 기반으로 외계인 캐릭터를 제공하는 기능
- 외계인 캐릭터를 사용자의 실시간 영상에 적용하는 기능
- 외계인 이상형 월드컵
김혜미 / 이수형 / 채수 / 김지원