本文整理汇总了Java中com.google.android.gms.vision.face.Landmark类的典型用法代码示例。如果您正苦于以下问题:Java Landmark类的具体用法?Java Landmark怎么用?Java Landmark使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Landmark类属于com.google.android.gms.vision.face包,在下文中一共展示了Landmark类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: getLandmarkKey
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
private String getLandmarkKey( int landmarkType ) {
switch( landmarkType ) {
case Landmark.BOTTOM_MOUTH: return "mouth";
case Landmark.LEFT_EYE: return "leftEye";
case Landmark.RIGHT_EYE: return "rightEye";
case Landmark.LEFT_EAR: return "leftEar";
case Landmark.LEFT_EAR_TIP: return "leftEarTip";
case Landmark.LEFT_CHEEK: return "leftCheek";
case Landmark.LEFT_MOUTH: return "leftMouth";
case Landmark.RIGHT_EAR: return "rightEar";
case Landmark.RIGHT_EAR_TIP: return "rightEarTip";
case Landmark.RIGHT_CHEEK: return "rightCheek";
case Landmark.RIGHT_MOUTH: return "rightMouth";
case Landmark.NOSE_BASE: return "noseBase";
default: return null;
}
}
示例2: drawFaceAnnotations
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
/**
* Draws a small circle for each detected landmark, centered at the detected landmark position.
* <p>
*
* Note that eye landmarks are defined to be the midpoint between the detected eye corner
* positions, which tends to place the eye landmarks at the lower eyelid rather than at the
* pupil position.
*/
private void drawFaceAnnotations(Canvas canvas, double scale) {
Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
for (int i = 0; i < mFaces.size(); ++i) {
Face face = mFaces.valueAt(i);
for (Landmark landmark : face.getLandmarks()) {
int cx = (int) (landmark.getPosition().x * scale);
int cy = (int) (landmark.getPosition().y * scale);
canvas.drawCircle(cx, cy, 10, paint);
}
}
}
示例3: getLandmarkPosition
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
/**
* Finds a specific landmark position, or approximates the position based on past observations
* if it is not present.
*/
private PointF getLandmarkPosition(Face face, int landmarkId) {
for (Landmark landmark : face.getLandmarks()) {
if (landmark.getType() == landmarkId) {
return landmark.getPosition();
}
}
PointF prop = mPreviousProportions.get(landmarkId);
if (prop == null) {
return null;
}
float x = face.getPosition().x + (prop.x * face.getWidth());
float y = face.getPosition().y + (prop.y * face.getHeight());
return new PointF(x, y);
}
示例4: updateFace
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
@Override public void updateFace(Face face) {
for (Landmark landmark : face.getLandmarks()) {
switch (landmark.getType()) {
case Landmark.LEFT_EYE:
leftEye = landmark.getPosition();
break;
case Landmark.RIGHT_EYE:
rightEye = landmark.getPosition();
break;
}
}
this.face = face;
}
示例5: getFaceJSON
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
private String getFaceJSON( Face face ) {
JSONObject json = new JSONObject();
try {
json.put( "faceX", face.getPosition().x );
json.put( "faceY", face.getPosition().y );
json.put( "faceWidth", face.getWidth() );
json.put( "faceHeight", face.getHeight() );
json.put( "leftEyeOpenProbability", face.getIsLeftEyeOpenProbability() );
json.put( "rightEyeOpenProbability", face.getIsRightEyeOpenProbability() );
json.put( "isSmilingProbability", face.getIsSmilingProbability() );
List<Landmark> landmarks = face.getLandmarks();
for( Landmark landmark : landmarks ) {
addLandmark( landmark, json );
}
} catch( JSONException e ) {
e.printStackTrace();
return null;
}
return json.toString();
}
示例6: addLandmark
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
private void addLandmark( Landmark landmark, JSONObject json ) throws JSONException {
/* Mouth position */
int landmarkType = landmark.getType();
String landmarkKey = getLandmarkKey( landmarkType );
if( landmarkKey != null ) {
json.put( landmarkKey + "X", landmark.getPosition().x );
json.put( landmarkKey + "Y", landmark.getPosition().y );
}
}
示例7: isCentered
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
public static boolean isCentered(List<Landmark> landmarkList){
boolean isItCentered = false;
float averageX, averageY;
int totalXObjects, totalYObjects;
if(MiscUtilities.isListNullOrEmpty(landmarkList)){
isItCentered = false;
}
for(Landmark landmark : landmarkList){
int x = landmark.getType();
//https://developers.google.com/android/reference/com/google/android/gms/vision/face/Landmark.html#getPosition()
}
return false;
}
示例8: onUpdate
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
/**
* Updates the positions and state of eyes to the underlying graphic, according to the most
* recent face detection results. The graphic will render the eyes and simulate the motion of
* the iris based upon these changes over time.
*/
@Override
public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) {
mOverlay.add(mEyesGraphic);
updatePreviousProportions(face);
PointF leftPosition = getLandmarkPosition(face, Landmark.LEFT_EYE);
PointF rightPosition = getLandmarkPosition(face, Landmark.RIGHT_EYE);
float leftOpenScore = face.getIsLeftEyeOpenProbability();
boolean isLeftOpen;
if (leftOpenScore == Face.UNCOMPUTED_PROBABILITY) {
isLeftOpen = mPreviousIsLeftOpen;
} else {
isLeftOpen = (leftOpenScore > EYE_CLOSED_THRESHOLD);
mPreviousIsLeftOpen = isLeftOpen;
}
float rightOpenScore = face.getIsRightEyeOpenProbability();
boolean isRightOpen;
if (rightOpenScore == Face.UNCOMPUTED_PROBABILITY) {
isRightOpen = mPreviousIsRightOpen;
} else {
isRightOpen = (rightOpenScore > EYE_CLOSED_THRESHOLD);
mPreviousIsRightOpen = isRightOpen;
}
mEyesGraphic.updateEyes(leftPosition, isLeftOpen, rightPosition, isRightOpen);
}
示例9: updatePreviousProportions
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
private void updatePreviousProportions(Face face) {
for (Landmark landmark : face.getLandmarks()) {
PointF position = landmark.getPosition();
float xProp = (position.x - face.getPosition().x) / face.getWidth();
float yProp = (position.y - face.getPosition().y) / face.getHeight();
mPreviousProportions.put(landmark.getType(), new PointF(xProp, yProp));
}
}
示例10: locateEyes
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
private void locateEyes() {
for (Landmark landmark : face.getLandmarks()) {
switch (landmark.getType()) {
case Landmark.LEFT_EYE:
leftEye = landmark;
break;
case Landmark.RIGHT_EYE:
rightEye = landmark;
break;
default: break;
}
}
}
示例11: PhotoFace
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
public PhotoFace(Face face, Bitmap sourceBitmap, Size targetSize, boolean sideward) {
List<Landmark> landmarks = face.getLandmarks();
Point leftEyePoint = null;
Point rightEyePoint = null;
Point leftMouthPoint = null;
Point rightMouthPoint = null;
for (Landmark landmark : landmarks) {
PointF point = landmark.getPosition();
switch (landmark.getType()) {
case Landmark.LEFT_EYE: {
leftEyePoint = transposePoint(point, sourceBitmap, targetSize, sideward);
}
break;
case Landmark.RIGHT_EYE: {
rightEyePoint = transposePoint(point, sourceBitmap, targetSize, sideward);
}
break;
case Landmark.LEFT_MOUTH: {
leftMouthPoint = transposePoint(point, sourceBitmap, targetSize, sideward);
}
break;
case Landmark.RIGHT_MOUTH: {
rightMouthPoint = transposePoint(point, sourceBitmap, targetSize, sideward);
}
break;
}
}
if (leftEyePoint != null && rightEyePoint != null) {
eyesCenterPoint = new Point(0.5f * leftEyePoint.x + 0.5f * rightEyePoint.x,
0.5f * leftEyePoint.y + 0.5f * rightEyePoint.y);
eyesDistance = (float)Math.hypot(rightEyePoint.x - leftEyePoint.x, rightEyePoint.y - leftEyePoint.y);
angle = (float)Math.toDegrees(Math.PI + Math.atan2(rightEyePoint.y - leftEyePoint.y, rightEyePoint.x - leftEyePoint.x));
width = eyesDistance * 2.35f;
float foreheadHeight = 0.8f * eyesDistance;
float upAngle = (float)Math.toRadians(angle - 90);
foreheadPoint = new Point(eyesCenterPoint.x + foreheadHeight * (float)Math.cos(upAngle),
eyesCenterPoint.y + foreheadHeight * (float)Math.sin(upAngle));
}
if (leftMouthPoint != null && rightMouthPoint != null) {
mouthPoint = new Point(0.5f * leftMouthPoint.x + 0.5f * rightMouthPoint.x,
0.5f * leftMouthPoint.y + 0.5f * rightMouthPoint.y);
float chinDepth = 0.7f * eyesDistance;
float downAngle = (float)Math.toRadians(angle + 90);
chinPoint = new Point(mouthPoint.x + chinDepth * (float)Math.cos(downAngle),
mouthPoint.y + chinDepth * (float)Math.sin(downAngle));
}
}
示例12: scanFaces
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
private void scanFaces() throws Exception {
Bitmap bitmap = decodeBitmapUri(this, imageUri);
if (detector.isOperational() && bitmap != null) {
editedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), bitmap.getConfig());
float scale = getResources().getDisplayMetrics().density;
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.rgb(255, 61, 61));
paint.setTextSize((int) (14 * scale));
paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(3f);
Canvas canvas = new Canvas(editedBitmap);
canvas.drawBitmap(bitmap, 0, 0, paint);
Frame frame = new Frame.Builder().setBitmap(editedBitmap).build();
SparseArray<Face> faces = detector.detect(frame);
scanResults.setText(null);
for (int index = 0; index < faces.size(); ++index) {
Face face = faces.valueAt(index);
canvas.drawRect(
face.getPosition().x,
face.getPosition().y,
face.getPosition().x + face.getWidth(),
face.getPosition().y + face.getHeight(), paint);
scanResults.setText(scanResults.getText() + "Face " + (index + 1) + "\n");
scanResults.setText(scanResults.getText() + "Smile probability:" + "\n");
scanResults.setText(scanResults.getText() + String.valueOf(face.getIsSmilingProbability()) + "\n");
scanResults.setText(scanResults.getText() + "Left Eye Open Probability: " + "\n");
scanResults.setText(scanResults.getText() + String.valueOf(face.getIsLeftEyeOpenProbability()) + "\n");
scanResults.setText(scanResults.getText() + "Right Eye Open Probability: " + "\n");
scanResults.setText(scanResults.getText() + String.valueOf(face.getIsRightEyeOpenProbability()) + "\n");
scanResults.setText(scanResults.getText() + "---------" + "\n");
for (Landmark landmark : face.getLandmarks()) {
int cx = (int) (landmark.getPosition().x);
int cy = (int) (landmark.getPosition().y);
canvas.drawCircle(cx, cy, 5, paint);
}
}
if (faces.size() == 0) {
scanResults.setText("Scan Failed: Found nothing to scan");
} else {
imageView.setImageBitmap(editedBitmap);
scanResults.setText(scanResults.getText() + "No of Faces Detected: " + "\n");
scanResults.setText(scanResults.getText() + String.valueOf(faces.size()) + "\n");
scanResults.setText(scanResults.getText() + "---------" + "\n");
}
} else {
scanResults.setText("Could not set up the detector!");
}
}
示例13: getListLandMarkPhoto
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
public List<Landmark> getListLandMarkPhoto() {
return listLandMarkPhoto;
}
示例14: setListLandMarkPhoto
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
public void setListLandMarkPhoto(List<Landmark> listLandMarkPhoto) {
this.listLandMarkPhoto = listLandMarkPhoto;
}
示例15: draw
import com.google.android.gms.vision.face.Landmark; //导入依赖的package包/类
/**
* Draws the face annotations for position on the supplied canvas.
*/
@Override
public void draw(Canvas canvas) {
Face face = mFace;
if (face == null) {
return;
}
//send it back via a handler
// Log.v(TAG, "Left eye is " + face.getIsLeftEyeOpenProbability());
// Log.v(TAG, "Right eye is " + face.getIsRightEyeOpenProbability());
// Log.v(TAG, "simle is " + face.getIsSmilingProbability());
sendmessage("Smile: " + face.getIsSmilingProbability() +
" Left: " + face.getIsLeftEyeOpenProbability() +
" Right:" + face.getIsRightEyeOpenProbability());
// Draws a circle at the position of the detected face, with the face's track id below.
int xl = 10; //how big the x is.
//first get all the landmarks, we want the eyes and mounth, but there are more
//https://developers.google.com/android/reference/com/google/android/gms/vision/face/Landmark
List<Landmark> myLandmark = mFace.getLandmarks();
float cx, cy;
float lx = 0f, ly = 0f, mx = 0, my = 0, rx = 0, ry = 0;
//loop through the list to find each one. Note, they may not all be listed either.
for (Landmark landmark : myLandmark) {
if (landmark.getType() == Landmark.LEFT_EYE) {
cx = translateX(landmark.getPosition().x);
cy = translateY(landmark.getPosition().y);
if (face.getIsLeftEyeOpenProbability() > .75) { //open, so show circle
canvas.drawCircle(cx, cy, 10, GreenPaint);
} else { //closed, so show x.
canvas.drawLine(cx - xl, cy - xl, cx + xl, cy + xl, RedPaint);
canvas.drawLine(cx - xl, cy + xl, cx + xl, cy - xl, RedPaint);
}
} else if (landmark.getType() == Landmark.RIGHT_EYE) {
cx = translateX(landmark.getPosition().x);
cy = translateY(landmark.getPosition().y);
if (face.getIsRightEyeOpenProbability() > .75) { //open, so show circle
canvas.drawCircle(cx, cy, 10, GreenPaint);
} else { //closed, so show x.
canvas.drawLine(cx - xl, cy - xl, cx + xl, cy + xl, RedPaint);
canvas.drawLine(cx - xl, cy + xl, cx + xl, cy - xl, RedPaint);
}
} else if (landmark.getType() == Landmark.LEFT_MOUTH) {
lx = translateX(landmark.getPosition().x);
ly = translateY(landmark.getPosition().y);
//canvas.drawCircle(lx, ly, 10, paint);
} else if (landmark.getType() == Landmark.RIGHT_MOUTH) {
rx = translateX(landmark.getPosition().x);
ry = translateY(landmark.getPosition().y);
//canvas.drawCircle(rx, ry, 10, paint);
} else if (landmark.getType() == Landmark.BOTTOM_MOUTH) {
mx = translateX(landmark.getPosition().x);
my = translateY(landmark.getPosition().y);
//canvas.drawCircle(mx, my, 10, paint);
}
}
//now draw the mouth. First check if all points exists
if (lx > 0.0f && rx > 0.0f && mx > 0.0f) {
//so first if one side of the mouth is higher, use that one.
Log.v(TAG, "Drawing mouth");
if (ly < ry) //left side is higher
ry = ly;
else
ly = ry;
//okay, the points exist, so lets draw
if (face.getIsSmilingProbability() > .75) { //smiling draw rec
canvas.drawRect(lx, ly, rx, my, GreenPaint);
} else { //no smiling draw x
canvas.drawLine(lx, ly, rx, my, RedPaint);
canvas.drawLine(lx, my, rx, ry, RedPaint);
}
}
}