tyczj:
私が使用していますFirebaseVision
から物事を検出するオブジェクト検出をCameraX
カメラのプレビュー。それは見つけるが、私はカメラのプレビュー上で検出されたアイテムのバウンディングボックスを描画しようとしている事を検出しています。firebaseが戻って与えることバウンディングボックスそうすることで、画像そのものではない、彼らは間違った場所に表示されるように、プレビュー表示のためではありません。
私はfirebaseから取り戻すことを画像サイズは1200x1600
、プレビューサイズがあります2425x1440
どのように私は、正しいスクリーン座標にfirebaseから返されたバウンディングボックスを変換するのですか?
tyczj:
私がやってしまった何を、私はカメラが撮ったことを画像サイズを取ったスケールの大きさを取得するには、ビューの幅/高さ幅/高さを分割
if(isPortraitMode()){
_scaleY = overlayView.height.toFloat() / imageWidth.toFloat()
_scaleX = overlayView.width.toFloat() / imageHeight.toFloat()
}else{
_scaleY = overlayView.height.toFloat() / imageHeight.toFloat()
_scaleX = overlayView.width.toFloat() / imageWidth.toFloat()
}
今、私はその後、firebase検出器によってバウンディングボックスのリターンを取るとスケールで、xとy座標を翻訳することができ、スケールを持っていること
private fun translateX(x: Float): Float = x * _scaleX
private fun translateY(y: Float): Float = y * _scaleY
private fun translateRect(rect: Rect) = RectF(
translateX(rect.left.toFloat()),
translateY(rect.top.toFloat()),
translateX(rect.right.toFloat()),
translateY(rect.bottom.toFloat())
)
その後、あなたは、画面上に描画スケーリングされた矩形の座標を与えます