AI 기반 보행 지원 안경 시스템: 개발자 친화적 인프라 구축
시각 장애인이 일상적인 이동을 안전하게 수행할 수 있도록 돕는 지능형 안경 시스템은 단순한 소프트웨어 도구를 넘어, 실제 삶의 질을 개선하는 중요한 기술이다. 본 프로젝트는 이러한 사회적 필요에 부응하며, 완전히 오픈소스로 공개된 통합 솔루션을 제공한다. 특히, CI/CD 파이프라인 템플릿과 자동화 테스트 세트를 포함하여, 누구나 빠르게 배포하고 확장할 수 있는 개발 환경을 구축했다.
핵심 구성 요소: 다중 모달 기반의 실시간 내비게이션
- 보행 경로 인식: 지면의 막대기(보행자 전용 도로)를 실시간으로 감지하고, 방향 지시를 음성으로 제공한다.
- 횡단 보조 기능: 보행 신호등 상태와 보도를 인식해 녹색 신호 시 안전하게 횡단할 수 있도록 안내한다.
- 물체 탐색 시스템: 사용자가 특정 물건(예: 우유, 리모컨)을 요청하면, 주변 환경을 스캔해 위치를 확인하고 접근 방향을 안내한다.
- 음성 상호작용 인터페이스: 자연어 기반의 대화형 인터랙션을 통해 사용자는 질문이나 명령을 자유롭게 입력할 수 있다.
기술 아키텍처: 하드웨어부터 서비스까지 종단 간 통합
본 시스템은 단일 애플리케이션을 넘어서, 전체 생태계를 포괄하는 엔드투엔드 아키텍처를 갖추고 있다.
- 하드웨어 계층: ESP32-CAM 기반의 웨어러블 디바이스에 카메라, 마이크, 센서가 통합되어 있으며, 저전력·경량 설계를 고려하였다.
- AI 모델 계층: YOLO 기반의 여러 전문 모델이 활용된다.
yolo-seg.pt: 보행 경로 분할yoloe-11l-seg.pt: 장애물 감지shoppingbest5.pt: 상품 인식trafficlight.pt: 신호등 상태 분석hand_landmarker.task: 손 동작 감지
- 서비스 계층: Python Flask 기반의 웹서비스로, REST API와 실시간 WebSocket 통신을 제공한다.
- 사용자 인터페이스: Web 기반의 직관적 컨트롤 패널로, 비디오 파일 업로드만으로도 시스템을 테스트할 수 있다.
CI/CD 파이프라인: 자동화된 배포를 위한 표준화된 템플릿
GitHub Actions 기반의 파이프라인은 코드 품질, 테스트, 빌드, 배포를 단일 플로우로 연결한다.
코드 품질 검사 단계
name: Code Quality Check
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
pip install flake8 black isort
- name: Check code style
run: |
black --check .
isort --check-only .
flake8 .
자동화 테스트 단계
test:
runs-on: ubuntu-latest
needs: lint
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install pytest pytest-cov
- name: Run tests
run: |
pytest tests/ --cov=./ --cov-report=xml
- name: Upload coverage
uses: codecov/codecov-action@v3
Docker 이미지 빌드 및 배포
build:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: |
yourusername/aiglasses:latest
yourusername/aiglasses:${{ github.sha }}
테스트 환경 자동 배포
deploy-staging:
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to staging server
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.STAGING_HOST }}
username: ${{ secrets.STAGING_USER }}
key: ${{ secrets.STAGING_SSH_KEY }}
script: |
cd /opt/aiglasses
docker-compose pull
docker-compose up -d
자동화 테스트 세트: 품질을 보장하는 다층적 검증
테스트 피라미드 원칙에 따라, 단위, 통합, 종단간 테스트를 모두 포함한다.
단위 테스트 예시 (BlindPathNavigator)
def test_blind_path_detection():
navigator = BlindPathNavigator()
result = navigator.detect_path([0.1, 0.9, 0.2, 0.8])
assert result["direction"] == "left"
assert result["confidence"] > 0.7
통합 테스트 (Flask API)
def test_api_config_endpoint(client):
response = client.get('/api/config')
assert response.status_code == 200
data = response.get_json()
assert 'api_key' in data
종단간 테스트 (Selenium 기반 웹 인터페이스 검증)
def test_web_interface():
driver = webdriver.Chrome()
try:
driver.get("http://localhost:8081")
assert "AIGlasses" in driver.title
config_button = driver.find_element(By.ID, "config-button")
config_button.click()
api_input = driver.find_element(By.ID, "api-key-input")
api_input.send_keys("sk-test-api-key")
save_button = driver.find_element(By.ID, "save-config")
save_button.click()
status_text = driver.find_element(By.ID, "api-status").text
assert "已配置" in status_text
finally:
driver.quit()
AI 모델 테스트
def test_blind_path_model():
model = load_model('model/yolo-seg.pt')
test_image = np.zeros((640, 640, 3), dtype=np.uint8)
cv2.rectangle(test_image, (200, 500), (440, 600), (100, 100, 100), -1)
results = predict(model, test_image)
assert len(results) > 0
assert results[0]['label'] == 'blind_path'
실시간 성능 테스트
def test_navigation_latency():
navigator = BlindPathNavigator()
latencies = []
for _ in range(100):
start_time = time.time()
navigator.detect_path([0.4, 0.9, 0.6, 0.8])
end_time = time.time()
latency = (end_time - start_time) * 1000
latencies.append(latency)
avg_latency = sum(latencies) / len(latencies)
assert avg_latency < 50
빠른 시작 가이드: 3분 내 배포 완료
- API 키 발급: 알리바바 클라우드의 DashScope에서 무료 키를 생성한다.
- 환경 설정:
.env파일에API_KEY=sk-xxxxx를 입력한다. - Docker 실행:
git clone https://github.com/AI-FanGe/OpenAIglasses_for_Navigation.git cd AIGlasses_for_navigation export API_KEY=your_api_key_here docker-compose up -d
확장 및 최적화: 맞춤형 개발 지원
- 모델 교체 및 재학습: YOLOv8을 활용해 특수 환경(예: 병원, 공장)에 최적화된 모델을 제작 가능.
- 새 기능 추가: IndoorNavigator 클래스를 정의해 실내 내비게이션 모듈을 확장.
- 성능 최적화: ONNX Quantization 또는 TensorRT 엔진을 통해 추론 속도를 향상시킬 수 있다.
사회적 영향력: 기술의 윤리적 활용
본 시스템은 시각 장애인의 자율성 증진, 공공기관의 장애인 친화적 설계 촉진, 그리고 지역 사회 기반의 기술 혁신을 가능하게 한다. 오픈소스로서의 접근성은 기술 격차를 줄이는 데 핵심 역할을 한다.
개발자라면, 단순한 기능 구현을 넘어서, 사람 중심의 기술 설계를 경험할 수 있는 기회를 얻게 된다. 코드는 열려 있고, 배포는 자동화되었으며, 테스트는 철저하다. 이제 남은 것은 당신의 아이디어와 실행력뿐이다.