From 692eabb9f888c384bb8520dfb9f5b3fe3ba02e24 Mon Sep 17 00:00:00 2001 From: Jay Wang Date: Thu, 12 Mar 2015 13:39:08 -0700 Subject: Gallery2: Move files to the correct location Change-Id: Ife7f7a2fa656cba06e2f713b27dcdadc720a021d --- Android.mk | 6 -- .../gallery3d/filtershow/editors/EditorMakeup.java | 44 ----------- .../filters/ImageFilterMakeupBigeye.java | 54 -------------- .../filters/ImageFilterMakeupSoften.java | 52 ------------- .../filters/ImageFilterMakeupTrimface.java | 55 -------------- .../filters/ImageFilterMakeupWhiten.java | 53 ------------- .../filters/SimpleMakeupImageFilter.java | 82 -------------------- .../hz/selfportrait/detect/FaceDetect.java | 79 -------------------- .../hz/selfportrait/detect/FaceInfo.java | 39 ---------- .../selfportrait/makeup/engine/MakeupEngine.java | 87 ---------------------- .../gallery3d/filtershow/editors/EditorMakeup.java | 44 +++++++++++ .../filters/ImageFilterMakeupBigeye.java | 54 ++++++++++++++ .../filters/ImageFilterMakeupSoften.java | 52 +++++++++++++ .../filters/ImageFilterMakeupTrimface.java | 55 ++++++++++++++ .../filters/ImageFilterMakeupWhiten.java | 53 +++++++++++++ .../filters/SimpleMakeupImageFilter.java | 82 ++++++++++++++++++++ .../hz/selfportrait/detect/FaceDetect.java | 79 ++++++++++++++++++++ .../hz/selfportrait/detect/FaceInfo.java | 39 ++++++++++ .../selfportrait/makeup/engine/MakeupEngine.java | 87 ++++++++++++++++++++++ 19 files changed, 545 insertions(+), 551 deletions(-) delete mode 100644 Gallery2/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java delete mode 100644 Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java delete mode 100644 Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java delete mode 100644 Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java delete mode 100644 Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java delete mode 100644 Gallery2/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java delete mode 100644 Gallery2/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java delete mode 100644 Gallery2/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java delete mode 100644 Gallery2/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java create mode 100644 src/com/android/gallery3d/filtershow/editors/EditorMakeup.java create mode 100644 src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java create mode 100644 src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java create mode 100644 src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java create mode 100644 src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java create mode 100644 src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java create mode 100644 src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java create mode 100644 src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java create mode 100644 src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java diff --git a/Android.mk b/Android.mk index 661dac6ae..f515ac03f 100755 --- a/Android.mk +++ b/Android.mk @@ -52,12 +52,6 @@ include $(BUILD_PACKAGE) ifeq ($(strip $(LOCAL_PACKAGE_OVERRIDES)),) -ifeq ($(TARGET_TS_MAKEUP), true) -include $(CLEAR_VARS) - LOCAL_PREBUILT_LIBS := jni_makeup_libs/libts_detected_face_jni.so jni_makeup_libs/libts_face_beautify_jni.so -include $(BUILD_MULTI_PREBUILT) -endif - # Use the following include to make gallery test apk include $(call all-makefiles-under, $(LOCAL_PATH)) diff --git a/Gallery2/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java b/Gallery2/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java deleted file mode 100644 index 331d31b57..000000000 --- a/Gallery2/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java +++ /dev/null @@ -1,44 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.android.gallery3d.filtershow.editors; - -import android.view.View; -import android.widget.SeekBar; - -import com.android.gallery3d.R; - -public class EditorMakeup extends BasicEditor { - public static int ID = R.id.editorMakeup; - private final String LOGTAG = "EditorMakeup"; - - public EditorMakeup() { - super(ID, R.layout.filtershow_default_editor, R.id.basicEditor); - } - - @Override - public void setUtilityPanelUI(View actionButton, View editControl) { - super.setUtilityPanelUI(actionButton, editControl); - mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar); - if (mSeekBar != null) { - mSeekBar.setVisibility(View.INVISIBLE); - } - } - - - -} diff --git a/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java b/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java deleted file mode 100644 index 64067881e..000000000 --- a/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java +++ /dev/null @@ -1,54 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.android.gallery3d.filtershow.filters; - -import android.graphics.Bitmap; - -import com.android.gallery3d.R; - -import com.thundersoft.hz.selfportrait.detect.FaceInfo; -import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; - -public class ImageFilterMakeupBigeye extends SimpleMakeupImageFilter { - private static final String SERIALIZATION_NAME = "BIGEYE"; - - public ImageFilterMakeupBigeye() { - mName = "Bigeye"; - } - - public FilterRepresentation getDefaultRepresentation() { - FilterBasicRepresentation representation = - (FilterBasicRepresentation) super.getDefaultRepresentation(); - representation.setName("Bigeye"); - representation.setSerializationName(SERIALIZATION_NAME); - representation.setFilterClass(ImageFilterMakeupBigeye.class); - representation.setTextId(R.string.text_makeup_bigeye); - representation.setOverlayOnly(true); - representation.setOverlayId(R.drawable.ic_ts_makeup_bigeye); - representation.setMinimum(0); - representation.setMaximum(100); - representation.setSupportsPartialRendering(true); - return representation; - } - - protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, - int value) { - MakeupEngine.doWarpFace(bitmap, bitmap, width, height, faceInfo.eye1, faceInfo.eye2, - faceInfo.mouth, value, 0); - } -} diff --git a/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java b/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java deleted file mode 100644 index 8587158c3..000000000 --- a/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.android.gallery3d.filtershow.filters; - -import android.graphics.Bitmap; - -import com.android.gallery3d.R; - -import com.thundersoft.hz.selfportrait.detect.FaceInfo; -import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; - -public class ImageFilterMakeupSoften extends SimpleMakeupImageFilter { - private static final String SERIALIZATION_NAME = "SOFTEN"; - - public ImageFilterMakeupSoften() { - mName = "Soften"; - } - - public FilterRepresentation getDefaultRepresentation() { - FilterBasicRepresentation representation = - (FilterBasicRepresentation) super.getDefaultRepresentation(); - representation.setName("Soften"); - representation.setSerializationName(SERIALIZATION_NAME); - representation.setFilterClass(ImageFilterMakeupSoften.class); - representation.setTextId(R.string.text_makeup_Soften); - representation.setOverlayOnly(true); - representation.setOverlayId(R.drawable.ic_ts_makeup_soften); - representation.setMinimum(0); - representation.setMaximum(100); - representation.setSupportsPartialRendering(true); - return representation; - } - - protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, int value) { - MakeupEngine.doProcessBeautify(bitmap, bitmap, width, height, faceInfo.face, value, 0); - } -} diff --git a/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java b/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java deleted file mode 100644 index 4b0499036..000000000 --- a/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java +++ /dev/null @@ -1,55 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.android.gallery3d.filtershow.filters; - -import android.graphics.Bitmap; - -import com.android.gallery3d.R; - -import com.thundersoft.hz.selfportrait.detect.FaceInfo; -import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; - -public class ImageFilterMakeupTrimface extends SimpleMakeupImageFilter { - private static final String SERIALIZATION_NAME = "TRIMFACE"; - - public ImageFilterMakeupTrimface() { - mName = "Trimface"; - } - - public FilterRepresentation getDefaultRepresentation() { - FilterBasicRepresentation representation = - (FilterBasicRepresentation) super.getDefaultRepresentation(); - representation.setName("Trimface"); - representation.setSerializationName(SERIALIZATION_NAME); - representation.setFilterClass(ImageFilterMakeupTrimface.class); - representation.setTextId(R.string.text_makeup_trimface); - representation.setOverlayOnly(true); - representation.setOverlayId(R.drawable.ic_ts_makeup_trimface); - representation.setMinimum(0); - representation.setMaximum(100); - representation.setSupportsPartialRendering(true); - return representation; - } - - protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, - int value) { - MakeupEngine.doWarpFace(bitmap, bitmap, width, height, faceInfo.eye1, faceInfo.eye2, - faceInfo.mouth, 0, value); - } - -} diff --git a/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java b/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java deleted file mode 100644 index e60be84d7..000000000 --- a/Gallery2/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java +++ /dev/null @@ -1,53 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.android.gallery3d.filtershow.filters; - -import android.graphics.Bitmap; - -import com.android.gallery3d.R; - -import com.thundersoft.hz.selfportrait.detect.FaceInfo; -import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; - -public class ImageFilterMakeupWhiten extends SimpleMakeupImageFilter { - private static final String SERIALIZATION_NAME = "WHITEN"; - - public ImageFilterMakeupWhiten() { - mName = "Whiten"; - } - - public FilterRepresentation getDefaultRepresentation() { - FilterBasicRepresentation representation = - (FilterBasicRepresentation) super.getDefaultRepresentation(); - representation.setName("Whiten"); - representation.setSerializationName(SERIALIZATION_NAME); - representation.setFilterClass(ImageFilterMakeupWhiten.class); - representation.setTextId(R.string.text_makeup_whiten); - representation.setOverlayOnly(true); - representation.setOverlayId(R.drawable.ic_ts_makeup_whiten); - representation.setMinimum(0); - representation.setMaximum(100); - representation.setSupportsPartialRendering(true); - return representation; - } - - protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, int value) { - MakeupEngine.doProcessBeautify(bitmap, bitmap, width, height, faceInfo.face, 0, value); - } - -} diff --git a/Gallery2/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java b/Gallery2/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java deleted file mode 100644 index 584074c02..000000000 --- a/Gallery2/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java +++ /dev/null @@ -1,82 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.android.gallery3d.filtershow.filters; - -import android.graphics.Bitmap; -import android.util.Log; - -import com.thundersoft.hz.selfportrait.detect.FaceDetect; -import com.thundersoft.hz.selfportrait.detect.FaceInfo; - -public abstract class SimpleMakeupImageFilter extends SimpleImageFilter { - private static final String LOGTAG = "SimpleMakeupImageFilter"; - protected static final int MAKEUP_INTENSITY = 50; - - public static final boolean HAS_TS_MAKEUP = android.os.SystemProperties.getBoolean("persist.ts.postmakeup", false); - - public SimpleMakeupImageFilter() { - } - - public FilterRepresentation getDefaultRepresentation() { - FilterRepresentation representation = new FilterBasicRepresentation("Default", 0, - MAKEUP_INTENSITY, 100); - representation.setShowParameterValue(true); - return representation; - } - - protected FaceInfo detectFaceInfo(Bitmap bitmap) { - FaceDetect faceDetect = new FaceDetect(); - faceDetect.initialize(); - FaceInfo[] faceInfos = faceDetect.dectectFeatures(bitmap); - faceDetect.uninitialize(); - - Log.v(LOGTAG, "SimpleMakeupImageFilter.detectFaceInfo(): detect faceNum is " - + (faceInfos != null ? faceInfos.length : "NULL")); - if (faceInfos == null || faceInfos.length <= 0) { - return null; - } - - return faceInfos[0]; - } - - @Override - public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) { - if (getParameters() == null) { - return bitmap; - } - int w = bitmap.getWidth(); - int h = bitmap.getHeight(); - if(w % 2 != 0 || h % 2 != 0) { - return bitmap; - } - int value = getParameters().getValue(); - applyHelper(bitmap, w, h, value); - return bitmap; - } - - private void applyHelper(Bitmap bitmap, int w, int h, int value) { - FaceInfo faceInfo = detectFaceInfo(bitmap); - if(faceInfo != null) { - doMakeupEffect(bitmap, faceInfo, w, h, value); - } - } - - abstract void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, - int value); - -} diff --git a/Gallery2/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java b/Gallery2/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java deleted file mode 100644 index a5c7fb043..000000000 --- a/Gallery2/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java +++ /dev/null @@ -1,79 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.thundersoft.hz.selfportrait.detect; - -import android.graphics.Bitmap; -import android.graphics.Rect; -import android.util.Log; - -public class FaceDetect { - private static final String TAG = "FaceDetect"; - - private int mHandle = 0; - - static { - try { - System.loadLibrary("ts_detected_face_jni"); - } catch (UnsatisfiedLinkError e) { - e.printStackTrace(); - Log.e(TAG, "ts_detected_face_jni library not found!"); - } - } - - /** - * initialize method,MUST called at first time. - */ - public void initialize() { - mHandle = native_create(); - } - - /** - * uninitialize method,MUST called at last time. - */ - - public void uninitialize() { - native_destroy(mHandle); - } - - /** - * dectectFeatures method,MUST called after initialize method and before - * uninitialize method. - * - * @param bmp, Android Bitmap instance,MUST not null. - * @return FaceInfo array if success, otherwise return null. - */ - public FaceInfo[] dectectFeatures(Bitmap bmp) { - int count = native_detect(mHandle, bmp); - if (count < 1) { - return null; - } - FaceInfo[] res = new FaceInfo[count]; - for (int i = 0; i < count; i++) { - FaceInfo face = new FaceInfo(); - native_face_info(mHandle, i, face.face, face.eye1, face.eye2, face.mouth); - res[i] = face; - } - return res; - } - - private static native int native_create(); - private static native void native_destroy(int handle); - private static native int native_detect(int handle, Bitmap bmp); - private static native int native_face_info(int handle, int index, Rect face, Rect eye1, - Rect eye2, Rect mouth); -} diff --git a/Gallery2/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java b/Gallery2/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java deleted file mode 100644 index eee51f71b..000000000 --- a/Gallery2/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java +++ /dev/null @@ -1,39 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.thundersoft.hz.selfportrait.detect; - -import android.graphics.Rect; - -public class FaceInfo { - /** - * face rectangle - */ - public Rect face = new Rect(); - /** - * left eye rectangle - */ - public Rect eye1 = new Rect(); - /** - * right eye rectangle - */ - public Rect eye2 = new Rect(); - /** - * mount rectangle - */ - public Rect mouth = new Rect(); -} diff --git a/Gallery2/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java b/Gallery2/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java deleted file mode 100644 index 8d58bcfef..000000000 --- a/Gallery2/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java +++ /dev/null @@ -1,87 +0,0 @@ -/* -* Copyright (C) 2014,2015 Thundersoft Corporation -* All rights Reserved -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.thundersoft.hz.selfportrait.makeup.engine; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Rect; -import android.util.Log; - -public class MakeupEngine { - static { - try { - System.loadLibrary("ts_face_beautify_jni"); - } catch (UnsatisfiedLinkError e) { - e.printStackTrace(); - Log.e(MakeupEngine.class.getName(), "ts_face_beautify_jni library not found!"); - } - } - - private static MakeupEngine mInstance; - - private MakeupEngine() { - - } - - public static MakeupEngine getMakeupObj() { - if(mInstance == null) { - mInstance = new MakeupEngine(); - } - - return mInstance; - } - - private Context mContext; - - public void setContext(Context context) { - mContext = context; - } - - public Context getContext() { - return mContext; - } - - /** - * FUNCTION: doProcessBeautify - * Do process face region clean and whiten. - * @param inBitmap, the Bitmap instance which have face region, MUST not null. - * @param outBitmap, the result of process, MUST not null. - * @param frameWidth,frameHeight, the size of inBitmap. - * @param faceRect, the face region in inBitmap. - * @param cleanLevel, the level of clean.(0-100) - * @param whiteLevel, the level of white.(0-100) - */ - public static native boolean doProcessBeautify(Bitmap inBitmap, Bitmap outBitmap, int frameWidth, int frameHeight, - Rect faceRect, int cleanLevel, int beautyLevel); - - /** - * FUNCTION: doWarpFace - * Do process face region warp and big eye. - * @param inBitmap, the Bitmap instance which have face region, MUST not null. - * @param outBitmap, the result of process, MUST not null. - * @param frameWidth, the size of inBitmap. - * @param frameHeight, the size of inBitmap. - * @param leftEye, the left eye rectangle - * @param rightEye, the right eye rectangle - * @param mouth, the mouth rectangle - * @param bigEyeLevel, the level of big eye.(0-100) - * @param trimFaceLevel, the level of trim face.(0-100) - */ - public static native boolean doWarpFace(Bitmap inBitmap, Bitmap outBitmap, int frameWidth, int frameHeight, - Rect leftEye, Rect rightEye, Rect mouth, int bigEyeLevel, int trimFaceLevel); -} diff --git a/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java b/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java new file mode 100644 index 000000000..331d31b57 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/editors/EditorMakeup.java @@ -0,0 +1,44 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.editors; + +import android.view.View; +import android.widget.SeekBar; + +import com.android.gallery3d.R; + +public class EditorMakeup extends BasicEditor { + public static int ID = R.id.editorMakeup; + private final String LOGTAG = "EditorMakeup"; + + public EditorMakeup() { + super(ID, R.layout.filtershow_default_editor, R.id.basicEditor); + } + + @Override + public void setUtilityPanelUI(View actionButton, View editControl) { + super.setUtilityPanelUI(actionButton, editControl); + mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar); + if (mSeekBar != null) { + mSeekBar.setVisibility(View.INVISIBLE); + } + } + + + +} diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java new file mode 100644 index 000000000..64067881e --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupBigeye.java @@ -0,0 +1,54 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.R; + +import com.thundersoft.hz.selfportrait.detect.FaceInfo; +import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; + +public class ImageFilterMakeupBigeye extends SimpleMakeupImageFilter { + private static final String SERIALIZATION_NAME = "BIGEYE"; + + public ImageFilterMakeupBigeye() { + mName = "Bigeye"; + } + + public FilterRepresentation getDefaultRepresentation() { + FilterBasicRepresentation representation = + (FilterBasicRepresentation) super.getDefaultRepresentation(); + representation.setName("Bigeye"); + representation.setSerializationName(SERIALIZATION_NAME); + representation.setFilterClass(ImageFilterMakeupBigeye.class); + representation.setTextId(R.string.text_makeup_bigeye); + representation.setOverlayOnly(true); + representation.setOverlayId(R.drawable.ic_ts_makeup_bigeye); + representation.setMinimum(0); + representation.setMaximum(100); + representation.setSupportsPartialRendering(true); + return representation; + } + + protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, + int value) { + MakeupEngine.doWarpFace(bitmap, bitmap, width, height, faceInfo.eye1, faceInfo.eye2, + faceInfo.mouth, value, 0); + } +} diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java new file mode 100644 index 000000000..8587158c3 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupSoften.java @@ -0,0 +1,52 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.R; + +import com.thundersoft.hz.selfportrait.detect.FaceInfo; +import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; + +public class ImageFilterMakeupSoften extends SimpleMakeupImageFilter { + private static final String SERIALIZATION_NAME = "SOFTEN"; + + public ImageFilterMakeupSoften() { + mName = "Soften"; + } + + public FilterRepresentation getDefaultRepresentation() { + FilterBasicRepresentation representation = + (FilterBasicRepresentation) super.getDefaultRepresentation(); + representation.setName("Soften"); + representation.setSerializationName(SERIALIZATION_NAME); + representation.setFilterClass(ImageFilterMakeupSoften.class); + representation.setTextId(R.string.text_makeup_Soften); + representation.setOverlayOnly(true); + representation.setOverlayId(R.drawable.ic_ts_makeup_soften); + representation.setMinimum(0); + representation.setMaximum(100); + representation.setSupportsPartialRendering(true); + return representation; + } + + protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, int value) { + MakeupEngine.doProcessBeautify(bitmap, bitmap, width, height, faceInfo.face, value, 0); + } +} diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java new file mode 100644 index 000000000..4b0499036 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupTrimface.java @@ -0,0 +1,55 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.R; + +import com.thundersoft.hz.selfportrait.detect.FaceInfo; +import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; + +public class ImageFilterMakeupTrimface extends SimpleMakeupImageFilter { + private static final String SERIALIZATION_NAME = "TRIMFACE"; + + public ImageFilterMakeupTrimface() { + mName = "Trimface"; + } + + public FilterRepresentation getDefaultRepresentation() { + FilterBasicRepresentation representation = + (FilterBasicRepresentation) super.getDefaultRepresentation(); + representation.setName("Trimface"); + representation.setSerializationName(SERIALIZATION_NAME); + representation.setFilterClass(ImageFilterMakeupTrimface.class); + representation.setTextId(R.string.text_makeup_trimface); + representation.setOverlayOnly(true); + representation.setOverlayId(R.drawable.ic_ts_makeup_trimface); + representation.setMinimum(0); + representation.setMaximum(100); + representation.setSupportsPartialRendering(true); + return representation; + } + + protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, + int value) { + MakeupEngine.doWarpFace(bitmap, bitmap, width, height, faceInfo.eye1, faceInfo.eye2, + faceInfo.mouth, 0, value); + } + +} diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java new file mode 100644 index 000000000..e60be84d7 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterMakeupWhiten.java @@ -0,0 +1,53 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; + +import com.android.gallery3d.R; + +import com.thundersoft.hz.selfportrait.detect.FaceInfo; +import com.thundersoft.hz.selfportrait.makeup.engine.MakeupEngine; + +public class ImageFilterMakeupWhiten extends SimpleMakeupImageFilter { + private static final String SERIALIZATION_NAME = "WHITEN"; + + public ImageFilterMakeupWhiten() { + mName = "Whiten"; + } + + public FilterRepresentation getDefaultRepresentation() { + FilterBasicRepresentation representation = + (FilterBasicRepresentation) super.getDefaultRepresentation(); + representation.setName("Whiten"); + representation.setSerializationName(SERIALIZATION_NAME); + representation.setFilterClass(ImageFilterMakeupWhiten.class); + representation.setTextId(R.string.text_makeup_whiten); + representation.setOverlayOnly(true); + representation.setOverlayId(R.drawable.ic_ts_makeup_whiten); + representation.setMinimum(0); + representation.setMaximum(100); + representation.setSupportsPartialRendering(true); + return representation; + } + + protected void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, int value) { + MakeupEngine.doProcessBeautify(bitmap, bitmap, width, height, faceInfo.face, 0, value); + } + +} diff --git a/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java b/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java new file mode 100644 index 000000000..584074c02 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/filters/SimpleMakeupImageFilter.java @@ -0,0 +1,82 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.android.gallery3d.filtershow.filters; + +import android.graphics.Bitmap; +import android.util.Log; + +import com.thundersoft.hz.selfportrait.detect.FaceDetect; +import com.thundersoft.hz.selfportrait.detect.FaceInfo; + +public abstract class SimpleMakeupImageFilter extends SimpleImageFilter { + private static final String LOGTAG = "SimpleMakeupImageFilter"; + protected static final int MAKEUP_INTENSITY = 50; + + public static final boolean HAS_TS_MAKEUP = android.os.SystemProperties.getBoolean("persist.ts.postmakeup", false); + + public SimpleMakeupImageFilter() { + } + + public FilterRepresentation getDefaultRepresentation() { + FilterRepresentation representation = new FilterBasicRepresentation("Default", 0, + MAKEUP_INTENSITY, 100); + representation.setShowParameterValue(true); + return representation; + } + + protected FaceInfo detectFaceInfo(Bitmap bitmap) { + FaceDetect faceDetect = new FaceDetect(); + faceDetect.initialize(); + FaceInfo[] faceInfos = faceDetect.dectectFeatures(bitmap); + faceDetect.uninitialize(); + + Log.v(LOGTAG, "SimpleMakeupImageFilter.detectFaceInfo(): detect faceNum is " + + (faceInfos != null ? faceInfos.length : "NULL")); + if (faceInfos == null || faceInfos.length <= 0) { + return null; + } + + return faceInfos[0]; + } + + @Override + public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) { + if (getParameters() == null) { + return bitmap; + } + int w = bitmap.getWidth(); + int h = bitmap.getHeight(); + if(w % 2 != 0 || h % 2 != 0) { + return bitmap; + } + int value = getParameters().getValue(); + applyHelper(bitmap, w, h, value); + return bitmap; + } + + private void applyHelper(Bitmap bitmap, int w, int h, int value) { + FaceInfo faceInfo = detectFaceInfo(bitmap); + if(faceInfo != null) { + doMakeupEffect(bitmap, faceInfo, w, h, value); + } + } + + abstract void doMakeupEffect(Bitmap bitmap, FaceInfo faceInfo, int width, int height, + int value); + +} diff --git a/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java b/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java new file mode 100644 index 000000000..a5c7fb043 --- /dev/null +++ b/src/com/thundersoft/hz/selfportrait/detect/FaceDetect.java @@ -0,0 +1,79 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.thundersoft.hz.selfportrait.detect; + +import android.graphics.Bitmap; +import android.graphics.Rect; +import android.util.Log; + +public class FaceDetect { + private static final String TAG = "FaceDetect"; + + private int mHandle = 0; + + static { + try { + System.loadLibrary("ts_detected_face_jni"); + } catch (UnsatisfiedLinkError e) { + e.printStackTrace(); + Log.e(TAG, "ts_detected_face_jni library not found!"); + } + } + + /** + * initialize method,MUST called at first time. + */ + public void initialize() { + mHandle = native_create(); + } + + /** + * uninitialize method,MUST called at last time. + */ + + public void uninitialize() { + native_destroy(mHandle); + } + + /** + * dectectFeatures method,MUST called after initialize method and before + * uninitialize method. + * + * @param bmp, Android Bitmap instance,MUST not null. + * @return FaceInfo array if success, otherwise return null. + */ + public FaceInfo[] dectectFeatures(Bitmap bmp) { + int count = native_detect(mHandle, bmp); + if (count < 1) { + return null; + } + FaceInfo[] res = new FaceInfo[count]; + for (int i = 0; i < count; i++) { + FaceInfo face = new FaceInfo(); + native_face_info(mHandle, i, face.face, face.eye1, face.eye2, face.mouth); + res[i] = face; + } + return res; + } + + private static native int native_create(); + private static native void native_destroy(int handle); + private static native int native_detect(int handle, Bitmap bmp); + private static native int native_face_info(int handle, int index, Rect face, Rect eye1, + Rect eye2, Rect mouth); +} diff --git a/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java b/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java new file mode 100644 index 000000000..eee51f71b --- /dev/null +++ b/src/com/thundersoft/hz/selfportrait/detect/FaceInfo.java @@ -0,0 +1,39 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.thundersoft.hz.selfportrait.detect; + +import android.graphics.Rect; + +public class FaceInfo { + /** + * face rectangle + */ + public Rect face = new Rect(); + /** + * left eye rectangle + */ + public Rect eye1 = new Rect(); + /** + * right eye rectangle + */ + public Rect eye2 = new Rect(); + /** + * mount rectangle + */ + public Rect mouth = new Rect(); +} diff --git a/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java b/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java new file mode 100644 index 000000000..8d58bcfef --- /dev/null +++ b/src/com/thundersoft/hz/selfportrait/makeup/engine/MakeupEngine.java @@ -0,0 +1,87 @@ +/* +* Copyright (C) 2014,2015 Thundersoft Corporation +* All rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.thundersoft.hz.selfportrait.makeup.engine; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Rect; +import android.util.Log; + +public class MakeupEngine { + static { + try { + System.loadLibrary("ts_face_beautify_jni"); + } catch (UnsatisfiedLinkError e) { + e.printStackTrace(); + Log.e(MakeupEngine.class.getName(), "ts_face_beautify_jni library not found!"); + } + } + + private static MakeupEngine mInstance; + + private MakeupEngine() { + + } + + public static MakeupEngine getMakeupObj() { + if(mInstance == null) { + mInstance = new MakeupEngine(); + } + + return mInstance; + } + + private Context mContext; + + public void setContext(Context context) { + mContext = context; + } + + public Context getContext() { + return mContext; + } + + /** + * FUNCTION: doProcessBeautify + * Do process face region clean and whiten. + * @param inBitmap, the Bitmap instance which have face region, MUST not null. + * @param outBitmap, the result of process, MUST not null. + * @param frameWidth,frameHeight, the size of inBitmap. + * @param faceRect, the face region in inBitmap. + * @param cleanLevel, the level of clean.(0-100) + * @param whiteLevel, the level of white.(0-100) + */ + public static native boolean doProcessBeautify(Bitmap inBitmap, Bitmap outBitmap, int frameWidth, int frameHeight, + Rect faceRect, int cleanLevel, int beautyLevel); + + /** + * FUNCTION: doWarpFace + * Do process face region warp and big eye. + * @param inBitmap, the Bitmap instance which have face region, MUST not null. + * @param outBitmap, the result of process, MUST not null. + * @param frameWidth, the size of inBitmap. + * @param frameHeight, the size of inBitmap. + * @param leftEye, the left eye rectangle + * @param rightEye, the right eye rectangle + * @param mouth, the mouth rectangle + * @param bigEyeLevel, the level of big eye.(0-100) + * @param trimFaceLevel, the level of trim face.(0-100) + */ + public static native boolean doWarpFace(Bitmap inBitmap, Bitmap outBitmap, int frameWidth, int frameHeight, + Rect leftEye, Rect rightEye, Rect mouth, int bigEyeLevel, int trimFaceLevel); +} -- cgit v1.2.3