스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
Vision의 새로운 기능
앱에서 텍스트를 인식하고 얼굴 및 얼굴 랜드마크를 탐지하고 광학 흐름을 구현할 수 있는 Vision API의 최신 업데이트에 대해 알아보세요. 비디오 기반 앱의 광학 흐름 기능에 대해 안내하고, 이러한 API를 구동하는 머신 러닝 모델에 대한 수정을 통해 앱을 업데이트하는 방법을 소개하며, Xcode에서 훑어보기 미리보기를 지원하여 Vision 작업을 시각화하는 방법을 살펴보겠습니다. 이 세션을 최대한 활용하려면 WWDC21의 ‘Detect people, faces, and poses using Vision(Vision을 사용하여 사람, 얼굴 및 동작 탐지)'을 시청하시기 바랍니다.
리소스
관련 비디오
Tech Talks
WWDC22
WWDC21
-
다운로드
♪ ♪
안녕하세요 전 Brett Keating입니다 오늘 이 자리에 서서 여러분을 만나 기쁩니다 Vision에 대해 처음 들어보셨죠? Vision 프레임워크에 대한 첫 세션이거든요 환영합니다 Vision 프레임워크가 뭔지 한 번 짚고 가죠 몇 가지만요 Vision은 2017년 처음 도입됐는데요 그 이후 Vision의 기술로 만들어진 앱이 수없이 많죠 이건 시간이 지날수록 많아져서 얼굴인식 이미지 분류 윤곽 감지 등을 할 수 있게 되는 컴퓨터 비전 알고리즘 컬렉션입니다 이들은 사용하기 쉽고 일관적인 APi인데요 Vision에서의 알고리즘 실행법을 아시면 아마 어렵지 않을 거예요 Vision에서는 Apple Silicon이 지원하는 모든 알고리즘을 이용할 수 있죠 특히 핵심에 있는 머신 러닝을 작동시켜요 VIsion은 tvOS, iOS, macOS에서 이용할 수 있습니다 Mac에서도 이용 가능합니다 Person Segmentation은 추가된 기능인데요
여기 데모에 보이는 것처럼 손 포즈 측정도 가능합니다
이건 저희의 Action & Vision 샘플 앱이고요 몸의 포즈와 궤적 분석을 사용하죠 오늘은 수정 내용을 살펴보는 것으로 시작하겠습니다 기능성 증가, 성능 개선 정확도 향상이 이루어진 기존 요청들에 대한 업데이트 내용들인데요
먼저, 텍스트 인식에 수정이 있었습니다 이건 VNRecognizeTextRequestRevision3를 통한 세 번째 수정본인데요 엄청난 Live Text 기능을 가능하게 하는 인식자입니다 다양한 언어로도 지원되는데요 supportedRecognitionLanguages를 호출해 지원되는 언어를 확인해 보실 수 있습니다 현재 새로운 언어들이 추가되어 몇 가지 예시를 보여드릴게요 Vision의 한국어 버전입니다 이건 영수증을 한국어로 번역한 거고요 일본어 버전은 다음과 같습니다 현재 지원되는 언어에 대한 텍스트 인식 결과를 보여주죠 새로운 자동 언어 인식 기능을 추가한 건데요 recognitionLanguages 프로퍼티를 사용해 사용될 인식 언어를 구체화할 수 있습니다 앱 사용자가 인식하려는 언어가 무엇인지 미리 모른다고 가정해 보죠 정확한 인식 모드를 위해서 automaticallyDetectsLanguage를 참으로 설정해 자동으로 언어를 감지해 달라고 요청할 수 있죠
언어 감지 기능이 종종 잘못 잘동하기 때문에 어떤 언어가 인식될지 알지 못하는 상황에서 특히 이걸 사용하시면 좋습니다 어떤 언어가 인식될지 사전에 알고 계시다고 해도 구체화해주는 것이 좋습니다 automaticallyDetectsLanguage는 꺼주시고요
바코드 감지 기능의 수정 버전도 만들었습니다 VNDetectBarcodesRequestRevision3인데요 이 수정 버전은 이전 수정 버전에서 벗어나 작동 원리로 현대 머신 러닝을 이용합니다 보통 제품서 보이는 바코드부터 QR 코드 그리고 의료 서비스 앱의 특수 코드까지 바코드 심볼로지는 굉장히 다양해졌습니다 Vision 지원 심볼로지를 알고 싶으시다면 supportedSymbologies를 호출하시면 됩니다
성능에 대해 이야기해 볼까요? 우리는 머신 러닝을 사용하기 때문에 한 이미지에서 하나가 아닌 다양한 코드를 감지하고 그래서 다양한 코드를 포함한 이미지 요청은 더욱 빨라지죠 정확도가 높아져서 코드가 많이 포함된 이미지에선 더 많은 코드가 감지됩니다 똑같은 감지 내용도 있다 하더라도 거의 없고요 일부 코드에 대해서 경계 상자도 개선됐습니다 특히 ean13과 같은 선형 코드에 대해서요 이제 식별 가능한 코드 전체를 둘러 싸고 있죠
마지막으로, 인공 지능 모델은 곡선 표현과 굴절 같이 과거에 감지 정확도를 방해했던 인공물을 더 잘 무시합니다
텍스트 인식과 바코드 감지에 대한 두 가지 새로운 수정 버전은 VisionKit Data Scanner API를 위한 기술적 기반을 형성합니다 바코드와 텍스트를 스캔하여 반환할 수 있도록 우리의 SDK 중 정말 환상적인 새로운 친구죠 더 알아보고 싶으시다면 다음 세션 꼭 확인해 보세요 마지막으로 알려드리려는 수정 버전은 VNGenerateOpticalFlowRequestRevision2라는 이름의 광류 요청에 대한 건데요 바코드 감지기와 같이 이 새로운 수정 버전에서도 작동 원리로 머신 러닝을 사용하죠
광류는 가장 오래 연구된 컴퓨터 비전 문제임에도 텍스트나 바코드처럼 일상 생활과 관련된 것에 비해 이게 뭘하는지 아마 잘 모르실 거예요 광류는 두 개의 연속 이미지를 분석합니다 일반적으로는 영상의 프레임을 말하죠 두 인접 프레임 간 모션을 감지하거나 프레임 사이의 여러 프레임을 스킵할 수 있죠 어떤 경우는 두 이미지는 발생 순서대로 있어야 하고요
광류 분석으로 모션의 방향이나 벡터의 크기 추정이 가능합니다 이걸 통해서 첫 이미지에서 움직여야 하는 부분이 두 번째 이미지에서 제대로 자리를 잡죠 VNPixelBufferObservation이 그 결과인데 이건 이미지 내 모든 위치의 모션을 나타내죠 이건 투채널 이미지입니다 한 채널에는 X 벡터의 크기가 다른 채널에는 Y 벡터의 크기가 포함되어 있죠 두 채널이 합쳐져 2D 픽셀을 형성합니다 각 픽셀이 입력값으로 제공된 이미지와 일치하도록 이 2D 이미지에 나열되죠 이걸 시각적으로 한 번 생각해 봅시다 영상의 프레임 여러 개가 들어오고 있다고 해봅시다 특히 이 두 이미지를 한 번 보세요 개 한 마리가 해변에서 달리고 있는데요 왼쪽부터 보고 오른쪽을 보면 개가 왼쪽으로 이동한 것처럼 보이죠 이 모션은 어떻게 추정해서 나타낼까요?
광학 흐름을 통해 아래 이미지와 유사하게 만드는 겁니다 더 어두운 영역은 모션이 발견된 곳이고요 개의 모양과 비슷하다는 것에 주목하세요 이 장면에서는 실제로 개만 움직이고 있기 때문이죠 '거짓 컬러'를 사용해서 모션 벡터를 보여주는 거죠 컬러 팔레트에 벡터의 x, y 값을 나타내고요 이 거짓 컬러 표현에서는 '빨간색' 색조가 주로 왼쪽으로의 움직이는 걸 나타내게 됩니다 하나의 프레임을 예시로 보셨는데요 이제 전체 영상 클립에선 어떤지 한 번 보시죠 다음은 해변에서 물병을 가져오려는 개의 짧은 영상 클립에 대한 컴퓨터 광학 흐름인데요 왼쪽은 1차 수정 버전의 결과이고요 오른쪽은 머신 러닝 기반의 2차 수정 버전의 결과입니다 2차 수정 버전의 개선 사항이 더 선명해 보여야 할텐데요 우선 가장 확실한 것은 물병의 모션이 훨씬 정확하게 포착된다는 겁니다 개의 추정된 모션에서도 나아진 게 느껴지실 거예요 꼬리가 가장 선명하게 변한 것 같은데 새로운 수정 버전에서는 귀도 퍼덕거리네요 첫 번째 수정 버전에는 배경에 노이즈 모션이 좀 있죠 두 번째 배경은 그대로고 더 일관적으로 나타나고요 이제 광학 흐름에 대해 이해하셨나요? 그렇다면 앱에서는 어떻게 활용할 수 있을까요? 영상 로컬 모션 발견에 주로 쓰일 수 있겠죠 보안 영상 사용 사례를 바로 예로 들 수 있겠네요 배경에서 벗어나는 모션을 식별하여 위치를 알아내는 게 가장 중요하니까요 또, 광학 흐름은 대부분의 보안 카메라처럼 고정 카메라에서 가장 잘 작동합니다 영상의 움직이는 물체를 추적하기 위해 물체 추적 기능도 사용하고 싶으실 텐데요 추적자가 초기화되는 곳을 아셔야 합니다 광학 흐름은 그런 데에서도 도움이 되죠 컴퓨터 비전이나 이미지 프로세싱을 잘 아신다면 영상 프로세싱 향상을 위해 광학 흐름 결과를 이용하실 수 있습니다 영상 보간 즉, 영상 액션 분석은 광학 흐름 제공 정보에서 가장 많은 혜택을 얻죠 이제 1, 2차 수정 버전의 주요한 차이에 대해 알아 봅시다 1차 버전은 항상 동일 해상도를 입력값으로 하는 광학 흐름 필드를 항상 반환합니다 2차 버전은 기본적으로 이 정도는 할 거예요 하지만 여기서 하는 게 좀 더 있습니다 머신 러닝을 기반이기 때문에 기반 모델의 출력값은 다른 입력 이미지 해상도보다 상대적으로 낮습니다 그래서 1차 버전의 디폴트 행위에 맞추려면 업샘플링이 꼭 이루어져야 하죠 이중선형 업샘플링을 사용하고 있습니다 다음은 업샘플링이 하는 걸 설명해주는 시각적 예시인데요 좌측에는 네트워크 출력값의 확대 부분이고 해상도가 낮기 때문에 픽셀이 나뉘어져 나타납니다 전체 필드 플로우는 7:5의 영상비를 가지고요 우측에는 기존 이미지 해상도로 업샘플링된 동일 필드의 유사 지역입니다 이 이미지의 영상비는 약간 다른 16:9 정도 되겠네요 플로우 필드의 가장 자리가 부드러워졌죠 이중선형 업샘플링 덕입니다 영상비가 달라질 수 있는 가능성이 있기 때문에 업샘플링 프로세스로 인해서 플로우 이미지가 늘어나기도 할 겁니다 이미지에서 나타나고 있는 플로우 필드에 적절히 일치시키기 위해서요 네트워크 출력을 직접 작업하신다면 원본 이미지에 플로우 결과를 배치할 때 해상도와 영상비를 유사한 방식으로 처리하세요
요청문에서 keepNetworkOutput를 사용하여 업샘플링을 안하는 것도 방법 중 하나입니다 여기에선 원모델의 출력값이 주어질 겁니다 이용 가능한 출력 해상도를 선택하기 위해 요청문에 적용할 수 있는 4가지의 computationAccuracy가 있습니다 표에서 각 정확도 설정에 대한 해상도를 보실 수 있는데요 관찰 결과에 포함된 픽셀 버퍼의 너비와 높이는 항상 확인해야 합니다 네트워크 출력은 언제 하고 Vision에서의 업샘플링은 언제 사용할 수 있죠? 이미 광학 흐름을 사용 중이고 하위 호환이 가능하길 원하시면 디폴트 행위가 가장 좋습니다 이건 출력값의 업샘플링을 원할 때도 좋습니다 이중선형 방식은 만족스럽고 메모리와 지연시간을 추가하죠 전해상도가 필요하지 않고 때마다 대응 형성이 가능하거나 트래커 초기화만을 원한다면 네트워크 출력이 좋습니다 전해상도 플로우가 필요하시다면 네트워크 출력이 좋을 수도 있고요 하지만 여러분만의 업샘플링 메소드를 써보세요 여기까지 이번 세션에서 소개할 새 알고리즘 수정 버전입니다 다음으로 진행 중인 Vision의 개편 내용과 그게 어떤 영향을 줄지 논의해 보죠 5년 전 Vision 출시 초창기에 얼굴 인식 및 랜드마크를 처음으로 도입했는데요 각 알고리즘에 대한 1차 수정 버전이었죠 이후 새로운 버전을 2가지 더 출시했습니다 더 효율적이고 더 정확한 기술을 사용하죠 그래서 프레임워크의 2,3차 버전은 유지하면서 1차 버전 알고리즘을 제거할 겁니다 하지만 1차 버전 사용자도 걱정 마세요 1차 버전을 구체화하는 코드나 1차 버전에서만 획득되는 SDK에 대해 컴파일링된 코드는 계속해서 지원할 겁니다 그게 어떻게 가능하냐고요? 1차 버전에서는 작동 원리로 '1차 버전 감지자'라는 알고리즘을 실행합니다 이와 동일하게 2차 버전은 '2차 버전 감지자'를 사용하죠 Vision의 출시를 위해서 우리는 2차 버전 감지자의 출력값 없이도 1차 버전의 요청을 만족시키는 작업을 했습니다 또, 1차 버전의 요청은 곧 없어질 것이라고 표시되죠 이를 통해 1차 버전 감지자를 완전히 제거할 수 있습니다 그렇게 해서 Vision은 간소화되죠 그럼 여러 가지의 이점이 있는데요 디스크 공간 절약은 물론 OS 출시 버전과 SDK를 다운로드하고 설치하는 데에 비용이 덜 들게 되죠 모든 Vision 전문가들은 말할 거예요 1차는 아니지만 2차는 뒤집힌 얼굴을 보여줄 거라고요 이 행위의 차이가 앱에 영향을 주지 않을까요? 1차 버전 행위를 보존하려고 노력하는 게 아니라면 확실히 영향을 줄 겁니다 2차 버전 감지자는 뒤집힌 얼굴을 내놓진 않겠죠 2차 버전 랜드마크 감시자도 1차 랜드마크 성상도에 맞는 결과값을 반환할 거예요 실행 시간은 같아지고 훨씬 향상된 정확도를 경험할 수 있겠죠 어떤 경우는 이런 변화를 통해 앱 코드에는 수정이 필요합니다 그래야 잘 작동하할 거예요
여러분도 행동에 개시해 주세요 훨씬 더 나은 옵션이 있는데 1차 버전을 사용하는 데에 그치지 마세요 항상 최신 버전을 사용하시길 권장합니다 '3차 버전'을 말씀드리는 겁니다
이걸 추천하는 이유는 당연히 최신 기술을 사용해 보시라는 거죠 정확도와 성능이 최고인데 어느 누가 좋아하지 않겠어요? 우리는 여러 차례 입증하고 소통했는데요 여기서 다시 한 번 수정 버전을 제대로 구체화하는 우수 사례를 반복합니다 기본 행위에 의존하는 대신에요 이번 개편을 위해 그렇게 해왔습니다 이제 Vision 사용 앱을 디버깅하는 방식이 얼마나 쉬워졌는지 한 번 보시죠 Quick Look Preview 지원이 추가되었는데요 특히 Vision에 대해 이건 무슨 의미일까요? 이제 디버거에서 VNObservations를 클릭할 수 있고 그것만으로 입력 이미지에 결과를 시각화할 수 있죠 Xcode Playgrounds에서도 이용 가능합니다 디버깅에 어떻게 도움이 되는지 설명할 수 있는 방법은 보여드리는 것 뿐입니다 Xcode 데모로 넘어가 보죠
여기 얼굴 랜드마크를 감지하고 관찰 결과를 반환하는 단순한 루틴입니다 먼저, 얼굴 랜드마크 요청을 설정하죠 다음으로, 수업을 위해 준비한 이미지가 나타납니다 결과를 보여주는 배열을 선언하고요
autoreleasepool 안에서 이미지에 요청 처리자를 인스턴스화합니다 그 다음으로 요청을 수행하죠 잘 됐다면 요청문에서 결과값을 가져올 수 있습니다 결과를 불러온 후 실행하면 중지점을 얻을 겁니다 그럼 디버거가 되는 거죠 결과 값에 마우스를 갖다 대면 오버레이는 3개의 얼굴을 감지했다고 보여줍니다 정확히 맞았네요 하지만 각 결과에 대한 얼굴을 어떻게 알 수 있죠? 바로 여기서 Quick Look Preview 지원이 필요한 겁니다 요청문에 가보면 결과를 시각화하기 위해 눈 아이콘을 각각 클릭할 수 있습니다 랜드마크 성상도와 얼굴 경게 박스를 위해 도출된 오버레이가 나타나죠
첫 번째 관찰 결과가 이미지에서 확인되시죠?
다음 결과도 클릭하면 오버레이가 그려집니다 세 번째도 마찬가지고요
다음 중지점까지 계속 얼굴 관찰 결과를 출력한 코드를 실행합니다 추측하실 수 있듯이 디버그 콘솔에서는 어떤 얼굴의 관찰 결과인지 출력된 좌표에서 이 결과값이 옳은지 바로 시각화하기가 꽤 어렵습니다
하지만 여기서 한 가지 더 말씀드리죠 autoreleasepool을 도입해서 의도적으로 요청 처리자를 영역 밖으로 내보냈습니다 이제 요청 처리자는 영역 밖에 있죠 여기서 Quick Look Preview를 사용해 보죠 오버레이가 도출된 상태이지만 이미지는 이용할 수 없습니다
관찰 결과 생성을 위해 사용된 이미지 처리자는 Quick Look Preview가 원본 이미지를 보여주기 위해 영역 안에 있어야 한다는 점을 꼭 기억해 두세요 입력 이미지가 있는 곳에 처리자가 있기 때문이죠 여기선 다 잘 작동하겠지만 이미지는 이용할 수 없죠 이 지원 기능은 모든 게 잘 돌아가는지 빠르게 실험할 수 있기 때문에 Xcode Playgrounds 세션에서도 특히 유용합니다 한 번 볼까요? 바코드 이미지 분석을 위해 단순하게 설정해 본 건데요 모든 코드를 다 보는 대신에 몇 가지만 수정하고 결과가 어떻게 바뀌는지 확인해 보겠습니다 다른 심볼로지의 바코드 2개로 이루어진 하나의 이미지에 대해 2차 버전을 사용해 볼게요 모든 결과를 요청하면 한 번에 결과가 나오고요 첫 번째 결과 또한 마지막에 나타나고요
2차 버전에는 몇 가지 문제가 있는데요 먼저, 첫 바코드가 사라졌습니다 두 번째 바코를 두 번 감시했고요 완전한 경계 박스가 아니라 바코드를 지나가는 선 하나가 나타나고요
3차 버전으로 바꾼다면 어떤 변화가 일어날까요?
먼저, 바코드 2개가 모두 감지됩니다 선 대신에 완전한 경계 박스가 나타나죠 Quick Look Preview 지원에서 정말 좋은 건 결과를 시각화하기 위해서 다양한 유틸리티 기능을 직접 써야할 필요가 없어졌다는 겁니다 디버거나 Xcode Playground에서 이미지에 바로 오버레이될 수 있거든요
이상 Quick Look Preview였습니다 이제 어떤 것에 대한 관찰 결과인지 쉽게 아시겠죠 입력 이미지에 대해 사용하시려면 이미지 요청 처리자는 영역 내에 있어야 합니다 Xcode Playground도 Vision 프레임워크 코드의 Live Tuning을 더 쉽게 만들어 줄 거예요 오늘 업데이트된 Vision을 함께 살펴 보았는데요 빠르게 검토하기 위해 텍스트 인식, 바코드 감지 광학 흐름에 새로운 수정 버전을 추가하세요
새로운 수정 버전을 추가하면서 기존 버전은 지울테니 최신 버전으로 유지해 주시고 가장 좋은 최신 기술을 즐겨 보세요 Quick Look Preview 지원으로 Vision 앱 디버깅도 훨씬 쉬워졌습니다 오늘 즐거우셨길 바라며 남은 WWDC도 즐겨보세요
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.