react-native-rectangle-doc-scanner 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -66,7 +66,7 @@ class RNRDocScannerView: UIView, AVCaptureVideoDataOutputSampleBufferDelegate, A
66
66
  guard let self else { return }
67
67
 
68
68
  session.beginConfiguration()
69
- session.sessionPreset = .photo
69
+ session.sessionPreset = .high
70
70
 
71
71
  defer {
72
72
  session.commitConfiguration()
@@ -165,34 +165,41 @@ class RNRDocScannerView: UIView, AVCaptureVideoDataOutputSampleBufferDelegate, A
165
165
  isProcessingFrame = false
166
166
  }
167
167
 
168
- let request = VNDetectRectanglesRequest { [weak self] request, error in
169
- guard let self else { return }
168
+ let request = VNDetectRectanglesRequest { [weak self] request, error in
169
+ guard let self else { return }
170
170
 
171
- if let error {
172
- NSLog("[RNRDocScanner] detection error: \(error)")
173
- self.lastObservation = nil
174
- self.handleDetectedRectangle(nil, frameSize: frameSize)
175
- return
176
- }
171
+ if let error {
172
+ NSLog("[RNRDocScanner] detection error: \(error)")
173
+ self.lastObservation = nil
174
+ self.handleDetectedRectangle(nil, frameSize: frameSize)
175
+ return
176
+ }
177
177
 
178
- guard let observations = request.results as? [VNRectangleObservation], let observation = observations.max(by: { lhs, rhs in
179
- lhs.boundingBox.width * lhs.boundingBox.height < rhs.boundingBox.width * rhs.boundingBox.height
180
- }) else {
178
+ guard let observations = request.results as? [VNRectangleObservation], !observations.isEmpty else {
181
179
  self.lastObservation = nil
182
180
  self.handleDetectedRectangle(nil, frameSize: frameSize)
183
181
  return
184
182
  }
185
183
 
186
- self.lastObservation = observation
184
+ let weighted = observations.sorted { lhs, rhs in
185
+ lhs.confidence * lhs.boundingBox.area > rhs.confidence * rhs.boundingBox.area
186
+ }
187
+
188
+ guard let best = weighted.first else {
189
+ self.lastObservation = nil
190
+ self.handleDetectedRectangle(nil, frameSize: frameSize)
191
+ return
192
+ }
193
+ self.lastObservation = best
187
194
  self.missedDetectionFrames = 0
188
- self.handleDetectedRectangle(observation, frameSize: frameSize)
195
+ self.handleDetectedRectangle(best, frameSize: frameSize)
189
196
  }
190
197
 
191
- request.maximumObservations = 1
192
- request.minimumConfidence = 0.5
193
- request.minimumAspectRatio = 0.15
194
- request.maximumAspectRatio = 1.75
195
- request.minimumSize = 0.08
198
+ request.maximumObservations = 2
199
+ request.minimumConfidence = 0.4
200
+ request.minimumAspectRatio = 0.08
201
+ request.maximumAspectRatio = 2.2
202
+ request.minimumSize = 0.05
196
203
  if #available(iOS 13.0, *) {
197
204
  request.quadratureTolerance = 45
198
205
  }
@@ -506,3 +513,9 @@ enum RNRDocScannerError: Error {
506
513
  }
507
514
  }
508
515
  }
516
+
517
+ private extension CGRect {
518
+ var area: CGFloat {
519
+ width * height
520
+ }
521
+ }
@@ -2,7 +2,8 @@
2
2
  #import <React/RCTUIManager.h>
3
3
  #import <React/RCTViewManager.h>
4
4
 
5
- #import "react-native-rectangle-doc-scanner-Swift.h"
5
+ // Swift bridging header not needed with @objc annotations in Swift files
6
+ // #import "react-native-rectangle-doc-scanner-Swift.h"
6
7
 
7
8
  @interface RCT_EXTERN_MODULE(RNRDocScannerViewManager, RCTViewManager)
8
9
  RCT_EXPORT_VIEW_PROPERTY(detectionCountBeforeCapture, NSNumber)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-rectangle-doc-scanner",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Native-backed document scanner for React Native with customizable overlays.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",