Я создал a для обнаружения лиц на фотографии, а также добавил динамический c счетчик к представлению, соответствующему количеству обнаруженных лиц, и также добавил значения к счетчику, например,
используя этот код
if (detector.isOperational() && bitmap != null) {
editedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
.getHeight(), bitmap.getConfig());
float scale = getResources().getDisplayMetrics().density;
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.GREEN);
paint.setTextSize((int) (16 * scale));
paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(6f);
Canvas canvas = new Canvas(editedBitmap);
canvas.drawBitmap(bitmap, 0, 0, paint);
Frame frame = new Frame.Builder().setBitmap(editedBitmap).build();
faces = detector.detect(frame);
txtSampleDesc.setText(null);
for (int index = 0; index < faces.size(); ++index) {
Face face = faces.valueAt(index);
canvas.drawRect(
face.getPosition().x,
face.getPosition().y,
face.getPosition().x + face.getWidth(),
face.getPosition().y + face.getHeight(), paint);
canvas.drawText("Face " + (index + 1), face.getPosition().x + face.getWidth(), face.getPosition().y + face.getHeight(), paint);
select.setVisibility(View.INVISIBLE);
txtSampleDesc.setText("Select persons to tag from left to right");
final Spinner spinner = new Spinner(this);
spinner.setId(index);
// names.add(0, "tag for face".concat(String.valueOf(index + 1)));
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, names);
spinner.setAdapter(spinnerArrayAdapter);
root.addView(spinner);
tag.setVisibility(View.VISIBLE);
String face1;
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
// Your code here
}
public void onNothingSelected(AdapterView<?> adapterView) {
return;
}
});
// txtSampleDesc.setText(txtSampleDesc.getText() + "FACE " + (index + 1) + "\n");
//txtSampleDesc.setText(txtSampleDesc.getText() + "Smile probability:" + " " + face.getIsSmilingProbability() + "\n");
// txtSampleDesc.setText(txtSampleDesc.getText() + "Left Eye Is Open Probability: " + " " + face.getIsLeftEyeOpenProbability() + "\n");
//txtSampleDesc.setText(txtSampleDesc.getText() + "Right Eye Is Open Probability: " + " " + face.getIsRightEyeOpenProbability() + "\n\n");
for (Landmark landmark : face.getLandmarks()) {
int cx = (int) (landmark.getPosition().x);
int cy = (int) (landmark.getPosition().y);
canvas.drawCircle(cx, cy, 8, paint);
}
}
if (faces.size() == 0) {
txtSampleDesc.setText("Scan Failed: Found nothing to scan");
} else {
pic.setImageBitmap(editedBitmap);
txtSampleDesc.setText(txtSampleDesc.getText() + "No of Faces Detected: " + " " + String.valueOf(faces.size()));
}
} else {
txtSampleDesc.setText("Could not set up the detector!");
}
Теперь у меня есть кнопка в конце, чтобы получить имена от каждого счетчика, которые указывают на соответствующее лицо, например
String face1 = surya; Строка face2 = jo; и так далее. как это получить;
Я пробовал этот код
public void tag(View v)
{String showallPrompt="";
int Count = root.getChildCount();
try {
for (int cc = 0; cc < Count-1; cc++) {
View child = root.getChildAt(cc);
Spinner value = (Spinner)(child.findViewById(cc));
String spin_value = value.getSelectedItem().toString();
showallPrompt += spin_value;
}
} catch (Exception e) {
}
Log.d("bb",showallPrompt);
Toast.makeText(IndexActivity.this,
showallPrompt,
Toast.LENGTH_LONG).show();
}
, но он дает только нулевую строку. Так что любая идея о том, как получить значения от каждого счетчика и хранить в отдельной строке строка и ключ как (face1, сурйа);