2016-06-01 7 views

答えて

1

[OK]を見て

camera2 with mobile vision? #65

を持ってください、私はこの

がCameraSourceクラスのカメラ2版のための短期的計画はありません発見公式APIでしかし、APIの構造を考えれば、CameraSourceの代替バージョンは、camera2を使用する開発者コミュニティによって作成される可能性があります。フレームと検出器を扱うための既存のAPIはすべて、camera2の実装をサポートするのに十分です。

+0

感謝を願っていますが、私はその情報を読んでいる...:D – Vietnt134

2

Google Vision APIでCamera2 APIを使用することは可能です。

まず、Google Vision APIの顔検出器は、顔とその目印を検出するために使用する​​オブジェクトを受け取ります。

Camera1 APIは、NV21イメージ形式のプレビューフレームを提供します。これは私たちにとって理想的です。 Google Vision Frame.Builderは、Bitmapを処理するプレビューフレームとして使用するために、setImageData(NV16、NV21またはYV12イメージフォーマットのByteBuffer)とsetBitmapの両方をサポートしています。

問題は、Camera2 APIがプレビューフレームを別の形式で提供することです。それはYUV_420_888です。すべてを機能させるには、プレビューフレームをサポートされているフォーマットに変換する必要があります。

ImageReaderからCamera2プレビューフレームを取得したら、Imageとしてこの機能を使用して、サポートされているフォーマット(この場合はNV21)に変換できます。

private byte[] convertYUV420888ToNV21(Image imgYUV420) { 
    // Converting YUV_420_888 data to YUV_420_SP (NV21). 
    byte[] data; 
    ByteBuffer buffer0 = imgYUV420.getPlanes()[0].getBuffer(); 
    ByteBuffer buffer2 = imgYUV420.getPlanes()[2].getBuffer(); 
    int buffer0_size = buffer0.remaining(); 
    int buffer2_size = buffer2.remaining(); 
    data = new byte[buffer0_size + buffer2_size]; 
    buffer0.get(data, 0, buffer0_size); 
    buffer2.get(data, buffer0_size, buffer2_size); 
    return data; 
} 

その後は、Googleビジョンフレームを作成するには、[]返されたバイトを使用することができます。

outputFrame = new Frame.Builder() 
    .setImageData(nv21bytes, mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.NV21) 
    .setId(mPendingFrameId) 
    .setTimestampMillis(mPendingTimeMillis) 
    .setRotation(mSensorOrientation) 
    .build(); 

最後に、あなたが作成したフレームで検出器を呼ぶ:とにかく

mDetector.receiveFrame(outputFrame); 

、これについてもっと知りたければ、GitHub:Camera2Visionで無料で利用可能な私の作業例をテストすることができます。私は私が助けてきた:)高度で

+0

私は 'convertYUV420888ToNV21()'を使用してデータを変換しようとしたが、それはすべての –

+0

でバーコードやQRコードをスキャンしません@ LalitPoptani問題が発生している場合は、https://github.com/EzequielAdrianM/Camera2Vision/issuesで新しい問題を開こうと思います。 –

関連する問題