Skip to content

Instantly share code, notes, and snippets.

View frogermcs's full-sized avatar
🤓
Did you do good today?

Mirosław Stanek frogermcs

🤓
Did you do good today?
View GitHub Profile
private void runInferenceOnQuantizedModel(ByteBuffer byteBufferToClassify) {
byte[][] result = new byte[1][labels.size()];
interpreter.run(byteBufferToClassify, result);
float[][] resultFloats = new float[1][labels.size()];
byte[] bytes = result[0];
for (int i = 0; i < bytes.length; i++) {
float resultF = (bytes[i] & 0xff) / 255.f;
resultFloats[0][i] = resultF;
}
private byte[] pixelToChannelValuesQuant(int pixel) {
byte[] rgbVals = new byte[3];
rgbVals[0] = (byte) ((pixel >> 16) & 0xFF);
rgbVals[1] = (byte) ((pixel >> 8) & 0xFF);
rgbVals[2] = (byte) ((pixel) & 0xFF);
return rgbVals;
}
my_training_data.zip
|____accordion
| |____001.jpg
| |____002.jpg
| |____003.jpg
|____bass_guitar
| |____hofner.gif
| |____p-bass.png
|____clavier
|____well-tempered.jpg
Not true that <{0=1, 1=1, 2=1, 3=3, 4=0, 5=2, 6=1, 7=0, 8=1, 9=2, 10=2, 11=0, ... 29=1, 30=2, 31=3}>
contains exactly <{0=1, 1=1, 2=1, 3=3, 4=0, 5=2, 6=1, 7=0, 8=1, 9=2, 10=2, 11=0, ... 29=1, 30=2, 31=3}>.
It has the following entries with matching keys but different values: {16=(expected 2 but got 3), 20=(expected 2 but got 1)}
at com.frogermcs.imageclassificationtester.MLModelTest.testClassificationBatch(MLModelTest.java:72)
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MLModelTest {
/* ... */
@Test
public void testClassificationBatch() throws IOException {
ModelTestActivity activity = mainActivityActivityRule.getActivity();
ModelClassificator modelClassificator = new ModelClassificator(activity, new FlowersConfig());
@RunWith(AndroidJUnit4.class)
@LargeTest
public class MLModelTest {
@Rule
public ActivityTestRule<ModelTestActivity> mainActivityActivityRule = new ActivityTestRule<>(ModelTestActivity.class);
@Test
public void testClassificationUI() {
ModelTestActivity activity = mainActivityActivityRule.getActivity();
public class ModelTestActivity extends AppCompatActivity {
private ImageView ivPreview;
private TextView tvClassification;
private ModelClassificator modelClassificator;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(com.frogermcs.imageclassificationtester.test.R.layout.activity_model_test);
from PIL import Image
VAL_BATCH_DIR = "validation_batch"
!mkdir {VAL_BATCH_DIR}
# Export batch to *.jpg files with specific naming convention.
# Make sure they are exported in the full quality, otherwise the inference
# process will return different results.
for n in range(32):
public class ModelClassificator {
private static final int MAX_CLASSIFICATION_RESULTS = 3;
private static final float CLASSIFICATION_THRESHOLD = 0.2f;
private final Interpreter interpreter;
private final List<String> labels;
private final ModelConfig modelConfig;
public ModelClassificator(Context context,
ModelConfig modelConfig) throws IOException {
public class ClassificationFrameProcessor implements FrameProcessor {
private final ModelClassificator modelClassificator;
private final ClassificationListener classificationListener;
public ClassificationFrameProcessor(ModelClassificator modelClassificator,
ClassificationListener classificationListener) {
this.modelClassificator = modelClassificator;
this.classificationListener = classificationListener;
}