iOS 11 카메라에서 읽을 수 없는 QR 코드를 읽어보십시오.
CIQRCodeDecriptor
됐기 때문에 다른 방법으로 읽을 수 있다.하지만 우리의 수법은 QR코드의 규격에 대한 이해가 필요하다.
iOSDC에서 2018년에 발표한 슬라이드와 간단한 샘플 코드는 여기에 있습니다.
https://speakerdeck.com/monoqlo/iosdc-2018
https://github.com/monoqlo/QRCodeReader
iOS 11 카메라의 QR 코드 읽기 한계
iOS 11의 표준 카메라 애플리케이션은 QR 코드를 읽을 수 있습니다.편하네.
그런데 이 카메라 앱에서 한 번 읽을 수 없는 QR 코드를 아십니까?
익숙하지는 않지만, 실제로 QR코드는 규격상 여러 개로 분할할 수 있어 기호의 연결 기능으로 불린다.1
이런 QR코드는 iOS 11 카메라에서 단품 QR코드로만 인식된다.따라서 링크의 한 세트의 데이터로 삼으려면 하나하나 읽기 복사 붙여넣기 복사 붙여넣기 이런 작업이 필요합니다.그리고 식별 결과를 보면 어느 것과 어느 것이 분할되었는지 알 수 없기 때문에 정말 정확하게 연결될 수 있는지 다른 방법으로 확인해야 한다.
그나저나 AVFoundation으로 QR코드를 읽는 경우도 마찬가지로 QR코드를 분할한 것으로 인식되지 않는다.
이 기호의 연결 기능을 사용하는 분할 QR 코드가 바로 옆에 있을 수 있습니다.예를 들면 차 검사증.차량 검사증의 오른쪽 하단에 QR코드가 있는데 일반 자동차는 몇 부분으로 나뉜다.그리고'동물의 숲'의 제 디자인 QR코드는 분할 QR코드입니다.
분할 QR 코드를 읽어보십시오.
그래서 이 글에서 충격적이긴 하지만 분할 QR코드를 읽기 위해 어떻게 하면 좋을지 해설한다.
QR 코드 분할 사양
원래 QR 사이즈는 규격이 어떻게 되나요?설명서를 판매 중입니다.
그래서 이 글에서 충격적이긴 하지만 분할 QR코드를 읽기 위해 어떻게 하면 좋을지 해설한다.
QR 코드 분할 사양
원래 QR 사이즈는 규격이 어떻게 되나요?설명서를 판매 중입니다.
QR 코드라이더를 만들기 위해서는 꼭 읽어보는 게 좋겠지만, 이번에는 별로 발을 들여놓지 않는다.(설명서를 읽은 사람이 이 기사의 내용이 완전하지 않은 것을 발견하면 마사리를 던져주세요.)
QR 코드의 규격을 추측해 보다
그렇게 스타일리스트를 보지 않고 스타일을 어떻게 파악하겠어요.
QR 코드 분할에 해당하는 읽기 카드 라이브러리를 사용합니다.이렇게 말하면 뚜껑이나 몸통은 없지만 집게 기술인 데다 iOS를 사용할 수 있는 조건까지 더하면 찾아보기 어렵다.
얼마 전 조사할 때 구자ZXingObjC 정도로 실용적이었다.zxing의 Objective-C 이식판이죠.
README는 분할QR코드 대응을 특별히 쓰지 않았지만 조사 결과 분할QR코드 특유의 메타데이터도 잘 구할 수 있었다.
그렇다면 구체적인 실행 방안을 살펴봅시다.
// MARK: - ZXCaptureDelegate
extension YOUR_ANY_CLASS: ZXCaptureDelegate {
@objc func captureResult(_ capture: ZXCapture!, result: ZXResult!) {
// QRコードを読み取れていれば ZXResult オブジェクトが手に入る
guard let result = result else { return }
// 分割QRコードの場合、resultMetadata の以下2つを確認してどの部分のQRコードが読み込まれたのか判定することができる
// - kResultMetadataTypeStructuredAppendSequence
// - kResultMetadataTypeStructuredAppendParity
guard let metaData = result.resultMetadata,
let sequenceValue = metaData[Int(kResultMetadataTypeStructuredAppendSequence.rawValue)] as? Int,
let parity = metaData[Int(kResultMetadataTypeStructuredAppendParity.rawValue)] as? Int else { return }
// sequenceValueは以下のような8bitのデータになっている
// 読み取ったQRコードの番号 4bit + トータルのQRコード数 4bit
let bit = String(sequenceValue, radix: 2)
let padding = String(repeating: "0", count: (8 - bit.count))
let sequence = padding + bit
let current = String(sequence.prefix(4))
let total = String(sequence[sequence.index(sequence.startIndex, offsetBy: 4)...])
// 扱いやすいようにIntに変換
let position = Int(current, radix: 2)!
let totalPosition = Int(total, radix: 2)!
// あとは焼くなり煮るなりお好きにどうぞ!
// parityは分割されたQRコードそれぞれに同じものが付与されているので、複数分割QRコードがある場合に正しく連結するために使います
}
}
평론에서 말한 바와 같이 다음과 같은 두 개의 메타데이터를 얻을 수 있기 때문에 적당한 디코딩만 하면 된다.쉬운 방법이네.샘플: 차량 검사증의 QR코드를 읽어보십시오
그럼 규격을 알았더라도 차량 검사증의 QR코드를 읽어보세요.
그럼에도 불구하고 연결 자체가 위에서 말한 것처럼 간단하기 때문에 읽은 차량 검사증의 데이터를 디코딩해 보겠습니다.
나는 차 검사증의 설명서를 조사해 보았는데, 좀 그런 것을 발견하였다.
이번에 만든 물건은github에 있어요.관심 있으면 한번 보세요.
monoqlo/CarQRCodeScanner: Scanner for QR code on Japanese car certificate
QR 사이즈 개요 2-5.기호 연결 기능 ↩
Reference
이 문제에 관하여(iOS 11 카메라에서 읽을 수 없는 QR 코드를 읽어보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/monoqlo/items/c8d6159d1c19d56d1c8a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)