feat: Implement cornerPoints
and frame
for scanned codes (#2117)
* Android & TypeScript part of scanned code corner points. Scanned frame dimensions also included in callback. #2076 * TS fix. #2076 * Implement iOS parts of code scanner corner points with additional scanned frame data. * Add example page for code scanning * Use Point type from Point.ts * Update package/src/CodeScanner.ts Add parameters description to CodeScanner callback. Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/src/CodeScanner.ts More expressive description for CodeScannerFrame. Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/src/CodeScanner.ts Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/src/CodeScanner.ts Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/ios/Core/CameraSession+CodeScanner.swift Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Update package/ios/Core/CameraSession+CodeScanner.swift Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com> * Remove default values from CodeSCannerFrame * Linting * Multiply code corner points in swift --------- Co-authored-by: stemy <balazs.stemler@metrix.co.hu> Co-authored-by: Zoli <iamzozo@metrix.co.hu> Co-authored-by: Marc Rousavy <marcrousavy@hotmail.com>
This commit is contained in:
committed by
GitHub
parent
24ddca3409
commit
e649aba8e1
@@ -7,6 +7,7 @@ import com.facebook.react.bridge.WritableMap
|
||||
import com.facebook.react.uimanager.events.RCTEventEmitter
|
||||
import com.google.mlkit.vision.barcode.common.Barcode
|
||||
import com.mrousavy.camera.core.CameraError
|
||||
import com.mrousavy.camera.core.CodeScannerFrame
|
||||
import com.mrousavy.camera.core.UnknownCameraError
|
||||
import com.mrousavy.camera.core.code
|
||||
import com.mrousavy.camera.types.CodeType
|
||||
@@ -42,7 +43,7 @@ fun CameraView.invokeOnViewReady() {
|
||||
reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "cameraViewReady", event)
|
||||
}
|
||||
|
||||
fun CameraView.invokeOnCodeScanned(barcodes: List<Barcode>) {
|
||||
fun CameraView.invokeOnCodeScanned(barcodes: List<Barcode>, scannerFrame: CodeScannerFrame) {
|
||||
val codes = Arguments.createArray()
|
||||
barcodes.forEach { barcode ->
|
||||
val code = Arguments.createMap()
|
||||
@@ -58,11 +59,26 @@ fun CameraView.invokeOnCodeScanned(barcodes: List<Barcode>) {
|
||||
frame.putInt("height", rect.bottom - rect.top)
|
||||
code.putMap("frame", frame)
|
||||
}
|
||||
|
||||
barcode.cornerPoints?.let { points ->
|
||||
val corners = Arguments.createArray()
|
||||
points.forEach { point ->
|
||||
val pt = Arguments.createMap()
|
||||
pt.putInt("x", point.x)
|
||||
pt.putInt("y", point.y)
|
||||
corners.pushMap(pt)
|
||||
}
|
||||
code.putArray("corners", corners)
|
||||
}
|
||||
codes.pushMap(code)
|
||||
}
|
||||
|
||||
val event = Arguments.createMap()
|
||||
event.putArray("codes", codes)
|
||||
val codeScannerFrame = Arguments.createMap()
|
||||
codeScannerFrame.putInt("width", scannerFrame.width)
|
||||
codeScannerFrame.putInt("height", scannerFrame.height)
|
||||
event.putMap("frame", codeScannerFrame)
|
||||
val reactContext = context as ReactContext
|
||||
reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, "cameraCodeScanned", event)
|
||||
}
|
||||
|
@@ -11,6 +11,7 @@ import com.google.mlkit.vision.barcode.common.Barcode
|
||||
import com.mrousavy.camera.core.CameraConfiguration
|
||||
import com.mrousavy.camera.core.CameraQueues
|
||||
import com.mrousavy.camera.core.CameraSession
|
||||
import com.mrousavy.camera.core.CodeScannerFrame
|
||||
import com.mrousavy.camera.core.PreviewView
|
||||
import com.mrousavy.camera.extensions.installHierarchyFitter
|
||||
import com.mrousavy.camera.frameprocessor.FrameProcessor
|
||||
@@ -228,7 +229,7 @@ class CameraView(context: Context) :
|
||||
invokeOnInitialized()
|
||||
}
|
||||
|
||||
override fun onCodeScanned(codes: List<Barcode>) {
|
||||
invokeOnCodeScanned(codes)
|
||||
override fun onCodeScanned(codes: List<Barcode>, scannerFrame: CodeScannerFrame) {
|
||||
invokeOnCodeScanned(codes, scannerFrame)
|
||||
}
|
||||
}
|
||||
|
@@ -611,6 +611,6 @@ class CameraSession(private val context: Context, private val cameraManager: Cam
|
||||
interface CameraSessionCallback {
|
||||
fun onError(error: Throwable)
|
||||
fun onInitialized()
|
||||
fun onCodeScanned(codes: List<Barcode>)
|
||||
fun onCodeScanned(codes: List<Barcode>, scannerFrame: CodeScannerFrame)
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,3 @@
|
||||
package com.mrousavy.camera.core
|
||||
|
||||
data class CodeScannerFrame(val width: Int, val height: Int)
|
@@ -56,7 +56,7 @@ class CodeScannerPipeline(
|
||||
image.close()
|
||||
isBusy = false
|
||||
if (barcodes.isNotEmpty()) {
|
||||
callback.onCodeScanned(barcodes)
|
||||
callback.onCodeScanned(barcodes, CodeScannerFrame(inputImage.width, inputImage.height))
|
||||
}
|
||||
}
|
||||
.addOnFailureListener { error ->
|
||||
|
Reference in New Issue
Block a user