블루투스로된 카메라에서 배열을 받아와 그이미지에서 얼굴검출을해야하는데 안드로이드에선 해본적이없어
이게 이코드인건 알겠는데 문법을 잘몰라서 이걸 합치지를 못하겠습니다.
아래부분이 얼굴검출예제에서 가져온 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());
}
}