🧪 새 튜토리얼이 계속 업데이트 중 — 로봇 팔부터 센서까지
본문으로 건너뛰기

6장: 색상 인식 ​

스토어에서 구매

이번 장의 목표: NanoCam이 화면 속 물체의 색상을 인식하고, 좌표를 얻어 분류 등의 응용에 사용합니다.

원리 ​

HSV(색조-채도-명도) 색 공간을 기반으로 합니다. 카메라가 출력한 RGB565 이미지는 esp-dl의 ColorDetector 엔진으로 처리되며, 이미지를 80×80 해상도로 축소하여 노이즈를 줄인 뒤 픽셀 단위로 HSV 값으로 변환하여 사전 설정된 7가지 색상 임계값과 매칭합니다.

사전 설정 색상 임계값(OpenCV 표준 H 범위, 0-180 스케일) ​

색상색조(H)채도(S)명도(V)면적 임계값
빨강0-1570-25590-25564
노랑23-3370-25590-25564
초록34-7570-25590-25564
파랑97-12470-25590-25564
보라125-15570-25590-25564
흰색0-1800-40200-25580
검정0-1800-2550-5080

색조는 OpenCV 0-180 스케일(0-360°에 대응)을 사용합니다. set_bgr(false)는 라이브러리가 RGB565 데이터를 그대로 읽도록 하여 채널을 교환하지 않습니다.

단계 ​

6.1 색상 모드 진입 ​

Plain
ai_mode:3

기기가 자동으로 재부팅되어 색상 검출 모드로 진입하며, WS2812 RGB LED (GPIO18)가 현재 인식된 색상을 표시합니다.

전체 명령은 시리얼 프로토콜 매뉴얼을 참조하세요.

6.2 인식 결과 확인 ​

단색 물체를 카메라 앞에 두고 브라우저에서 http://<IP>를 열면 다음이 표시됩니다:

  • 컬러 사각형 상자가 검출된 색상 영역을 표시
  • 색상 라벨 텍스트(red/yellow/green/blue/purple/white/black)
  • 상자와 라벨 색상이 실제 검출된 색상과 일치

색상 모드는 화면 오버레이(OSD)만 수행하고 시리얼 로그를 출력하지 않습니다. 좌표가 필요하면 I2C 레지스터를 통해 읽어야 합니다.

6.3 I2C로 검출 데이터 읽기 ​

NanoCam은 I2C Slave(주소 0x33, GPIO SDA=41 SCL=42)로 동작하며, 검출 상자 중심점 좌표를 실시간으로 갱신합니다.

레지스터내용데이터 타입
0x28-0x29중심점 Xint16 BE
0x2A-0x2B중심점 Yint16 BE
0x2C-0x2D인식 IDint16 BE

코드 ​

핵심 검출 엔진 ​

components/modules/ai/who_color_detection.cpp — esp-dl ColorDetector 기반:

C++
// 검출기 생성, set_bgr(false)로 색상 채널이 올바르게 유지되도록 보장
ColorDetector detector;
detector.set_bgr(false);
detector.set_detection_shape({80, 80, 1});
// 7가지 색상 임계값 등록
detector.register_color({h_lo, h_hi, s_lo, s_hi, v_lo, v_hi}, area_min, "red");
// 검출
auto &results = detector.detect((uint16_t *)frame->buf,
    {(int)frame->height, (int)frame->width, 3});

// 결과를 순회하며 상자+라벨 그리기
for (int ci = 0; ci < (int)results.size(); ci++) {
    for (int ri = 0; ri < (int)results[ci].size(); ri++) {
        color_detect_result_t &res = results[ci][ri];
        draw_rect(frame, res.box[0], res.box[1], res.box[2], res.box[3], color_lcd);
        fb_gfx_print(frame, lx, ly, color_lcd, color_name);
    }
}

결과 ​

빨강/초록/파랑 물체 → 색상 인식 → 상자+라벨 표시 → I2C로 좌표 출력 → 서보 분류 연동 가능.

다음 장: 7장: QR 코드 스캔