【问题标题】:How to draw a Rectangle to position of face?如何绘制一个矩形到脸部的位置?
【发布时间】:2019-01-31 13:58:21
【问题描述】:

我正在制作一个人脸检测应用程序,通过相机预览的每一帧,我都会获得该帧上的所有人脸。效果很好,我得到了所有面孔,每个面孔都有地标的位置。

现在,我在每一帧上收到的位置绘制一个矩形。我有一个问题,我的 Rectangle 与人脸不匹配

这是截图:

我认为我收到的位置是图像,而不是屏幕上。

这是我得到位置的代码:

.addOnSuccessListener {
                    val faceId = ArrayList<Int>()
                    //get all face
                    for (i in it) {

                        // landmark (mouth, ears, eyes, cheeks, and nose available)
                        drawLandmarkRect(i)
                        drawLandmarkPosition(i, FirebaseVisionFaceLandmark.BOTTOM_MOUTH)
                        drawLandmarkPosition(i, FirebaseVisionFaceLandmark.LEFT_EAR)
                        drawLandmarkPosition(i, FirebaseVisionFaceLandmark.RIGHT_EAR)
                        drawLandmarkPosition(i, FirebaseVisionFaceLandmark.NOSE_BASE)
                        drawLandmarkPosition(i, FirebaseVisionFaceLandmark.LEFT_MOUTH)
                        drawLandmarkPosition(i, FirebaseVisionFaceLandmark.RIGHT_MOUTH)
                        drawLandmarkPosition(i, FirebaseVisionFaceLandmark.LEFT_CHEEK)
                        drawLandmarkPosition(i, FirebaseVisionFaceLandmark.RIGHT_CHEEK)

                    }
                    activity.graphicOverlay.drawAgain()
                    activity.checkMlCallback = 1
                    imageYUV.close()
                }

这是drawLandmarkRectdrawLandmarkPosition的函数代码:

fun drawLandmarkRect(face: FirebaseVisionFace){
    activity.graphicOverlay.rect.add(face.boundingBox)
}

fun drawLandmarkPosition(face: FirebaseVisionFace, idLandmark: Int){
    val pos = face.getLandmark(idLandmark)?.position
    pos?.let{
        activity.graphicOverlay.pX.add(it.x)
        activity.graphicOverlay.pY.add(it.y)
    }
}

这是我画的代码:

class GraphicOverlay(context: Context=): View(context) {

private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
var pX = ArrayList<Float>()
var pY = ArrayList<Float>()
var rect = ArrayList<Rect>()

override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    drawCircle(canvas); 
    drawRect(canvas)
    }
}

fun drawCircle(canvas: Canvas){
    for (item in 0 until pX.size){
        canvas.drawCircle(pX[item], pY[item], 5f, paint)
    }
}

fun drawRect(canvas: Canvas){
    paint.apply {
        strokeWidth = 3f
        style = Paint.Style.STROKE
        color = Color.parseColor("#fdc51162")
    }
    for (item in rect){
        canvas.drawRect(item, paint)
    }
}

fun drawAgain(){
    postInvalidate()
  }
}

我该怎么办?

【问题讨论】:

    标签: android android-camera face-detection


    【解决方案1】:

    您可以使用 Canvas 在脸上绘制矩形 检查it,它可能对你有用。

    【讨论】:

      【解决方案2】:

      被爱的:

      问题是我在创建newInstance ImageReader时用数字划分宽度,高度:

      imageReader = ImageReader.newInstance(camOutputSizeWidth/quality, camOutputSizeHeight/quality, ImageFormat.YUV_420_888, 1)
      

      【讨论】:

        猜你喜欢
        • 2015-11-17
        • 2018-02-12
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        相关资源
        最近更新 更多