처음에는 Jetson Orin Nano를 활용해 새로운 입력 장치를 만드는 것이 목표였다. 하지만 음성, 문자, 영상 정보를 하나씩 처리하다 보니 점점 키보드보다는 작업장 주변을 살피고 정보를 수집하는 AI 센서에 가까워지고 있다.
현재 Nano에는 다음 세 가지 기능을 올렸다.
Whisper를 이용한 음성 인식
EasyOCR을 이용한 문자 인식
YOLO를 이용한 사물·영역·사람 자세 인식
각 기능은 별도의 실행 환경으로 분리했고, Jetson의 GPU를 사용할 수 있도록 구성했다.
Whisper: 작업장의 소리를 듣는 AI 센서
먼저 Jetson Orin Nano 두 대에 Whisper.cpp를 CUDA 기반으로 빌드했다. Whisper를 이용하면 작업자의 음성 명령이나 주변 대화를 텍스트로 변환할 수 있다.
준비한 모델은 다음 세 종류다.
Base: 약 147MB
Small: 약 487MB
Large-v3-turbo: 약 1.6GB
두 Nano 모두 Orin GPU를 정상적으로 인식했고, 안정적인 성능 측정을 위해 MAXN_SUPER 전력 모드와 jetson_clocks를 적용했다.
설치 중에는 SSH로 원격 빌드할 때 CUDA 컴파일러를 찾지 못하는 문제가 있었다. 비대화형 SSH 환경에서 CUDA 경로가 자동으로 등록되지 않은 것이 원인이었으며, PATH를 명시적으로 설정해 해결했다.
현재는 CUDA 빌드와 모델 준비까지 완료된 상태다. 다음 단계에서는 실제 작업장 음성을 녹음해 모델별 한국어 인식률과 처리 속도를 비교할 예정이다.
EasyOCR: 주변의 문자를 읽는 AI 센서
EasyOCR은 장비에 붙은 라벨, 계기판, 문서, 부품 번호처럼 작업장 주변의 문자 정보를 읽기 위해 설치했다.
한국어와 영어를 함께 인식하도록 구성했고, EasyOCR 모델 초기화와 GPU 사용까지 정상적으로 확인했다.
설치 과정에서는 일부 패키지가 NumPy 2.x를 설치하면서 Jetson용 PyTorch와 충돌했다. NumPy를 1.26.4로 고정하고 별도의 제약 파일을 적용해 해결했다.
하지만 설치 성공과 실제 활용 가능성은 별개의 문제였다.
웹캠으로 문자를 촬영하면 초점이 정확히 맞지 않거나 영상이 흐려지는 경우가 많았다. OCR은 글자의 획과 경계가 선명해야 하는데, 초점이 조금만 어긋나도 인식률이 크게 떨어졌다. 특히 작은 글자나 움직이는 물체를 읽는 것은 어려웠다.
따라서 현재 웹캠을 이용한 실시간 OCR은 실용성이 낮다고 판단했다. OCR을 제대로 사용하려면 다음과 같은 방식이 필요해 보인다.
자동 초점 성능이 좋은 고해상도 카메라 사용
촬영 거리와 조명을 고정
실시간 영상 대신 정지 이미지를 촬영해 인식
선명한 프레임만 골라 OCR 실행
원근 보정과 대비 향상 등 전처리 적용
EasyOCR 자체는 정상적으로 동작하지만, 현재 성능을 제한하는 요소는 모델보다 카메라의 초점과 영상 품질에 가깝다.
YOLO: 작업장 주변을 살피는 AI 센서
YOLO는 Nano가 카메라를 통해 주변 상황을 이해하도록 만들기 위해 적용했다.
구현한 기능은 세 가지다.
Detection: 사람과 물체를 찾아 바운딩 박스로 표시
Segmentation: 물체의 영역을 픽셀 단위로 구분
Pose: 사람의 주요 관절과 자세를 스켈레톤으로 표시
Jetson에서는 일반 PC와 동일하게 PyTorch를 설치하면 CUDA 버전이 맞지 않는 문제가 발생했다. Jetson 전용 패키지를 사용하고 버전을 고정해 GPU 환경을 구성했다.
이후 세 가지 기능을 브라우저에서 전환하고 확인할 수 있는 YOLO Explorer 웹앱을 만들었다.
기존 예제는 PyQt 기반의 데스크톱 앱이었지만, Jetson에서 설치와 원격 사용이 쉬운 Gradio 웹앱으로 변경했다. Nano에서 서버를 실행하면 같은 네트워크의 PC에서 브라우저로 접속할 수 있다.
웹앱에서는 다음 기능을 제공한다.
Detection, Segmentation, Pose 전환
웹캠 입력 선택
GPU와 TensorRT 실행 방식 선택
Confidence 실시간 조절
FPS와 평균 추론 시간 표시
바운딩 박스, 마스크, Pose 스켈레톤 출력
사용자 YOLO 모델 불러오기
세 가지 태스크 모두 웹캠 영상에서 정상적으로 동작했다.
GPU와 TensorRT 성능 비교
Detection 모델과 640×480 웹캠 영상을 기준으로 GPU FP16과 TensorRT FP16의 성능을 비교했다.
실행 방식
FPS
평균 추론 시간
GPU FP16
18.80
45.81ms
TensorRT FP16
24.36
21.68ms
TensorRT를 적용하자 FPS는 약 30% 증가했고, 순수 모델 추론 시간은 약 53% 감소했다.
추론 시간은 절반 이하로 줄었지만 전체 FPS가 같은 비율로 증가하지는 않았다. 카메라 캡처, 영상 전처리, 결과 표시, 웹 전송과 브라우저 렌더링에도 시간이 필요하기 때문이다.
Detection, Segmentation, Pose 모델 모두 TensorRT FP16 변환에 성공했다. 최초 변환에는 모델당 약 8분이 걸렸지만, 이후에는 만들어진 엔진 파일을 바로 재사용할 수 있다.
YOLO Pose와 로봇 Retargeting 가능성
YOLO Pose는 사람의 움직임을 검출할 수 있기 때문에 로봇 Retargeting으로 확장할 가능성도 검토했다.
처음에는 3D 관절 좌표를 제공하는 MediaPipe Pose와 RTMW를 후보로 살펴봤다. 하지만 JetPack 6.x의 설치 지원과 GPU 가속 여부가 불확실해, Jetson에서 실행이 검증된 YOLO Pose를 우선 적용했다.
현재 YOLO Pose는 2D 관절 좌표를 출력한다. 따라서 사람의 동작을 로봇 관절로 직접 전달하려면 깊이 정보가 추가로 필요하다.
스테레오 또는 멀티뷰 카메라
Depth 카메라
2D 관절을 3D로 변환하는 모델
PC에서 3D Pose를 계산하고 Nano로 전달하는 분리 구조
현재는 실시간 Pose 추출과 웹 시각화까지 구현했으며, 실제 로봇 관절각으로 변환하는 Retargeting은 다음 단계로 남아 있다.
나노 키보드의 미래 방향
처음 구상했던 찰떡키보드는 사용자의 명령을 입력받는 장치였다. 지금은 그 입력 범위가 키 입력을 넘어 음성, 문자, 영상으로 확장되고 있다.
Whisper는 작업자의 말을 듣는다.
EasyOCR은 주변에 적 힌 글자를 읽는다.
YOLO는 사람과 물체, 움직임을 살핀다.
결과적으로 Nano는 단순한 키보드 제어 장치가 아니라 작업장 주변의 상황을 수집하고 해석하는 멀티모달 센서로 변하고 있다.
아직 Whisper의 실제 작업장 음성 테스트, OCR용 카메라 개선, Pose의 3D 변환과 Retargeting 같은 과제가 남아 있다. 그래도 Nano 한 대가 보고, 듣고, 읽은 정보를 하나의 입력으로 통합하는 전체 방향은 조금씩 형태를 갖추고 있다.소개
시도하고자 했던 것과 그 이유를 알려주세요.
(내용 입력)
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.
Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.
Tip: 코드 전문은 코드블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)
(내용 입력)
결과와 배운 점
배운 점과 나만의 꿀팁을 알려주세요.
과정 중에 어떤 시행착오를 겪었나요?
도움이 필요한 부분이 있나요?
앞으로의 계획이 있다면 들려주세요.
(내용 입력)
도움 받은 글 (옵션)
참고한 지피터스 글이나 외부 사례를 알려주세요.
(내용 입력)