2016-03-24 4 views
0

Ich möchte CameraSource verwenden, um visuellen Code (der keine Art von Barcode ist) zu erkennen. Ich implementiert Detector und seine detect(Frame frame) Methode. Wenn ich jedoch frame.getBitmap() in der detect Methode aufrufen, gibt es immer null zurück. Ich weiß, Frame hat eine andere Methode, getGrayscaleImageData(), aber die Erkennung des Codes benötigt Farbinformationen. Es scheint, dass CameraSource nur die Graustufen-Bilddaten an den darunter liegenden Detektor weitergibt.So verwenden Sie CameraSource, um benutzerdefinierten visuellen Code zu erkennen, der Farbinformationen benötigt

Also, gibt es eine Möglichkeit, diesen Code von CameraSource zu erkennen? Oder sollte ich CameraSource aufgeben und einen anderen Weg finden?

Antwort

1

In der aktuellen Version gibt CameraSource tatsächlich die vollständigen Farbinformationen für das Bild von getGrayscaleImageData zurück. Die führenden Bytes von dem, was zurückgegeben wird, ist die Graustufenschicht des Bilds (der Y-Kanal), aber die Bytes darüber hinaus haben die Farbinformation. Die Formatdetails hängen davon ab, welches Bildformat Sie beim Einrichten der CameraSource angegeben haben (der Standard ist das NV21-Format).

0

Es gefunden: D Dieser Code gibt farbige Bitmap so schnell zurück, aber wenn es die Frontkamera ist, müssen Sie möglicherweise entsprechend dem Gerät drehen/drehen.

public SparseArray detect(Frame frame) { 
    byte[] bytes = frame.getGrayscaleImageData().array(); 
    YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, frame.getMetadata().getWidth(), frame.getMetadata().getHeight(), null); 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    yuvImage.compressToJpeg(new Rect(0, 0, frame.getMetadata().getWidth(), frame.getMetadata().getHeight()), 100, byteArrayOutputStream); 
    byte[] jpegArray = byteArrayOutputStream.toByteArray(); 
    Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);//this bitmap is colored. 
    return null; 
} 
Verwandte Themen