2017-07-12 1 views
0

私のカスタム検出器では、画像をフレームから半分に分割して別々に処理したいと考えています。 これは私が私のカスタムDetectorで、これまでに得たものである:google-visionフレームを2つに分割する

val imageArray = frame?.grayscaleImageData?.array() 
    val upperImageBuffer = ByteBuffer 
           .allocate(imageArray?.size ?: 0) 
           .put(imageArray, 0, imageArray?.size?.div(2) ?: 0) 
val upperFrame = Frame.Builder(). 
      setImageData(upperImageBuffer, 
       frame?.metadata?.width ?: 0, 
       frame?.metadata?.height?.div(2) ?: 0, 
       frame?.metadata?.format ?: 16). 
      setRotation(frame?.metadata?.rotation ?: 0). 
      build() 

val lowerFrame... etc 

val upperDetections = delegateDetector.detect(upperFrame) 
upperDetections.forEach { key, barcode -> 
    if (barcode is Barcode) results.append(key, barcode) 
} 

val lowerDetections = delegateDetector.detect(lowerFrame) etc. 

これまでのところ、私は両方で同じ検出器を使用しています(これは私が全体のフレームよりも結果を認識するつもりかどうかを確認するために実際にあります - それは聞こえるほど愚かではあるが、私は質問をそのまま残す。おそらく、将来、誰かが画像の一部を1つの検出器で処理し、別のものを別の検出器で処理する必要があるからだ。

しかし、問題は次のとおりです。私は両方の半分で同じ結果を得て、実際には元のフレームと同じ結果になります。何が間違っていますか?

答えて

1

grayscaleImageData from CameraSourceには、カラーも含まれていますが、グレースケールチャネルが前に付いています。つまり、Yチャンネル(グレースケール)ではなくYUVとしてフォーマットされています。

imageArray.sizeを使用するのではなく、frame.width * frame.heightをサイズとして使用します。

+0

ええ、基本的に私は自分のコードで何が起こっているかについて完全に間違っていることを知りましたので、私はその質問を再び述べる必要があります。おそらく明日、残念ながら今はたくさんの仕事があります。それでも、私が使用し終わったのはそれでした。 – Antek

関連する問題