Android нарисуйте предварительный просмотр камеры и получите данные - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...