如何绘制一个矩形到脸部的位置?
Posted
技术标签:
【中文标题】如何绘制一个矩形到脸部的位置?【英文标题】: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()
这是drawLandmarkRect
,drawLandmarkPosition
的函数代码:
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()
我该怎么办?
【问题讨论】:
【参考方案1】:您可以使用 Canvas 在脸上绘制矩形 检查it,它可能对你有用。
【讨论】:
【参考方案2】:被爱的:
问题是我在创建newInstance ImageReader时用数字划分宽度,高度:
imageReader = ImageReader.newInstance(camOutputSizeWidth/quality, camOutputSizeHeight/quality, ImageFormat.YUV_420_888, 1)
【讨论】:
以上是关于如何绘制一个矩形到脸部的位置?的主要内容,如果未能解决你的问题,请参考以下文章