我在检测浏览图像的面孔时遇到了一些问题。我知道问题是我不知道如何在导入的图像上应用我正在测试的人脸检测代码。我正在测试的示例代码是为本地存储的图像编写的。我相信我很接近,但你能帮帮我吗?
首先,我创建了一个画廊方法
protected void gallery() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction("android.intent.action.GET_CONTENT");
startActivityForResult(Intent.createChooser(intent, "Choose An Image"), 1);
}
我仍在学习意图等,但据我了解,我需要使用意图来使用 Android 的图库,并且因为我通过 setAction 来获取内容,所以我也在使用意图将信息传递给它。话虽如此,我试图将意图中的信息传递给uri。所以这就是我接下来要做的。
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if(requestCode == 1 && resultCode == RESULT_OK)
{
Uri uri = intent.getData();
try {
InputStream is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
ImageView image = (ImageView)findViewById(R.id.img_view);
image.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
}
所以这对我来说是令人困惑的部分。我猜 InputStream 有图像信息?好吧,我尝试在同一个 try-catch 中应用人脸检测代码。我想在 image.setImageBitmap(bitmap) 完成之后,就是应用人脸检测的时候了。这是人脸检测代码。
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if(requestCode == 1 && resultCode == RESULT_OK)
{
Uri uri = intent.getData();
try {
InputStream is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
ImageView image = (ImageView)findViewById(R.id.image_view);
image.setImageBitmap(bitmap);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig=Bitmap.Config.RGB_565;
bitmap = BitmapFactory.decodeResource(getResources(), R.id.img_view, options);
imageWidth = bitmap.getWidth();
imageHeight = bitmap.getHeight();
detectedFaces = new FaceDetector.Face[NUM_FACES];
faceDetector= new FaceDetector(imageWidth, imageHeight, NUM_FACES);
NUM_FACE_DETECTED = faceDetector.findFaces(bitmap, detectedFaces);
mIL.invalidate();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我不知道如何更改“mFaceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.smilingfaces, options);” 这是针对本地图像,对于我认为存储在 InputStream 中的图像(或者是它?所选图像在哪里?)我想出了一个想法,而不是进行 imageView 布局,因为图像在布局中。我不明白所有转移和协同工作的方式。无论如何,该代码片段应该可以检测人脸。然后 onDraw() 在检测到的人脸周围绘制正方形。我不知道把它放在哪里,但我把它放在 onActivityResult() 之外
protected void onDraw(Canvas canvas) {
Paint myPaint = new Paint();
myPaint.setColor(Color.RED);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(3);
myPaint.setDither(true);
for (int count = 0; count < NUM_FACE_DETECTED; count++) {
Face face = detectedFaces[count];
PointF midPoint = new PointF();
face.getMidPoint(midPoint);
eyeDistance = face.eyesDistance();
canvas.drawRect(midPoint.x-eyeDistance, midPoint.y-eyeDistance, midPoint.x+eyeDistance, midPoint.y+eyeDistance, myPaint);
}
}
有什么建议吗?我非常接近让它发挥作用!