Effektive Unschärfe der Kameravorschau

9

Was ich bisher versucht habe:

Konvertiere jedes Bild in eine Bitmap, verwische es mit der Bibliothek und lege es in ImageView , was vor der Kameravorschau steht. Offensichtlich war zu langsam - so etwas wie 1 fps .

Dann habe ich angefangen, RenderScript zu verwenden, das jeden Frame verwischt und das Ergebnis der Verarbeitung sollte in TextureView platziert werden, was eine Vorschau der Cover-Kamera ist.

Wesentliche Teile des Codes dieses Ansatzes:

Weichzeichner

%Vor%

MainActivity

%Vor%

activity_main.xml

%Vor%

Und leider ist es immer noch zu langsam - 3-4 FPS . Auch die Unschärfe-Überlagerung wird gedreht, aber es ist ein anderes Problem.

Ich habe ein Testprojekt auf Github erstellt , in dem Sie Probleme schnell reproduzieren und überprüfen können, wie es funktioniert ist möglich zu optimieren. Ich freue mich auf Ihre Ideen.

UPD Ich konnte die Leistung verbessern, indem ich das Eingabedatum vor dem Weichzeichnen herabsetzte. Ich habe diese Änderungen auf Repo getestet. Jetzt habe ich eine wirklich gute (15-20 FPS) -Leistung, selbst auf Low-End-Geräten, aber mit niedriger Auflösung (HD zum Beispiel), und nicht gut genug auf FHD und UHD ( (8- 12 FPS) .

    
Divers 20.10.2017, 14:48
quelle

2 Antworten

6

Ich denke, der beste Ansatz, den Sie wählen können, ist es, CameraView durch TextureView zu ersetzen und es als Kameravorschau zu verwenden. Beispiele dafür finden Sie hier Ссылка und hier Ссылка .

Der nächste Schritt ist die Verwendung eines Unschärfe-Shaders in deinem TextureView . Hier finden Sie ein Beispiel: Ссылка

Sie können diesen Shader verwenden oder einen schöneren suchen.

Falls Sie eine fertige Lösung wünschen, können Sie sich diese Bibliothek ansehen: Ссылка

Damit können Sie Shader auf eine Videoansicht anwenden. Sie können also wieder einen unscharfen Shader verwenden, um den gewünschten Effekt zu erzielen.

Beispiel für diese Bibliothek: Ссылка

BEARBEITEN

Also gab ich eine großartige Bibliothek von Nekocode und fügte einen funktionierenden Unschärfefilter hinzu. Bitte sehen Sie meine letzte Verpflichtung. Ссылка

Wie ich schon sagte, Texturlayer + GL Shader. Um den Unschärfe-Shader zu aktivieren, klicken Sie auf das Menü in der oberen rechten Ecke und wählen Sie die entsprechende Option.

Wenn Sie einen schnelleren / besseren / einfacheren Unschärfe-Shader benötigen, können Sie ihn auf Ссылка

suchen

Auf einigen Geräten könnte die Kameravorschau umgedreht werden, aber das ist ein anderes Problem, das es zu lösen gilt.

    
Dimezis 23.10.2017 09:47
quelle
-3

Welche Art von Unschärfe brauchen Sie? Video in der Laufzeit ändern sehr komplizierte Aufgabe, und am effizientesten ist es mit einfachen Maske. Und nur Maske, wird für unsere Aufgaben passen. Auch zum Speichern von Video wenden wir nicht nur Transformation an, sondern nehmen Video Frames mit unserer Maske auf.

In Ihrem Fall können Sie CameraView in eine neue Maske mit der Aktion "Blau" umbrechen. Daher haben Sie Layouts wie hier eingefügt.

%Vor%

Und dann verwischte Maske in FrameLayout view anwenden. Für Beispiel Hintergrund festlegen, wie es In diesem Beispiel zeigt

    
GensaGames 23.10.2017 12:31
quelle

Tags und Links