티스토리 뷰

728x90
반응형

- 문서: Integrating your app with visual intelligence

- 예제 프로젝트 : Adopting App Intents to support system experiences

 

 

[1] 배경 

카메라나 스크린샷을 통해 Visual Search 를 하면 아래의 메소드가 타게 되고 

 

 

SemanticContentDescriptor 를 통해 이미지에 대한 정보를 얻어올 수 있다. 

 

https://developer.apple.com/documentation/visualintelligence/semanticcontentdescriptor

 

 

SemanticContentDescriptor 는 labels, pixelBuffer 를 제공하는데 label 을 단독으로 쓸 수 없다. 

굉장히 광범위한 label 정보를 주기 때문이다. (예를들어 스콘을 이미지 검색하면 bread 도 아니고 food 라는 label 을 준다.) 

 

label 은 부가적인 정보일 뿐이고 visual intelligence 기능은 pixelBuffer 를 메인으로 사용해야하며 

구글처럼 기존에 이미지 검색 기능을 제공하는 서비스가 타겟이라고 한다.

 

그럼 pixelBuffer 를 통한 이미지 검색을 제공하지 않는 곳은 정확한 label 정보를 얻기 위해 

한단계를 더 거쳐야하는데, 어떤 방법이 있을 지 & 성능이 괜찮을 지 알아보자! 

 

 

[2] 사전 지식 : CVReadOnlyPixelBuffer -> CVPixelBuffer 로 변환하기 

 

CVReadOnlyPixelBuffer (iOS 26+) 를 

기존에 쓰던 pixelBuffer 로 변환하려면 withUnsafeBuffer 를 사용하면 된다. 

 

 

AI 는 자꾸 CVPixelBuffer 로 타입캐스팅 하라고 코드를 짜주는 데 타입캐스팅 실패한다.  

이 메소드를 기억하자. 

 

[3] PixelBuffer 로 Label 을 구하는 방법

 

1) Google MediaPipe의 Object Detector 

 

- 모델을 선택해서 앱에 넣는 방식 

ㄴ 테스트해보니 문서에 나온 것처럼 EfficientDet-Lite2 가 EfficientDet-Lite0 에 비해 속도는 느리지만 정확성이 높아서 이 모델로 선택! 

 

- SPM 지원안해서 cocoapod 으로 의존성 설치해야함 

 

 

2) Core ML + Vision 

 

- 모델을 선택해서 앱에 넣는 방식

ㄴ 과거와 달리 mlmodel 이 아니라 mlpackage 인데 그냥 다운받아서 넣으면 된다. 

- 예전에는 Core ML 모델이 보통 .mlmodel 하나의 파일로 배포됐습니다.
- 요즘(특히 Core ML Tools 4+ / iOS 14+)은 모델이 크거나 여러 파일이 필요할 때 **.mlpackage**라는 디렉토리 번들 형식으로 내보내기도 해요.
- Build하면 Xcode가 자동으로 .mlmodelc(컴파일된 Core ML 모델)로 바꿔서 번들 안에 포함시킵니다.
- .mlmodel이든 .mlpackage든 직접 번들에 넣으면 Xcode가 빌드 과정에서 mlmodelc로 변환합니다. 런타임에서는 항상 .mlmodelc를 불러오게 돼요.

 

ㄴ 테스트해보니 FastViT, DETRResnet50SemanticSegmentationF16 보다 YOLOv3 결과가 더 잘나와서 선택!  (근데 FastViT, DETR 이 더 최신 모델이고 정확도가 높다고 한다... 흠)

 

 

3) Google Cloud Vision API 

 

- API Request 하는 방식 (과금)

ㄴ 매월 1,000건까지는 무료

 

 

- 구글 콘솔 접속 ->  프로젝트 생성 -> Cloud Vision API 를 활성화 -> API 키 생성 하는 과정이 필요하다.

API 키로 처음 요청하면 에러에 결제 계좌 등록 링크가 내려오는 데 이것까지 해줘야한다! 

 

 

[4] 비교 

1. SemanticContentDescriptor > labels  (confidence 미제공)

2. GoogleObjectDetector  with EfficientDet-Lite2 모델

3. CoreMLObjectDetector with YOLOv3 모델

4. GoogleVisionAPIObjectDetector 

 

 

4가지를 비교해보자  (스샷 후, 물체를 특정해서 검색함)

GoogleVisionAPI 압승이다 압승... 






메론빵도 안다구 ??



 

   

 

 

[5] 결론

GoogleVisionAPI  를 사용하면 꽤 명확한 label 정보를 얻을 수 있다

(+ food, ingredient, table 관련 label 필터링 하고 쓰면)

(+ 사용자가 정확하게 물체를 선택해서 검색하면) 

 

완벽하진 않지만, Visual Intelligence -> GoogleVisionAPI -> label 정보로 검색결과 제공할 수 있을 듯! 

 

 

 

반응형
댓글