마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이미지 얼굴검출 문제해결 부탁드립니다.

0 추천
블루투스로된 카메라에서 배열을 받아와 그이미지에서 얼굴검출을해야하는데 안드로이드에선 해본적이없어
이게 이코드인건 알겠는데 문법을 잘몰라서 이걸 합치지를 못하겠습니다.
아래부분이 얼굴검출예제에서 가져온 onCameraFrame 함수부분이고
그아래부분인
serialPort_DataReceived
함수가 시리얼포트를통해 이미지를 가져오는 코드인데
이걸 어떻게 잘 합쳐야할지를 모르겠네요 도움좀주시면감사하겠습니다.
캐스코드부분넣고 시리얼포트에서 받아온 배열 for문 돌려서
Rect[] facesArray = faces.toArray();
   for (int i = 0; i < facesArray.length; i++)
      Core.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3);

이거하면 끝나는거같은데 머리로는 아는데 자바 문법을 잘 모르니까 너무힘드네요 ㅜㅜ
도움좀주시면 감사하겠습니다.

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

   mRgba = inputFrame.rgba();
   mGray = inputFrame.gray();

   if (mAbsoluteFaceSize == 0) {
      int height = mGray.rows();
      if (Math.round(height * mRelativeFaceSize) > 0) {
         mAbsoluteFaceSize = Math.round(height * mRelativeFaceSize);
      }
      mNativeDetector.setMinFaceSize(mAbsoluteFaceSize);
   }

   MatOfRect faces = new MatOfRect();

   if (mDetectorType == JAVA_DETECTOR) {
      if (mJavaDetector != null)
         mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2, // TODO: objdetect.CV_HAAR_SCALE_IMAGE
               new Size(mAbsoluteFaceSize, mAbsoluteFaceSize), new Size());
   }
   else if (mDetectorType == NATIVE_DETECTOR) {
      if (mNativeDetector != null)
         mNativeDetector.detect(mGray, faces);
   }
   else {
      Log.e(TAG, "Detection method is not selected!");
   }

   Rect[] facesArray = faces.toArray();
   for (int i = 0; i < facesArray.length; i++)
      Core.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3);

   return mRgba;
}

--------------------------------------------------------------------------------------------
public void serialPort_DataReceived(byte[] recv_buff, int recv_count) {
   try {
      InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface);
      File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
      mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");

      CQ_AddBytes(recv_buff, recv_count);

      int fSize = 0;

      if (m_receiveMode == 0) {
         if (CQ_GetLength() < 50)
            return;

         fSize = CQ_GetLength();
         buff = CQ_GetData(fSize);

         int index = ByteIndexOf(buff, header, 0, fSize);

         if (index != -1) {
            ImageSize = 0;
            ImageSize = (int) (buff[index + 3] & 0x00ff) << 8;
            ImageSize = ImageSize | (buff[index + 4] & 0xff);

            addr = 0;
            int imageBase = index + 5;

            byte[] temp_buff = BlockCopy(buff, imageBase, fSize
                  - imageBase);

            FIFO_AddBytes(temp_buff, fSize - imageBase);
            addr += (fSize - imageBase);

            m_receiveMode = 1;
         }
      } else if (m_receiveMode == 1) {

         if (addr < ImageSize) {
            fSize = CQ_GetLength();
            byte[] temp_buff = CQ_GetData(fSize);
            FIFO_AddBytes(temp_buff, fSize);

            addr += fSize;
         }

         if (addr >= ImageSize) {

            m_pBuf = FIFO_GetData(FIFO_GetLength());

            frameCount++;
            m_receiveMode = 0;

            for (int i = 0; i < 5; i++)
               adcValue[i] = m_pBuf[i];
           
            adcValue[5] = m_pBuf[ImageSize - 5];
                   RxValue[0]  = m_pBuf[ImageSize - 4];
                   RxValue[1]  = m_pBuf[ImageSize - 3];
                   RxValue[2]  = m_pBuf[ImageSize - 2];

            String data_str = String
                  .format("ADC data [ %d %d %d %d %d %d ] \r\nRX serial data [ %x %x %x]",
                        adcValue[0], adcValue[1], adcValue[2],
                        adcValue[3], adcValue[4], adcValue[5],
                        RxValue[0], RxValue[1], RxValue[2]);
            LogInfo(data_str);

            ShowJpegData();
         }

      }
   } catch (final Exception ex) {
      LogInfo(ex.toString());
   }
}

private void LogInfo(final String log) {
   Runnable dumpTask = new Runnable() {
      public void run() {
         edit2.setText(log);
      }
   };
   runOnUiThread(dumpTask);
}

private void ShowJpegData() {
   try {

      byte[] PictureData = BlockCopy(m_pBuf, 5, ImageSize - 10);
      //byte[] PictureData = new byte[ImageSize - 10];

      //PictureData = BlockCopy(m_pBuf, 5, ImageSize - 10);
      //mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());
      //mNativeDetector = new DetectionBasedTracker(mCascadeFile.getAbsolutePath(), 0);

      final Bitmap bmp = BitmapFactory.decodeByteArray(PictureData, 0,
            PictureData.length);

      //mOpenCvCameraView.enableView();

      Runnable dumpTask = new Runnable() {
         public void run() {

            // Drawable old = image1.getDrawable();
            image1.setImageBitmap(bmp);
            // old = null;
         }
      };
      runOnUiThread(dumpTask);
   } catch (Exception ex) {
      LogInfo(ex.toString());
   }
}
익명사용자 님이 2017년 5월 29일 질문
2017년 5월 29일 태그 변경

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...