Android의 Camera2API 및 Mobile Vision API를 사용하여 얼굴 감지

Android의 Mobile Vision API를 사용하여 얼굴 감지
계속

개요


지난번 보도에서 이미지 파일에서 얼굴이 검출되었다.
이번 보도에서는 카메라의 연속 영상에서 얼굴이 검출됐다.
공식 샘플 코드에서 카메라의 제어
Mobile Vision API를 사용하는 Cameara Source
이 글은 Cameara Source와 같은 기능을 가진 Cameara 2 Source를 자체 제작했다.
reference: CameraSource
Android의 Camera2API를 사용하여 카메라 미리보기 화면 표시
에서 다음 코드를 소개하고 참조했습니다.
Basic functionalities of both Camera1 API and Camera2 API with a Google Vision Face Detector added

카메라 연속 이미지에서 얼굴 검출


이미지 파일에서 얼굴이 감지된 경우 Frame입니다.빌더 #setBitmap 을 사용합니다.
카메라에서 연속 이미지가 얼굴을 감지할 때 프레임.빌더 #setImageData 를 사용합니다.
reference: Frame.Builder#setImageData
이미지는 NV21 형식의 바이트 배열로 지정됩니다.
카메라 디스플레이 YUV_420_888 형식에서 NV21 형식으로 변환됩니다.

ImageReader


카메라에서 연속 이미지를 캡처하는 ImageReader를 생성합니다.
ImageReader 사용 방법은 다음 기사를 참조하십시오.
Android의 Camera2API를 사용하여 사진을 찍습니다.
// YUV_420_888 形式の画像の大きさを取得する
    StreamConfigurationMap map = characteristics.get(
        CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
    Size imagePreviewSize = Collections.max(Arrays.asList(map.getOutputSizes(ImageFormat.YUV_420_888)), new CompareSizesByArea());

// YUV_420_888 形式のImageReader を生成する
    ImageReade imageReaderPreview = ImageReader.newInstance( imagePreviewSizegetWidth(), imagePreviewSize.getHeight(), ImageFormat.YUV_420_888, 4);

// リスナーを設定する
    imageReaderPreview.setOnImageAvailableListener(previewAvailableListener, mBackgroundHandler);

// リスナー
    ImageReader.OnImageAvailableListener previewAvailableListener = new ImageReader.OnImageAvailableListener() {
        @Override
        public void onImageAvailable(ImageReader reader) {
    // 連続画像を FrameProcessor に渡す
            frameProcessor.setNextImage(reader.acquireNextImage());
        } 
    }; 

FrameProcessor


카메라로부터 연속 이미지를 수신하여 FaceDetector 클래스에 전달합니다.
기초가 되는 반이 없기 때문에 스크래치부터 자제한다.
class Camera2FrameProcessor implements Runnable {

    public void setNextImage(Image image ) {
        // カメラからの連続画像を受け取る
    }

    @Override
    public void run() {
        // 連続画像を FaceDetector に渡す
        detector.receiveFrame(outputFrame);
    }
}

FaceTracker


얼굴 검측기에서 얼굴 검측 결과를 수신하는 종류입니다.
FaceTracker 클래스를 만들기 위해 추적 프로그램을 상속합니다.
reference: Tracker
onUpdate에 결과가 있습니다.
class FaceTracker extends Tracker<Face> {

        @Override
        public void onUpdate(FaceDetector.Detections<Face> detectionResults, Face face) {
            // 顔検出の結果の処理
        }
}

검출된 얼굴에 지표를 표시하다


아래의 보도와 같은 처리를 하다.
Android의 Camera2API를 사용하여 얼굴 감지
ViewGroup을 상속하는 CameraSourcePreview를 만듭니다.
CameraSourcePreview의 하위 보기로 카메라 미리보기 화면을 표시하는 TextureView와 표시 지표를 덮어쓰는 View를 만듭니다.
뷰 및 ImageReader의 크기 비율을 결정하고 뷰 크기와 일치하도록 지표의 위치를 조정합니다.

화면 캡처



샘플 코드가github에 발표되었습니다.
https://github.com/ohwada/Android_Samples/tree/master/Vision2

좋은 웹페이지 즐겨찾기