android दरशन Google विज़न एपीआई नमूनों: फोकस के लिए कैमरा सोरस प्राप्त करें




मुनक्का इन चिकन पॉक्स (3)

मैंने यहां से नवीनतम Google विज़न एपीआई चेक आउट किया है:

https://github.com/googlesamples/android-vision

और मैं इसे किटकैट के साथ एलजी जी 2 डिवाइस पर चला रहा हूं मेरे द्वारा किए गए एकमात्र बदलाव को gradle फ़ाइल में minSdkVerion के लिए है:

...
defaultConfig {
    applicationId "com.google.android.gms.samples.vision.face.multitracker"
    minSdkVersion 19
...

हालांकि यह ध्यान केंद्रित नहीं करता है मैं इसे कैसे फोकस कर सकता हूं?


यह मेरे लिए Google Play सेवाओं का उपयोग कर रहा है 8.4: 'com.google.android.gms: play-services: 8.4.0'

cameraSource = नया CameraSource.Builder (यह, डिटेक्टर) .setRequested पूर्वावलोकन पूर्वावलोकन (640, 480) .setAutoFocusEnabled (सही) .build ();


मैंने कैमरासोर्सप्रिव्यूव (....) निर्माता को निम्नानुसार संशोधित किया है:

public CameraSourcePreview(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    mStartRequested = false;
    mSurfaceAvailable = false;

    mSurfaceView = new SurfaceView(context);
    mSurfaceView.getHolder().addCallback(new SurfaceCallback());
    addView(mSurfaceView);
    mSurfaceView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            cameraFocus(mCameraSource, Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
        }
    });
}

private static boolean cameraFocus(@NonNull CameraSource cameraSource, @NonNull String focusMode) {
    Field[] declaredFields = CameraSource.class.getDeclaredFields();

    for (Field field : declaredFields) {
        if (field.getType() == Camera.class) {
            field.setAccessible(true);
            try {
                Camera camera = (Camera) field.get(cameraSource);
                if (camera != null) {
                    Camera.Parameters params = camera.getParameters();
                    params.setFocusMode(focusMode);
                    camera.setParameters(params);
                    return true;
                }

                return false;
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

            break;
        }
    }

    return false;
}

सलाह यहां दी गई: https://github.com/googlesamples/android-vision/issues/2

और कोड संदर्भ यहां था: https://gist.github.com/Gericop/7de0b9fdd7a444e53b5a

मुझे भी फेसट्रैकर फैक्टरी ड्रा (कैनवास ...) विधि को संशोधित करना था:

@Override
public void draw(Canvas canvas) {
    Face face = mFace;
    if (face == null) {
        return;
    }

    // Draws a circle at the position of the detected face, with the face's track id below.
    float cx = translateX(face.getPosition().x + face.getWidth() / 2);
    float cy = translateY(face.getPosition().y + face.getHeight() / 2);
    canvas.drawCircle(cx, cy, FACE_POSITION_RADIUS, mFacePositionPaint);
    canvas.drawText("id: " + getId(), cx + ID_X_OFFSET, cy + ID_Y_OFFSET, mIdPaint);

    // Draws an oval around the face.
    float xOffset = scaleX(face.getWidth() / 2.0f);
    float yOffset = scaleY(face.getHeight() / 2.0f);
    float left = cx - xOffset;
    float top = cy - yOffset;
    float right = cx + xOffset;
    float bottom = cy + yOffset;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        canvas.drawOval(left, top, right, bottom, mBoxPaint);
    } else {
        canvas.drawCircle(cx, cy, Math.max(xOffset, yOffset), mBoxPaint);
    }
}

आधिकारिक एपीआई में अब एक ऑटो फ़ोकस विकल्प उपलब्ध है SetAutoFocusEnabled विधि यहां देखें:

https://developers.google.com/android/reference/com/google/android/gms/vision/CameraSource.Builder.html#setAutoFocusEnabled(boolean)

साथ ही, हमने कैमरे के स्रोत वर्ग को खोल दिया, जिसमें एक ऑटो फोकस विधि भी है यह एक आपको "निरंतर वीडियो" मोड के विपरीत एक विशिष्ट फोकस मोड सेट करने की अनुमति देता है जो आधिकारिक एपीआई डिफ़ॉल्ट रूप से:

https://github.com/googlesamples/android-vision/blob/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader/ui/camera/ CameraSource.java