일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 스크롤 탭
- UIPresentationController
- pod install
- List
- GeometryReader
- swift
- DataBinding
- url 관찰
- convert base64
- transformation.map
- detect url
- scrolling tab
- 기존 앱
- Tuist
- Side Menu
- Swift Package Manager
- SwiftUI
- development language
- base64 변환
- 상단 탭바
- swift #swift keychain #keychain 사용법
- oberve url
- notifychanged
- ViewBuilder
- Android
- UIViewControllerTransitioningDelegate
- ios
- url 추적
- 개발자 면접
- DevelopmentRegion
- Today
- Total
버그 잡이
아이폰 minimumFocusDistance에 따른 QR 인식 초점 이슈 본문
문제 상황
아이폰 특정 기기에서 AVFoundation을 사용하요 QR 인식을 할때 카메라를 피사체에 가까지 가져가면 초점이 흐려지는 증상
원인 분석
기기마다 최소초점거리(minimumFocusDistance)가 다르다.
기본 카메라 기준으로 아이폰 13의 경우 최조 초점 거리가 150mm 이고
아이폰 14 Pro는 200mm 이다.
그 결과 같은 2cm*2cm QR 코드를 인식할때,
아이폰 13은 200mm 거리에서도 피사체가 잘 인식되지만
아이폰 14 Pro는 200mm 거리에서 피사체에 대한 초점이 흐려지는 것이었다.
해결방법
AVFoundation에 있는 videoZoomFactor라는 값을 조정해서 카메라 zoom-in 정도를 조정할 수 있다.
미니멈 최소초점거리를 정하고 그것을 넘어설때는 그 비율만큼 줌을 조정해주는 것이다.
var camera: AVCaptureDevice? {
// minimum 값은 타겟으로 하는 피사체의 크기에 따라 달라질 수 있다.
let minimumFocusDistanceInMillimeters = 150
if let device = AVCaptureDevice.default(.builtInWideAngleCamera,
for: .video,
position: .back) {
if device.minimumFocusDistance > minimumFocusDistanceInMillimeters {
do {
try device.lockForConfiguration()
device.videoZoomFactor = CGFloat(minimumFocusDistanceInMillimeters / device.minimumFocusDistance)
device.unlockForConfiguration()
return device
} catch {
// Handle the error
}
} else {
return device
}
}
return nil
}
minimum 값을 150으로 했는데, 2cm*2cm QR이 목표였는데, 나의 경우 150mm에서는 잘 인식되었고 200mm에서는 잘 인식되지 않았다.
그래서,
150mm에서는 videoZoomFactor = 1,
200일때는 videoZoomFactor = 1.3 으로 셋팅 되도록 하였고
1.3배 zoom-in이 된 후에는 150mm 거리에서도 피사체에 대한 초점이 잘 유지되는 것을 확인할 수 있었다.
물론, 이게 정확히 계산되는 로직은 아니지만 가까이 있는 피사체를 인식할때 큰 이슈 없을 것으로 판단했다.
300mm까지 커진다고 해도 zoomFactor=2 로 2배 정도의 줌이고
zoomFacor=2 까지 테스트 해봤을때 2cm*2cm QR인식용으로 인식률에는 문제가 없었다.
현재까지 조사한 기본 카메라 기준 minimumFocusDistance는 아래와 같다.
- 100mm: xs, 11, 12
- 150mm: 14, 13, 12pro
- 200mm: 14 Pro, 15, 15 Pro
WWDC21에도 minimumFocusDistance 관련 내용의 설명과 함께 videoZoomFacotor 조정 코드도 있다.
보다 정교한 방법의 코드인 것 같으니 같이 확인하면 좋을 것 같다.
https://developer.apple.com/videos/play/wwdc2021/10047/
What’s new in camera capture - WWDC21 - Videos - Apple Developer
Learn how you can interact with Video Effects in Control Center including Center Stage, Portrait mode, and Mic modes. We'll show you how...
developer.apple.com
*참고
https://medium.com/@timmy_tran/fix-the-iphone-14-pro-focus-issue-in-your-ios-app-3a3d6ff8a61a
'IOS' 카테고리의 다른 글
Swift Pakcage Manager로 모듈화 하기 (기타 삽질편) (0) | 2024.07.06 |
---|---|
Swift Pakcage Manager로 프로젝트 기능 모듈화 하기 (0) | 2024.06.22 |
[iOS] Keychain Service 개념부터 사용법까지 알아보기 (0) | 2024.03.19 |
웹뷰(WKWebview)에서 발생하는 에러 감지하기 (1) | 2023.12.09 |
Tuist 삽질기 (3) - Asset추가 그리고 ResourceSynthesizer (0) | 2023.05.05 |