Я новичок в android и у меня проблемы. Я пытаюсь нарисовать квадрат / прямоугольник на моем предварительном просмотре камеры, я работаю с OCR, поэтому я не хочу извлекать весь текст из картинки. только то, что соответствует форме. я знаю, что могу нарисовать квадрат только на моем xml, но как мне получить данные с этого квадрата, если я не знаю, где он расположен на экране?
Я пробовал несколько ответов, но я У меня нет удачи, это мой код до сих пор. я пытаюсь получить что-то вроде этого: https://i.imgur.com/aQogNPh.png
это я мой camera_preview. xml (я пробовал с 2 SurfaceView, но не смог запустить камеру на нем.
У меня есть основное занятие, после того, как я нажимаю кнопку, я переключаюсь на активность камеры, но до сих пор я мог использовать камеру, но не рисовал поверх нее.
<?xml version="1.0" encoding="utf-8"?>
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="left|top">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/CameraView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
<SurfaceView
android:id="@+id/TransparentView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true" />
</RelativeLayout>
</RelativeLayout>
это мой CameraPreview.kt
package com.demo.chileocr.view.ui
/** A basic Camera preview class */
class CameraPreview(
context: Context,
private val mCamera: Camera
) : SurfaceView(context), SurfaceHolder.Callback {
private val mHolder: SurfaceHolder = holder.apply {
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
addCallback(this@CameraPreview)
// deprecated setting, but required on Android versions prior to 3.0
setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)
}
override fun surfaceCreated(holder: SurfaceHolder) {
// The Surface has been created, now tell the camera where to draw the preview.
mCamera.apply {
try {
setPreviewDisplay(holder)
startPreview()
} catch (e: IOException) {
Log.d("error preview", "Error setting camera preview: ${e.message}")
}
}
}
override fun surfaceDestroyed(holder: SurfaceHolder) {
// empty. Take care of releasing the Camera preview in your activity.
}
override fun surfaceChanged(holder: SurfaceHolder, format: Int, w: Int, h: Int) {
// If your preview can change or rotate, take care of those events here.
// Make sure to stop the preview before resizing or reformatting it.
if (mHolder.surface == null) {
// preview surface does not exist
return
}
// stop preview before making changes
try {
mCamera.stopPreview()
} catch (e: Exception) {
// ignore: tried to stop a non-existent preview
}
// set preview size and make any resize, rotate or
// reformatting changes here
// start preview with new settings
mCamera.apply {
try {
setPreviewDisplay(mHolder)
startPreview()
} catch (e: Exception) {
Log.d("error preview camera", "Error starting camera preview: ${e.message}")
}
}
}
}
и это мой CameraActivity.kt
package com.demo.chileocr.view.ui
class CameraActivity : Activity() {
private var mCamera: Camera? = null
private var mPreview: CameraPreview? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.camera_preview)
// Create an instance of Camera
//mCamera = getCameraInstance()
// val cameraSurfaceView = findViewById<SurfaceView>(R.id.CameraView) as SurfaceView
// val cameraHolder = cameraSurfaceView.holder
// cameraHolder.addCallback(this)
// cameraHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)
//
val figView = findViewById<SurfaceView>(R.id.TransparentView) as SurfaceView
val figHolder = figView.holder
figHolder.setFormat(PixelFormat.TRANSPARENT)
//figHolder.addCallback(this)
figHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS)
var canvas = Canvas()
canvas = figHolder.lockCanvas()
canvas.drawColor(0, PorterDuff.Mode.CLEAR)
//border's properties
var paint = Paint()
paint.style = Paint.Style.STROKE
//paint.color = color
paint.strokeWidth = 3F
canvas.drawRect(20f, 20f, 20f, 20f, paint)
figHolder.unlockCanvasAndPost(canvas)
Log.d("pinto","entro")
// mPreview = mCamera?.let {
// // Create our Preview view
// CameraPreview(this, it)
// }
// Set the Preview view as the content of our activity.
// mPreview?.also {
// val preview: LinearLayout = findViewById(R.id.CameraView)
// preview.addView(it)
// }
}
fun getCameraInstance(): Camera? {
return try {
Camera.open() // attempt to get a Camera instance
} catch (e: Exception) {
// Camera is not available (in use or does not exist)
null // returns null if camera is unavailable
}
}
}
Спасибо за помощь и идеи! c