react-native-rectangle-doc-scanner 3.232.0 → 3.233.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.
|
@@ -228,6 +228,42 @@ class DocumentDetector {
|
|
|
228
228
|
return RectangleQuality.GOOD
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
+
/**
|
|
232
|
+
* Evaluate rectangle quality in view coordinates (closer to iOS behavior).
|
|
233
|
+
*/
|
|
234
|
+
fun evaluateRectangleQualityInView(
|
|
235
|
+
rectangle: Rectangle,
|
|
236
|
+
viewWidth: Int,
|
|
237
|
+
viewHeight: Int
|
|
238
|
+
): RectangleQuality {
|
|
239
|
+
if (viewWidth == 0 || viewHeight == 0) {
|
|
240
|
+
return RectangleQuality.TOO_FAR
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
val minDim = min(viewWidth.toDouble(), viewHeight.toDouble())
|
|
244
|
+
val angleThreshold = max(60.0, minDim * 0.05)
|
|
245
|
+
|
|
246
|
+
val topYDiff = abs(rectangle.topRight.y - rectangle.topLeft.y)
|
|
247
|
+
val bottomYDiff = abs(rectangle.bottomLeft.y - rectangle.bottomRight.y)
|
|
248
|
+
val leftXDiff = abs(rectangle.topLeft.x - rectangle.bottomLeft.x)
|
|
249
|
+
val rightXDiff = abs(rectangle.topRight.x - rectangle.bottomRight.x)
|
|
250
|
+
|
|
251
|
+
if (topYDiff > angleThreshold || bottomYDiff > angleThreshold || leftXDiff > angleThreshold || rightXDiff > angleThreshold) {
|
|
252
|
+
return RectangleQuality.BAD_ANGLE
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
val margin = max(150.0, minDim * 0.15)
|
|
256
|
+
if (rectangle.topLeft.y > margin ||
|
|
257
|
+
rectangle.topRight.y > margin ||
|
|
258
|
+
rectangle.bottomLeft.y < (viewHeight - margin) ||
|
|
259
|
+
rectangle.bottomRight.y < (viewHeight - margin)
|
|
260
|
+
) {
|
|
261
|
+
return RectangleQuality.TOO_FAR
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return RectangleQuality.GOOD
|
|
265
|
+
}
|
|
266
|
+
|
|
231
267
|
/**
|
|
232
268
|
* Calculate perimeter of rectangle
|
|
233
269
|
*/
|
|
@@ -186,17 +186,17 @@ class DocumentScannerView(context: ThemedReactContext) : FrameLayout(context), L
|
|
|
186
186
|
}
|
|
187
187
|
lastDetectionTimestamp = now
|
|
188
188
|
|
|
189
|
-
val quality = if (rectangle != null) {
|
|
190
|
-
DocumentDetector.evaluateRectangleQuality(rectangle, imageWidth, imageHeight)
|
|
191
|
-
} else {
|
|
192
|
-
RectangleQuality.TOO_FAR
|
|
193
|
-
}
|
|
194
|
-
|
|
195
189
|
val rectangleOnScreen = if (rectangle != null && width > 0 && height > 0) {
|
|
196
190
|
DocumentDetector.transformRectangleToViewCoordinates(rectangle, imageWidth, imageHeight, width, height)
|
|
197
191
|
} else {
|
|
198
192
|
null
|
|
199
193
|
}
|
|
194
|
+
val quality = when {
|
|
195
|
+
rectangleOnScreen != null && width > 0 && height > 0 ->
|
|
196
|
+
DocumentDetector.evaluateRectangleQualityInView(rectangleOnScreen, width, height)
|
|
197
|
+
rectangle != null -> DocumentDetector.evaluateRectangleQuality(rectangle, imageWidth, imageHeight)
|
|
198
|
+
else -> RectangleQuality.TOO_FAR
|
|
199
|
+
}
|
|
200
200
|
|
|
201
201
|
post {
|
|
202
202
|
onRectangleDetected(rectangleOnScreen, rectangle, quality, imageWidth, imageHeight)
|
package/package.json
CHANGED